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 5B7F0CD5BC0 for ; Mon, 25 May 2026 05:09:02 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B42EB10E3CD; Mon, 25 May 2026 05:09:01 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="FZg+gRQx"; 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 8A8E410E3CD for ; Mon, 25 May 2026 05:08:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779685738; 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=cj51+t/4RcT0xqUB0yuVFnS37wbbCGh1ShoNq085htY=; b=FZg+gRQxKsHKOTfNltNXUv55+f8efLkO6qADsYmaFvR6Cl60BYcDJrFOSyFp7kHL8sYjof rKz46cDDM6CxQmin8vSJX03sYuAaE10lXRdIU6g1U0SuQIaK0JugB89Vpj01DHDraxK2wA D/N0DMqEnDCYB3tWSCE1Edp/lKkUiZI= Received: from mail-lj1-f200.google.com (mail-lj1-f200.google.com [209.85.208.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-483-JYP8jkKJMrSXhswUOVjMLw-1; Mon, 25 May 2026 01:08:56 -0400 X-MC-Unique: JYP8jkKJMrSXhswUOVjMLw-1 X-Mimecast-MFC-AGG-ID: JYP8jkKJMrSXhswUOVjMLw_1779685735 Received: by mail-lj1-f200.google.com with SMTP id 38308e7fff4ca-393a397310bso42679721fa.1 for ; Sun, 24 May 2026 22:08:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779685735; x=1780290535; 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=cj51+t/4RcT0xqUB0yuVFnS37wbbCGh1ShoNq085htY=; b=JsE6x3qLeFMgFheMBn3l+Fc1vuGM0j3ThwzWhVSJPQZ+agclcbCvlj1mKPh+1/AsC4 k456NLDulE50rgPZOWJcqdrZrADCVSNczn/iwBgAsHpLe1TAHBFo7cNcVfmK7l5f09Ma k2ojOmKSUB3xhR4vSDNpOU34+/azttZkERmtdrcfyZv8ssXTNCL6MeYvhJ6WuE2jkmCN ZIU5nP7dY8iII+BDaajde8RyfBNCgHzsCUHsLi/2YU+pOqsyq8KjKy0TFAYZ+IeY/3Ob QiWglSNiW9S6dMj9K9FVqNAz6oBaFPLb38nSffzUzMjASmn9J6z7d1kiG0mFjnB7wbIf skvA== X-Gm-Message-State: AOJu0YylOx77LQFHrdwLvkIcUJIVpiD6Q7RP/QqLKaUmuzja25XIjwRp f4f8WQg9wFdhglMV0D+OcmEKtDVnWzXfNZ0Xv4tcnk5yDMDEdRJxYqTvLvUs9nFPgF8lhjqpfG1 neJ/7oHzKC5S3mJD4SjvnD9KF6VnCz3R423cwAE+/pcBOPGi7fL2DQkiI58ZdOuFCLPTHEsTGeD Vt4PY= X-Gm-Gg: Acq92OHl8nYtxIv8Se7umGbYRFIlo+vBFs6mRQVKgtLgLDp+Zw9YK7puGjjc2esM7yz 9glGvKAY1aKPNKS2Gg8FthFWQM1Xmkwdc7m57i+pBRKB06d5ZcraxfU8GAWWdOlzLpxl1MjGHWD qkDEKZ16I+W21RZbL46voJ4xuL/bHLzBwFju2DivBbiF++NS7vCls4t1xCTiqOKmj1no8IsyG5z r8qzB3SYDAaulgARjjKnbJjBrgXa1Grv+4gAaQDQ/o+Bh1MHAqldhDdquh03V3/5VAKr5GEFoMM bjBM0wHaG36dW9SJofjmIK48S/YgKroCJddDm+zGMY6QiZPNbhZG8y34KXNgslh9J3kDbzJpiqf CtULmaRuc54pCLlOVSsoUALbu0+trwfcV8g69 X-Received: by 2002:a05:651c:1595:b0:395:c810:a61e with SMTP id 38308e7fff4ca-395d8bbc310mr46115681fa.6.1779685734964; Sun, 24 May 2026 22:08:54 -0700 (PDT) X-Received: by 2002:a05:651c:1595:b0:395:c810:a61e with SMTP id 38308e7fff4ca-395d8bbc310mr46115451fa.6.1779685734369; Sun, 24 May 2026 22:08:54 -0700 (PDT) Received: from fedora (85-23-51-1.bb.dnainternet.fi. [85.23.51.1]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-395dca7bcddsm20698161fa.16.2026.05.24.22.08.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 22:08:54 -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 v11 3/5] mm/hmm: do the plumbing for HMM to participate in migration Date: Mon, 25 May 2026 08:08:28 +0300 Message-ID: <20260525050830.100254-4-mpenttil@redhat.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20260525050830.100254-1-mpenttil@redhat.com> References: <20260525050830.100254-1-mpenttil@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: ZnJRBzW_Yb-MweTOxcnw3BCicsYpXaL6q9W649enFTs_1779685735 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 Ky0KIG1tL2htbS5jICAgICAgICAgICAgICAgIHwgNDM2ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMzk5IGluc2VydGlvbnMoKyksIDU3 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 NWYyZjBjODNkLi5lZTc4NzY0YzNlNDcgMTAwNjQ0Ci0tLSBhL21tL2htbS5jCisrKyBiL21tL2ht 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 IC0zMjIsMTEgKzQwMiwxNiBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3Qg bW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLAogCiAJbmV3X3Bmbl9mbGFncyA9IHB0 ZV9wZm4ocHRlKSB8IGNwdV9mbGFnczsKIG91dDoKLQkqaG1tX3BmbiA9ICgqaG1tX3BmbiAmIEhN TV9QRk5fSU5PVVRfRkxBR1MpIHwgbmV3X3Bmbl9mbGFnczsKKwlpZiAoISgqaG1tX3BmbiAmIEhN TV9QRk5fTUlHUkFURSkpCisJCSpobW1fcGZuID0gKCpobW1fcGZuICYgSE1NX1BGTl9JTk9VVF9G TEFHUykgfCBuZXdfcGZuX2ZsYWdzOwogCXJldHVybiAwOwogCiBmYXVsdDoKLQlwdGVfdW5tYXAo cHRlcCk7CisJaWYgKGhtbV92bWFfd2Fsay0+cHRlbG9ja2VkKSB7CisJCXB0ZV91bm1hcF91bmxv Y2socHRlcCwgaG1tX3ZtYV93YWxrLT5wdGwpOworCQlobW1fdm1hX3dhbGstPnB0ZWxvY2tlZCA9 IGZhbHNlOworCX0gZWxzZQorCQlwdGVfdW5tYXAocHRlcCk7CiAJLyogRmF1bHQgYW55IHZpcnR1 YWwgYWRkcmVzcyB3ZSB3ZXJlIGFza2VkIHRvIGZhdWx0ICovCiAJcmV0dXJuIGhtbV92bWFfZmF1 bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiB9CkBAIC0zNzAsMTMgKzQ1NSwx OCBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsg KndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJcmVxdWlyZWRfZmF1bHQgPSBobW1fcmFuZ2Vf bmVlZF9mYXVsdChobW1fdm1hX3dhbGssIGhtbV9wZm5zLAogCQkJCQkgICAgICBucGFnZXMsIDAp OwogCWlmIChyZXF1aXJlZF9mYXVsdCkgewotCQlpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZh dGUoZW50cnkpKQorCQlpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7CisJ CQlpZiAoaG1tX3ZtYV93YWxrLT5wbWRsb2NrZWQpIHsKKwkJCQlzcGluX3VubG9jayhobW1fdm1h X3dhbGstPnB0bCk7CisJCQkJaG1tX3ZtYV93YWxrLT5wbWRsb2NrZWQgPSBmYWxzZTsKKwkJCX0K IAkJCXJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGsp OworCQl9CiAJCWVsc2UKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJldHVybiBobW1fcGZu c19maWxsKHN0YXJ0LCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTsKKwlyZXR1cm4gaG1tX3Bm bnNfZmlsbChzdGFydCwgZW5kLCBobW1fdm1hX3dhbGssIEhNTV9QRk5fRVJST1IpOwogfQogI2Vs c2UKIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAq d2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCwKQEAgLTM4NCwxNSArNDc0LDEwMCBAQCBzdGF0aWMg aW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2ln bmVkIGxvbmcgc3RhcnQsCiAJCQkJICAgICBwbWRfdCBwbWQpCiB7CiAJc3RydWN0IGhtbV92bWFf d2FsayAqaG1tX3ZtYV93YWxrID0gd2Fsay0+cHJpdmF0ZTsKLQlzdHJ1Y3QgaG1tX3JhbmdlICpy YW5nZSA9IGhtbV92bWFfd2Fsay0+cmFuZ2U7CiAJdW5zaWduZWQgbG9uZyBucGFnZXMgPSAoZW5k IC0gc3RhcnQpID4+IFBBR0VfU0hJRlQ7CiAKIAlpZiAoaG1tX3JhbmdlX25lZWRfZmF1bHQoaG1t X3ZtYV93YWxrLCBobW1fcGZucywgbnBhZ2VzLCAwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0 dXJuIGhtbV9wZm5zX2ZpbGwoc3RhcnQsIGVuZCwgcmFuZ2UsIEhNTV9QRk5fRVJST1IpOworCXJl dHVybiBobW1fcGZuc19maWxsKHN0YXJ0LCBlbmQsIGhtbV92bWFfd2FsaywgSE1NX1BGTl9FUlJP Uik7CiB9CiAjZW5kaWYgIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovCiAK KyNpZmRlZiBDT05GSUdfREVWSUNFX01JR1JBVElPTgorc3RhdGljIGludCBobW1fdm1hX2hhbmRs ZV9taWdyYXRlX3ByZXBhcmVfcG1kKGNvbnN0IHN0cnVjdCBtbV93YWxrICp3YWxrLAorCQkJCQkg ICAgICBwbWRfdCAqcG1kcCwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJ ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmhtbV9w Zm4pCit7CisJLy8gVE9ETzogaW1wbGVtZW50IG1pZ3JhdGlvbiBlbnRyeSBpbnNlcnRpb24KKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9taWdyYXRlX3ByZXBhcmUo Y29uc3Qgc3RydWN0IG1tX3dhbGsgKndhbGssCisJCQkJCSAgcG1kX3QgKnBtZHAsCisJCQkJCSAg cHRlX3QgKnB0ZSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgdW5zaWduZWQg bG9uZyAqaG1tX3BmbikKK3sKKwkvLyBUT0RPOiBpbXBsZW1lbnQgbWlncmF0aW9uIGVudHJ5IGlu c2VydGlvbgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19zcGxpdChw bWRfdCAqcG1kcCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIHN0cnVj dCBtbV93YWxrICp3YWxrKQoreworCS8vIFRPRE8gOiBpbXBsZW1lbnQgc3BsaXQKKwlyZXR1cm4g MDsKK30KKworI2Vsc2UKK3N0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfbWlncmF0ZV9wcmVwYXJl X3BtZChjb25zdCBzdHJ1Y3QgbW1fd2FsayAqd2FsaywKKwkJCQkJICAgICAgcG1kX3QgKnBtZHAs CisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxv bmcgZW5kLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nICpobW1fcGZuKQoreworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX21pZ3JhdGVfcHJlcGFyZShjb25zdCBz dHJ1Y3QgbW1fd2FsayAqd2FsaywKKwkJCQkJICBwbWRfdCAqcG1kcCwKKwkJCQkJICBwdGVfdCAq cHRlLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJICB1bnNpZ25lZCBsb25nICpo bW1fcGZuKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19zcGxp dChwbWRfdCAqcG1kcCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIHN0 cnVjdCBtbV93YWxrICp3YWxrKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBp bnQgaG1tX3ZtYV9jYXB0dXJlX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJ CQkJIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCQkgc3RydWN0IG1tX3dhbGsgKndhbGspCit7CisJ c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrID0gd2Fsay0+cHJpdmF0ZTsKKwlzdHJ1 Y3QgaG1tX3JhbmdlICpyYW5nZSA9IGhtbV92bWFfd2Fsay0+cmFuZ2U7CisKKwlpZiAoIWhtbV9z ZWxlY3RfbWlncmF0ZShyYW5nZSkpCisJCXJldHVybiAwOworCisJaWYgKGhtbV92bWFfd2Fsay0+ dm1hICYmIChobW1fdm1hX3dhbGstPnZtYSAhPSB3YWxrLT52bWEpKQorCQlyZXR1cm4gLUVSQU5H RTsKKworCWhtbV92bWFfd2Fsay0+dm1hID0gd2Fsay0+dm1hOworCWhtbV92bWFfd2Fsay0+c3Rh cnQgPSBzdGFydDsKKwlobW1fdm1hX3dhbGstPmVuZCA9IGVuZDsKKworCWlmIChlbmQgLSBzdGFy dCA+IHJhbmdlLT5lbmQgLSByYW5nZS0+c3RhcnQpCisJCXJldHVybiAtRVJBTkdFOworCisJaWYg KCFobW1fdm1hX3dhbGstPm1tdV9yYW5nZS5vd25lcikgeworCQltbXVfbm90aWZpZXJfcmFuZ2Vf aW5pdF9vd25lcigmaG1tX3ZtYV93YWxrLT5tbXVfcmFuZ2UsIE1NVV9OT1RJRllfTUlHUkFURSwg MCwKKwkJCQkJICAgICAgd2Fsay0+dm1hLT52bV9tbSwgc3RhcnQsIGVuZCwKKwkJCQkJICAgICAg cmFuZ2UtPmRldl9wcml2YXRlX293bmVyKTsKKwkJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFu Z2Vfc3RhcnQoJmhtbV92bWFfd2Fsay0+bW11X3JhbmdlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30K Kwogc3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLAogCQkJICAgIHVuc2ln bmVkIGxvbmcgc3RhcnQsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBlbmQsCkBAIC00MDAsNDYgKzU3 NSwxMzIgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLAogewogCXN0 cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsayA9IHdhbGstPnByaXZhdGU7CiAJc3RydWN0 IGhtbV9yYW5nZSAqcmFuZ2UgPSBobW1fdm1hX3dhbGstPnJhbmdlOwotCXVuc2lnbmVkIGxvbmcg KmhtbV9wZm5zID0KLQkJJnJhbmdlLT5obW1fcGZuc1soc3RhcnQgLSByYW5nZS0+c3RhcnQpID4+ IFBBR0VfU0hJRlRdOwogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gKGVuZCAtIHN0YXJ0KSA+PiBQ QUdFX1NISUZUOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gd2Fsay0+dm1hLT52bV9tbTsKKwll bnVtIG1pZ3JhdGVfdm1hX2luZm8gbWluZm87CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gc3RhcnQ7 CisJdW5zaWduZWQgbG9uZyAqaG1tX3BmbnM7CisJdW5zaWduZWQgbG9uZyBpOwogCXB0ZV90ICpw dGVwOwogCXBtZF90IHBtZDsKKwlpbnQgciA9IDA7CisKKwltaW5mbyA9IGhtbV9zZWxlY3RfbWln cmF0ZShyYW5nZSk7CiAKIGFnYWluOgotCXBtZCA9IHBtZHBfZ2V0X2xvY2tsZXNzKHBtZHApOwot CWlmIChwbWRfbm9uZShwbWQpKQotCQlyZXR1cm4gaG1tX3ZtYV93YWxrX2hvbGUoc3RhcnQsIGVu ZCwgLTEsIHdhbGspOworCWhtbV9wZm5zID0gJnJhbmdlLT5obW1fcGZuc1soYWRkciAtIHJhbmdl LT5zdGFydCkgPj4gUEFHRV9TSElGVF07CisJaG1tX3ZtYV93YWxrLT5wdGVsb2NrZWQgPSBmYWxz ZTsKKwlobW1fdm1hX3dhbGstPnBtZGxvY2tlZCA9IGZhbHNlOworCisJaWYgKG1pbmZvKSB7CisJ CWhtbV92bWFfd2Fsay0+cHRsID0gcG1kX2xvY2sobW0sIHBtZHApOworCQlobW1fdm1hX3dhbGst PnBtZGxvY2tlZCA9IHRydWU7CisJCXBtZCA9IHBtZHBfZ2V0KHBtZHApOworCX0gZWxzZQorCQlw bWQgPSBwbWRwX2dldF9sb2NrbGVzcyhwbWRwKTsKKworCWlmIChwbWRfbm9uZShwbWQpKSB7CisJ CXIgPSBobW1fdm1hX3dhbGtfaG9sZShzdGFydCwgZW5kLCAtMSwgd2Fsayk7CisKKwkJaWYgKGht bV92bWFfd2Fsay0+cG1kbG9ja2VkKSB7CisJCQlzcGluX3VubG9jayhobW1fdm1hX3dhbGstPnB0 bCk7CisJCQlobW1fdm1hX3dhbGstPnBtZGxvY2tlZCA9IGZhbHNlOworCQl9CisJCXJldHVybiBy OworCX0KIAogCWlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpICYmIHBtZF9pc19taWdyYXRp b25fZW50cnkocG1kKSkgewotCQlpZiAoaG1tX3JhbmdlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxr LCBobW1fcGZucywgbnBhZ2VzLCAwKSkgeworCQlpZiAoIW1pbmZvKSB7CisJCQlpZiAoaG1tX3Jh bmdlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBobW1fcGZucywgbnBhZ2VzLCAwKSkgeworCQkJ CWhtbV92bWFfd2Fsay0+bGFzdCA9IGFkZHI7CisJCQkJcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0 KHdhbGstPm1tLCBwbWRwKTsKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJfQorCQl9CisKKwkJaWYg KCEoaG1tX3BmbnNbMF0gJiBITU1fUEZOX01JR1JBVEUpKQorCQkJZm9yIChpID0gMDsgYWRkciA8 IGVuZDsgYWRkciArPSBQQUdFX1NJWkUsIGkrKykKKwkJCQlobW1fcGZuc1tpXSAmPSBITU1fUEZO X0lOT1VUX0ZMQUdTOworCisJCWlmIChobW1fdm1hX3dhbGstPnBtZGxvY2tlZCkgeworCQkJc3Bp bl91bmxvY2soaG1tX3ZtYV93YWxrLT5wdGwpOworCQkJaG1tX3ZtYV93YWxrLT5wbWRsb2NrZWQg PSBmYWxzZTsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCWlmIChwbWRfdHJhbnNfaHVnZShw bWQpIHx8ICFwbWRfcHJlc2VudChwbWQpKSB7CisKKwkJaWYgKCFwbWRfcHJlc2VudChwbWQpKSB7 CisJCQlyID0gaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZCh3YWxrLCBzdGFydCwgZW5kLCBobW1f cGZucywKKwkJCQkJCSAgICAgIHBtZCk7CisJCQkvLyBJZiBub3QgbWlncmF0aW5nIHdlIGFyZSBk b25lCisJCQlpZiAociB8fCAhbWluZm8pIHsKKwkJCQlpZiAoaG1tX3ZtYV93YWxrLT5wbWRsb2Nr ZWQpIHsKKwkJCQkJc3Bpbl91bmxvY2soaG1tX3ZtYV93YWxrLT5wdGwpOworCQkJCQlobW1fdm1h X3dhbGstPnBtZGxvY2tlZCA9IGZhbHNlOworCQkJCX0KKwkJCQlyZXR1cm4gcjsKKwkJCX0KKwkJ fQorCisJCWlmIChwbWRfdHJhbnNfaHVnZShwbWQpKSB7CisKKwkJCS8qCisJCQkgKiBObyBuZWVk IHRvIHRha2UgcG1kX2xvY2sgaGVyZSBpZiBub3QgbWlncmF0aW5nLAorCQkJICogZXZlbiBpZiBz b21lIG90aGVyIHRocmVhZCBpcyBzcGxpdHRpbmcgdGhlIGh1Z2UKKwkJCSAqIHBtZCB3ZSB3aWxs IGdldCB0aGF0IGV2ZW50IHRocm91Z2ggbW11X25vdGlmaWVyIGNhbGxiYWNrLgorCQkJICoKKwkJ CSAqIFNvIGp1c3QgcmVhZCBwbWQgdmFsdWUgYW5kIGNoZWNrIGFnYWluIGl0J3MgYSB0cmFuc3Bh cmVudAorCQkJICogaHVnZSBvciBkZXZpY2UgbWFwcGluZyBvbmUgYW5kIGNvbXB1dGUgY29ycmVz cG9uZGluZyBwZm4KKwkJCSAqIHZhbHVlcy4KKwkJCSAqLworCisJCQlpZiAoIW1pbmZvKSB7CisJ CQkJcG1kID0gcG1kcF9nZXRfbG9ja2xlc3MocG1kcCk7CisJCQkJaWYgKCFwbWRfdHJhbnNfaHVn ZShwbWQpKQorCQkJCQlnb3RvIGFnYWluOworCQkJfQorCisJCQlyID0gaG1tX3ZtYV9oYW5kbGVf cG1kKHdhbGssIGFkZHIsIGVuZCwgaG1tX3BmbnMsIHBtZCk7CisKKwkJCS8vIElmIG5vdCBtaWdy YXRpbmcgd2UgYXJlIGRvbmUKKwkJCWlmIChyIHx8ICFtaW5mbykgeworCQkJCWlmIChobW1fdm1h X3dhbGstPnBtZGxvY2tlZCkgeworCQkJCQlzcGluX3VubG9jayhobW1fdm1hX3dhbGstPnB0bCk7 CisJCQkJCWhtbV92bWFfd2Fsay0+cG1kbG9ja2VkID0gZmFsc2U7CisJCQkJfQorCQkJCXJldHVy biByOworCQkJfQorCQl9CisKKwkJciA9IGhtbV92bWFfaGFuZGxlX21pZ3JhdGVfcHJlcGFyZV9w bWQod2FsaywgcG1kcCwgc3RhcnQsIGVuZCwgaG1tX3BmbnMpOworCisJCWlmIChobW1fdm1hX3dh bGstPnBtZGxvY2tlZCkgeworCQkJc3Bpbl91bmxvY2soaG1tX3ZtYV93YWxrLT5wdGwpOworCQkJ aG1tX3ZtYV93YWxrLT5wbWRsb2NrZWQgPSBmYWxzZTsKKwkJfQorCisJCWlmIChyID09IC1FTk9F TlQpIHsKKwkJCXIgPSBobW1fdm1hX3dhbGtfc3BsaXQocG1kcCwgYWRkciwgd2Fsayk7CisJCQlp ZiAocikgeworCQkJCS8qIFNwbGl0IG5vdCBzdWNjZXNzZnVsLCBza2lwICovCisJCQkJcmV0dXJu IGhtbV9wZm5zX2ZpbGwoc3RhcnQsIGVuZCwgaG1tX3ZtYV93YWxrLCBITU1fUEZOX0VSUk9SKTsK KwkJCX0KKworCQkJLyogU3BsaXQgc3VjY2Vzc2Z1bCwgcmVsb29wICovCiAJCQlobW1fdm1hX3dh bGstPmxhc3QgPSBhZGRyOwotCQkJcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHdhbGstPm1tLCBw bWRwKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KLQkJcmV0dXJuIGhtbV9wZm5zX2ZpbGwoc3Rh cnQsIGVuZCwgcmFuZ2UsIDApOwotCX0KIAotCWlmICghcG1kX3ByZXNlbnQocG1kKSkKLQkJcmV0 dXJuIGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQod2Fsaywgc3RhcnQsIGVuZCwgaG1tX3BmbnMs Ci0JCQkJCQkgcG1kKTsKKwkJcmV0dXJuIHI7CiAKLQlpZiAocG1kX3RyYW5zX2h1Z2UocG1kKSkg ewotCQkvKgotCQkgKiBObyBuZWVkIHRvIHRha2UgcG1kX2xvY2sgaGVyZSwgZXZlbiBpZiBzb21l IG90aGVyIHRocmVhZAotCQkgKiBpcyBzcGxpdHRpbmcgdGhlIGh1Z2UgcG1kIHdlIHdpbGwgZ2V0 IHRoYXQgZXZlbnQgdGhyb3VnaAotCQkgKiBtbXVfbm90aWZpZXIgY2FsbGJhY2suCi0JCSAqCi0J CSAqIFNvIGp1c3QgcmVhZCBwbWQgdmFsdWUgYW5kIGNoZWNrIGFnYWluIGl0J3MgYSB0cmFuc3Bh cmVudAotCQkgKiBodWdlIG9yIGRldmljZSBtYXBwaW5nIG9uZSBhbmQgY29tcHV0ZSBjb3JyZXNw b25kaW5nIHBmbgotCQkgKiB2YWx1ZXMuCi0JCSAqLwotCQlwbWQgPSBwbWRwX2dldF9sb2NrbGVz cyhwbWRwKTsKLQkJaWYgKCFwbWRfdHJhbnNfaHVnZShwbWQpKQotCQkJZ290byBhZ2FpbjsKKwl9 CiAKLQkJcmV0dXJuIGhtbV92bWFfaGFuZGxlX3BtZCh3YWxrLCBhZGRyLCBlbmQsIGhtbV9wZm5z LCBwbWQpOworCWlmIChobW1fdm1hX3dhbGstPnBtZGxvY2tlZCkgeworCQlzcGluX3VubG9jayho bW1fdm1hX3dhbGstPnB0bCk7CisJCWhtbV92bWFfd2Fsay0+cG1kbG9ja2VkID0gZmFsc2U7CiAJ fQogCiAJLyoKQEAgLTQ1MSwyMiArNzEyLDQzIEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3Bt ZChwbWRfdCAqcG1kcCwKIAlpZiAocG1kX2JhZChwbWQpKSB7CiAJCWlmIChobW1fcmFuZ2VfbmVl ZF9mYXVsdChobW1fdm1hX3dhbGssIGhtbV9wZm5zLCBucGFnZXMsIDApKQogCQkJcmV0dXJuIC1F RkFVTFQ7Ci0JCXJldHVybiBobW1fcGZuc19maWxsKHN0YXJ0LCBlbmQsIHJhbmdlLCBITU1fUEZO X0VSUk9SKTsKKwkJcmV0dXJuIGhtbV9wZm5zX2ZpbGwoc3RhcnQsIGVuZCwgaG1tX3ZtYV93YWxr LCBITU1fUEZOX0VSUk9SKTsKIAl9CiAKLQlwdGVwID0gcHRlX29mZnNldF9tYXAocG1kcCwgYWRk cik7CisJaWYgKG1pbmZvKSB7CisJCXB0ZXAgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWRw LCBhZGRyLCAmaG1tX3ZtYV93YWxrLT5wdGwpOworCQlpZiAocHRlcCkKKwkJCWhtbV92bWFfd2Fs ay0+cHRlbG9ja2VkID0gdHJ1ZTsKKwl9IGVsc2UKKwkJcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKHBt ZHAsIGFkZHIpOwogCWlmICghcHRlcCkKIAkJZ290byBhZ2FpbjsKKwogCWZvciAoOyBhZGRyIDwg ZW5kOyBhZGRyICs9IFBBR0VfU0laRSwgcHRlcCsrLCBobW1fcGZucysrKSB7Ci0JCWludCByOwog CiAJCXIgPSBobW1fdm1hX2hhbmRsZV9wdGUod2FsaywgYWRkciwgZW5kLCBwbWRwLCBwdGVwLCBo bW1fcGZucyk7CiAJCWlmIChyKSB7Ci0JCQkvKiBobW1fdm1hX2hhbmRsZV9wdGUoKSBkaWQgcHRl X3VubWFwKCkgKi8KKwkJCS8qIGhtbV92bWFfaGFuZGxlX3B0ZSgpIGRpZCBwdGVfdW5tYXAoKSAv IHB0ZV91bm1hcF91bmxvY2sgKi8KIAkJCXJldHVybiByOwogCQl9CisKKwkJciA9IGhtbV92bWFf aGFuZGxlX21pZ3JhdGVfcHJlcGFyZSh3YWxrLCBwbWRwLCBwdGVwLCBhZGRyLCBobW1fcGZucyk7 CisJCWlmIChyID09IC1FQUdBSU4pIHsKKwkJCUhNTV9BU1NFUlRfVU5MT0NLRUQoaG1tX3ZtYV93 YWxrKTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwkJaWYgKHIpIHsKKwkJCWhtbV9wZm5zX2ZpbGwo YWRkciwgZW5kLCBobW1fdm1hX3dhbGssIEhNTV9QRk5fRVJST1IpOworCQkJYnJlYWs7CisJCX0K IAl9Ci0JcHRlX3VubWFwKHB0ZXAgLSAxKTsKKworCWlmIChobW1fdm1hX3dhbGstPnB0ZWxvY2tl ZCkgeworCQlwdGVfdW5tYXBfdW5sb2NrKHB0ZXAgLSAxLCBobW1fdm1hX3dhbGstPnB0bCk7CisJ CWhtbV92bWFfd2Fsay0+cHRlbG9ja2VkID0gZmFsc2U7CisJfSBlbHNlCisJCXB0ZV91bm1hcChw dGVwIC0gMSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjAwLDYgKzg4MiwxMSBAQCBzdGF0aWMg aW50IGhtbV92bWFfd2Fsa190ZXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcg ZW5kLAogCXN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsayA9IHdhbGstPnByaXZhdGU7 CiAJc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UgPSBobW1fdm1hX3dhbGstPnJhbmdlOwogCXN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay0+dm1hOworCWludCByOworCisJciA9IGhtbV92 bWFfY2FwdHVyZV9taWdyYXRlX3JhbmdlKHN0YXJ0LCBlbmQsIHdhbGspOworCWlmIChyKQorCQly ZXR1cm4gcjsKIAogCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApKSAm JgogCSAgICB2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkKQEAgLTYyMiw3ICs5MDksNyBAQCBzdGF0 aWMgaW50IGhtbV92bWFfd2Fsa190ZXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxv bmcgZW5kLAogCQkJCSAoZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQsIDApKQogCQlyZXR1cm4g LUVGQVVMVDsKIAotCWhtbV9wZm5zX2ZpbGwoc3RhcnQsIGVuZCwgcmFuZ2UsIEhNTV9QRk5fRVJS T1IpOworCWhtbV9wZm5zX2ZpbGwoc3RhcnQsIGVuZCwgaG1tX3ZtYV93YWxrLCBITU1fUEZOX0VS Uk9SKTsKIAogCS8qIFNraXAgdGhpcyB2bWEgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIG5l eHQgdm1hLiAqLwogCXJldHVybiAxOwpAQCAtNjUyLDkgKzkzOSwxNyBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IG1tX3dhbGtfb3BzIGhtbV93YWxrX29wcyA9IHsKICAqCQl0aGUgaW52YWxpZGF0aW9u IHRvIGZpbmlzaC4KICAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2 YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWQKICAqICAgICAgICAgICAgICBpZSBpdCBo YXMgbm8gYmFja2luZyBWTUEgb3IgaXQgaXMgaWxsZWdhbCB0byBhY2Nlc3MKKyAqIC1FUkFOR0U6 ICAgICBUaGUgcmFuZ2UgY3Jvc3NlcyBtdWx0aXBsZSBWTUFzLCBvciBzcGFjZSBmb3IgaG1tX3Bm bnMgYXJyYXkKKyAqICAgICAgICAgICAgICBpcyB0b28gbG93LgogICoKICAqIFRoaXMgaXMgc2lt aWxhciB0byBnZXRfdXNlcl9wYWdlcygpLCBleGNlcHQgdGhhdCBpdCBjYW4gcmVhZCB0aGUgcGFn ZSB0YWJsZXMKICAqIHdpdGhvdXQgbXV0YXRpbmcgdGhlbSAoaWUgY2F1c2luZyBmYXVsdHMpLgor ICoKKyAqIElmIHdhbnQgdG8gZG8gbWlncmF0ZSBhZnRlciBmYXVsdGluZywgY2FsbCBobW1fcmFu Z2VfZmF1bHQoKSB3aXRoCisgKiBITU1fUEZOX1JFUV9NSUdSQVRFIGFuZCBpbml0aWFsaXplIHJh bmdlLm1pZ3JhdGUgZmllbGQuCisgKiBBZnRlciBobW1fcmFuZ2VfZmF1bHQoKSBjYWxsIG1pZ3Jh dGVfaG1tX3JhbmdlX3NldHVwKCkgaW5zdGVhZCBvZgorICogbWlncmF0ZV92bWFfc2V0dXAoKSBh bmQgYWZ0ZXIgdGhhdCBmb2xsb3cgbm9ybWFsIG1pZ3JhdGUgY2FsbHMgcGF0aC4KKyAqCiAgKi8K IGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCiB7CkBAIC02NjIs MTYgKzk1NywzNCBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdl KQogCQkucmFuZ2UgPSByYW5nZSwKIAkJLmxhc3QgPSByYW5nZS0+c3RhcnQsCiAJfTsKLQlzdHJ1 Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLT5ub3RpZmllci0+bW07CisJc3RydWN0IG1tX3N0cnVj dCAqbW07CisJYm9vbCBpc19mYXVsdF9wYXRoOwogCWludCByZXQ7CiAKKwkvKgorCSAqCisJICog IENvdWxkIGJlIHNlcnZpbmcgYSBkZXZpY2UgZmF1bHQgb3IgY29tZSBmcm9tIG1pZ3JhdGUKKwkg KiAgZW50cnkgcG9pbnQuIEZvciB0aGUgZm9ybWVyIHdlIGhhdmUgbm90IHJlc29sdmVkIHRoZSB2 bWEKKwkgKiAgeWV0LCBhbmQgdGhlIGxhdHRlciB3ZSBkb24ndCBoYXZlIGEgbm90aWZpZXIgKGJ1 dCBoYXZlIGEgdm1hKS4KKwkgKgorCSAqLworI2lmZGVmIENPTkZJR19ERVZJQ0VfTUlHUkFUSU9O CisJaXNfZmF1bHRfcGF0aCA9ICEhcmFuZ2UtPm5vdGlmaWVyOworCW1tID0gaXNfZmF1bHRfcGF0 aCA/IHJhbmdlLT5ub3RpZmllci0+bW0gOiByYW5nZS0+bWlncmF0ZS0+dm1hLT52bV9tbTsKKyNl bHNlCisJaXNfZmF1bHRfcGF0aCA9IHRydWU7CisJbW0gPSByYW5nZS0+bm90aWZpZXItPm1tOwor I2VuZGlmCiAJbW1hcF9hc3NlcnRfbG9ja2VkKG1tKTsKIAogCWRvIHsKIAkJLyogSWYgcmFuZ2Ug aXMgbm8gbG9uZ2VyIHZhbGlkIGZvcmNlIHJldHJ5LiAqLwotCQlpZiAobW11X2ludGVydmFsX2No ZWNrX3JldHJ5KHJhbmdlLT5ub3RpZmllciwKLQkJCQkJICAgICByYW5nZS0+bm90aWZpZXJfc2Vx KSkKLQkJCXJldHVybiAtRUJVU1k7CisJCWlmIChpc19mYXVsdF9wYXRoICYmIG1tdV9pbnRlcnZh bF9jaGVja19yZXRyeShyYW5nZS0+bm90aWZpZXIsCisJCQkJCSAgICAgcmFuZ2UtPm5vdGlmaWVy X3NlcSkpIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWJyZWFrOworCQl9CisKIAkJcmV0ID0gd2Fs a19wYWdlX3JhbmdlKG1tLCBobW1fdm1hX3dhbGsubGFzdCwgcmFuZ2UtPmVuZCwKIAkJCQkgICAg ICAmaG1tX3dhbGtfb3BzLCAmaG1tX3ZtYV93YWxrKTsKIAkJLyoKQEAgLTY4MSw2ICs5OTQsMTkg QEAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSkKIAkJICogb3V0 cHV0LCBhbmQgYWxsID49IGFyZSBzdGlsbCBhdCB0aGVpciBpbnB1dCB2YWx1ZXMuCiAJCSAqLwog CX0gd2hpbGUgKHJldCA9PSAtRUJVU1kpOworCisjaWZkZWYgQ09ORklHX0RFVklDRV9NSUdSQVRJ T04KKwlpZiAoaG1tX3NlbGVjdF9taWdyYXRlKHJhbmdlKSAmJiByYW5nZS0+bWlncmF0ZSAmJgor CSAgICBobW1fdm1hX3dhbGsubW11X3JhbmdlLm93bmVyKSB7CisJCS8vIFRoZSBtaWdyYXRlX3Zt YSBwYXRoIGhhcyB0aGUgZm9sbG93aW5nIGluaXRpYWxpemVkCisJCWlmIChpc19mYXVsdF9wYXRo KSB7CisJCQlyYW5nZS0+bWlncmF0ZS0+dm1hICAgPSBobW1fdm1hX3dhbGsudm1hOworCQkJcmFu Z2UtPm1pZ3JhdGUtPnN0YXJ0ID0gcmFuZ2UtPnN0YXJ0OworCQkJcmFuZ2UtPm1pZ3JhdGUtPmVu ZCAgID0gaG1tX3ZtYV93YWxrLmVuZDsKKwkJfQorCQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9y YW5nZV9lbmQoJmhtbV92bWFfd2Fsay5tbXVfcmFuZ2UpOworCX0KKyNlbmRpZgogCXJldHVybiBy ZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7Ci0tIAoyLjUwLjAKCg==