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 X-Spam-Level: X-Spam-Status: No, score=-4.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 29933C352A2 for ; Fri, 7 Feb 2020 10:25:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F3D9221741 for ; Fri, 7 Feb 2020 10:25:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581071127; bh=1O89POEVxteUnANqCrA7vltm9KSiEdwONARJWVy+kbs=; h=Date:From:To:Cc:Subject:In-Reply-To:References:List-ID:From; b=kdjz0iw69JAjny2B4ubM2gIi/ZSXkrDxgdrUMdtrxEtuGOFHwAgKe0ZEDtLy6kZmq tFEtCmn9FIW/x5ZIlH8dqUdE8vv95mCkcT08gJcUKrEPNElNL/8nKfHDSL+fDPHQFI sM0nTlrST52e0mLjNeyBRRGsrIhSdh/LDzHHm0C8= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726890AbgBGKZ0 (ORCPT ); Fri, 7 Feb 2020 05:25:26 -0500 Received: from mail.kernel.org ([198.145.29.99]:36400 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726674AbgBGKZZ (ORCPT ); Fri, 7 Feb 2020 05:25:25 -0500 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0CB342082E; Fri, 7 Feb 2020 10:25:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581071125; bh=1O89POEVxteUnANqCrA7vltm9KSiEdwONARJWVy+kbs=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=Evo1pKcoLIsgc7bb+b1tM0igAc8sXwVcpwLUBxUPwwsE2z2gg95Sn1MBADUabqRso ihAIl3GIdmkgqKgG+XPMGT/7enGW9jg32BpKDSHOD9AGttrAmt0+LRz5h2abLUfVxo VCxFJIbJgJPSr/5fSCcKA+6ooLtTpPFY82yvnKek= Received: from disco-boy.misterjones.org ([51.254.78.96] helo=www.loen.fr) by disco-boy.misterjones.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1j00p9-003VUd-E5; Fri, 07 Feb 2020 10:25:23 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Date: Fri, 07 Feb 2020 10:25:23 +0000 From: Marc Zyngier To: Zenghui Yu Cc: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, pbonzini@redhat.com, peterx@redhat.com Subject: Re: BUG: using __this_cpu_read() in preemptible [00000000] code In-Reply-To: <3e90c020-e7f3-61f1-3731-a489df0b1d9c@huawei.com> References: <318984f6-bc36-33a3-abc6-bf2295974b06@huawei.com> <828d3b538b7258f692f782b6798277cf@kernel.org> <3e90c020-e7f3-61f1-3731-a489df0b1d9c@huawei.com> Message-ID: X-Sender: maz@kernel.org User-Agent: Roundcube Webmail/1.3.8 X-SA-Exim-Connect-IP: 51.254.78.96 X-SA-Exim-Rcpt-To: yuzenghui@huawei.com, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, pbonzini@redhat.com, peterx@redhat.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org On 2020-02-07 10:19, Zenghui Yu wrote: > Hi Marc, > > On 2020/2/7 17:19, Marc Zyngier wrote: >> Hi Zenghui, >> >> On 2020-02-07 09:00, Zenghui Yu wrote: >>> Hi, >>> >>> Running a latest preemptible kernel and some guests on it, >>> I got the following message, >>> >>> ---8<--- >>> >>> [  630.031870] BUG: using __this_cpu_read() in preemptible [00000000] >>> code: qemu-system-aar/37270 >>> [  630.031872] caller is kvm_get_running_vcpu+0x1c/0x38 >>> [  630.031874] CPU: 32 PID: 37270 Comm: qemu-system-aar Kdump: loaded >>> Not tainted 5.5.0+ >>> [  630.031876] Hardware name: Huawei TaiShan 2280 /BC11SPCD, BIOS >>> 1.58 >>> 10/29/2018 >>> [  630.031876] Call trace: >>> [  630.031878]  dump_backtrace+0x0/0x200 >>> [  630.031880]  show_stack+0x24/0x30 >>> [  630.031882]  dump_stack+0xb0/0xf4 >>> [  630.031884]  __this_cpu_preempt_check+0xc8/0xd0 >>> [  630.031886]  kvm_get_running_vcpu+0x1c/0x38 >>> [  630.031888]  vgic_mmio_change_active.isra.4+0x2c/0xe0 >>> [  630.031890]  __vgic_mmio_write_cactive+0x80/0xc8 >>> [  630.031892]  vgic_mmio_uaccess_write_cactive+0x3c/0x50 >>> [  630.031894]  vgic_uaccess+0xcc/0x138 >>> [  630.031896]  vgic_v3_redist_uaccess+0x7c/0xa8 >>> [  630.031898]  vgic_v3_attr_regs_access+0x1a8/0x230 >>> [  630.031901]  vgic_v3_set_attr+0x1b4/0x290 >>> [  630.031903]  kvm_device_ioctl_attr+0xbc/0x110 >>> [  630.031905]  kvm_device_ioctl+0xc4/0x108 >>> [  630.031907]  ksys_ioctl+0xb4/0xd0 >>> [  630.031909]  __arm64_sys_ioctl+0x28/0x38 >>> [  630.031911]  el0_svc_common.constprop.1+0x7c/0x1a0 >>> [  630.031913]  do_el0_svc+0x34/0xa0 >>> [  630.031915]  el0_sync_handler+0x124/0x274 >>> [  630.031916]  el0_sync+0x140/0x180 >>> >>> ---8<--- >>> >>> I'm now at commit 90568ecf561540fa330511e21fcd823b0c3829c6. >>> >>> And it looks like vgic_get_mmio_requester_vcpu() was broken by >>> 7495e22bb165 ("KVM: Move running VCPU from ARM to common code"). >>> >>> Could anyone please have a look? >> >> Here you go: >> >> diff --git a/virt/kvm/arm/vgic/vgic-mmio.c >> b/virt/kvm/arm/vgic/vgic-mmio.c >> index d656ebd5f9d4..e1735f19c924 100644 >> --- a/virt/kvm/arm/vgic/vgic-mmio.c >> +++ b/virt/kvm/arm/vgic/vgic-mmio.c >> @@ -190,6 +190,15 @@ unsigned long vgic_mmio_read_pending(struct >> kvm_vcpu *vcpu, >>   * value later will give us the same value as we update the per-CPU >> variable >>   * in the preempt notifier handlers. >>   */ >> +static struct kvm_vcpu *vgic_get_mmio_requester_vcpu(void) >> +{ >> +    struct kvm_vcpu *vcpu; >> + >> +    preempt_disable(); >> +    vcpu = kvm_get_running_vcpu(); >> +    preempt_enable(); >> +    return vcpu; >> +} >> >>  /* Must be called with irq->irq_lock held */ >>  static void vgic_hw_irq_spending(struct kvm_vcpu *vcpu, struct >> vgic_irq *irq, >> @@ -212,7 +221,7 @@ void vgic_mmio_write_spending(struct kvm_vcpu >> *vcpu, >>                    gpa_t addr, unsigned int len, >>                    unsigned long val) >>  { >> -    bool is_uaccess = !kvm_get_running_vcpu(); >> +    bool is_uaccess = !vgic_get_mmio_requester_vcpu(); >>      u32 intid = VGIC_ADDR_TO_INTID(addr, 1); >>      int i; >>      unsigned long flags; >> @@ -265,7 +274,7 @@ void vgic_mmio_write_cpending(struct kvm_vcpu >> *vcpu, >>                    gpa_t addr, unsigned int len, >>                    unsigned long val) >>  { >> -    bool is_uaccess = !kvm_get_running_vcpu(); >> +    bool is_uaccess = !vgic_get_mmio_requester_vcpu(); >>      u32 intid = VGIC_ADDR_TO_INTID(addr, 1); >>      int i; >>      unsigned long flags; >> @@ -326,7 +335,7 @@ static void vgic_mmio_change_active(struct >> kvm_vcpu *vcpu, struct vgic_irq *irq, >>                      bool active) >>  { >>      unsigned long flags; >> -    struct kvm_vcpu *requester_vcpu = kvm_get_running_vcpu(); >> +    struct kvm_vcpu *requester_vcpu = vgic_get_mmio_requester_vcpu(); >> >>      raw_spin_lock_irqsave(&irq->irq_lock, flags); >> >> >> That's basically a revert of the offending code. The comment right >> above >> vgic_get_mmio_requester_vcpu() explains *why* this is valid, and why >> preempt_disable() is needed. > > I see, thanks! > >> >> Can you please give it a shot? > > Yes, it works for me: > > Tested-by: Zenghui Yu Actually, maybe a better/simpler fix would be this: diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 67ae2d5c37b2..3cf7719d3177 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -4414,7 +4414,13 @@ static void kvm_sched_out(struct preempt_notifier *pn, */ struct kvm_vcpu *kvm_get_running_vcpu(void) { - return __this_cpu_read(kvm_running_vcpu); + struct kvm_vcpu *vcpu; + + preempt_disable(); + vcpu = __this_cpu_read(kvm_running_vcpu); + preempt_enable(); + + return vcpu; } /** which matches the comment that comes with the function. Paolo, which one do you prefer? It seems to me that the intent of moving this to core code was to provide a high level API that works at all times. Thanks, M. -- Jazz is not dead. It just smells funny... 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 X-Spam-Level: X-Spam-Status: No, score=-3.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EDCD4C352A2 for ; Fri, 7 Feb 2020 10:25:30 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 860A6214AF for ; Fri, 7 Feb 2020 10:25:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="Evo1pKco" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 860A6214AF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 2678F4A522; Fri, 7 Feb 2020 05:25:30 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Authentication-Results: mm01.cs.columbia.edu (amavisd-new); dkim=softfail (fail, message has been altered) header.i=@kernel.org Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id UoXFzXj5J7hW; Fri, 7 Feb 2020 05:25:28 -0500 (EST) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id D53CC4A52E; Fri, 7 Feb 2020 05:25:28 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 8DA144A4F7 for ; Fri, 7 Feb 2020 05:25:27 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id NdTwmm9W8sUg for ; Fri, 7 Feb 2020 05:25:26 -0500 (EST) Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 333C84A4E5 for ; Fri, 7 Feb 2020 05:25:26 -0500 (EST) Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0CB342082E; Fri, 7 Feb 2020 10:25:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581071125; bh=1O89POEVxteUnANqCrA7vltm9KSiEdwONARJWVy+kbs=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=Evo1pKcoLIsgc7bb+b1tM0igAc8sXwVcpwLUBxUPwwsE2z2gg95Sn1MBADUabqRso ihAIl3GIdmkgqKgG+XPMGT/7enGW9jg32BpKDSHOD9AGttrAmt0+LRz5h2abLUfVxo VCxFJIbJgJPSr/5fSCcKA+6ooLtTpPFY82yvnKek= Received: from disco-boy.misterjones.org ([51.254.78.96] helo=www.loen.fr) by disco-boy.misterjones.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1j00p9-003VUd-E5; Fri, 07 Feb 2020 10:25:23 +0000 MIME-Version: 1.0 Date: Fri, 07 Feb 2020 10:25:23 +0000 From: Marc Zyngier To: Zenghui Yu Subject: Re: BUG: using __this_cpu_read() in preemptible [00000000] code In-Reply-To: <3e90c020-e7f3-61f1-3731-a489df0b1d9c@huawei.com> References: <318984f6-bc36-33a3-abc6-bf2295974b06@huawei.com> <828d3b538b7258f692f782b6798277cf@kernel.org> <3e90c020-e7f3-61f1-3731-a489df0b1d9c@huawei.com> Message-ID: X-Sender: maz@kernel.org User-Agent: Roundcube Webmail/1.3.8 X-SA-Exim-Connect-IP: 51.254.78.96 X-SA-Exim-Rcpt-To: yuzenghui@huawei.com, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, pbonzini@redhat.com, peterx@redhat.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Cc: pbonzini@redhat.com, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu T24gMjAyMC0wMi0wNyAxMDoxOSwgWmVuZ2h1aSBZdSB3cm90ZToKPiBIaSBNYXJjLAo+IAo+IE9u IDIwMjAvMi83IDE3OjE5LCBNYXJjIFp5bmdpZXIgd3JvdGU6Cj4+IEhpIFplbmdodWksCj4+IAo+ PiBPbiAyMDIwLTAyLTA3IDA5OjAwLCBaZW5naHVpIFl1IHdyb3RlOgo+Pj4gSGksCj4+PiAKPj4+ IFJ1bm5pbmcgYSBsYXRlc3QgcHJlZW1wdGlibGUga2VybmVsIGFuZCBzb21lIGd1ZXN0cyBvbiBp dCwKPj4+IEkgZ290IHRoZSBmb2xsb3dpbmcgbWVzc2FnZSwKPj4+IAo+Pj4gLS0tODwtLS0KPj4+ IAo+Pj4gW8KgIDYzMC4wMzE4NzBdIEJVRzogdXNpbmcgX190aGlzX2NwdV9yZWFkKCkgaW4gcHJl ZW1wdGlibGUgWzAwMDAwMDAwXQo+Pj4gY29kZTogcWVtdS1zeXN0ZW0tYWFyLzM3MjcwCj4+PiBb wqAgNjMwLjAzMTg3Ml0gY2FsbGVyIGlzIGt2bV9nZXRfcnVubmluZ192Y3B1KzB4MWMvMHgzOAo+ Pj4gW8KgIDYzMC4wMzE4NzRdIENQVTogMzIgUElEOiAzNzI3MCBDb21tOiBxZW11LXN5c3RlbS1h YXIgS2R1bXA6IGxvYWRlZAo+Pj4gTm90IHRhaW50ZWQgNS41LjArCj4+PiBbwqAgNjMwLjAzMTg3 Nl0gSGFyZHdhcmUgbmFtZTogSHVhd2VpIFRhaVNoYW4gMjI4MCAvQkMxMVNQQ0QsIEJJT1MgCj4+ PiAxLjU4Cj4+PiAxMC8yOS8yMDE4Cj4+PiBbwqAgNjMwLjAzMTg3Nl0gQ2FsbCB0cmFjZToKPj4+ IFvCoCA2MzAuMDMxODc4XcKgIGR1bXBfYmFja3RyYWNlKzB4MC8weDIwMAo+Pj4gW8KgIDYzMC4w MzE4ODBdwqAgc2hvd19zdGFjaysweDI0LzB4MzAKPj4+IFvCoCA2MzAuMDMxODgyXcKgIGR1bXBf c3RhY2srMHhiMC8weGY0Cj4+PiBbwqAgNjMwLjAzMTg4NF3CoCBfX3RoaXNfY3B1X3ByZWVtcHRf Y2hlY2srMHhjOC8weGQwCj4+PiBbwqAgNjMwLjAzMTg4Nl3CoCBrdm1fZ2V0X3J1bm5pbmdfdmNw dSsweDFjLzB4MzgKPj4+IFvCoCA2MzAuMDMxODg4XcKgIHZnaWNfbW1pb19jaGFuZ2VfYWN0aXZl LmlzcmEuNCsweDJjLzB4ZTAKPj4+IFvCoCA2MzAuMDMxODkwXcKgIF9fdmdpY19tbWlvX3dyaXRl X2NhY3RpdmUrMHg4MC8weGM4Cj4+PiBbwqAgNjMwLjAzMTg5Ml3CoCB2Z2ljX21taW9fdWFjY2Vz c193cml0ZV9jYWN0aXZlKzB4M2MvMHg1MAo+Pj4gW8KgIDYzMC4wMzE4OTRdwqAgdmdpY191YWNj ZXNzKzB4Y2MvMHgxMzgKPj4+IFvCoCA2MzAuMDMxODk2XcKgIHZnaWNfdjNfcmVkaXN0X3VhY2Nl c3MrMHg3Yy8weGE4Cj4+PiBbwqAgNjMwLjAzMTg5OF3CoCB2Z2ljX3YzX2F0dHJfcmVnc19hY2Nl c3MrMHgxYTgvMHgyMzAKPj4+IFvCoCA2MzAuMDMxOTAxXcKgIHZnaWNfdjNfc2V0X2F0dHIrMHgx YjQvMHgyOTAKPj4+IFvCoCA2MzAuMDMxOTAzXcKgIGt2bV9kZXZpY2VfaW9jdGxfYXR0cisweGJj LzB4MTEwCj4+PiBbwqAgNjMwLjAzMTkwNV3CoCBrdm1fZGV2aWNlX2lvY3RsKzB4YzQvMHgxMDgK Pj4+IFvCoCA2MzAuMDMxOTA3XcKgIGtzeXNfaW9jdGwrMHhiNC8weGQwCj4+PiBbwqAgNjMwLjAz MTkwOV3CoCBfX2FybTY0X3N5c19pb2N0bCsweDI4LzB4MzgKPj4+IFvCoCA2MzAuMDMxOTExXcKg IGVsMF9zdmNfY29tbW9uLmNvbnN0cHJvcC4xKzB4N2MvMHgxYTAKPj4+IFvCoCA2MzAuMDMxOTEz XcKgIGRvX2VsMF9zdmMrMHgzNC8weGEwCj4+PiBbwqAgNjMwLjAzMTkxNV3CoCBlbDBfc3luY19o YW5kbGVyKzB4MTI0LzB4Mjc0Cj4+PiBbwqAgNjMwLjAzMTkxNl3CoCBlbDBfc3luYysweDE0MC8w eDE4MAo+Pj4gCj4+PiAtLS04PC0tLQo+Pj4gCj4+PiBJJ20gbm93IGF0IGNvbW1pdCA5MDU2OGVj ZjU2MTU0MGZhMzMwNTExZTIxZmNkODIzYjBjMzgyOWM2Lgo+Pj4gCj4+PiBBbmQgaXQgbG9va3Mg bGlrZSB2Z2ljX2dldF9tbWlvX3JlcXVlc3Rlcl92Y3B1KCkgd2FzIGJyb2tlbiBieQo+Pj4gNzQ5 NWUyMmJiMTY1ICgiS1ZNOiBNb3ZlIHJ1bm5pbmcgVkNQVSBmcm9tIEFSTSB0byBjb21tb24gY29k ZSIpLgo+Pj4gCj4+PiBDb3VsZCBhbnlvbmUgcGxlYXNlIGhhdmUgYSBsb29rPwo+PiAKPj4gSGVy ZSB5b3UgZ286Cj4+IAo+PiBkaWZmIC0tZ2l0IGEvdmlydC9rdm0vYXJtL3ZnaWMvdmdpYy1tbWlv LmMgCj4+IGIvdmlydC9rdm0vYXJtL3ZnaWMvdmdpYy1tbWlvLmMKPj4gaW5kZXggZDY1NmViZDVm OWQ0Li5lMTczNWYxOWM5MjQgMTAwNjQ0Cj4+IC0tLSBhL3ZpcnQva3ZtL2FybS92Z2ljL3ZnaWMt bW1pby5jCj4+ICsrKyBiL3ZpcnQva3ZtL2FybS92Z2ljL3ZnaWMtbW1pby5jCj4+IEBAIC0xOTAs NiArMTkwLDE1IEBAIHVuc2lnbmVkIGxvbmcgdmdpY19tbWlvX3JlYWRfcGVuZGluZyhzdHJ1Y3Qg Cj4+IGt2bV92Y3B1ICp2Y3B1LAo+PiAgwqAgKiB2YWx1ZSBsYXRlciB3aWxsIGdpdmUgdXMgdGhl IHNhbWUgdmFsdWUgYXMgd2UgdXBkYXRlIHRoZSBwZXItQ1BVIAo+PiB2YXJpYWJsZQo+PiAgwqAg KiBpbiB0aGUgcHJlZW1wdCBub3RpZmllciBoYW5kbGVycy4KPj4gIMKgICovCj4+ICtzdGF0aWMg c3RydWN0IGt2bV92Y3B1ICp2Z2ljX2dldF9tbWlvX3JlcXVlc3Rlcl92Y3B1KHZvaWQpCj4+ICt7 Cj4+ICvCoMKgwqAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1Owo+PiArCj4+ICvCoMKgwqAgcHJlZW1w dF9kaXNhYmxlKCk7Cj4+ICvCoMKgwqAgdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7Cj4+ ICvCoMKgwqAgcHJlZW1wdF9lbmFibGUoKTsKPj4gK8KgwqDCoCByZXR1cm4gdmNwdTsKPj4gK30K Pj4gCj4+ICDCoC8qIE11c3QgYmUgY2FsbGVkIHdpdGggaXJxLT5pcnFfbG9jayBoZWxkICovCj4+ ICDCoHN0YXRpYyB2b2lkIHZnaWNfaHdfaXJxX3NwZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNw dSwgc3RydWN0IAo+PiB2Z2ljX2lycSAqaXJxLAo+PiBAQCAtMjEyLDcgKzIyMSw3IEBAIHZvaWQg dmdpY19tbWlvX3dyaXRlX3NwZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAKPj4gKnZjcHUsCj4+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3BhX3QgYWRkciwgdW5zaWduZWQg aW50IGxlbiwKPj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25l ZCBsb25nIHZhbCkKPj4gIMKgewo+PiAtwqDCoMKgIGJvb2wgaXNfdWFjY2VzcyA9ICFrdm1fZ2V0 X3J1bm5pbmdfdmNwdSgpOwo+PiArwqDCoMKgIGJvb2wgaXNfdWFjY2VzcyA9ICF2Z2ljX2dldF9t bWlvX3JlcXVlc3Rlcl92Y3B1KCk7Cj4+ICDCoMKgwqDCoCB1MzIgaW50aWQgPSBWR0lDX0FERFJf VE9fSU5USUQoYWRkciwgMSk7Cj4+ICDCoMKgwqDCoCBpbnQgaTsKPj4gIMKgwqDCoMKgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7Cj4+IEBAIC0yNjUsNyArMjc0LDcgQEAgdm9pZCB2Z2ljX21taW9fd3Jp dGVfY3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1IAo+PiAqdmNwdSwKPj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBncGFfdCBhZGRyLCB1bnNpZ25lZCBpbnQgbGVuLAo+PiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgdmFsKQo+ PiAgwqB7Cj4+IC3CoMKgwqAgYm9vbCBpc191YWNjZXNzID0gIWt2bV9nZXRfcnVubmluZ192Y3B1 KCk7Cj4+ICvCoMKgwqAgYm9vbCBpc191YWNjZXNzID0gIXZnaWNfZ2V0X21taW9fcmVxdWVzdGVy X3ZjcHUoKTsKPj4gIMKgwqDCoMKgIHUzMiBpbnRpZCA9IFZHSUNfQUREUl9UT19JTlRJRChhZGRy LCAxKTsKPj4gIMKgwqDCoMKgIGludCBpOwo+PiAgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBmbGFn czsKPj4gQEAgLTMyNiw3ICszMzUsNyBAQCBzdGF0aWMgdm9pZCB2Z2ljX21taW9fY2hhbmdlX2Fj dGl2ZShzdHJ1Y3QgCj4+IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdmdpY19pcnEgKmlycSwKPj4g IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCBhY3RpdmUpCj4+ ICDCoHsKPj4gIMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+IC3CoMKgwqAgc3RydWN0 IGt2bV92Y3B1ICpyZXF1ZXN0ZXJfdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7Cj4+ICvC oMKgwqAgc3RydWN0IGt2bV92Y3B1ICpyZXF1ZXN0ZXJfdmNwdSA9IHZnaWNfZ2V0X21taW9fcmVx dWVzdGVyX3ZjcHUoKTsKPj4gCj4+ICDCoMKgwqDCoCByYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmly cS0+aXJxX2xvY2ssIGZsYWdzKTsKPj4gCj4+IAo+PiBUaGF0J3MgYmFzaWNhbGx5IGEgcmV2ZXJ0 IG9mIHRoZSBvZmZlbmRpbmcgY29kZS4gVGhlIGNvbW1lbnQgcmlnaHQgCj4+IGFib3ZlCj4+IHZn aWNfZ2V0X21taW9fcmVxdWVzdGVyX3ZjcHUoKSBleHBsYWlucyAqd2h5KiB0aGlzIGlzIHZhbGlk LCBhbmQgd2h5Cj4+IHByZWVtcHRfZGlzYWJsZSgpIGlzIG5lZWRlZC4KPiAKPiBJIHNlZSwgdGhh bmtzIQo+IAo+PiAKPj4gQ2FuIHlvdSBwbGVhc2UgZ2l2ZSBpdCBhIHNob3Q/Cj4gCj4gWWVzLCBp dCB3b3JrcyBmb3IgbWU6Cj4gCj4gVGVzdGVkLWJ5OiBaZW5naHVpIFl1IDx5dXplbmdodWlAaHVh d2VpLmNvbT4KCkFjdHVhbGx5LCBtYXliZSBhIGJldHRlci9zaW1wbGVyIGZpeCB3b3VsZCBiZSB0 aGlzOgoKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFp bi5jCmluZGV4IDY3YWUyZDVjMzdiMi4uM2NmNzcxOWQzMTc3IDEwMDY0NAotLS0gYS92aXJ0L2t2 bS9rdm1fbWFpbi5jCisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTQ0MTQsNyArNDQxNCwx MyBAQCBzdGF0aWMgdm9pZCBrdm1fc2NoZWRfb3V0KHN0cnVjdCBwcmVlbXB0X25vdGlmaWVyIAoq cG4sCiAgICovCiAgc3RydWN0IGt2bV92Y3B1ICprdm1fZ2V0X3J1bm5pbmdfdmNwdSh2b2lkKQog IHsKLSAgICAgICAgcmV0dXJuIF9fdGhpc19jcHVfcmVhZChrdm1fcnVubmluZ192Y3B1KTsKKwlz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwl2Y3B1ID0gX190 aGlzX2NwdV9yZWFkKGt2bV9ydW5uaW5nX3ZjcHUpOworCXByZWVtcHRfZW5hYmxlKCk7CisKKwly ZXR1cm4gdmNwdTsKICB9CgogIC8qKgoKd2hpY2ggbWF0Y2hlcyB0aGUgY29tbWVudCB0aGF0IGNv bWVzIHdpdGggdGhlIGZ1bmN0aW9uLgoKUGFvbG8sIHdoaWNoIG9uZSBkbyB5b3UgcHJlZmVyPyBJ dCBzZWVtcyB0byBtZSB0aGF0IHRoZSBpbnRlbnQgb2YgbW92aW5nCnRoaXMgdG8gY29yZSBjb2Rl IHdhcyB0byBwcm92aWRlIGEgaGlnaCBsZXZlbCBBUEkgdGhhdCB3b3JrcyBhdCBhbGwgCnRpbWVz LgoKVGhhbmtzLAoKICAgICAgICAgTS4KLS0gCkphenogaXMgbm90IGRlYWQuIEl0IGp1c3Qgc21l bGxzIGZ1bm55Li4uCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmt2bWFybSBtYWlsaW5nIGxpc3QKa3ZtYXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRw czovL2xpc3RzLmNzLmNvbHVtYmlhLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2t2bWFybQo=