From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B3AA7CD5BDE for ; Mon, 25 May 2026 08:46:01 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BDD4310E606; Mon, 25 May 2026 08:45:58 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="D1rV5p5a"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 971D410E600 for ; Mon, 25 May 2026 08:45:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779698753; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RzwbZPn5+wWM+Fm70orxymP7mty0eNsYO1bOXZ54GCU=; b=D1rV5p5axCpyT4nRFj3/HuUJj6Tmxu4GD4Cm9je2d26InlY0u1IxkrIh6cfaHammCYSpF9 lkhTpkomu0/4xz6oz0LwyVVbOf6G3+Wi4uR7ahw+J/O0rAsuxPzcc6l7oBa9rvPXx6WqPz lKwMMaPZ5oG5hbIK7Oc1rttZ+raoJKI= Received: from mail-lj1-f199.google.com (mail-lj1-f199.google.com [209.85.208.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-517-Kxo5vLcLPaiHhZGIAzHMcA-1; Mon, 25 May 2026 04:45:50 -0400 X-MC-Unique: Kxo5vLcLPaiHhZGIAzHMcA-1 X-Mimecast-MFC-AGG-ID: Kxo5vLcLPaiHhZGIAzHMcA_1779698749 Received: by mail-lj1-f199.google.com with SMTP id 38308e7fff4ca-3940824a47dso41706111fa.1 for ; Mon, 25 May 2026 01:45:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779698748; x=1780303548; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=RzwbZPn5+wWM+Fm70orxymP7mty0eNsYO1bOXZ54GCU=; b=qP2bQ5uTwlecDGxob8WHF/ctMlDjB47FPsQEktV2qAUDDjHlPnXWko3/cqSIeLpaLT It6oAL7vwXX/ifQPH0yKzxW55/jggPwFWppvpXmmIek3kfypiAp/WBWSzNtayB6SqJ9n wSN0pxk4i+x4ee7IyJGNexD2czbsjxcFQOIY3o7sQFoJPREWww9Au6rUZvxUOKDb8zVf E2LuAyBLJCIFBZeCPIS9kZ6GFm6JFDpI+2JbePlEj/sMlJnZZPFPG15ocHlb4exjBTlv 4qlbv7RsoitZvlWLmxTQafWJSLEY8SIUt4ddHdONYb+IBjjPADubDXuDf0SOyumPKolJ +ECw== X-Gm-Message-State: AOJu0Yy3N4nHyXa7dB+1XGoUtqkT/s+pyqsg2pZ9WaO8qiSQFlS2eOJp u5JN7EDy+fpBLVMXE1NUZZizHXG0mSyDbq7luhK2bhQYMLmGBDkIhiJ1LuG/pFeAx6ZYeDxPqpZ hShBoJpoa8FObc2+fGUDAeYrZGyPTz5noQu7sl/OCBKny5W5iZkqPo90g4Ce+F70gGrO9 X-Gm-Gg: Acq92OHlhMIeRJOyC0jhKBKkY9x/Q5BxAYkwqXnVFKCsNyK1npEGP3TWO6fvgTz72Vf Q3OoFYbNWCLcu0+qLAbnznl+olbm1N/6TY6zwYKeZ/cwyVRfWHLhscvm4NFtIwdtcT2SUwuG0Vc McsREtjlO+5iKWEQftn1M9gkGYzHYU5sYRgxRXSqsqr+osKp1RMXEQ7Ua5teX28wrG5BUQf3t5N aYusXOP6VIpyKoyeyNTYXYNcQ53lwt09z3rqP7XHkJFQcp89fw5WvdXa8UsXbam6y5qUBfsbi93 oeLcPUykthW2V9qAXGW0+OYPB5Og/p6GlgBq9deC2xoeghM3m7Z1F3kq6ul5/AKAwLJBoCaxREU 7Lkpvk7Frwb07l53WSLQ5zQ6jaEFAx5wOTOs6MReySFrQxGI= X-Received: by 2002:a2e:87d9:0:b0:393:f205:eb45 with SMTP id 38308e7fff4ca-395d8d04b14mr29876571fa.24.1779698748291; Mon, 25 May 2026 01:45:48 -0700 (PDT) X-Received: by 2002:a2e:87d9:0:b0:393:f205:eb45 with SMTP id 38308e7fff4ca-395d8d04b14mr29876471fa.24.1779698747746; Mon, 25 May 2026 01:45:47 -0700 (PDT) Received: from fedora (85-23-51-1.bb.dnainternet.fi. [85.23.51.1]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-395dca7bcddsm21679061fa.16.2026.05.25.01.45.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 May 2026 01:45:47 -0700 (PDT) From: mpenttil@redhat.com To: linux-mm@kvack.org Cc: dri-devel@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Mika=20Penttil=C3=A4?= , David Hildenbrand , Jason Gunthorpe , Leon Romanovsky , Alistair Popple , Balbir Singh , Zi Yan , Matthew Brost , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko Subject: [PATCH v12 3/5] mm/hmm: do the plumbing for HMM to participate in migration Date: Mon, 25 May 2026 11:45:22 +0300 Message-ID: <20260525084524.139868-4-mpenttil@redhat.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20260525084524.139868-1-mpenttil@redhat.com> References: <20260525084524.139868-1-mpenttil@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 2-8nxolqWkOxTJciNUC6_up4it5eCL5nM8EQvo36hyo_1779698749 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" RnJvbTogTWlrYSBQZW50dGlsw6QgPG1wZW50dGlsQHJlZGhhdC5jb20+CgpEbyB0aGUgcHJlcGFy YXRpb25zIGluIGhtbV9yYW5nZV9mYXVsdCgpIGFuZCBwYWdld2FsayBjYWxsYmFja3MgdG8KZG8g dGhlICJjb2xsZWN0aW5nIiBwYXJ0IG9mIG1pZ3JhdGlvbiwgbmVlZGVkIGZvciBtaWdyYXRpb24K b24gZmF1bHQuCgpUaGVzZSBzdGVwcyBpbmNsdWRlIGxvY2tpbmcgZm9yIHBtZC9wdGUgaWYgbWln cmF0aW5nLCBjYXB0dXJpbmcKdGhlIHZtYSBmb3IgZnVydGhlciBtaWdyYXRlIGFjdGlvbnMsIGFu ZCBjYWxsaW5nIHRoZQpzdGlsbCBkdW1teSBobW1fdm1hX2hhbmRsZV9taWdyYXRlX3ByZXBhcmVf cG1kKCkgYW5kCmhtbV92bWFfaGFuZGxlX21pZ3JhdGVfcHJlcGFyZSgpICBmdW5jdGlvbnMgaW4g dGhlIHBhZ2V3YWxrLgoKQ2M6IERhdmlkIEhpbGRlbmJyYW5kIDxkYXZpZEBrZXJuZWwub3JnPgpD YzogSmFzb24gR3VudGhvcnBlIDxqZ2dAbnZpZGlhLmNvbT4KQ2M6IExlb24gUm9tYW5vdnNreSA8 bGVvbnJvQG52aWRpYS5jb20+CkNjOiBBbGlzdGFpciBQb3BwbGUgPGFwb3BwbGVAbnZpZGlhLmNv bT4KQ2M6IEJhbGJpciBTaW5naCA8YmFsYmlyc0BudmlkaWEuY29tPgpDYzogWmkgWWFuIDx6aXlA bnZpZGlhLmNvbT4KQ2M6IE1hdHRoZXcgQnJvc3QgPG1hdHRoZXcuYnJvc3RAaW50ZWwuY29tPgpT dWdnZXN0ZWQtYnk6IEFsaXN0YWlyIFBvcHBsZSA8YXBvcHBsZUBudmlkaWEuY29tPgpTaWduZWQt b2ZmLWJ5OiBNaWthIFBlbnR0aWzDpCA8bXBlbnR0aWxAcmVkaGF0LmNvbT4KLS0tCiBpbmNsdWRl L2xpbnV4L21pZ3JhdGUuaCB8ICAxOCArLQogbGliL3Rlc3RfaG1tLmMgICAgICAgICAgfCAgIDIg Ky0KIG1tL2htbS5jICAgICAgICAgICAgICAgIHwgNDM4ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgNDAxIGluc2VydGlvbnMoKyksIDU3 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oIGIvaW5j bHVkZS9saW51eC9taWdyYXRlLmgKaW5kZXggNDI1YWI1MjQyZGEwLi4wNzQyOTAyNzk2MGEgMTAw NjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWln cmF0ZS5oCkBAIC0xMDYsNiArMTA2LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2Z0bGVhZl9l bnRyeV93YWl0X29uX2xvY2tlZChzb2Z0bGVhZl90IGVudHJ5LCBzcGlubG9ja190ICpwCiAJc3Bp bl91bmxvY2socHRsKTsKIH0KIAorZW51bSBtaWdyYXRlX3ZtYV9pbmZvIHsKKwlNSUdSQVRFX1ZN QV9TRUxFQ1RfTk9ORSA9IDAsCisJTUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EID0gTUlHUkFU RV9WTUFfU0VMRUNUX05PTkUsCit9OworCitzdGF0aWMgaW5saW5lIGVudW0gbWlncmF0ZV92bWFf aW5mbyBobW1fc2VsZWN0X21pZ3JhdGUoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCit7CisJcmV0 dXJuIE1JR1JBVEVfVk1BX1NFTEVDVF9OT05FOworfQorCiAjZW5kaWYgLyogQ09ORklHX01JR1JB VElPTiAqLwogCiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HCkBAIC0xNDksNyArMTU5LDcg QEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfcGZuKHVuc2lnbmVkIGxvbmcg cGZuKQogCXJldHVybiAocGZuIDw8IE1JR1JBVEVfUEZOX1NISUZUKSB8IE1JR1JBVEVfUEZOX1ZB TElEOwogfQogCi1lbnVtIG1pZ3JhdGVfdm1hX2RpcmVjdGlvbiB7CitlbnVtIG1pZ3JhdGVfdm1h X2luZm8gewogCU1JR1JBVEVfVk1BX1NFTEVDVF9TWVNURU0gPSAxIDw8IDAsCiAJTUlHUkFURV9W TUFfU0VMRUNUX0RFVklDRV9QUklWQVRFID0gMSA8PCAxLAogCU1JR1JBVEVfVk1BX1NFTEVDVF9E RVZJQ0VfQ09IRVJFTlQgPSAxIDw8IDIsCkBAIC0xOTEsNiArMjAxLDEyIEBAIHN0cnVjdCBtaWdy YXRlX3ZtYSB7CiAJc3RydWN0IHBhZ2UJCSpmYXVsdF9wYWdlOwogfTsKIAorLy8gVE9ETzogZW5h YmxlIG1pZ3JhdGlvbgorc3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGVfdm1hX2luZm8gaG1tX3Nl bGVjdF9taWdyYXRlKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQoreworCXJldHVybiAwOworfQor CiBpbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTsKIHZvaWQg bWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKTsKIHZvaWQgbWln cmF0ZV92bWFfZmluYWxpemUoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKTsKZGlmZiAtLWdp dCBhL2xpYi90ZXN0X2htbS5jIGIvbGliL3Rlc3RfaG1tLmMKaW5kZXggMjEzNTA0OTE1NzM3Li4x YTNlMjEzMjVjZjIgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0X2htbS5jCisrKyBiL2xpYi90ZXN0X2ht bS5jCkBAIC0xNDUsNyArMTQ1LDcgQEAgc3RhdGljIGJvb2wgZG1pcnJvcl9pc19wcml2YXRlX3pv bmUoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlKQogCQlITU1fRE1JUlJPUl9NRU1PUllf REVWSUNFX1BSSVZBVEUpOwogfQogCi1zdGF0aWMgZW51bSBtaWdyYXRlX3ZtYV9kaXJlY3Rpb24K K3N0YXRpYyBlbnVtIG1pZ3JhdGVfdm1hX2luZm8KIGRtaXJyb3Jfc2VsZWN0X2RldmljZShzdHJ1 Y3QgZG1pcnJvciAqZG1pcnJvcikKIHsKIAlyZXR1cm4gKGRtaXJyb3ItPm1kZXZpY2UtPnpvbmVf ZGV2aWNlX3R5cGUgPT0KZGlmZiAtLWdpdCBhL21tL2htbS5jIGIvbW0vaG1tLmMKaW5kZXggNTk1 NWYyZjBjODNkLi4wODZmZGI2MjdjYjYgMTAwNjQ0Ci0tLSBhL21tL2htbS5jCisrKyBiL21tL2ht bS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1 ZGUgPGxpbnV4L2xlYWZvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CisjaW5jbHVk ZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXJlbWFwLmg+CiAjaW5jbHVk ZSA8bGludXgvc2NoZWQvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9qdW1wX2xhYmVsLmg+CkBAIC0y NywxNCArMjgsNDQgQEAKICNpbmNsdWRlIDxsaW51eC9wY2ktcDJwZG1hLmg+CiAjaW5jbHVkZSA8 bGludXgvbW11X25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5X2hvdHBsdWcuaD4K KyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0 cnVjdCBobW1fdm1hX3dhbGsgewotCXN0cnVjdCBobW1fcmFuZ2UJKnJhbmdlOwotCXVuc2lnbmVk IGxvbmcJCWxhc3Q7CisJc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZQltbXVfcmFuZ2U7CisJc3Ry dWN0IHZtX2FyZWFfc3RydWN0CQkqdm1hOworCXN0cnVjdCBobW1fcmFuZ2UJCSpyYW5nZTsKKwl1 bnNpZ25lZCBsb25nCQkJc3RhcnQ7CisJdW5zaWduZWQgbG9uZwkJCWVuZDsKKwl1bnNpZ25lZCBs b25nCQkJbGFzdDsKKwkvKgorCSAqIEZvciBtaWdyYXRpb24gd2UgbmVlZCBwdGUvcG1kCisJICog bG9ja2VkIGZvciB0aGUgaGFuZGxlXyogYW5kCisJICogcHJlcGFyZV8qIHJlZ2lvbnMuIFdoaWxl IGZhdWx0aW5nCisJICogd2UgaGF2ZSB0byBkcm9wIHRoZSBsb2NrcyBhbmQKKwkgKiBzdGFydCBh Z2Fpbi4KKwkgKiBwdGVsb2NrZWQgYW5kIHBtZGxvY2tlZAorCSAqIGhvbGQgdGhlIHN0YXRlIGFu ZCB0ZWxscyBpZiBuZWVkCisJICogdG8gZHJvcCBsb2NrcyBiZWZvcmUgZmF1bHRpbmcuCisJICog cHRsIGlzIHRoZSBsb2NrIGhlbGQgZm9yIHB0ZSBvciBwbWQuCisJICoKKwkgKi8KKwlib29sCQkJ CXB0ZWxvY2tlZDsKKwlib29sCQkJCXBtZGxvY2tlZDsKKwlzcGlubG9ja190CQkJKnB0bDsKIH07 CiAKKyNkZWZpbmUgSE1NX0FTU0VSVF9QVEVfTE9DS0VEKGhtbV92bWFfd2FsaywgbG9ja2VkKQkJ XAorCQlXQVJOX09OX09OQ0UoaG1tX3ZtYV93YWxrLT5wdGVsb2NrZWQgIT0gbG9ja2VkKQorCisj ZGVmaW5lIEhNTV9BU1NFUlRfUE1EX0xPQ0tFRChobW1fdm1hX3dhbGssIGxvY2tlZCkJCVwKKwkJ V0FSTl9PTl9PTkNFKGhtbV92bWFfd2Fsay0+cG1kbG9ja2VkICE9IGxvY2tlZCkKKworI2RlZmlu ZSBITU1fQVNTRVJUX1VOTE9DS0VEKGhtbV92bWFfd2FsaykJCVwKKwkJV0FSTl9PTl9PTkNFKGht bV92bWFfd2Fsay0+cHRlbG9ja2VkIHx8CVwKKwkJCSAgICAgaG1tX3ZtYV93YWxrLT5wbWRsb2Nr ZWQpCisKIGVudW0gewogCUhNTV9ORUVEX0ZBVUxUID0gMSA8PCAwLAogCUhNTV9ORUVEX1dSSVRF X0ZBVUxUID0gMSA8PCAxLApAQCAtNDgsMTQgKzc5LDM3IEBAIGVudW0gewogfTsKIAogc3RhdGlj IGludCBobW1fcGZuc19maWxsKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQs Ci0JCQkgc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGxvbmcgY3B1X2ZsYWdzKQor CQkJIHN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsaywgdW5zaWduZWQgbG9uZyBjcHVf ZmxhZ3MpCiB7CisJc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UgPSBobW1fdm1hX3dhbGstPnJhbmdl OwogCXVuc2lnbmVkIGxvbmcgaSA9IChhZGRyIC0gcmFuZ2UtPnN0YXJ0KSA+PiBQQUdFX1NISUZU OworCWVudW0gbWlncmF0ZV92bWFfaW5mbyBtaW5mbzsKKwlib29sIG1pZ3JhdGUgPSBmYWxzZTsK KworCW1pbmZvID0gaG1tX3NlbGVjdF9taWdyYXRlKHJhbmdlKTsKKwlpZiAoY3B1X2ZsYWdzICE9 IEhNTV9QRk5fRVJST1IpIHsKKwkJaWYgKG1pbmZvICYmICh2bWFfaXNfYW5vbnltb3VzKGhtbV92 bWFfd2Fsay0+dm1hKSkpIHsKKwkJCWNwdV9mbGFncyB8PSBITU1fUEZOX01JR1JBVEU7CisJCQlt aWdyYXRlID0gdHJ1ZTsKKwkJfQorCX0KKworCWlmIChtaWdyYXRlICYmIHRocF9taWdyYXRpb25f c3VwcG9ydGVkKCkgJiYKKwkgICAgKG1pbmZvICYgTUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5E KSAmJgorCSAgICBJU19BTElHTkVEKGFkZHIsIEhQQUdFX1BNRF9TSVpFKSAmJgorCSAgICBJU19B TElHTkVEKGVuZCwgSFBBR0VfUE1EX1NJWkUpKSB7CisJCXJhbmdlLT5obW1fcGZuc1tpXSAmPSBI TU1fUEZOX0lOT1VUX0ZMQUdTOworCQlyYW5nZS0+aG1tX3BmbnNbaV0gfD0gY3B1X2ZsYWdzIHwg SE1NX1BGTl9DT01QT1VORDsKKwkJYWRkciArPSBQQUdFX1NJWkU7CisJCWkrKzsKKwkJY3B1X2Zs YWdzID0gMDsKKwl9CiAKIAlmb3IgKDsgYWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUsIGkr KykgewogCQlyYW5nZS0+aG1tX3BmbnNbaV0gJj0gSE1NX1BGTl9JTk9VVF9GTEFHUzsKIAkJcmFu Z2UtPmhtbV9wZm5zW2ldIHw9IGNwdV9mbGFnczsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAt NzgsNiArMTMyLDcgQEAgc3RhdGljIGludCBobW1fdm1hX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRk ciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJdW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRf RkxBR19SRU1PVEU7CiAKIAlXQVJOX09OX09OQ0UoIXJlcXVpcmVkX2ZhdWx0KTsKKwlITU1fQVNT RVJUX1VOTE9DS0VEKGhtbV92bWFfd2Fsayk7CiAJaG1tX3ZtYV93YWxrLT5sYXN0ID0gYWRkcjsK IAogCWlmIChyZXF1aXJlZF9mYXVsdCAmIEhNTV9ORUVEX1dSSVRFX0ZBVUxUKSB7CkBAIC0xNzEs MTEgKzIyNiwxNiBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19ob2xlKHVuc2lnbmVkIGxvbmcg YWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJaWYgKCF3YWxrLT52bWEpIHsKIAkJaWYgKHJlcXVp cmVkX2ZhdWx0KQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiBobW1fcGZuc19maWxsKGFk ZHIsIGVuZCwgcmFuZ2UsIEhNTV9QRk5fRVJST1IpOworCQlyZXR1cm4gaG1tX3BmbnNfZmlsbChh ZGRyLCBlbmQsIGhtbV92bWFfd2FsaywgSE1NX1BGTl9FUlJPUik7CiAJfQotCWlmIChyZXF1aXJl ZF9mYXVsdCkKKwlpZiAocmVxdWlyZWRfZmF1bHQpIHsKKwkJaWYgKGhtbV92bWFfd2Fsay0+cG1k bG9ja2VkKSB7CisJCQlzcGluX3VubG9jayhobW1fdm1hX3dhbGstPnB0bCk7CisJCQlobW1fdm1h X3dhbGstPnBtZGxvY2tlZCA9IGZhbHNlOworCQl9CiAJCXJldHVybiBobW1fdm1hX2ZhdWx0KGFk ZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwotCXJldHVybiBobW1fcGZuc19maWxsKGFk ZHIsIGVuZCwgcmFuZ2UsIDApOworCX0KKwlyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQs IGhtbV92bWFfd2FsaywgMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBobW1f cGZuX2ZsYWdzX29yZGVyKHVuc2lnbmVkIGxvbmcgb3JkZXIpCkBAIC0yMDgsOCArMjY4LDEzIEBA IHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNp Z25lZCBsb25nIGFkZHIsCiAJY3B1X2ZsYWdzID0gcG1kX3RvX2htbV9wZm5fZmxhZ3MocmFuZ2Us IHBtZCk7CiAJcmVxdWlyZWRfZmF1bHQgPQogCQlobW1fcmFuZ2VfbmVlZF9mYXVsdChobW1fdm1h X3dhbGssIGhtbV9wZm5zLCBucGFnZXMsIGNwdV9mbGFncyk7Ci0JaWYgKHJlcXVpcmVkX2ZhdWx0 KQorCWlmIChyZXF1aXJlZF9mYXVsdCkgeworCQlpZiAoaG1tX3ZtYV93YWxrLT5wbWRsb2NrZWQp IHsKKwkJCXNwaW5fdW5sb2NrKGhtbV92bWFfd2Fsay0+cHRsKTsKKwkJCWhtbV92bWFfd2Fsay0+ cG1kbG9ja2VkID0gZmFsc2U7CisJCX0KIAkJcmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5k LCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CisJfQogCiAJcGZuID0gcG1kX3BmbihwbWQpICsgKChh ZGRyICYgflBNRF9NQVNLKSA+PiBQQUdFX1NISUZUKTsKIAlmb3IgKGkgPSAwOyBhZGRyIDwgZW5k OyBhZGRyICs9IFBBR0VfU0laRSwgaSsrLCBwZm4rKykgewpAQCAtMjg5LDE0ICszNTQsMjQgQEAg c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2ln bmVkIGxvbmcgYWRkciwKIAkJCWdvdG8gZmF1bHQ7CiAKIAkJaWYgKHNvZnRsZWFmX2lzX21pZ3Jh dGlvbihlbnRyeSkpIHsKLQkJCXB0ZV91bm1hcChwdGVwKTsKLQkJCWhtbV92bWFfd2Fsay0+bGFz dCA9IGFkZHI7Ci0JCQltaWdyYXRpb25fZW50cnlfd2FpdCh3YWxrLT5tbSwgcG1kcCwgYWRkcik7 Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJaWYgKCFobW1fc2VsZWN0X21pZ3JhdGUocmFuZ2UpKSB7 CisJCQkJSE1NX0FTU0VSVF9VTkxPQ0tFRChobW1fdm1hX3dhbGspOworCQkJCXB0ZV91bm1hcChw dGVwKTsKKwkJCQlobW1fdm1hX3dhbGstPmxhc3QgPSBhZGRyOworCQkJCW1pZ3JhdGlvbl9lbnRy eV93YWl0KHdhbGstPm1tLCBwbWRwLCBhZGRyKTsKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJfSBl bHNlCisJCQkJZ290byBvdXQ7CiAJCX0KIAogCQkvKiBSZXBvcnQgZXJyb3IgZm9yIGV2ZXJ5dGhp bmcgZWxzZSAqLwotCQlwdGVfdW5tYXAocHRlcCk7CisKKwkJaWYgKGhtbV92bWFfd2Fsay0+cHRl bG9ja2VkKSB7CisJCQlwdGVfdW5tYXBfdW5sb2NrKHB0ZXAsIGhtbV92bWFfd2Fsay0+cHRsKTsK KwkJCWhtbV92bWFfd2Fsay0+cHRlbG9ja2VkID0gZmFsc2U7CisJCX0gZWxzZQorCQkJcHRlX3Vu bWFwKHB0ZXApOworCiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtMzEzLDcgKzM4OCwxMiBA QCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5z aWduZWQgbG9uZyBhZGRyLAogCWlmICghdm1fbm9ybWFsX3BhZ2Uod2Fsay0+dm1hLCBhZGRyLCBw dGUpICYmCiAJICAgICFpc196ZXJvX3BmbihwdGVfcGZuKHB0ZSkpKSB7CiAJCWlmIChobW1fcHRl X25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBwZm5fcmVxX2ZsYWdzLCAwKSkgewotCQkJcHRlX3Vu bWFwKHB0ZXApOworCQkJaWYgKGhtbV92bWFfd2Fsay0+cHRlbG9ja2VkKSB7CisJCQkJcHRlX3Vu bWFwX3VubG9jayhwdGVwLCBobW1fdm1hX3dhbGstPnB0bCk7CisJCQkJaG1tX3ZtYV93YWxrLT5w dGVsb2NrZWQgPSBmYWxzZTsKKwkJCX0gZWxzZQorCQkJCXB0ZV91bm1hcChwdGVwKTsKKwogCQkJ cmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAkJbmV3X3Bmbl9mbGFncyA9IEhNTV9QRk5fRVJST1I7CkBA IC0zMjIsMTEgKzQwMiwxNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3Qg bW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLAogCiAJbmV3X3Bmbl9mbGFncyA9IHB0 ZV9wZm4ocHRlKSB8IGNwdV9mbGFnczsKIG91dDoKLQkqaG1tX3BmbiA9ICgqaG1tX3BmbiAmIEhN TV9QRk5fSU5PVVRfRkxBR1MpIHwgbmV3X3Bmbl9mbGFnczsKKwlpZiAoKCpobW1fcGZuICYgKEhN TV9QRk5fTUlHUkFURSB8IEhNTV9QRk5fVkFMSUQpKSAhPQorCSAgICAoSE1NX1BGTl9NSUdSQVRF IHwgSE1NX1BGTl9WQUxJRCkpCisJCSpobW1fcGZuID0gKCpobW1fcGZuICYgSE1NX1BGTl9JTk9V VF9GTEFHUykgfCBuZXdfcGZuX2ZsYWdzOwogCXJldHVybiAwOwogCiBmYXVsdDoKLQlwdGVfdW5t YXAocHRlcCk7CisJaWYgKGhtbV92bWFfd2Fsay0+cHRlbG9ja2VkKSB7CisJCXB0ZV91bm1hcF91 bmxvY2socHRlcCwgaG1tX3ZtYV93YWxrLT5wdGwpOworCQlobW1fdm1hX3dhbGstPnB0ZWxvY2tl ZCA9IGZhbHNlOworCX0gZWxzZQorCQlwdGVfdW5tYXAocHRlcCk7CiAJLyogRmF1bHQgYW55IHZp cnR1YWwgYWRkcmVzcyB3ZSB3ZXJlIGFza2VkIHRvIGZhdWx0ICovCiAJcmV0dXJuIGhtbV92bWFf ZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiB9CkBAIC0zNzAsMTMgKzQ1 NiwxOCBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dh bGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJcmVxdWlyZWRfZmF1bHQgPSBobW1fcmFu Z2VfbmVlZF9mYXVsdChobW1fdm1hX3dhbGssIGhtbV9wZm5zLAogCQkJCQkgICAgICBucGFnZXMs IDApOwogCWlmIChyZXF1aXJlZF9mYXVsdCkgewotCQlpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3By aXZhdGUoZW50cnkpKQorCQlpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7 CisJCQlpZiAoaG1tX3ZtYV93YWxrLT5wbWRsb2NrZWQpIHsKKwkJCQlzcGluX3VubG9jayhobW1f dm1hX3dhbGstPnB0bCk7CisJCQkJaG1tX3ZtYV93YWxrLT5wbWRsb2NrZWQgPSBmYWxzZTsKKwkJ CX0KIAkJCXJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdh bGspOworCQl9CiAJCWVsc2UKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJldHVybiBobW1f cGZuc19maWxsKHN0YXJ0LCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTsKKwlyZXR1cm4gaG1t X3BmbnNfZmlsbChzdGFydCwgZW5kLCBobW1fdm1hX3dhbGssIEhNTV9QRk5fRVJST1IpOwogfQog I2Vsc2UKIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2Fs ayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCwKQEAgLTM4NCwxNSArNDc1LDEwMCBAQCBzdGF0 aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVu c2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkJICAgICBwbWRfdCBwbWQpCiB7CiAJc3RydWN0IGhtbV92 bWFfd2FsayAqaG1tX3ZtYV93YWxrID0gd2Fsay0+cHJpdmF0ZTsKLQlzdHJ1Y3QgaG1tX3Jhbmdl ICpyYW5nZSA9IGhtbV92bWFfd2Fsay0+cmFuZ2U7CiAJdW5zaWduZWQgbG9uZyBucGFnZXMgPSAo ZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQ7CiAKIAlpZiAoaG1tX3JhbmdlX25lZWRfZmF1bHQo aG1tX3ZtYV93YWxrLCBobW1fcGZucywgbnBhZ2VzLCAwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0J cmV0dXJuIGhtbV9wZm5zX2ZpbGwoc3RhcnQsIGVuZCwgcmFuZ2UsIEhNTV9QRk5fRVJST1IpOwor CXJldHVybiBobW1fcGZuc19maWxsKHN0YXJ0LCBlbmQsIGhtbV92bWFfd2FsaywgSE1NX1BGTl9F UlJPUik7CiB9CiAjZW5kaWYgIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICov CiAKKyNpZmRlZiBDT05GSUdfREVWSUNFX01JR1JBVElPTgorc3RhdGljIGludCBobW1fdm1hX2hh bmRsZV9taWdyYXRlX3ByZXBhcmVfcG1kKGNvbnN0IHN0cnVjdCBtbV93YWxrICp3YWxrLAorCQkJ CQkgICAgICBwbWRfdCAqcG1kcCwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJ CQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmht bV9wZm4pCit7CisJLy8gVE9ETzogaW1wbGVtZW50IG1pZ3JhdGlvbiBlbnRyeSBpbnNlcnRpb24K KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9taWdyYXRlX3ByZXBh cmUoY29uc3Qgc3RydWN0IG1tX3dhbGsgKndhbGssCisJCQkJCSAgcG1kX3QgKnBtZHAsCisJCQkJ CSAgcHRlX3QgKnB0ZSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgdW5zaWdu ZWQgbG9uZyAqaG1tX3BmbikKK3sKKwkvLyBUT0RPOiBpbXBsZW1lbnQgbWlncmF0aW9uIGVudHJ5 IGluc2VydGlvbgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19zcGxp dChwbWRfdCAqcG1kcCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIHN0 cnVjdCBtbV93YWxrICp3YWxrKQoreworCS8vIFRPRE8gOiBpbXBsZW1lbnQgc3BsaXQKKwlyZXR1 cm4gMDsKK30KKworI2Vsc2UKK3N0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfbWlncmF0ZV9wcmVw YXJlX3BtZChjb25zdCBzdHJ1Y3QgbW1fd2FsayAqd2FsaywKKwkJCQkJICAgICAgcG1kX3QgKnBt ZHAsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSAgICAgIHVuc2lnbmVk IGxvbmcgZW5kLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nICpobW1fcGZuKQoreworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX21pZ3JhdGVfcHJlcGFyZShjb25z dCBzdHJ1Y3QgbW1fd2FsayAqd2FsaywKKwkJCQkJICBwbWRfdCAqcG1kcCwKKwkJCQkJICBwdGVf dCAqcHRlLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJICB1bnNpZ25lZCBsb25n ICpobW1fcGZuKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19z cGxpdChwbWRfdCAqcG1kcCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAg IHN0cnVjdCBtbV93YWxrICp3YWxrKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRp YyBpbnQgaG1tX3ZtYV9jYXB0dXJlX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwK KwkJCQkJIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCQkgc3RydWN0IG1tX3dhbGsgKndhbGspCit7 CisJc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrID0gd2Fsay0+cHJpdmF0ZTsKKwlz dHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSA9IGhtbV92bWFfd2Fsay0+cmFuZ2U7CisKKwlpZiAoIWht bV9zZWxlY3RfbWlncmF0ZShyYW5nZSkpCisJCXJldHVybiAwOworCisJaWYgKGhtbV92bWFfd2Fs ay0+dm1hICYmIChobW1fdm1hX3dhbGstPnZtYSAhPSB3YWxrLT52bWEpKQorCQlyZXR1cm4gLUVS QU5HRTsKKworCWhtbV92bWFfd2Fsay0+dm1hID0gd2Fsay0+dm1hOworCWhtbV92bWFfd2Fsay0+ c3RhcnQgPSBzdGFydDsKKwlobW1fdm1hX3dhbGstPmVuZCA9IGVuZDsKKworCWlmIChlbmQgLSBz dGFydCA+IHJhbmdlLT5lbmQgLSByYW5nZS0+c3RhcnQpCisJCXJldHVybiAtRVJBTkdFOworCisJ aWYgKCFobW1fdm1hX3dhbGstPm1tdV9yYW5nZS5vd25lcikgeworCQltbXVfbm90aWZpZXJfcmFu Z2VfaW5pdF9vd25lcigmaG1tX3ZtYV93YWxrLT5tbXVfcmFuZ2UsIE1NVV9OT1RJRllfTUlHUkFU RSwgMCwKKwkJCQkJICAgICAgd2Fsay0+dm1hLT52bV9tbSwgc3RhcnQsIGVuZCwKKwkJCQkJICAg ICAgcmFuZ2UtPmRldl9wcml2YXRlX293bmVyKTsKKwkJbW11X25vdGlmaWVyX2ludmFsaWRhdGVf cmFuZ2Vfc3RhcnQoJmhtbV92bWFfd2Fsay0+bW11X3JhbmdlKTsKKwl9CisKKwlyZXR1cm4gMDsK K30KKwogc3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLAogCQkJICAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBlbmQsCkBAIC00MDAsNDYg KzU3NiwxMzMgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLAogewog CXN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsayA9IHdhbGstPnByaXZhdGU7CiAJc3Ry dWN0IGhtbV9yYW5nZSAqcmFuZ2UgPSBobW1fdm1hX3dhbGstPnJhbmdlOwotCXVuc2lnbmVkIGxv bmcgKmhtbV9wZm5zID0KLQkJJnJhbmdlLT5obW1fcGZuc1soc3RhcnQgLSByYW5nZS0+c3RhcnQp ID4+IFBBR0VfU0hJRlRdOwogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gKGVuZCAtIHN0YXJ0KSA+ PiBQQUdFX1NISUZUOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gd2Fsay0+dm1hLT52bV9tbTsK KwllbnVtIG1pZ3JhdGVfdm1hX2luZm8gbWluZm87CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gc3Rh cnQ7CisJdW5zaWduZWQgbG9uZyAqaG1tX3BmbnM7CisJdW5zaWduZWQgbG9uZyBpOwogCXB0ZV90 ICpwdGVwOwogCXBtZF90IHBtZDsKKwlpbnQgciA9IDA7CisKKwltaW5mbyA9IGhtbV9zZWxlY3Rf bWlncmF0ZShyYW5nZSk7CiAKIGFnYWluOgotCXBtZCA9IHBtZHBfZ2V0X2xvY2tsZXNzKHBtZHAp OwotCWlmIChwbWRfbm9uZShwbWQpKQotCQlyZXR1cm4gaG1tX3ZtYV93YWxrX2hvbGUoc3RhcnQs IGVuZCwgLTEsIHdhbGspOworCWhtbV9wZm5zID0gJnJhbmdlLT5obW1fcGZuc1soYWRkciAtIHJh bmdlLT5zdGFydCkgPj4gUEFHRV9TSElGVF07CisJaG1tX3ZtYV93YWxrLT5wdGVsb2NrZWQgPSBm YWxzZTsKKwlobW1fdm1hX3dhbGstPnBtZGxvY2tlZCA9IGZhbHNlOworCisJaWYgKG1pbmZvKSB7 CisJCWhtbV92bWFfd2Fsay0+cHRsID0gcG1kX2xvY2sobW0sIHBtZHApOworCQlobW1fdm1hX3dh bGstPnBtZGxvY2tlZCA9IHRydWU7CisJCXBtZCA9IHBtZHBfZ2V0KHBtZHApOworCX0gZWxzZQor CQlwbWQgPSBwbWRwX2dldF9sb2NrbGVzcyhwbWRwKTsKKworCWlmIChwbWRfbm9uZShwbWQpKSB7 CisJCXIgPSBobW1fdm1hX3dhbGtfaG9sZShzdGFydCwgZW5kLCAtMSwgd2Fsayk7CisKKwkJaWYg KGhtbV92bWFfd2Fsay0+cG1kbG9ja2VkKSB7CisJCQlzcGluX3VubG9jayhobW1fdm1hX3dhbGst PnB0bCk7CisJCQlobW1fdm1hX3dhbGstPnBtZGxvY2tlZCA9IGZhbHNlOworCQl9CisJCXJldHVy biByOworCX0KIAogCWlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpICYmIHBtZF9pc19taWdy YXRpb25fZW50cnkocG1kKSkgewotCQlpZiAoaG1tX3JhbmdlX25lZWRfZmF1bHQoaG1tX3ZtYV93 YWxrLCBobW1fcGZucywgbnBhZ2VzLCAwKSkgeworCQlpZiAoIW1pbmZvKSB7CisJCQlpZiAoaG1t X3JhbmdlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBobW1fcGZucywgbnBhZ2VzLCAwKSkgewor CQkJCWhtbV92bWFfd2Fsay0+bGFzdCA9IGFkZHI7CisJCQkJcG1kX21pZ3JhdGlvbl9lbnRyeV93 YWl0KHdhbGstPm1tLCBwbWRwKTsKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJfQorCQl9CisKKwkJ aWYgKChobW1fcGZuc1swXSAmIChITU1fUEZOX01JR1JBVEUgfCBITU1fUEZOX1ZBTElEKSkgIT0K KwkJICAgIChITU1fUEZOX01JR1JBVEUgfCBITU1fUEZOX1ZBTElEKSkKKwkJCWZvciAoaSA9IDA7 IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFLCBpKyspCisJCQkJaG1tX3BmbnNbaV0gJj0g SE1NX1BGTl9JTk9VVF9GTEFHUzsKKworCQlpZiAoaG1tX3ZtYV93YWxrLT5wbWRsb2NrZWQpIHsK KwkJCXNwaW5fdW5sb2NrKGhtbV92bWFfd2Fsay0+cHRsKTsKKwkJCWhtbV92bWFfd2Fsay0+cG1k bG9ja2VkID0gZmFsc2U7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocG1kX3RyYW5z X2h1Z2UocG1kKSB8fCAhcG1kX3ByZXNlbnQocG1kKSkgeworCisJCWlmICghcG1kX3ByZXNlbnQo cG1kKSkgeworCQkJciA9IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQod2Fsaywgc3RhcnQsIGVu ZCwgaG1tX3BmbnMsCisJCQkJCQkgICAgICBwbWQpOworCQkJLy8gSWYgbm90IG1pZ3JhdGluZyB3 ZSBhcmUgZG9uZQorCQkJaWYgKHIgfHwgIW1pbmZvKSB7CisJCQkJaWYgKGhtbV92bWFfd2Fsay0+ cG1kbG9ja2VkKSB7CisJCQkJCXNwaW5fdW5sb2NrKGhtbV92bWFfd2Fsay0+cHRsKTsKKwkJCQkJ aG1tX3ZtYV93YWxrLT5wbWRsb2NrZWQgPSBmYWxzZTsKKwkJCQl9CisJCQkJcmV0dXJuIHI7CisJ CQl9CisJCX0KKworCQlpZiAocG1kX3RyYW5zX2h1Z2UocG1kKSkgeworCisJCQkvKgorCQkJICog Tm8gbmVlZCB0byB0YWtlIHBtZF9sb2NrIGhlcmUgaWYgbm90IG1pZ3JhdGluZywKKwkJCSAqIGV2 ZW4gaWYgc29tZSBvdGhlciB0aHJlYWQgaXMgc3BsaXR0aW5nIHRoZSBodWdlCisJCQkgKiBwbWQg d2Ugd2lsbCBnZXQgdGhhdCBldmVudCB0aHJvdWdoIG1tdV9ub3RpZmllciBjYWxsYmFjay4KKwkJ CSAqCisJCQkgKiBTbyBqdXN0IHJlYWQgcG1kIHZhbHVlIGFuZCBjaGVjayBhZ2FpbiBpdCdzIGEg dHJhbnNwYXJlbnQKKwkJCSAqIGh1Z2Ugb3IgZGV2aWNlIG1hcHBpbmcgb25lIGFuZCBjb21wdXRl IGNvcnJlc3BvbmRpbmcgcGZuCisJCQkgKiB2YWx1ZXMuCisJCQkgKi8KKworCQkJaWYgKCFtaW5m bykgeworCQkJCXBtZCA9IHBtZHBfZ2V0X2xvY2tsZXNzKHBtZHApOworCQkJCWlmICghcG1kX3Ry YW5zX2h1Z2UocG1kKSkKKwkJCQkJZ290byBhZ2FpbjsKKwkJCX0KKworCQkJciA9IGhtbV92bWFf aGFuZGxlX3BtZCh3YWxrLCBhZGRyLCBlbmQsIGhtbV9wZm5zLCBwbWQpOworCisJCQkvLyBJZiBu b3QgbWlncmF0aW5nIHdlIGFyZSBkb25lCisJCQlpZiAociB8fCAhbWluZm8pIHsKKwkJCQlpZiAo aG1tX3ZtYV93YWxrLT5wbWRsb2NrZWQpIHsKKwkJCQkJc3Bpbl91bmxvY2soaG1tX3ZtYV93YWxr LT5wdGwpOworCQkJCQlobW1fdm1hX3dhbGstPnBtZGxvY2tlZCA9IGZhbHNlOworCQkJCX0KKwkJ CQlyZXR1cm4gcjsKKwkJCX0KKwkJfQorCisJCXIgPSBobW1fdm1hX2hhbmRsZV9taWdyYXRlX3By ZXBhcmVfcG1kKHdhbGssIHBtZHAsIHN0YXJ0LCBlbmQsIGhtbV9wZm5zKTsKKworCQlpZiAoaG1t X3ZtYV93YWxrLT5wbWRsb2NrZWQpIHsKKwkJCXNwaW5fdW5sb2NrKGhtbV92bWFfd2Fsay0+cHRs KTsKKwkJCWhtbV92bWFfd2Fsay0+cG1kbG9ja2VkID0gZmFsc2U7CisJCX0KKworCQlpZiAociA9 PSAtRU5PRU5UKSB7CisJCQlyID0gaG1tX3ZtYV93YWxrX3NwbGl0KHBtZHAsIGFkZHIsIHdhbGsp OworCQkJaWYgKHIpIHsKKwkJCQkvKiBTcGxpdCBub3Qgc3VjY2Vzc2Z1bCwgc2tpcCAqLworCQkJ CXJldHVybiBobW1fcGZuc19maWxsKHN0YXJ0LCBlbmQsIGhtbV92bWFfd2FsaywgSE1NX1BGTl9F UlJPUik7CisJCQl9CisKKwkJCS8qIFNwbGl0IHN1Y2Nlc3NmdWwsIHJlbG9vcCAqLwogCQkJaG1t X3ZtYV93YWxrLT5sYXN0ID0gYWRkcjsKLQkJCXBtZF9taWdyYXRpb25fZW50cnlfd2FpdCh3YWxr LT5tbSwgcG1kcCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9Ci0JCXJldHVybiBobW1fcGZuc19m aWxsKHN0YXJ0LCBlbmQsIHJhbmdlLCAwKTsKLQl9CiAKLQlpZiAoIXBtZF9wcmVzZW50KHBtZCkp Ci0JCXJldHVybiBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHdhbGssIHN0YXJ0LCBlbmQsIGht bV9wZm5zLAotCQkJCQkJIHBtZCk7CisJCXJldHVybiByOwogCi0JaWYgKHBtZF90cmFuc19odWdl KHBtZCkpIHsKLQkJLyoKLQkJICogTm8gbmVlZCB0byB0YWtlIHBtZF9sb2NrIGhlcmUsIGV2ZW4g aWYgc29tZSBvdGhlciB0aHJlYWQKLQkJICogaXMgc3BsaXR0aW5nIHRoZSBodWdlIHBtZCB3ZSB3 aWxsIGdldCB0aGF0IGV2ZW50IHRocm91Z2gKLQkJICogbW11X25vdGlmaWVyIGNhbGxiYWNrLgot CQkgKgotCQkgKiBTbyBqdXN0IHJlYWQgcG1kIHZhbHVlIGFuZCBjaGVjayBhZ2FpbiBpdCdzIGEg dHJhbnNwYXJlbnQKLQkJICogaHVnZSBvciBkZXZpY2UgbWFwcGluZyBvbmUgYW5kIGNvbXB1dGUg Y29ycmVzcG9uZGluZyBwZm4KLQkJICogdmFsdWVzLgotCQkgKi8KLQkJcG1kID0gcG1kcF9nZXRf bG9ja2xlc3MocG1kcCk7Ci0JCWlmICghcG1kX3RyYW5zX2h1Z2UocG1kKSkKLQkJCWdvdG8gYWdh aW47CisJfQogCi0JCXJldHVybiBobW1fdm1hX2hhbmRsZV9wbWQod2FsaywgYWRkciwgZW5kLCBo bW1fcGZucywgcG1kKTsKKwlpZiAoaG1tX3ZtYV93YWxrLT5wbWRsb2NrZWQpIHsKKwkJc3Bpbl91 bmxvY2soaG1tX3ZtYV93YWxrLT5wdGwpOworCQlobW1fdm1hX3dhbGstPnBtZGxvY2tlZCA9IGZh bHNlOwogCX0KIAogCS8qCkBAIC00NTEsMjIgKzcxNCw0MyBAQCBzdGF0aWMgaW50IGhtbV92bWFf d2Fsa19wbWQocG1kX3QgKnBtZHAsCiAJaWYgKHBtZF9iYWQocG1kKSkgewogCQlpZiAoaG1tX3Jh bmdlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBobW1fcGZucywgbnBhZ2VzLCAwKSkKIAkJCXJl dHVybiAtRUZBVUxUOwotCQlyZXR1cm4gaG1tX3BmbnNfZmlsbChzdGFydCwgZW5kLCByYW5nZSwg SE1NX1BGTl9FUlJPUik7CisJCXJldHVybiBobW1fcGZuc19maWxsKHN0YXJ0LCBlbmQsIGhtbV92 bWFfd2FsaywgSE1NX1BGTl9FUlJPUik7CiAJfQogCi0JcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKHBt ZHAsIGFkZHIpOworCWlmIChtaW5mbykgeworCQlwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayht bSwgcG1kcCwgYWRkciwgJmhtbV92bWFfd2Fsay0+cHRsKTsKKwkJaWYgKHB0ZXApCisJCQlobW1f dm1hX3dhbGstPnB0ZWxvY2tlZCA9IHRydWU7CisJfSBlbHNlCisJCXB0ZXAgPSBwdGVfb2Zmc2V0 X21hcChwbWRwLCBhZGRyKTsKIAlpZiAoIXB0ZXApCiAJCWdvdG8gYWdhaW47CisKIAlmb3IgKDsg YWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUsIHB0ZXArKywgaG1tX3BmbnMrKykgewotCQlp bnQgcjsKIAogCQlyID0gaG1tX3ZtYV9oYW5kbGVfcHRlKHdhbGssIGFkZHIsIGVuZCwgcG1kcCwg cHRlcCwgaG1tX3BmbnMpOwogCQlpZiAocikgewotCQkJLyogaG1tX3ZtYV9oYW5kbGVfcHRlKCkg ZGlkIHB0ZV91bm1hcCgpICovCisJCQkvKiBobW1fdm1hX2hhbmRsZV9wdGUoKSBkaWQgcHRlX3Vu bWFwKCkgLyBwdGVfdW5tYXBfdW5sb2NrICovCiAJCQlyZXR1cm4gcjsKIAkJfQorCisJCXIgPSBo bW1fdm1hX2hhbmRsZV9taWdyYXRlX3ByZXBhcmUod2FsaywgcG1kcCwgcHRlcCwgYWRkciwgaG1t X3BmbnMpOworCQlpZiAociA9PSAtRUFHQUlOKSB7CisJCQlITU1fQVNTRVJUX1VOTE9DS0VEKGht bV92bWFfd2Fsayk7CisJCQlnb3RvIGFnYWluOworCQl9CisJCWlmIChyKSB7CisJCQlobW1fcGZu c19maWxsKGFkZHIsIGVuZCwgaG1tX3ZtYV93YWxrLCBITU1fUEZOX0VSUk9SKTsKKwkJCWJyZWFr OworCQl9CiAJfQotCXB0ZV91bm1hcChwdGVwIC0gMSk7CisKKwlpZiAoaG1tX3ZtYV93YWxrLT5w dGVsb2NrZWQpIHsKKwkJcHRlX3VubWFwX3VubG9jayhwdGVwIC0gMSwgaG1tX3ZtYV93YWxrLT5w dGwpOworCQlobW1fdm1hX3dhbGstPnB0ZWxvY2tlZCA9IGZhbHNlOworCX0gZWxzZQorCQlwdGVf dW5tYXAocHRlcCAtIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYwMCw2ICs4ODQsMTEgQEAg c3RhdGljIGludCBobW1fdm1hX3dhbGtfdGVzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25l ZCBsb25nIGVuZCwKIAlzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGsgPSB3YWxrLT5w cml2YXRlOwogCXN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlID0gaG1tX3ZtYV93YWxrLT5yYW5nZTsK IAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKKwlpbnQgcjsKKworCXIg PSBobW1fdm1hX2NhcHR1cmVfbWlncmF0ZV9yYW5nZShzdGFydCwgZW5kLCB3YWxrKTsKKwlpZiAo cikKKwkJcmV0dXJuIHI7CiAKIAlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUEZO TUFQKSkgJiYKIAkgICAgdm1hLT52bV9mbGFncyAmIFZNX1JFQUQpCkBAIC02MjIsNyArOTExLDcg QEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfdGVzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNp Z25lZCBsb25nIGVuZCwKIAkJCQkgKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZULCAwKSkKIAkJ cmV0dXJuIC1FRkFVTFQ7CiAKLQlobW1fcGZuc19maWxsKHN0YXJ0LCBlbmQsIHJhbmdlLCBITU1f UEZOX0VSUk9SKTsKKwlobW1fcGZuc19maWxsKHN0YXJ0LCBlbmQsIGhtbV92bWFfd2FsaywgSE1N X1BGTl9FUlJPUik7CiAKIAkvKiBTa2lwIHRoaXMgdm1hIGFuZCBjb250aW51ZSBwcm9jZXNzaW5n IHRoZSBuZXh0IHZtYS4gKi8KIAlyZXR1cm4gMTsKQEAgLTY1Miw5ICs5NDEsMTcgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBobW1fd2Fsa19vcHMgPSB7CiAgKgkJdGhlIGludmFs aWRhdGlvbiB0byBmaW5pc2guCiAgKiAtRUZBVUxUOiAgICAgQSBwYWdlIHdhcyByZXF1ZXN0ZWQg dG8gYmUgdmFsaWQgYW5kIGNvdWxkIG5vdCBiZSBtYWRlIHZhbGlkCiAgKiAgICAgICAgICAgICAg aWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzCisgKiAt RVJBTkdFOiAgICAgVGhlIHJhbmdlIGNyb3NzZXMgbXVsdGlwbGUgVk1Bcywgb3Igc3BhY2UgZm9y IGhtbV9wZm5zIGFycmF5CisgKiAgICAgICAgICAgICAgaXMgdG9vIGxvdy4KICAqCiAgKiBUaGlz IGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQg dGhlIHBhZ2UgdGFibGVzCiAgKiB3aXRob3V0IG11dGF0aW5nIHRoZW0gKGllIGNhdXNpbmcgZmF1 bHRzKS4KKyAqCisgKiBJZiB3YW50IHRvIGRvIG1pZ3JhdGUgYWZ0ZXIgZmF1bHRpbmcsIGNhbGwg aG1tX3JhbmdlX2ZhdWx0KCkgd2l0aAorICogSE1NX1BGTl9SRVFfTUlHUkFURSBhbmQgaW5pdGlh bGl6ZSByYW5nZS5taWdyYXRlIGZpZWxkLgorICogQWZ0ZXIgaG1tX3JhbmdlX2ZhdWx0KCkgY2Fs bCBtaWdyYXRlX2htbV9yYW5nZV9zZXR1cCgpIGluc3RlYWQgb2YKKyAqIG1pZ3JhdGVfdm1hX3Nl dHVwKCkgYW5kIGFmdGVyIHRoYXQgZm9sbG93IG5vcm1hbCBtaWdyYXRlIGNhbGxzIHBhdGguCisg KgogICovCiBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQogewpA QCAtNjYyLDE2ICs5NTksMzQgQEAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3Jhbmdl ICpyYW5nZSkKIAkJLnJhbmdlID0gcmFuZ2UsCiAJCS5sYXN0ID0gcmFuZ2UtPnN0YXJ0LAogCX07 Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSByYW5nZS0+bm90aWZpZXItPm1tOworCXN0cnVjdCBt bV9zdHJ1Y3QgKm1tOworCWJvb2wgaXNfZmF1bHRfcGF0aDsKIAlpbnQgcmV0OwogCisJLyoKKwkg KgorCSAqICBDb3VsZCBiZSBzZXJ2aW5nIGEgZGV2aWNlIGZhdWx0IG9yIGNvbWUgZnJvbSBtaWdy YXRlCisJICogIGVudHJ5IHBvaW50LiBGb3IgdGhlIGZvcm1lciB3ZSBoYXZlIG5vdCByZXNvbHZl ZCB0aGUgdm1hCisJICogIHlldCwgYW5kIHRoZSBsYXR0ZXIgd2UgZG9uJ3QgaGF2ZSBhIG5vdGlm aWVyIChidXQgaGF2ZSBhIHZtYSkuCisJICoKKwkgKi8KKyNpZmRlZiBDT05GSUdfREVWSUNFX01J R1JBVElPTgorCWlzX2ZhdWx0X3BhdGggPSAhIXJhbmdlLT5ub3RpZmllcjsKKwltbSA9IGlzX2Zh dWx0X3BhdGggPyByYW5nZS0+bm90aWZpZXItPm1tIDogcmFuZ2UtPm1pZ3JhdGUtPnZtYS0+dm1f bW07CisjZWxzZQorCWlzX2ZhdWx0X3BhdGggPSB0cnVlOworCW1tID0gcmFuZ2UtPm5vdGlmaWVy LT5tbTsKKyNlbmRpZgogCW1tYXBfYXNzZXJ0X2xvY2tlZChtbSk7CiAKIAlkbyB7CiAJCS8qIElm IHJhbmdlIGlzIG5vIGxvbmdlciB2YWxpZCBmb3JjZSByZXRyeS4gKi8KLQkJaWYgKG1tdV9pbnRl cnZhbF9jaGVja19yZXRyeShyYW5nZS0+bm90aWZpZXIsCi0JCQkJCSAgICAgcmFuZ2UtPm5vdGlm aWVyX3NlcSkpCi0JCQlyZXR1cm4gLUVCVVNZOworCQlpZiAoaXNfZmF1bHRfcGF0aCAmJiBtbXVf aW50ZXJ2YWxfY2hlY2tfcmV0cnkocmFuZ2UtPm5vdGlmaWVyLAorCQkJCQkgICAgIHJhbmdlLT5u b3RpZmllcl9zZXEpKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlicmVhazsKKwkJfQorCiAJCXJl dCA9IHdhbGtfcGFnZV9yYW5nZShtbSwgaG1tX3ZtYV93YWxrLmxhc3QsIHJhbmdlLT5lbmQsCiAJ CQkJICAgICAgJmhtbV93YWxrX29wcywgJmhtbV92bWFfd2Fsayk7CiAJCS8qCkBAIC02ODEsNiAr OTk2LDE5IEBAIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCiAJ CSAqIG91dHB1dCwgYW5kIGFsbCA+PSBhcmUgc3RpbGwgYXQgdGhlaXIgaW5wdXQgdmFsdWVzLgog CQkgKi8KIAl9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTsKKworI2lmZGVmIENPTkZJR19ERVZJQ0Vf TUlHUkFUSU9OCisJaWYgKGhtbV9zZWxlY3RfbWlncmF0ZShyYW5nZSkgJiYgcmFuZ2UtPm1pZ3Jh dGUgJiYKKwkgICAgaG1tX3ZtYV93YWxrLm1tdV9yYW5nZS5vd25lcikgeworCQkvLyBUaGUgbWln cmF0ZV92bWEgcGF0aCBoYXMgdGhlIGZvbGxvd2luZyBpbml0aWFsaXplZAorCQlpZiAoaXNfZmF1 bHRfcGF0aCkgeworCQkJcmFuZ2UtPm1pZ3JhdGUtPnZtYSAgID0gaG1tX3ZtYV93YWxrLnZtYTsK KwkJCXJhbmdlLT5taWdyYXRlLT5zdGFydCA9IHJhbmdlLT5zdGFydDsKKwkJCXJhbmdlLT5taWdy YXRlLT5lbmQgICA9IGhtbV92bWFfd2Fsay5lbmQ7CisJCX0KKwkJbW11X25vdGlmaWVyX2ludmFs aWRhdGVfcmFuZ2VfZW5kKCZobW1fdm1hX3dhbGsubW11X3JhbmdlKTsKKwl9CisjZW5kaWYKIAly ZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpOwotLSAKMi41MC4w Cgo=