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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 822A2C3DA4A for ; Sat, 3 Aug 2024 22:08:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 146BE6B007B; Sat, 3 Aug 2024 18:08:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0CFE06B0092; Sat, 3 Aug 2024 18:08:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E8B476B0093; Sat, 3 Aug 2024 18:08:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id C43AA6B008C for ; Sat, 3 Aug 2024 18:08:36 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 40AD7120DF1 for ; Sat, 3 Aug 2024 22:08:36 +0000 (UTC) X-FDA: 82412324232.18.6401FDE Received: from mail-qt1-f173.google.com (mail-qt1-f173.google.com [209.85.160.173]) by imf26.hostedemail.com (Postfix) with ESMTP id 71A7B14000D for ; Sat, 3 Aug 2024 22:08:34 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=vd6vkVIT; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf26.hostedemail.com: domain of yuzhao@google.com designates 209.85.160.173 as permitted sender) smtp.mailfrom=yuzhao@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1722722908; a=rsa-sha256; cv=none; b=D+pWoEaGAnwwEsdz+UOz1wWaijnRrL9HhWTx/bDRFT4n8QVKxVj2GiMs7oUJsowHUGG7VD eZPdJmT58F1TAStQi0m1kgYnx3X2sOLT2ST8F2wuQWvGEQA7kmcYUvcJNwBT1tQU3Mooyl xx55KDDGMFUXBSnImSFiXsX5SeoSdi4= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=vd6vkVIT; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf26.hostedemail.com: domain of yuzhao@google.com designates 209.85.160.173 as permitted sender) smtp.mailfrom=yuzhao@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1722722908; h=from:from:sender: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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=AcG9R5TcjS5TwvHVKHjptBtb3JkFxK0WZs1tvX2/pwk=; b=ehzPAun4L0x5I8pW9nixVPwF8dkoNb4BONT8vCHNFbum/mlhJQn818UdCNn3lWAaNV21bg mKAisLZN7V2BXNZUkdsrGNfY7BGTpM44fJqgSuaXmAGqqS6NsbiLvIMiW54Ie/2+lwG6lH WBrGGvAJ7FkP5v1KuKohoTvTdVSwa4s= Received: by mail-qt1-f173.google.com with SMTP id d75a77b69052e-44fdc70e695so1745811cf.0 for ; Sat, 03 Aug 2024 15:08:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1722722913; x=1723327713; darn=kvack.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=AcG9R5TcjS5TwvHVKHjptBtb3JkFxK0WZs1tvX2/pwk=; b=vd6vkVITKoHvm5doVfLAtHwYGHxmDgY4++ABhr6Bq6YzyNhC1XZ1SdfkJuR1dldUyw CXxoF7/7mdO6BbixyVKekrUMY6+BmaNz4IQ+wlTVACKm+sEdmnxlpEhlRIzR2OYy+Zg8 cfxjbQ44brXg6+oSD4yAMdkaDxHC3P+d/hxXuDJF93N4yjBTC6Rtai6KNDXTjEYvfN6G bUjup6D8apT3v6Ww46JPuIhiwOV5ADvOo5Kh3hp/jR8qZGgxzqGsHoj3fWsBVKCqavLl ntBoTFQZticI5kguFRPUQTlzWEkAoomtlkJ+2wK1uQl8osvr6mcZXt/qn8OtBLx9vzZn wPrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722722913; x=1723327713; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=AcG9R5TcjS5TwvHVKHjptBtb3JkFxK0WZs1tvX2/pwk=; b=MWFK6yjWfmGHIlhhaZUfvZ4E/zmHwF9MslhJbCC4xvjt4w2xwUeRUSb1MLVQyY8m04 RmXh36zdmrvar/Aa8wNCYyFRjcV7hLJA6r2nxJirhzFdgBKvMyspgM0T1bMWUamu4Hah 2/zxVkD3SX1zQhZz/zD9dx3fQ5v+J5XTaWUCF1iZMFLWUt62SyIAdoVAHTqgBYzp2kdj p2cD4zJXy4YTPOnNcFPt/L6CHGJHPxNREvs5zK8CwSBMv7goxXRZKohNAhv+L78cKdio 9HuqdkazA7sRHSXnISoz5z9DGzyhxbhOAbOu3Q/3hxBCrG4NrP1bJj3TSNAuPb6Y9WFG 15CQ== X-Forwarded-Encrypted: i=1; AJvYcCWxvzr/dYQKH1E6vFArLmUZNzY/OLWMr6iJqG8Yw44wozzowbWXkqotyN7ZI9+BazKQ53XsfYUTDdw/rpaNIqu9z54= X-Gm-Message-State: AOJu0YwMt7eJJpXNvsVEavDMI2uXZYEC079rKTdtKbCwZuXk2E/Ar9Rs yrmxuG/hOvq1PWUQep/dGjT38EutBhIghtjKFQVGtEMU5rn3Q/v6HmFXfQe8+RTxN2gGYwl5eaD qBuPFiG9GUnfm+laPMKLU+9fHzqhE1Na8qdUE X-Google-Smtp-Source: AGHT+IFniaNlBGJmmyRoe6xBfRx5IQvtChJwPaX/RLAfDR+aLxZeQqjUvf4d6lwqtCF8Q9LpBIAP4qB+PzFiorJiMRM= X-Received: by 2002:a05:622a:28b:b0:447:d225:6e3a with SMTP id d75a77b69052e-4519acfa0ffmr1792061cf.4.1722722913265; Sat, 03 Aug 2024 15:08:33 -0700 (PDT) MIME-Version: 1.0 References: <202407091001.1250ad4a-oliver.sang@intel.com> <3acefad9-96e5-4681-8014-827d6be71c7a@linux.ibm.com> In-Reply-To: From: Yu Zhao Date: Sat, 3 Aug 2024 16:07:55 -0600 Message-ID: Subject: Re: [linux-next:master] [mm/hugetlb_vmemmap] 875fa64577: vm-scalability.throughput -34.3% regression To: Oliver Sang , Muchun Song Cc: Janosch Frank , oe-lkp@lists.linux.dev, lkp@intel.com, Linux Memory Management List , Andrew Morton , David Hildenbrand , Frank van der Linden , Matthew Wilcox , Peter Xu , Yang Shi , linux-kernel@vger.kernel.org, ying.huang@intel.com, feng.tang@intel.com, fengwei.yin@intel.com, Christian Borntraeger , Claudio Imbrenda , Marc Hartmayer , Heiko Carstens , Yosry Ahmed Content-Type: multipart/mixed; boundary="0000000000004b6831061eceafad" X-Rspam-User: X-Rspamd-Queue-Id: 71A7B14000D X-Rspamd-Server: rspam01 X-Stat-Signature: dg5f8jyhwxqyzf3ju38dnw4krf3saheu X-HE-Tag: 1722722914-21995 X-HE-Meta: U2FsdGVkX1/0OkGhoBzUZU4N6sOofc/JGW+Dc0Yz6EfXdGa/euFgJI97bZapbDmaIRf14pshkWflp3K+99CzxB7EWZ+IAWkCPU9Q74kioxzikovvAlnwZY8BuFb3cfviAYoR7XICA8Wc9su9mCRgJ46VwfrXrOALjjogdfxQNUzzvWu4ejrQVYFVc93vWdMt01tVBRk8GKNJzBES0p2K/xVb3il/repQI4BHRc/J5kGFLjoSA86qjz6+P4lKZFYLmDqAHZIPJnsuYSPkqxhn/fddWyuHleEm0XBveEaEVGkVUn+ft1TFgDVadqL/AfZ8c7VVTN3tJYw5QLtAb0ZHbZZWWuUfen24Fg1lSiEtF1AnU12zaX75NOl+AQrLxERA86ix48UL8i81Ack6bB97wR/goAKjoCo5Qg8uR88oZHxSBRyhHdkkIj2MWmR3A/oAMPY8Dg9ejr1KvvbjNwRgB3gvXAhUAgmsKswr6jY7F/6TbVk7BDZucyFyODgukz7fRVoQ3708KJhFsxomTmGwcuowltWfHYNSWwwSlKD1ZwWzyYr8nSvzntmRTog6I1fQHGHUmOflqp/u9bnfmMGLEsp1m/OALkOqX4kuCnxp3xhPELBR28UR1bevNrnGocuJjUiiblo1vAKo1PlqbTbtrIjjgRxWW+xnWqj5/QVd09urPCDI5ZZFiNORT9kX9nhIB0Jxt/N4YrBVdLy5O2j1+rGklPz6463Ts0+isSq5POnSD1V/C3gGI72QzDX66RHSzoHv/zsBceIVrw0QRnAwyhqnaG81rqPA9dTJoKgVV2DyJWhQaJY2S2HZ7lChKYDty2nvAWXqyZi7BgxAVAbRbT9jmRFvWiqmrBErgw/TD+VTSlsosHY7jjzVdMeqiAcfls9AK9xRLB3y5ug78qlO+UqGaPQgdr18DeNIPjYiIb4kZ0+rjgtmZv9OPXtMuW4QHVkCzokd2gazQF6DUGO xTr8h7WU +wuZS6DORe8spgVlt2RTpcMTKEm/fB4wGkozKJ3llgQE7DeRLce70nzwnETvAwQOIRtMJdKIccph8eQ6DaYAfyDYThIrtCWg6vAqMNdSQoNhK/BrXaonpxyeQU25DickpYY7PviBwN9WfHB8T0VcypbNBv5/FUk9RGWgivq9boURwr0cw4Aui0zQZAcx5gC/3bwrxD1vAPevGLmk0/HbzV55CWEGneHXEHxI0R21mOC/MRQFbrOr8n2CiRPYagOL8nC5lwtgDvs8BSrh/dr7NQgH2f9GjTKvYFgsNqousTsRI5djysL34IYjrJr7tM+AaHXOnFoDgwdBnSyAKraAUTjlzilDZtFJ2Ca88VdwXHvbnIRxrAlWZBBrR/ntdJ+GfHGmeQKwwaN07+ZDZoe0sjOCnK2ezV3nrAY4ecGHMFR94sb0ZPAGOWDb83D6K+r5OdZWU X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: --0000000000004b6831061eceafad Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Oliver, On Fri, Jul 19, 2024 at 10:06=E2=80=AFAM Yu Zhao wrote: > > On Fri, Jul 19, 2024 at 2:44=E2=80=AFAM Oliver Sang wrote: > > > > hi, Yu Zhao, > > > > On Wed, Jul 17, 2024 at 09:44:33AM -0600, Yu Zhao wrote: > > > On Wed, Jul 17, 2024 at 2:36=E2=80=AFAM Yu Zhao w= rote: > > > > > > > > Hi Janosch and Oliver, > > > > > > > > On Wed, Jul 17, 2024 at 1:57=E2=80=AFAM Janosch Frank wrote: > > > > > > > > > > On 7/9/24 07:11, kernel test robot wrote: > > > > > > Hello, > > > > > > > > > > > > kernel test robot noticed a -34.3% regression of vm-scalability= .throughput on: > > > > > > > > > > > > > > > > > > commit: 875fa64577da9bc8e9963ee14fef8433f20653e7 ("mm/hugetlb_v= memmap: fix race with speculative PFN walkers") > > > > > > https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.gi= t master > > > > > > > > > > > > [still regression on linux-next/master 0b58e108042b0ed28a71cd7e= df5175999955b233] > > > > > > > > > > > This has hit s390 huge page backed KVM guests as well. > > > > > Our simple start/stop test case went from ~5 to over 50 seconds o= f runtime. > > > > > > > > Could you try the attached patch please? Thank you. > > > > > > Thanks, Yosry, for spotting the following typo: > > > flags &=3D VMEMMAP_SYNCHRONIZE_RCU; > > > It's supposed to be: > > > flags &=3D ~VMEMMAP_SYNCHRONIZE_RCU; > > > > > > Reattaching v2 with the above typo fixed. Please let me know, Janosch= & Oliver. > > > > since the commit is in mainline now, I directly apply your v2 patch upo= n > > bd225530a4c71 ("mm/hugetlb_vmemmap: fix race with speculative PFN walke= rs") > > > > in our tests, your v2 patch not only recovers the performance regressio= n, > > Thanks for verifying the fix! > > > it even has +13.7% performance improvement than 5a4d8944d6b1e (parent o= f > > bd225530a4c71) > > Glad to hear! > > (The original patch improved and regressed the performance at the same > time, but the regression is bigger. The fix removed the regression and > surfaced the improvement.) Can you please run the benchmark again with the attached patch on top of the last fix? I spotted something else worth optimizing last time, and with the patch attached, I was able to measure some significant improvements in 1GB hugeTLB allocation and free time, e.g., when allocating and free 700 1GB hugeTLB pages: Before: # time echo 700 >/sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepage= s real 0m13.500s user 0m0.000s sys 0m13.311s # time echo 0 >/sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages real 0m11.269s user 0m0.000s sys 0m11.187s After: # time echo 700 >/sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepage= s real 0m10.643s user 0m0.001s sys 0m10.487s # time echo 0 >/sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages real 0m1.541s user 0m0.000s sys 0m1.528s Thanks! --0000000000004b6831061eceafad Content-Type: application/octet-stream; name="hugetlb.patch" Content-Disposition: attachment; filename="hugetlb.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lzeopjia0 ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY21hLmggYi9pbmNsdWRlL2xpbnV4L2NtYS5oCmlu ZGV4IDlkYjg3NzUwNmVhOC4uM2Q1OGNlMWE4NzMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4 L2NtYS5oCisrKyBiL2luY2x1ZGUvbGludXgvY21hLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgZXh0ZXJu IGludCBjbWFfaW5pdF9yZXNlcnZlZF9tZW0ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qg c2l6ZSwKIAkJCQkJc3RydWN0IGNtYSAqKnJlc19jbWEpOwogZXh0ZXJuIHN0cnVjdCBwYWdlICpj bWFfYWxsb2Moc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBp bnQgYWxpZ24sCiAJCQkgICAgICBib29sIG5vX3dhcm4pOworZXh0ZXJuIHN0cnVjdCBmb2xpbyAq Y21hX2FsbG9jX2ZvbGlvKHN0cnVjdCBjbWEgKmNtYSwgaW50IG9yZGVyKTsKIGV4dGVybiBib29s IGNtYV9wYWdlc192YWxpZChzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdl cywgdW5zaWduZWQgbG9uZyBjb3VudCk7CiBleHRlcm4gYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3Qg Y21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudCk7 CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9o dWdldGxiLmgKaW5kZXggYzliZjY4YzIzOWEwLi42MzBhYjRmNWY3OGQgMTAwNjQ0Ci0tLSBhL2lu Y2x1ZGUvbGludXgvaHVnZXRsYi5oCisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC05 MDAsOSArOTAwLDkgQEAgc3RhdGljIGlubGluZSBib29sIGh1Z2VwYWdlX21vdmFibGVfc3VwcG9y dGVkKHN0cnVjdCBoc3RhdGUgKmgpCiBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfYWxsb2NfbWFz ayhzdHJ1Y3QgaHN0YXRlICpoKQogewogCWlmIChodWdlcGFnZV9tb3ZhYmxlX3N1cHBvcnRlZCho KSkKLQkJcmV0dXJuIEdGUF9ISUdIVVNFUl9NT1ZBQkxFOworCQlyZXR1cm4gR0ZQX0hJR0hVU0VS X01PVkFCTEUgfCBfX0dGUF9DT01QOwogCWVsc2UKLQkJcmV0dXJuIEdGUF9ISUdIVVNFUjsKKwkJ cmV0dXJuIEdGUF9ISUdIVVNFUiB8IF9fR0ZQX0NPTVA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZ2Zw X3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFz aykKZGlmZiAtLWdpdCBhL21tL2NtYS5jIGIvbW0vY21hLmMKaW5kZXggM2U5NzI0NzE2YmFkLi4z OWI2Yjk5YzZhZjEgMTAwNjQ0Ci0tLSBhL21tL2NtYS5jCisrKyBiL21tL2NtYS5jCkBAIC00MDMs MTggKzQwMyw4IEBAIHN0YXRpYyB2b2lkIGNtYV9kZWJ1Z19zaG93X2FyZWFzKHN0cnVjdCBjbWEg KmNtYSkKIAlzcGluX3VubG9ja19pcnEoJmNtYS0+bG9jayk7CiB9CiAKLS8qKgotICogY21hX2Fs bG9jKCkgLSBhbGxvY2F0ZSBwYWdlcyBmcm9tIGNvbnRpZ3VvdXMgYXJlYQotICogQGNtYTogICBD b250aWd1b3VzIG1lbW9yeSByZWdpb24gZm9yIHdoaWNoIHRoZSBhbGxvY2F0aW9uIGlzIHBlcmZv cm1lZC4KLSAqIEBjb3VudDogUmVxdWVzdGVkIG51bWJlciBvZiBwYWdlcy4KLSAqIEBhbGlnbjog UmVxdWVzdGVkIGFsaWdubWVudCBvZiBwYWdlcyAoaW4gUEFHRV9TSVpFIG9yZGVyKS4KLSAqIEBu b193YXJuOiBBdm9pZCBwcmludGluZyBtZXNzYWdlIGFib3V0IGZhaWxlZCBhbGxvY2F0aW9uCi0g KgotICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgcGFydCBvZiBjb250aWd1b3VzIG1lbW9yeSBv biBzcGVjaWZpYwotICogY29udGlndW91cyBtZW1vcnkgYXJlYS4KLSAqLwotc3RydWN0IHBhZ2Ug KmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsCi0JCSAgICAg ICB1bnNpZ25lZCBpbnQgYWxpZ24sIGJvb2wgbm9fd2FybikKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAq X19jbWFfYWxsb2Moc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIGNvdW50LAorCQkJCXVu c2lnbmVkIGludCBhbGlnbiwgZ2ZwX3QgZ2ZwKQogewogCXVuc2lnbmVkIGxvbmcgbWFzaywgb2Zm c2V0OwogCXVuc2lnbmVkIGxvbmcgcGZuID0gLTE7CkBAIC00NjMsOCArNDUzLDcgQEAgc3RydWN0 IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsCiAK IAkJcGZuID0gY21hLT5iYXNlX3BmbiArIChiaXRtYXBfbm8gPDwgY21hLT5vcmRlcl9wZXJfYml0 KTsKIAkJbXV0ZXhfbG9jaygmY21hX211dGV4KTsKLQkJcmV0ID0gYWxsb2NfY29udGlnX3Jhbmdl KHBmbiwgcGZuICsgY291bnQsIE1JR1JBVEVfQ01BLAotCQkJCSAgICAgR0ZQX0tFUk5FTCB8IChu b193YXJuID8gX19HRlBfTk9XQVJOIDogMCkpOworCQlyZXQgPSBhbGxvY19jb250aWdfcmFuZ2Uo cGZuLCBwZm4gKyBjb3VudCwgTUlHUkFURV9DTUEsIGdmcCk7CiAJCW11dGV4X3VubG9jaygmY21h X211dGV4KTsKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsK QEAgLTQ5NCw3ICs0ODMsNyBAQCBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jKHN0cnVjdCBjbWEgKmNt YSwgdW5zaWduZWQgbG9uZyBjb3VudCwKIAkJCXBhZ2Vfa2FzYW5fdGFnX3Jlc2V0KG50aF9wYWdl KHBhZ2UsIGkpKTsKIAl9CiAKLQlpZiAocmV0ICYmICFub193YXJuKSB7CisJaWYgKHJldCAmJiAh KGdmcCAmIF9fR0ZQX05PV0FSTikpIHsKIAkJcHJfZXJyX3JhdGVsaW1pdGVkKCIlczogJXM6IGFs bG9jIGZhaWxlZCwgcmVxLXNpemU6ICVsdSBwYWdlcywgcmV0OiAlZFxuIiwKIAkJCQkgICBfX2Z1 bmNfXywgY21hLT5uYW1lLCBjb3VudCwgcmV0KTsKIAkJY21hX2RlYnVnX3Nob3dfYXJlYXMoY21h KTsKQEAgLTUxMyw2ICs1MDIsMzEgQEAgc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21h ICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsCiAJcmV0dXJuIHBhZ2U7CiB9CiAKKy8qKgorICog Y21hX2FsbG9jKCkgLSBhbGxvY2F0ZSBwYWdlcyBmcm9tIGNvbnRpZ3VvdXMgYXJlYQorICogQGNt YTogICBDb250aWd1b3VzIG1lbW9yeSByZWdpb24gZm9yIHdoaWNoIHRoZSBhbGxvY2F0aW9uIGlz IHBlcmZvcm1lZC4KKyAqIEBjb3VudDogUmVxdWVzdGVkIG51bWJlciBvZiBwYWdlcy4KKyAqIEBh bGlnbjogUmVxdWVzdGVkIGFsaWdubWVudCBvZiBwYWdlcyAoaW4gUEFHRV9TSVpFIG9yZGVyKS4K KyAqIEBub193YXJuOiBBdm9pZCBwcmludGluZyBtZXNzYWdlIGFib3V0IGZhaWxlZCBhbGxvY2F0 aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgcGFydCBvZiBjb250aWd1b3VzIG1l bW9yeSBvbiBzcGVjaWZpYworICogY29udGlndW91cyBtZW1vcnkgYXJlYS4KKyAqLworc3RydWN0 IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsCisJ CSAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ24sIGJvb2wgbm9fd2FybikKK3sKKwlyZXR1cm4gX19j bWFfYWxsb2MoY21hLCBjb3VudCwgYWxpZ24sIEdGUF9LRVJORUwgfCAobm9fd2FybiA/IF9fR0ZQ X05PV0FSTiA6IDApKTsKK30KKworc3RydWN0IGZvbGlvICpjbWFfYWxsb2NfZm9saW8oc3RydWN0 IGNtYSAqY21hLCBpbnQgb3JkZXIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlwYWdlID0g X19jbWFfYWxsb2MoY21hLCAxIDw8IG9yZGVyLCBvcmRlciwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0NP TVApOworCisJcmV0dXJuIHBhZ2UgPyBwYWdlX2ZvbGlvKHBhZ2UpIDogTlVMTDsKK30KKwogYm9v bCBjbWFfcGFnZXNfdmFsaWQoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFn ZXMsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKZGlmZiAtLWdpdCBhL21tL2NvbXBh Y3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uYwppbmRleCBlYjk1ZTliNDM1ZDAuLjAwZmI1NzE3Mjdk MyAxMDA2NDQKLS0tIGEvbW0vY29tcGFjdGlvbi5jCisrKyBiL21tL2NvbXBhY3Rpb24uYwpAQCAt ODYsMzMgKzg2LDYgQEAgc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yo c3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwKIH0KICNkZWZpbmUgbWFya19h bGxvY2F0ZWQoLi4uKQlhbGxvY19ob29rcyhtYXJrX2FsbG9jYXRlZF9ub3Byb2YoX19WQV9BUkdT X18pKQogCi1zdGF0aWMgdm9pZCBzcGxpdF9tYXBfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJl ZXBhZ2VzKQotewotCXVuc2lnbmVkIGludCBpLCBvcmRlcjsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSwg Km5leHQ7Ci0JTElTVF9IRUFEKHRtcF9saXN0KTsKLQotCWZvciAob3JkZXIgPSAwOyBvcmRlciA8 IE5SX1BBR0VfT1JERVJTOyBvcmRlcisrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShw YWdlLCBuZXh0LCAmZnJlZXBhZ2VzW29yZGVyXSwgbHJ1KSB7Ci0JCQl1bnNpZ25lZCBpbnQgbnJf cGFnZXM7Ci0KLQkJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCi0JCQlucl9wYWdlcyA9IDEgPDwg b3JkZXI7Ci0KLQkJCW1hcmtfYWxsb2NhdGVkKHBhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFKTsK LQkJCWlmIChvcmRlcikKLQkJCQlzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTsKLQotCQkJZm9yIChp ID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKLQkJCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmdG1w X2xpc3QpOwotCQkJCXBhZ2UrKzsKLQkJCX0KLQkJfQotCQlsaXN0X3NwbGljZV9pbml0KCZ0bXBf bGlzdCwgJmZyZWVwYWdlc1swXSk7Ci0JfQotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyByZWxl YXNlX2ZyZWVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlcGFnZXMpCiB7CiAJaW50IG9yZGVy OwpAQCAtNzU0LDEwICs3MjcsOSBAQCBpc29sYXRlX2ZyZWVwYWdlc19yYW5nZShzdHJ1Y3QgY29t cGFjdF9jb250cm9sICpjYywKIHsKIAl1bnNpZ25lZCBsb25nIGlzb2xhdGVkLCBwZm4sIGJsb2Nr X3N0YXJ0X3BmbiwgYmxvY2tfZW5kX3BmbjsKIAlpbnQgb3JkZXI7Ci0Jc3RydWN0IGxpc3RfaGVh ZCB0bXBfZnJlZXBhZ2VzW05SX1BBR0VfT1JERVJTXTsKIAogCWZvciAob3JkZXIgPSAwOyBvcmRl ciA8IE5SX1BBR0VfT1JERVJTOyBvcmRlcisrKQotCQlJTklUX0xJU1RfSEVBRCgmdG1wX2ZyZWVw YWdlc1tvcmRlcl0pOworCQlJTklUX0xJU1RfSEVBRCgmY2MtPmZyZWVwYWdlc1tvcmRlcl0pOwog CiAJcGZuID0gc3RhcnRfcGZuOwogCWJsb2NrX3N0YXJ0X3BmbiA9IHBhZ2VibG9ja19zdGFydF9w Zm4ocGZuKTsKQEAgLTc4OCw3ICs3NjAsNyBAQCBpc29sYXRlX2ZyZWVwYWdlc19yYW5nZShzdHJ1 Y3QgY29tcGFjdF9jb250cm9sICpjYywKIAkJCWJyZWFrOwogCiAJCWlzb2xhdGVkID0gaXNvbGF0 ZV9mcmVlcGFnZXNfYmxvY2soY2MsICZpc29sYXRlX3N0YXJ0X3BmbiwKLQkJCQkJYmxvY2tfZW5k X3BmbiwgdG1wX2ZyZWVwYWdlcywgMCwgdHJ1ZSk7CisJCQkJCWJsb2NrX2VuZF9wZm4sIGNjLT5m cmVlcGFnZXMsIDAsIHRydWUpOwogCiAJCS8qCiAJCSAqIEluIHN0cmljdCBtb2RlLCBpc29sYXRl X2ZyZWVwYWdlc19ibG9jaygpIHJldHVybnMgMCBpZgpAQCAtODA3LDEzICs3NzksMTAgQEAgaXNv bGF0ZV9mcmVlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsCiAKIAlpZiAo cGZuIDwgZW5kX3BmbikgewogCQkvKiBMb29wIHRlcm1pbmF0ZWQgZWFybHksIGNsZWFudXAuICov Ci0JCXJlbGVhc2VfZnJlZV9saXN0KHRtcF9mcmVlcGFnZXMpOworCQlyZWxlYXNlX2ZyZWVfbGlz dChjYy0+ZnJlZXBhZ2VzKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogX19pc29sYXRlX2ZyZWVf cGFnZSgpIGRvZXMgbm90IG1hcCB0aGUgcGFnZXMgKi8KLQlzcGxpdF9tYXBfcGFnZXModG1wX2Zy ZWVwYWdlcyk7Ci0KIAkvKiBXZSBkb24ndCB1c2UgZnJlZWxpc3RzIGZvciBhbnl0aGluZy4gKi8K IAlyZXR1cm4gcGZuOwogfQpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5j CmluZGV4IGFhZjUwOGJlMGEyYi4uMjA2MWQwOTRjZDE5IDEwMDY0NAotLS0gYS9tbS9odWdldGxi LmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0xNTEyLDQzICsxNTEyLDcgQEAgc3RhdGljIGludCBo c3RhdGVfbmV4dF9ub2RlX3RvX2ZyZWUoc3RydWN0IGhzdGF0ZSAqaCwgbm9kZW1hc2tfdCAqbm9k ZXNfYWxsb3dlZCkKIAkJKChub2RlID0gaHN0YXRlX25leHRfbm9kZV90b19mcmVlKGhzLCBtYXNr KSkgfHwgMSk7CVwKIAkJbnJfbm9kZXMtLSkKIAotLyogdXNlZCB0byBkZW1vdGUgbm9uLWdpZ2Fu dGljX2h1Z2UgcGFnZXMgYXMgd2VsbCAqLwotc3RhdGljIHZvaWQgX19kZXN0cm95X2NvbXBvdW5k X2dpZ2FudGljX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCi0JCQkJCXVuc2lnbmVkIGludCBv cmRlciwgYm9vbCBkZW1vdGUpCi17Ci0JaW50IGk7Ci0JaW50IG5yX3BhZ2VzID0gMSA8PCBvcmRl cjsKLQlzdHJ1Y3QgcGFnZSAqcDsKLQotCWF0b21pY19zZXQoJmZvbGlvLT5fZW50aXJlX21hcGNv dW50LCAwKTsKLQlhdG9taWNfc2V0KCZmb2xpby0+X2xhcmdlX21hcGNvdW50LCAwKTsKLQlhdG9t aWNfc2V0KCZmb2xpby0+X3BpbmNvdW50LCAwKTsKLQotCWZvciAoaSA9IDE7IGkgPCBucl9wYWdl czsgaSsrKSB7Ci0JCXAgPSBmb2xpb19wYWdlKGZvbGlvLCBpKTsKLQkJcC0+ZmxhZ3MgJj0gflBB R0VfRkxBR1NfQ0hFQ0tfQVRfRlJFRTsKLQkJcC0+bWFwcGluZyA9IE5VTEw7Ci0JCWNsZWFyX2Nv bXBvdW5kX2hlYWQocCk7Ci0JCWlmICghZGVtb3RlKQotCQkJc2V0X3BhZ2VfcmVmY291bnRlZChw KTsKLQl9Ci0KLQlfX2ZvbGlvX2NsZWFyX2hlYWQoZm9saW8pOwotfQotCi1zdGF0aWMgdm9pZCBk ZXN0cm95X2NvbXBvdW5kX2h1Z2V0bGJfZm9saW9fZm9yX2RlbW90ZShzdHJ1Y3QgZm9saW8gKmZv bGlvLAotCQkJCQl1bnNpZ25lZCBpbnQgb3JkZXIpCi17Ci0JX19kZXN0cm95X2NvbXBvdW5kX2dp Z2FudGljX2ZvbGlvKGZvbGlvLCBvcmRlciwgdHJ1ZSk7Ci19Ci0KICNpZmRlZiBDT05GSUdfQVJD SF9IQVNfR0lHQU5USUNfUEFHRQotc3RhdGljIHZvaWQgZGVzdHJveV9jb21wb3VuZF9naWdhbnRp Y19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJCQl1bnNpZ25lZCBpbnQgb3JkZXIpCi17 Ci0JX19kZXN0cm95X2NvbXBvdW5kX2dpZ2FudGljX2ZvbGlvKGZvbGlvLCBvcmRlciwgZmFsc2Up OwotfQotCiBzdGF0aWMgdm9pZCBmcmVlX2dpZ2FudGljX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9s aW8sIHVuc2lnbmVkIGludCBvcmRlcikKIHsKIAkvKgpAQCAtMTU2OSwzOCArMTUzMyw1MiBAQCBz dGF0aWMgdm9pZCBmcmVlX2dpZ2FudGljX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2ln bmVkIGludCBvcmRlcikKIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2ZvbGlv KHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLAogCQlpbnQgbmlkLCBub2RlbWFza190 ICpub2RlbWFzaykKIHsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nIG5yX3Bh Z2VzID0gcGFnZXNfcGVyX2h1Z2VfcGFnZShoKTsKKwlzdHJ1Y3QgZm9saW8gKmZvbGlvOworCWlu dCBvcmRlciA9IGh1Z2VfcGFnZV9vcmRlcihoKTsKKwlib29sIHJldHJ5ID0gZmFsc2U7CisKIAlp ZiAobmlkID09IE5VTUFfTk9fTk9ERSkKIAkJbmlkID0gbnVtYV9tZW1faWQoKTsKLQorcmV0cnk6 CisJZm9saW8gPSBOVUxMOwogI2lmZGVmIENPTkZJR19DTUEKIAl7CiAJCWludCBub2RlOwogCi0J CWlmIChodWdldGxiX2NtYVtuaWRdKSB7Ci0JCQlwYWdlID0gY21hX2FsbG9jKGh1Z2V0bGJfY21h W25pZF0sIG5yX3BhZ2VzLAotCQkJCQlodWdlX3BhZ2Vfb3JkZXIoaCksIHRydWUpOwotCQkJaWYg KHBhZ2UpCi0JCQkJcmV0dXJuIHBhZ2VfZm9saW8ocGFnZSk7Ci0JCX0KKwkJaWYgKGh1Z2V0bGJf Y21hW25pZF0pCisJCQlmb2xpbyA9IGNtYV9hbGxvY19mb2xpbyhodWdldGxiX2NtYVtuaWRdLCBv cmRlcik7CiAKLQkJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9USElTTk9ERSkpIHsKKwkJaWYgKCFm b2xpbyAmJiAhKGdmcF9tYXNrICYgX19HRlBfVEhJU05PREUpKSB7CiAJCQlmb3JfZWFjaF9ub2Rl X21hc2sobm9kZSwgKm5vZGVtYXNrKSB7CiAJCQkJaWYgKG5vZGUgPT0gbmlkIHx8ICFodWdldGxi X2NtYVtub2RlXSkKIAkJCQkJY29udGludWU7CiAKLQkJCQlwYWdlID0gY21hX2FsbG9jKGh1Z2V0 bGJfY21hW25vZGVdLCBucl9wYWdlcywKLQkJCQkJCWh1Z2VfcGFnZV9vcmRlcihoKSwgdHJ1ZSk7 Ci0JCQkJaWYgKHBhZ2UpCi0JCQkJCXJldHVybiBwYWdlX2ZvbGlvKHBhZ2UpOworCQkJCWZvbGlv ID0gY21hX2FsbG9jX2ZvbGlvKGh1Z2V0bGJfY21hW25vZGVdLCBvcmRlcik7CisJCQkJaWYgKGZv bGlvKQorCQkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KICNlbmRpZgorCWlmICghZm9saW8pIHsK KwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19jb250aWdfcGFnZXMoMSA8PCBvcmRlciwgZ2Zw X21hc2ssIG5pZCwgbm9kZW1hc2spOwogCi0JcGFnZSA9IGFsbG9jX2NvbnRpZ19wYWdlcyhucl9w YWdlcywgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spOwotCXJldHVybiBwYWdlID8gcGFnZV9mb2xp byhwYWdlKSA6IE5VTEw7CisJCWlmICghcGFnZSkKKwkJCXJldHVybiBOVUxMOworCisJCWZvbGlv ID0gcGFnZV9mb2xpbyhwYWdlKTsKKwl9CisKKwlpZiAoZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywg MSkpCisJCXJldHVybiBmb2xpbzsKKworCXByX3dhcm4oIkh1Z2VUTEIgcGFnZSBjYW4gbm90IGJl IHVzZWQgZHVlIHRvIHVuZXhwZWN0ZWQgaW5mbGF0ZWQgcmVmIGNvdW50XG4iKTsKKwlmcmVlX2dp Z2FudGljX2ZvbGlvKGZvbGlvLCBvcmRlcik7CisJaWYgKCFyZXRyeSkgeworCQlyZXRyeSA9IHRy dWU7CisJCWdvdG8gcmV0cnk7CisJfQorCXJldHVybiBOVUxMOwogfQogCiAjZWxzZSAvKiAhQ09O RklHX0NPTlRJR19BTExPQyAqLwpAQCAtMTYxOSw4ICsxNTk3LDYgQEAgc3RhdGljIHN0cnVjdCBm b2xpbyAqYWxsb2NfZ2lnYW50aWNfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21h c2ssCiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9naWdhbnRpY19mb2xpbyhzdHJ1Y3QgZm9s aW8gKmZvbGlvLAogCQkJCQkJdW5zaWduZWQgaW50IG9yZGVyKSB7IH0KLXN0YXRpYyBpbmxpbmUg dm9pZCBkZXN0cm95X2NvbXBvdW5kX2dpZ2FudGljX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8s Ci0JCQkJCQl1bnNpZ25lZCBpbnQgb3JkZXIpIHsgfQogI2VuZGlmCiAKIC8qCkBAIC0xNzQ3LDE5 ICsxNzIzLDE3IEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8o c3RydWN0IGhzdGF0ZSAqaCwKIAkJZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihmb2xpbyk7 CiAKIAlmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpOworCUlOSVRfTElTVF9IRUFEKCZmb2xp by0+X2RlZmVycmVkX2xpc3QpOwogCiAJLyoKIAkgKiBOb24tZ2lnYW50aWMgcGFnZXMgZGVtb3Rl ZCBmcm9tIENNQSBhbGxvY2F0ZWQgZ2lnYW50aWMgcGFnZXMKIAkgKiBuZWVkIHRvIGJlIGdpdmVu IGJhY2sgdG8gQ01BIGluIGZyZWVfZ2lnYW50aWNfZm9saW8uCiAJICovCiAJaWYgKGhzdGF0ZV9p c19naWdhbnRpYyhoKSB8fAotCSAgICBodWdldGxiX2NtYV9mb2xpbyhmb2xpbywgaHVnZV9wYWdl X29yZGVyKGgpKSkgewotCQlkZXN0cm95X2NvbXBvdW5kX2dpZ2FudGljX2ZvbGlvKGZvbGlvLCBo dWdlX3BhZ2Vfb3JkZXIoaCkpOworCSAgICBodWdldGxiX2NtYV9mb2xpbyhmb2xpbywgaHVnZV9w YWdlX29yZGVyKGgpKSkKIAkJZnJlZV9naWdhbnRpY19mb2xpbyhmb2xpbywgaHVnZV9wYWdlX29y ZGVyKGgpKTsKLQl9IGVsc2UgewotCQlJTklUX0xJU1RfSEVBRCgmZm9saW8tPl9kZWZlcnJlZF9s aXN0KTsKKwllbHNlCiAJCWZvbGlvX3B1dChmb2xpbyk7Ci0JfQogfQogCiAvKgpAQCAtMjAzMiw5 NSArMjAwNiw2IEBAIHN0YXRpYyB2b2lkIHByZXBfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhz dGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5pCiAJc3Bpbl91bmxvY2tfaXJxKCZo dWdldGxiX2xvY2spOwogfQogCi1zdGF0aWMgYm9vbCBfX3ByZXBfY29tcG91bmRfZ2lnYW50aWNf Zm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCQkJdW5zaWduZWQgaW50IG9yZGVyLCBib29s IGRlbW90ZSkKLXsKLQlpbnQgaSwgajsKLQlpbnQgbnJfcGFnZXMgPSAxIDw8IG9yZGVyOwotCXN0 cnVjdCBwYWdlICpwOwotCi0JX19mb2xpb19jbGVhcl9yZXNlcnZlZChmb2xpbyk7Ci0JZm9yIChp ID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKLQkJcCA9IGZvbGlvX3BhZ2UoZm9saW8sIGkpOwot Ci0JCS8qCi0JCSAqIEZvciBnaWdhbnRpYyBodWdlcGFnZXMgYWxsb2NhdGVkIHRocm91Z2ggYm9v dG1lbSBhdAotCQkgKiBib290LCBpdCdzIHNhZmVyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUg bm90LWdpZ2FudGljCi0JCSAqIGh1Z2VwYWdlcyBhbmQgY2xlYXIgdGhlIFBHX3Jlc2VydmVkIGJp dCBmcm9tIGFsbCB0YWlsIHBhZ2VzCi0JCSAqIHRvby4gIE90aGVyd2lzZSBkcml2ZXJzIHVzaW5n IGdldF91c2VyX3BhZ2VzKCkgdG8gYWNjZXNzIHRhaWwKLQkJICogcGFnZXMgbWF5IGdldCB0aGUg cmVmZXJlbmNlIGNvdW50aW5nIHdyb25nIGlmIHRoZXkgc2VlCi0JCSAqIFBHX3Jlc2VydmVkIHNl dCBvbiBhIHRhaWwgcGFnZSAoZGVzcGl0ZSB0aGUgaGVhZCBwYWdlIG5vdAotCQkgKiBoYXZpbmcg UEdfcmVzZXJ2ZWQgc2V0KS4gIEVuZm9yY2luZyB0aGlzIGNvbnNpc3RlbmN5IGJldHdlZW4KLQkJ ICogaGVhZCBhbmQgdGFpbCBwYWdlcyBhbGxvd3MgZHJpdmVycyB0byBvcHRpbWl6ZSBhd2F5IGEg Y2hlY2sKLQkJICogb24gdGhlIGhlYWQgcGFnZSB3aGVuIHRoZXkgbmVlZCBrbm93IGlmIHB1dF9w YWdlKCkgaXMgbmVlZGVkCi0JCSAqIGFmdGVyIGdldF91c2VyX3BhZ2VzKCkuCi0JCSAqLwotCQlp ZiAoaSAhPSAwKQkvKiBoZWFkIHBhZ2UgY2xlYXJlZCBhYm92ZSAqLwotCQkJX19DbGVhclBhZ2VS ZXNlcnZlZChwKTsKLQkJLyoKLQkJICogU3VidGxlIGFuZCB2ZXJ5IHVubGlrZWx5Ci0JCSAqCi0J CSAqIEdpZ2FudGljICdwYWdlIGFsbG9jYXRvcnMnIHN1Y2ggYXMgbWVtYmxvY2sgb3IgY21hIHdp bGwKLQkJICogcmV0dXJuIGEgc2V0IG9mIHBhZ2VzIHdpdGggZWFjaCBwYWdlIHJlZiBjb3VudGVk LiAgV2UgbmVlZAotCQkgKiB0byB0dXJuIHRoaXMgc2V0IG9mIHBhZ2VzIGludG8gYSBjb21wb3Vu ZCBwYWdlIHdpdGggdGFpbAotCQkgKiBwYWdlIHJlZiBjb3VudHMgc2V0IHRvIHplcm8uICBDb2Rl IHN1Y2ggYXMgc3BlY3VsYXRpdmUgcGFnZQotCQkgKiBjYWNoZSBhZGRpbmcgY291bGQgdGFrZSBh IHJlZiBvbiBhICd0byBiZScgdGFpbCBwYWdlLgotCQkgKiBXZSBuZWVkIHRvIHJlc3BlY3QgYW55 IGluY3JlYXNlZCByZWYgY291bnQsIGFuZCBvbmx5IHNldAotCQkgKiB0aGUgcmVmIGNvdW50IHRv IHplcm8gaWYgY291bnQgaXMgY3VycmVudGx5IDEuICBJZiBjb3VudAotCQkgKiBpcyBub3QgMSwg d2UgcmV0dXJuIGFuIGVycm9yLiAgQW4gZXJyb3IgcmV0dXJuIGluZGljYXRlcwotCQkgKiB0aGUg c2V0IG9mIHBhZ2VzIGNhbiBub3QgYmUgY29udmVydGVkIHRvIGEgZ2lnYW50aWMgcGFnZS4KLQkJ ICogVGhlIGNhbGxlciB3aG8gYWxsb2NhdGVkIHRoZSBwYWdlcyBzaG91bGQgdGhlbiBkaXNjYXJk IHRoZQotCQkgKiBwYWdlcyB1c2luZyB0aGUgYXBwcm9wcmlhdGUgZnJlZSBpbnRlcmZhY2UuCi0J CSAqCi0JCSAqIEluIHRoZSBjYXNlIG9mIGRlbW90ZSwgdGhlIHJlZiBjb3VudCB3aWxsIGJlIHpl cm8uCi0JCSAqLwotCQlpZiAoIWRlbW90ZSkgewotCQkJaWYgKCFwYWdlX3JlZl9mcmVlemUocCwg MSkpIHsKLQkJCQlwcl93YXJuKCJIdWdlVExCIHBhZ2UgY2FuIG5vdCBiZSB1c2VkIGR1ZSB0byB1 bmV4cGVjdGVkIGluZmxhdGVkIHJlZiBjb3VudFxuIik7Ci0JCQkJZ290byBvdXRfZXJyb3I7Ci0J CQl9Ci0JCX0gZWxzZSB7Ci0JCQlWTV9CVUdfT05fUEFHRShwYWdlX2NvdW50KHApLCBwKTsKLQkJ fQotCQlpZiAoaSAhPSAwKQotCQkJc2V0X2NvbXBvdW5kX2hlYWQocCwgJmZvbGlvLT5wYWdlKTsK LQl9Ci0JX19mb2xpb19zZXRfaGVhZChmb2xpbyk7Ci0JLyogd2UgcmVseSBvbiBwcmVwX25ld19o dWdldGxiX2ZvbGlvIHRvIHNldCB0aGUgaHVnZXRsYiBmbGFnICovCi0JZm9saW9fc2V0X29yZGVy KGZvbGlvLCBvcmRlcik7Ci0JYXRvbWljX3NldCgmZm9saW8tPl9lbnRpcmVfbWFwY291bnQsIC0x KTsKLQlhdG9taWNfc2V0KCZmb2xpby0+X2xhcmdlX21hcGNvdW50LCAtMSk7Ci0JYXRvbWljX3Nl dCgmZm9saW8tPl9waW5jb3VudCwgMCk7Ci0JcmV0dXJuIHRydWU7Ci0KLW91dF9lcnJvcjoKLQkv KiB1bmRvIHBhZ2UgbW9kaWZpY2F0aW9ucyBtYWRlIGFib3ZlICovCi0JZm9yIChqID0gMDsgaiA8 IGk7IGorKykgewotCQlwID0gZm9saW9fcGFnZShmb2xpbywgaik7Ci0JCWlmIChqICE9IDApCi0J CQljbGVhcl9jb21wb3VuZF9oZWFkKHApOwotCQlzZXRfcGFnZV9yZWZjb3VudGVkKHApOwotCX0K LQkvKiBuZWVkIHRvIGNsZWFyIFBHX3Jlc2VydmVkIG9uIHJlbWFpbmluZyB0YWlsIHBhZ2VzICAq LwotCWZvciAoOyBqIDwgbnJfcGFnZXM7IGorKykgewotCQlwID0gZm9saW9fcGFnZShmb2xpbywg aik7Ci0JCV9fQ2xlYXJQYWdlUmVzZXJ2ZWQocCk7Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQot c3RhdGljIGJvb2wgcHJlcF9jb21wb3VuZF9naWdhbnRpY19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZv bGlvLAotCQkJCQkJCXVuc2lnbmVkIGludCBvcmRlcikKLXsKLQlyZXR1cm4gX19wcmVwX2NvbXBv dW5kX2dpZ2FudGljX2ZvbGlvKGZvbGlvLCBvcmRlciwgZmFsc2UpOwotfQotCi1zdGF0aWMgYm9v bCBwcmVwX2NvbXBvdW5kX2dpZ2FudGljX2ZvbGlvX2Zvcl9kZW1vdGUoc3RydWN0IGZvbGlvICpm b2xpbywKLQkJCQkJCQl1bnNpZ25lZCBpbnQgb3JkZXIpCi17Ci0JcmV0dXJuIF9fcHJlcF9jb21w b3VuZF9naWdhbnRpY19mb2xpbyhmb2xpbywgb3JkZXIsIHRydWUpOwotfQotCiAvKgogICogRmlu ZCBhbmQgbG9jayBhZGRyZXNzIHNwYWNlIChtYXBwaW5nKSBpbiB3cml0ZSBtb2RlLgogICoKQEAg LTIxNTksNyArMjA0NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0 bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAkgKi8KIAlpZiAobm9kZV9hbGxvY19ub3JldHJ5 ICYmIG5vZGVfaXNzZXQobmlkLCAqbm9kZV9hbGxvY19ub3JldHJ5KSkKIAkJYWxsb2NfdHJ5X2hh cmQgPSBmYWxzZTsKLQlnZnBfbWFzayB8PSBfX0dGUF9DT01QfF9fR0ZQX05PV0FSTjsKKwlnZnBf bWFzayB8PSBfX0dGUF9OT1dBUk47CiAJaWYgKGFsbG9jX3RyeV9oYXJkKQogCQlnZnBfbWFzayB8 PSBfX0dGUF9SRVRSWV9NQVlGQUlMOwogCWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKQpAQCAtMjIw Niw0OCArMjA5MSwxNCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxi X2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCiAJcmV0dXJuIGZvbGlvOwogfQogCi1zdGF0aWMgc3Ry dWN0IGZvbGlvICpfX2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwK LQkJCQlnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm1hc2ssCi0JCQkJbm9k ZW1hc2tfdCAqbm9kZV9hbGxvY19ub3JldHJ5KQotewotCXN0cnVjdCBmb2xpbyAqZm9saW87Ci0J Ym9vbCByZXRyeSA9IGZhbHNlOwotCi1yZXRyeToKLQlpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgp KQotCQlmb2xpbyA9IGFsbG9jX2dpZ2FudGljX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNr KTsKLQllbHNlCi0JCWZvbGlvID0gYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFz aywKLQkJCQluaWQsIG5tYXNrLCBub2RlX2FsbG9jX25vcmV0cnkpOwotCWlmICghZm9saW8pCi0J CXJldHVybiBOVUxMOwotCi0JaWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSkgewotCQlpZiAoIXBy ZXBfY29tcG91bmRfZ2lnYW50aWNfZm9saW8oZm9saW8sIGh1Z2VfcGFnZV9vcmRlcihoKSkpIHsK LQkJCS8qCi0JCQkgKiBSYXJlIGZhaWx1cmUgdG8gY29udmVydCBwYWdlcyB0byBjb21wb3VuZCBw YWdlLgotCQkJICogRnJlZSBwYWdlcyBhbmQgdHJ5IGFnYWluIC0gT05DRSEKLQkJCSAqLwotCQkJ ZnJlZV9naWdhbnRpY19mb2xpbyhmb2xpbywgaHVnZV9wYWdlX29yZGVyKGgpKTsKLQkJCWlmICgh cmV0cnkpIHsKLQkJCQlyZXRyeSA9IHRydWU7Ci0JCQkJZ290byByZXRyeTsKLQkJCX0KLQkJCXJl dHVybiBOVUxMOwotCQl9Ci0JfQotCi0JcmV0dXJuIGZvbGlvOwotfQotCiBzdGF0aWMgc3RydWN0 IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwK IAkJZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIG5vZGVtYXNrX3QgKm5tYXNrLAogCQlub2RlbWFz a190ICpub2RlX2FsbG9jX25vcmV0cnkpCiB7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAotCWZv bGlvID0gX19hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNr LAotCQkJCQkJbm9kZV9hbGxvY19ub3JldHJ5KTsKKwlmb2xpbyA9IGhzdGF0ZV9pc19naWdhbnRp YyhoKSA/IGFsbG9jX2dpZ2FudGljX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKSA6CisJ CWFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2ssIG5vZGVf YWxsb2Nfbm9yZXRyeSk7CiAJaWYgKGZvbGlvKQogCQlpbml0X25ld19odWdldGxiX2ZvbGlvKGgs IGZvbGlvKTsKIAlyZXR1cm4gZm9saW87CkBAIC0yMjY1LDcgKzIxMTYsOCBAQCBzdGF0aWMgc3Ry dWN0IGZvbGlvICphbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCiB7 CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAotCWZvbGlvID0gX19hbGxvY19mcmVzaF9odWdldGxi X2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrLCBOVUxMKTsKKwlmb2xpbyA9IGhzdGF0ZV9p c19naWdhbnRpYyhoKSA/IGFsbG9jX2dpZ2FudGljX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5t YXNrKSA6CisJCWFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1h c2ssIE5VTEwpOwogCWlmICghZm9saW8pCiAJCXJldHVybiBOVUxMOwogCkBAIC0zMzMzLDYgKzMx ODUsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9mb2xpb19pbml0X3RhaWxfdm1lbW1h cChzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCWZvciAocGZuID0gaGVhZF9wZm4gKyBzdGFydF9wYWdl X251bWJlcjsgcGZuIDwgZW5kX3BmbjsgcGZuKyspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBw Zm5fdG9fcGFnZShwZm4pOwogCisJCV9fQ2xlYXJQYWdlUmVzZXJ2ZWQoZm9saW9fcGFnZShmb2xp bywgcGZuIC0gaGVhZF9wZm4pKTsKIAkJX19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9u ZSwgbmlkKTsKIAkJcHJlcF9jb21wb3VuZF90YWlsKChzdHJ1Y3QgcGFnZSAqKWZvbGlvLCBwZm4g LSBoZWFkX3Bmbik7CiAJCXJldCA9IHBhZ2VfcmVmX2ZyZWV6ZShwYWdlLCAxKTsKQEAgLTM5NTAs MTEgKzM4MDMsOSBAQCBzdGF0aWMgaW50IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0 IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAkJfQogCX0KIAotCS8qCi0JICogVXNl IGRlc3Ryb3lfY29tcG91bmRfaHVnZXRsYl9mb2xpb19mb3JfZGVtb3RlIGZvciBhbGwgaHVnZSBw YWdlCi0JICogc2l6ZXMgYXMgaXQgd2lsbCBub3QgcmVmIGNvdW50IGZvbGlvcy4KLQkgKi8KLQlk ZXN0cm95X2NvbXBvdW5kX2h1Z2V0bGJfZm9saW9fZm9yX2RlbW90ZShmb2xpbywgaHVnZV9wYWdl X29yZGVyKGgpKTsKKwlzcGxpdF9wYWdlX21lbWNnKCZmb2xpby0+cGFnZSwgaHVnZV9wYWdlX29y ZGVyKGgpLCBodWdlX3BhZ2Vfb3JkZXIodGFyZ2V0X2hzdGF0ZSkpOworCXNwbGl0X3BhZ2Vfb3du ZXIoJmZvbGlvLT5wYWdlLCBodWdlX3BhZ2Vfb3JkZXIoaCksIGh1Z2VfcGFnZV9vcmRlcih0YXJn ZXRfaHN0YXRlKSk7CisJcGdhbGxvY190YWdfc3BsaXQoJmZvbGlvLT5wYWdlLCAxIDw8ICBodWdl X3BhZ2Vfb3JkZXIoaCkpOwogCiAJLyoKIAkgKiBUYWtpbmcgdGFyZ2V0IGhzdGF0ZSBtdXRleCBz eW5jaHJvbml6ZXMgd2l0aCBzZXRfbWF4X2h1Z2VfcGFnZXMuCkBAIC0zOTY5LDExICszODIwLDcg QEAgc3RhdGljIGludCBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgs IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCQkJaSArPSBwYWdlc19wZXJfaHVnZV9wYWdlKHRhcmdl dF9oc3RhdGUpKSB7CiAJCXN1YnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBpKTsKIAkJaW5uZXJf Zm9saW8gPSBwYWdlX2ZvbGlvKHN1YnBhZ2UpOwotCQlpZiAoaHN0YXRlX2lzX2dpZ2FudGljKHRh cmdldF9oc3RhdGUpKQotCQkJcHJlcF9jb21wb3VuZF9naWdhbnRpY19mb2xpb19mb3JfZGVtb3Rl KGlubmVyX2ZvbGlvLAotCQkJCQkJCXRhcmdldF9oc3RhdGUtPm9yZGVyKTsKLQkJZWxzZQotCQkJ cHJlcF9jb21wb3VuZF9wYWdlKHN1YnBhZ2UsIHRhcmdldF9oc3RhdGUtPm9yZGVyKTsKKwkJcHJl cF9jb21wb3VuZF9wYWdlKHN1YnBhZ2UsIHRhcmdldF9oc3RhdGUtPm9yZGVyKTsKIAkJZm9saW9f Y2hhbmdlX3ByaXZhdGUoaW5uZXJfZm9saW8sIE5VTEwpOwogCQlwcmVwX25ld19odWdldGxiX2Zv bGlvKHRhcmdldF9oc3RhdGUsIGlubmVyX2ZvbGlvLCBuaWQpOwogCQlmcmVlX2h1Z2VfZm9saW8o aW5uZXJfZm9saW8pOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxv Yy5jCmluZGV4IDI4ZjgwZGFmNWMwNC4uNGVjZjJjOTQyOGYzIDEwMDY0NAotLS0gYS9tbS9wYWdl X2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0xMTkyLDE2ICsxMTkyLDM2IEBAIHN0 YXRpYyB2b2lkIGZyZWVfcGNwcGFnZXNfYnVsayhzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IGNvdW50 LAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKIH0KIAorLyog U3BsaXQgYSBtdWx0aS1ibG9jayBmcmVlIHBhZ2UgaW50byBpdHMgaW5kaXZpZHVhbCBwYWdlYmxv Y2tzICovCitzdGF0aWMgdm9pZCBzcGxpdF9sYXJnZV9idWRkeShzdHJ1Y3Qgem9uZSAqem9uZSwg c3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgaW50IG9yZGVy LCBmcGlfdCBmcGlfZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gcGZuICsgKDEg PDwgb3JkZXIpOworCisJVk1fV0FSTl9PTl9PTkNFKHBmbiAmICgoMSA8PCBvcmRlcikgLSAxKSk7 CisJLyogQ2FsbGVyIHJlbW92ZWQgcGFnZSBmcm9tIGZyZWVsaXN0LCBidWRkeSBpbmZvIGNsZWFy ZWQhICovCisJVk1fV0FSTl9PTl9PTkNFKFBhZ2VCdWRkeShwYWdlKSk7CisKKwlpZiAob3JkZXIg PiBwYWdlYmxvY2tfb3JkZXIpCisJCW9yZGVyID0gcGFnZWJsb2NrX29yZGVyOworCisJd2hpbGUg KHBmbiAhPSBlbmRfcGZuKSB7CisJCWludCBtdCA9IGdldF9wZm5ibG9ja19taWdyYXRldHlwZShw YWdlLCBwZm4pOworCisJCV9fZnJlZV9vbmVfcGFnZShwYWdlLCBwZm4sIHpvbmUsIG9yZGVyLCBt dCwgZnBpX2ZsYWdzKTsKKwkJcGZuICs9IDEgPDwgb3JkZXI7CisJCXBhZ2UgPSBwZm5fdG9fcGFn ZShwZm4pOworCX0KK30KKwogc3RhdGljIHZvaWQgZnJlZV9vbmVfcGFnZShzdHJ1Y3Qgem9uZSAq em9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25l ZCBpbnQgb3JkZXIsCiAJCQkgIGZwaV90IGZwaV9mbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIGZs YWdzOwotCWludCBtaWdyYXRldHlwZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ6b25lLT5sb2Nr LCBmbGFncyk7Ci0JbWlncmF0ZXR5cGUgPSBnZXRfcGZuYmxvY2tfbWlncmF0ZXR5cGUocGFnZSwg cGZuKTsKLQlfX2ZyZWVfb25lX3BhZ2UocGFnZSwgcGZuLCB6b25lLCBvcmRlciwgbWlncmF0ZXR5 cGUsIGZwaV9mbGFncyk7CisJc3BsaXRfbGFyZ2VfYnVkZHkoem9uZSwgcGFnZSwgcGZuLCBvcmRl ciwgZnBpX2ZsYWdzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5sb2NrLCBmbGFn cyk7CiB9CiAKQEAgLTE2OTMsMjcgKzE3MTMsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5k X2xhcmdlX2J1ZGR5KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuKQogCXJldHVybiBzdGFydF9wZm47 CiB9CiAKLS8qIFNwbGl0IGEgbXVsdGktYmxvY2sgZnJlZSBwYWdlIGludG8gaXRzIGluZGl2aWR1 YWwgcGFnZWJsb2NrcyAqLwotc3RhdGljIHZvaWQgc3BsaXRfbGFyZ2VfYnVkZHkoc3RydWN0IHpv bmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBwZm4s IGludCBvcmRlcikKLXsKLQl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBwZm4gKyAoMSA8PCBvcmRl cik7Ci0KLQlWTV9XQVJOX09OX09OQ0Uob3JkZXIgPD0gcGFnZWJsb2NrX29yZGVyKTsKLQlWTV9X QVJOX09OX09OQ0UocGZuICYgKHBhZ2VibG9ja19ucl9wYWdlcyAtIDEpKTsKLQotCS8qIENhbGxl ciByZW1vdmVkIHBhZ2UgZnJvbSBmcmVlbGlzdCwgYnVkZHkgaW5mbyBjbGVhcmVkISAqLwotCVZN X1dBUk5fT05fT05DRShQYWdlQnVkZHkocGFnZSkpOwotCi0Jd2hpbGUgKHBmbiAhPSBlbmRfcGZu KSB7Ci0JCWludCBtdCA9IGdldF9wZm5ibG9ja19taWdyYXRldHlwZShwYWdlLCBwZm4pOwotCi0J CV9fZnJlZV9vbmVfcGFnZShwYWdlLCBwZm4sIHpvbmUsIHBhZ2VibG9ja19vcmRlciwgbXQsIEZQ SV9OT05FKTsKLQkJcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlczsKLQkJcGFnZSA9IHBmbl90b19w YWdlKHBmbik7Ci0JfQotfQotCiAvKioKICAqIG1vdmVfZnJlZXBhZ2VzX2Jsb2NrX2lzb2xhdGUg LSBtb3ZlIGZyZWUgcGFnZXMgaW4gYmxvY2sgZm9yIHBhZ2UgaXNvbGF0aW9uCiAgKiBAem9uZTog dGhlIHpvbmUKQEAgLTE3NTQsNyArMTc1Myw3IEBAIGJvb2wgbW92ZV9mcmVlcGFnZXNfYmxvY2tf aXNvbGF0ZShzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCWRlbF9wYWdl X2Zyb21fZnJlZV9saXN0KGJ1ZGR5LCB6b25lLCBvcmRlciwKIAkJCQkJZ2V0X3BmbmJsb2NrX21p Z3JhdGV0eXBlKGJ1ZGR5LCBwZm4pKTsKIAkJc2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdl LCBtaWdyYXRldHlwZSk7Ci0JCXNwbGl0X2xhcmdlX2J1ZGR5KHpvbmUsIGJ1ZGR5LCBwZm4sIG9y ZGVyKTsKKwkJc3BsaXRfbGFyZ2VfYnVkZHkoem9uZSwgYnVkZHksIHBmbiwgb3JkZXIsIEZQSV9O T05FKTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC0xNzY1LDcgKzE3NjQsNyBAQCBib29sIG1v dmVfZnJlZXBhZ2VzX2Jsb2NrX2lzb2xhdGUoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdl ICpwYWdlLAogCQlkZWxfcGFnZV9mcm9tX2ZyZWVfbGlzdChwYWdlLCB6b25lLCBvcmRlciwKIAkJ CQkJZ2V0X3BmbmJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UsIHBmbikpOwogCQlzZXRfcGFnZWJsb2Nr X21pZ3JhdGV0eXBlKHBhZ2UsIG1pZ3JhdGV0eXBlKTsKLQkJc3BsaXRfbGFyZ2VfYnVkZHkoem9u ZSwgcGFnZSwgcGZuLCBvcmRlcik7CisJCXNwbGl0X2xhcmdlX2J1ZGR5KHpvbmUsIHBhZ2UsIHBm biwgb3JkZXIsIEZQSV9OT05FKTsKIAkJcmV0dXJuIHRydWU7CiAJfQogbW92ZToKQEAgLTY0Mzks NiArNjQzOCw0MCBAQCBpbnQgX19hbGxvY19jb250aWdfbWlncmF0ZV9yYW5nZShzdHJ1Y3QgY29t cGFjdF9jb250cm9sICpjYywKIAlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogMDsKIH0KIAorc3Rh dGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2Us IHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXBvc3RfYWxsb2NfaG9v ayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSk7CisJcmV0dXJuIHBhZ2U7Cit9CisjZGVmaW5l IG1hcmtfYWxsb2NhdGVkKC4uLikJYWxsb2NfaG9va3MobWFya19hbGxvY2F0ZWRfbm9wcm9mKF9f VkFfQVJHU19fKSkKKworc3RhdGljIHZvaWQgc3BsaXRfZnJlZV9wYWdlcyhzdHJ1Y3QgbGlzdF9o ZWFkICpmcmVlcGFnZXMpCit7CisJdW5zaWduZWQgaW50IGksIG9yZGVyOworCXN0cnVjdCBwYWdl ICpwYWdlLCAqbmV4dDsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJZm9yIChvcmRlciA9IDA7 IG9yZGVyIDwgTlJfUEFHRV9PUkRFUlM7IG9yZGVyKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKHBhZ2UsIG5leHQsICZmcmVlcGFnZXNbb3JkZXJdLCBscnUpIHsKKwkJCXVuc2lnbmVk IGludCBucl9wYWdlczsKKworCQkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisKKwkJCW5yX3BhZ2Vz ID0gMSA8PCBvcmRlcjsKKworCQkJbWFya19hbGxvY2F0ZWQocGFnZSwgb3JkZXIsIF9fR0ZQX01P VkFCTEUpOworCQkJaWYgKG9yZGVyKQorCQkJCXNwbGl0X3BhZ2UocGFnZSwgb3JkZXIpOworCisJ CQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQkJCWxpc3RfYWRkKCZwYWdlLT5s cnUsICZ0bXBfbGlzdCk7CisJCQkJcGFnZSsrOworCQkJfQorCQl9CisJCWxpc3Rfc3BsaWNlX2lu aXQoJnRtcF9saXN0LCAmZnJlZXBhZ2VzWzBdKTsKKwl9Cit9CisKIC8qKgogICogYWxsb2NfY29u dGlnX3JhbmdlKCkgLS0gdHJpZXMgdG8gYWxsb2NhdGUgZ2l2ZW4gcmFuZ2Ugb2YgcGFnZXMKICAq IEBzdGFydDoJc3RhcnQgUEZOIHRvIGFsbG9jYXRlCkBAIC02NTUxLDEyICs2NTg0LDI1IEBAIGlu dCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVk IGxvbmcgZW5kLAogCQlnb3RvIGRvbmU7CiAJfQogCi0JLyogRnJlZSBoZWFkIGFuZCB0YWlsIChp ZiBhbnkpICovCi0JaWYgKHN0YXJ0ICE9IG91dGVyX3N0YXJ0KQotCQlmcmVlX2NvbnRpZ19yYW5n ZShvdXRlcl9zdGFydCwgc3RhcnQgLSBvdXRlcl9zdGFydCk7Ci0JaWYgKGVuZCAhPSBvdXRlcl9l bmQpCi0JCWZyZWVfY29udGlnX3JhbmdlKGVuZCwgb3V0ZXJfZW5kIC0gZW5kKTsKKwlpZiAoIShn ZnBfbWFzayAmIF9fR0ZQX0NPTVApKSB7CisJCXNwbGl0X2ZyZWVfcGFnZXMoY2MuZnJlZXBhZ2Vz KTsKIAorCQkvKiBGcmVlIGhlYWQgYW5kIHRhaWwgKGlmIGFueSkgKi8KKwkJaWYgKHN0YXJ0ICE9 IG91dGVyX3N0YXJ0KQorCQkJZnJlZV9jb250aWdfcmFuZ2Uob3V0ZXJfc3RhcnQsIHN0YXJ0IC0g b3V0ZXJfc3RhcnQpOworCQlpZiAoZW5kICE9IG91dGVyX2VuZCkKKwkJCWZyZWVfY29udGlnX3Jh bmdlKGVuZCwgb3V0ZXJfZW5kIC0gZW5kKTsKKwl9IGVsc2UgaWYgKHN0YXJ0ID09IG91dGVyX3N0 YXJ0ICYmIGVuZCA9PSBvdXRlcl9lbmQgJiYgaXNfcG93ZXJfb2ZfMihlbmQgLSBzdGFydCkpIHsK KwkJc3RydWN0IHBhZ2UgKmhlYWQgPSBwZm5fdG9fcGFnZShzdGFydCk7CisJCWludCBvcmRlciA9 IGlsb2cyKGVuZCAtIHN0YXJ0KTsKKworCQljaGVja19uZXdfcGFnZXMoaGVhZCwgb3JkZXIpOwor CQlwcmVwX25ld19wYWdlKGhlYWQsIG9yZGVyLCBnZnBfbWFzaywgMCk7CisJfSBlbHNlIHsKKwkJ cmV0ID0gLUVJTlZBTDsKKwkJV0FSTih0cnVlLCAiUEZOIHJhbmdlOiByZXF1ZXN0ZWQgWyVsdSwg JWx1KSwgbGVha2VkIFslbHUsICVsdSlcbiIsCisJCSAgICAgc3RhcnQsIGVuZCwgb3V0ZXJfc3Rh cnQsIG91dGVyX2VuZCk7CisJfQogZG9uZToKIAl1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZShzdGFy dCwgZW5kLCBtaWdyYXRldHlwZSk7CiAJcmV0dXJuIHJldDsKQEAgLTY2NjUsNiArNjcxMSwxOCBA QCBzdHJ1Y3QgcGFnZSAqYWxsb2NfY29udGlnX3BhZ2VzX25vcHJvZih1bnNpZ25lZCBsb25nIG5y X3BhZ2VzLCBnZnBfdCBnZnBfbWFzaywKIHZvaWQgZnJlZV9jb250aWdfcmFuZ2UodW5zaWduZWQg bG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBjb3Vu dCA9IDA7CisJc3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwZm4pOworCisJaWYgKGZv bGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7CisJCWludCBleHBlY3RlZCA9IGZvbGlvX25yX3BhZ2Vz KGZvbGlvKTsKKworCQlpZiAobnJfcGFnZXMgPT0gZXhwZWN0ZWQpCisJCQlmb2xpb19wdXQoZm9s aW8pOworCQllbHNlCisJCQlXQVJOKHRydWUsICJQRk4gJWx1OiBucl9wYWdlcyAlbHUgIT0gZXhw ZWN0ZWQgJWRcbiIsCisJCQkgICAgIHBmbiwgbnJfcGFnZXMsIGV4cGVjdGVkKTsKKwkJcmV0dXJu OworCX0KIAogCWZvciAoOyBucl9wYWdlcy0tOyBwZm4rKykgewogCQlzdHJ1Y3QgcGFnZSAqcGFn ZSA9IHBmbl90b19wYWdlKHBmbik7Cg== --0000000000004b6831061eceafad--