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=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, 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 008D6C76190 for ; Tue, 23 Jul 2019 07:57:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id CEAD02239E for ; Tue, 23 Jul 2019 07:57:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731767AbfGWH5I (ORCPT ); Tue, 23 Jul 2019 03:57:08 -0400 Received: from mail-wm1-f67.google.com ([209.85.128.67]:51948 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727170AbfGWH5I (ORCPT ); Tue, 23 Jul 2019 03:57:08 -0400 Received: by mail-wm1-f67.google.com with SMTP id 207so37516854wma.1 for ; Tue, 23 Jul 2019 00:57:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=NuBuDWbWdf8l32+iu6ukRfvQ2sFsDsKWrnzqVzUjoWY=; b=tyjstqfRNx5a7mtO1T7vVRdYFG/VY+IdP2ch/OxsEo/dp4sX4GihW4dCwGP6dfgSXc 47eWQMDJ7e4V2nxSpaqaxC+FPOLaBCMyZTLpdSeonYqYaSNZyseXngL8DPu4C4z7DLur hsT7txEGR69L3uEsYevw+vxRyY3k9cuj82QvD51MgZcXdnFos4JWuGni5ueqnuAVYdGT ueKxh1QQRPhLLMfcHWqLW7yKF511OIyVtUn8i9ZKbYaLaBbzbeaBdv2TEUL9UEG3/uxX fLhZVPb//4AsBtxVg3F/CjYrHbSX7Bl1+AHY4U4JfKKRte79gxGA0H5/pj06oYEf/p1F h3cw== X-Gm-Message-State: APjAAAV2/BS0UQeCMgO0RsKEsr6cjCxfE9ZFFTT2Wda9Y8ynBVt/XmYD WW4FFmiuAulfJu3Y+fxh2tX4sA== X-Google-Smtp-Source: APXvYqwC6nxHFSKANPxUR95/LMIHBztJQp0xUlXaK+OKZPP7Be9c6QxkDQQUebiClFlcOPoFVqhw9g== X-Received: by 2002:a1c:f415:: with SMTP id z21mr69969515wma.34.1563868625384; Tue, 23 Jul 2019 00:57:05 -0700 (PDT) Received: from redhat.com ([185.120.125.30]) by smtp.gmail.com with ESMTPSA id t13sm51368730wrr.0.2019.07.23.00.57.01 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 23 Jul 2019 00:57:04 -0700 (PDT) Date: Tue, 23 Jul 2019 03:56:59 -0400 From: "Michael S. Tsirkin" To: Jason Wang Cc: syzbot , aarcange@redhat.com, akpm@linux-foundation.org, christian@brauner.io, davem@davemloft.net, ebiederm@xmission.com, elena.reshetova@intel.com, guro@fb.com, hch@infradead.org, james.bottomley@hansenpartnership.com, jglisse@redhat.com, keescook@chromium.org, ldv@altlinux.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-parisc@vger.kernel.org, luto@amacapital.net, mhocko@suse.com, mingo@kernel.org, namit@vmware.com, peterz@infradead.org, syzkaller-bugs@googlegroups.com, viro@zeniv.linux.org.uk, wad@chromium.org Subject: Re: WARNING in __mmdrop Message-ID: <20190723032800-mutt-send-email-mst@kernel.org> References: <0000000000008dd6bb058e006938@google.com> <000000000000964b0d058e1a0483@google.com> <20190721044615-mutt-send-email-mst@kernel.org> <75c43998-3a1c-676f-99ff-3d04663c3fcc@redhat.com> <20190722035657-mutt-send-email-mst@kernel.org> <20190723010156-mutt-send-email-mst@kernel.org> <124be1a2-1c53-8e65-0f06-ee2294710822@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <124be1a2-1c53-8e65-0f06-ee2294710822@redhat.com> Sender: linux-parisc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-parisc@vger.kernel.org On Tue, Jul 23, 2019 at 01:48:52PM +0800, Jason Wang wrote: > > On 2019/7/23 下午1:02, Michael S. Tsirkin wrote: > > On Tue, Jul 23, 2019 at 11:55:28AM +0800, Jason Wang wrote: > > > On 2019/7/22 下午4:02, Michael S. Tsirkin wrote: > > > > On Mon, Jul 22, 2019 at 01:21:59PM +0800, Jason Wang wrote: > > > > > On 2019/7/21 下午6:02, Michael S. Tsirkin wrote: > > > > > > On Sat, Jul 20, 2019 at 03:08:00AM -0700, syzbot wrote: > > > > > > > syzbot has bisected this bug to: > > > > > > > > > > > > > > commit 7f466032dc9e5a61217f22ea34b2df932786bbfc > > > > > > > Author: Jason Wang > > > > > > > Date: Fri May 24 08:12:18 2019 +0000 > > > > > > > > > > > > > > vhost: access vq metadata through kernel virtual address > > > > > > > > > > > > > > bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=149a8a20600000 > > > > > > > start commit: 6d21a41b Add linux-next specific files for 20190718 > > > > > > > git tree: linux-next > > > > > > > final crash: https://syzkaller.appspot.com/x/report.txt?x=169a8a20600000 > > > > > > > console output: https://syzkaller.appspot.com/x/log.txt?x=129a8a20600000 > > > > > > > kernel config: https://syzkaller.appspot.com/x/.config?x=3430a151e1452331 > > > > > > > dashboard link: https://syzkaller.appspot.com/bug?extid=e58112d71f77113ddb7b > > > > > > > syz repro: https://syzkaller.appspot.com/x/repro.syz?x=10139e68600000 > > > > > > > > > > > > > > Reported-by: syzbot+e58112d71f77113ddb7b@syzkaller.appspotmail.com > > > > > > > Fixes: 7f466032dc9e ("vhost: access vq metadata through kernel virtual > > > > > > > address") > > > > > > > > > > > > > > For information about bisection process see: https://goo.gl/tpsmEJ#bisection > > > > > > OK I poked at this for a bit, I see several things that > > > > > > we need to fix, though I'm not yet sure it's the reason for > > > > > > the failures: > > > > > > > > > > > > > > > > > > 1. mmu_notifier_register shouldn't be called from vhost_vring_set_num_addr > > > > > > That's just a bad hack, > > > > > This is used to avoid holding lock when checking whether the addresses are > > > > > overlapped. Otherwise we need to take spinlock for each invalidation request > > > > > even if it was the va range that is not interested for us. This will be very > > > > > slow e.g during guest boot. > > > > KVM seems to do exactly that. > > > > I tried and guest does not seem to boot any slower. > > > > Do you observe any slowdown? > > > > > > Yes I do. > > > > > > > > > > Now I took a hard look at the uaddr hackery it really makes > > > > me nervious. So I think for this release we want something > > > > safe, and optimizations on top. As an alternative revert the > > > > optimization and try again for next merge window. > > > > > > Will post a series of fixes, let me know if you're ok with that. > > > > > > Thanks > > I'd prefer you to take a hard look at the patch I posted > > which makes code cleaner, > > > I did. But it looks to me a series that is only about 60 lines of code can > fix all the issues we found without reverting the uaddr optimization. Another thing I like about the patch I posted is that it removes 60 lines of code, instead of adding more :) Mostly because of unifying everything into a single cleanup function and using kfree_rcu. So how about this: do exactly what you propose but as a 2 patch series: start with the slow safe patch, and add then return uaddr optimizations on top. We can then more easily reason about whether they are safe. Basically you are saying this: - notifiers are only needed to invalidate maps - we make sure any uaddr change invalidates maps anyway - thus it's ok not to have notifiers since we do not have maps All this looks ok but the question is why do we bother unregistering them. And the answer seems to be that this is so we can start with a balanced counter: otherwise we can be between _start and _end calls. I also wonder about ordering. kvm has this: /* * Used to check for invalidations in progress, of the pfn that is * returned by pfn_to_pfn_prot below. */ mmu_seq = kvm->mmu_notifier_seq; /* * Ensure the read of mmu_notifier_seq isn't reordered with PTE reads in * gfn_to_pfn_prot() (which calls get_user_pages()), so that we don't * risk the page we get a reference to getting unmapped before we have a * chance to grab the mmu_lock without mmu_notifier_retry() noticing. * * This smp_rmb() pairs with the effective smp_wmb() of the combination * of the pte_unmap_unlock() after the PTE is zapped, and the * spin_lock() in kvm_mmu_notifier_invalidate_() before * mmu_notifier_seq is incremented. */ smp_rmb(); does this apply to us? Can't we use a seqlock instead so we do not need to worry? -- MST 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=-0.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,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 CFE35C7618E for ; Tue, 23 Jul 2019 07:57:11 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A94432239E for ; Tue, 23 Jul 2019 07:57:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="f8vyWc31" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A94432239E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=F8APV5TnB8Vfp7beyTMoLdtY47lFzxADImQ5+tdJjLM=; b=f8vyWc31NLYVHs 2GtoCiQX4OVSuVe8so78TKpfp9A83AjBRYnQ94VNHqN9lBii3p5E8BelPXlmSPScpNRoXNbwuPNQJ dB9Vdf2SPHgca2b4URwS7FH4RyBYOVkPjQ+b3NWW91jcCIE/mMzt/+fot2LrB/Wk0fAgZ2KrjcISD NSyBKHqOXcAvtQNEEp3akOJQzW88VbQ1838WEB8jNNfq5Jzh3tfYZf0Kj9i0YPLO3DztEBdstloAK 2BE5kXLv/Xom25zrBeTU7B6t6tnazLwiSRt6PxjP8OmJzF0C1lz9i4AL17lw6IYhYrgbwx6yUH19w OLp6YXoh2Kiz7KeOb2BQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hppfb-000175-80; Tue, 23 Jul 2019 07:57:11 +0000 Received: from mail-wm1-f67.google.com ([209.85.128.67]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hppfX-00016G-7P for linux-arm-kernel@lists.infradead.org; Tue, 23 Jul 2019 07:57:08 +0000 Received: by mail-wm1-f67.google.com with SMTP id s15so16212899wmj.3 for ; Tue, 23 Jul 2019 00:57:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=NuBuDWbWdf8l32+iu6ukRfvQ2sFsDsKWrnzqVzUjoWY=; b=Mn2VDzO39IPhDbGf6jwHJlFEmQN4cpib5hkumf5Dtg1GohcE9wKkxLfzUWC9W6LAeE MvuIVrLV6R/5K7AMYaYe5hZ+yL0Tcz5FNTzf6Fo7EGoC7at6E75WzXHrMloQwn6DcyYH Ig7Q55aQ5/rS5ij2+cMd5t1E/Zy/dLBqaS5gdJatF4Ue8MaAeJpGVRZfEJiS86jmamyd t0iDCgtxbF3fpX7PUyLFvyNNpLu00KdNXaxBGnve1J/qIAVs+Pq1033LMnG/mliuGXVW Jm4UMxbPfMrcwG7SEZ/gOgH5JEiJ1URe+BcgYZz99ufdQaUPWkwm5/9wO4zItGGOP1Tt oHbw== X-Gm-Message-State: APjAAAWtthHSbnjsxgmLkoh/WZYd5g74iNdxU28jmfRjfciEPpSL/mok oQOuDcD6fw4kS8mRaDn2tTqwPA== X-Google-Smtp-Source: APXvYqwC6nxHFSKANPxUR95/LMIHBztJQp0xUlXaK+OKZPP7Be9c6QxkDQQUebiClFlcOPoFVqhw9g== X-Received: by 2002:a1c:f415:: with SMTP id z21mr69969515wma.34.1563868625384; Tue, 23 Jul 2019 00:57:05 -0700 (PDT) Received: from redhat.com ([185.120.125.30]) by smtp.gmail.com with ESMTPSA id t13sm51368730wrr.0.2019.07.23.00.57.01 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 23 Jul 2019 00:57:04 -0700 (PDT) Date: Tue, 23 Jul 2019 03:56:59 -0400 From: "Michael S. Tsirkin" To: Jason Wang Subject: Re: WARNING in __mmdrop Message-ID: <20190723032800-mutt-send-email-mst@kernel.org> References: <0000000000008dd6bb058e006938@google.com> <000000000000964b0d058e1a0483@google.com> <20190721044615-mutt-send-email-mst@kernel.org> <75c43998-3a1c-676f-99ff-3d04663c3fcc@redhat.com> <20190722035657-mutt-send-email-mst@kernel.org> <20190723010156-mutt-send-email-mst@kernel.org> <124be1a2-1c53-8e65-0f06-ee2294710822@redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <124be1a2-1c53-8e65-0f06-ee2294710822@redhat.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190723_005707_268873_0CE7FC57 X-CRM114-Status: GOOD ( 25.20 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mhocko@suse.com, peterz@infradead.org, ldv@altlinux.org, james.bottomley@hansenpartnership.com, linux-mm@kvack.org, namit@vmware.com, mingo@kernel.org, elena.reshetova@intel.com, keescook@chromium.org, aarcange@redhat.com, davem@davemloft.net, hch@infradead.org, christian@brauner.io, syzbot , syzkaller-bugs@googlegroups.com, jglisse@redhat.com, viro@zeniv.linux.org.uk, linux-arm-kernel@lists.infradead.org, wad@chromium.org, linux-parisc@vger.kernel.org, linux-kernel@vger.kernel.org, luto@amacapital.net, ebiederm@xmission.com, akpm@linux-foundation.org, guro@fb.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVHVlLCBKdWwgMjMsIDIwMTkgYXQgMDE6NDg6NTJQTSArMDgwMCwgSmFzb24gV2FuZyB3cm90 ZToKPiAKPiBPbiAyMDE5LzcvMjMg5LiL5Y2IMTowMiwgTWljaGFlbCBTLiBUc2lya2luIHdyb3Rl Ogo+ID4gT24gVHVlLCBKdWwgMjMsIDIwMTkgYXQgMTE6NTU6MjhBTSArMDgwMCwgSmFzb24gV2Fu ZyB3cm90ZToKPiA+ID4gT24gMjAxOS83LzIyIOS4i+WNiDQ6MDIsIE1pY2hhZWwgUy4gVHNpcmtp biB3cm90ZToKPiA+ID4gPiBPbiBNb24sIEp1bCAyMiwgMjAxOSBhdCAwMToyMTo1OVBNICswODAw LCBKYXNvbiBXYW5nIHdyb3RlOgo+ID4gPiA+ID4gT24gMjAxOS83LzIxIOS4i+WNiDY6MDIsIE1p Y2hhZWwgUy4gVHNpcmtpbiB3cm90ZToKPiA+ID4gPiA+ID4gT24gU2F0LCBKdWwgMjAsIDIwMTkg YXQgMDM6MDg6MDBBTSAtMDcwMCwgc3l6Ym90IHdyb3RlOgo+ID4gPiA+ID4gPiA+IHN5emJvdCBo YXMgYmlzZWN0ZWQgdGhpcyBidWcgdG86Cj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gY29t bWl0IDdmNDY2MDMyZGM5ZTVhNjEyMTdmMjJlYTM0YjJkZjkzMjc4NmJiZmMKPiA+ID4gPiA+ID4g PiBBdXRob3I6IEphc29uIFdhbmcgPGphc293YW5nQHJlZGhhdC5jb20+Cj4gPiA+ID4gPiA+ID4g RGF0ZTogICBGcmkgTWF5IDI0IDA4OjEyOjE4IDIwMTkgKzAwMDAKPiA+ID4gPiA+ID4gPiAKPiA+ ID4gPiA+ID4gPiAgICAgICAgdmhvc3Q6IGFjY2VzcyB2cSBtZXRhZGF0YSB0aHJvdWdoIGtlcm5l bCB2aXJ0dWFsIGFkZHJlc3MKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBiaXNlY3Rpb24g bG9nOiAgaHR0cHM6Ly9zeXprYWxsZXIuYXBwc3BvdC5jb20veC9iaXNlY3QudHh0P3g9MTQ5YThh MjA2MDAwMDAKPiA+ID4gPiA+ID4gPiBzdGFydCBjb21taXQ6ICAgNmQyMWE0MWIgQWRkIGxpbnV4 LW5leHQgc3BlY2lmaWMgZmlsZXMgZm9yIDIwMTkwNzE4Cj4gPiA+ID4gPiA+ID4gZ2l0IHRyZWU6 ICAgICAgIGxpbnV4LW5leHQKPiA+ID4gPiA+ID4gPiBmaW5hbCBjcmFzaDogICAgaHR0cHM6Ly9z eXprYWxsZXIuYXBwc3BvdC5jb20veC9yZXBvcnQudHh0P3g9MTY5YThhMjA2MDAwMDAKPiA+ID4g PiA+ID4gPiBjb25zb2xlIG91dHB1dDogaHR0cHM6Ly9zeXprYWxsZXIuYXBwc3BvdC5jb20veC9s b2cudHh0P3g9MTI5YThhMjA2MDAwMDAKPiA+ID4gPiA+ID4gPiBrZXJuZWwgY29uZmlnOiAgaHR0 cHM6Ly9zeXprYWxsZXIuYXBwc3BvdC5jb20veC8uY29uZmlnP3g9MzQzMGExNTFlMTQ1MjMzMQo+ ID4gPiA+ID4gPiA+IGRhc2hib2FyZCBsaW5rOiBodHRwczovL3N5emthbGxlci5hcHBzcG90LmNv bS9idWc/ZXh0aWQ9ZTU4MTEyZDcxZjc3MTEzZGRiN2IKPiA+ID4gPiA+ID4gPiBzeXogcmVwcm86 ICAgICAgaHR0cHM6Ly9zeXprYWxsZXIuYXBwc3BvdC5jb20veC9yZXByby5zeXo/eD0xMDEzOWU2 ODYwMDAwMAo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IFJlcG9ydGVkLWJ5OiBzeXpib3Qr ZTU4MTEyZDcxZjc3MTEzZGRiN2JAc3l6a2FsbGVyLmFwcHNwb3RtYWlsLmNvbQo+ID4gPiA+ID4g PiA+IEZpeGVzOiA3ZjQ2NjAzMmRjOWUgKCJ2aG9zdDogYWNjZXNzIHZxIG1ldGFkYXRhIHRocm91 Z2gga2VybmVsIHZpcnR1YWwKPiA+ID4gPiA+ID4gPiBhZGRyZXNzIikKPiA+ID4gPiA+ID4gPiAK PiA+ID4gPiA+ID4gPiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgYmlzZWN0aW9uIHByb2Nlc3Mgc2Vl OiBodHRwczovL2dvby5nbC90cHNtRUojYmlzZWN0aW9uCj4gPiA+ID4gPiA+IE9LIEkgcG9rZWQg YXQgdGhpcyBmb3IgYSBiaXQsIEkgc2VlIHNldmVyYWwgdGhpbmdzIHRoYXQKPiA+ID4gPiA+ID4g d2UgbmVlZCB0byBmaXgsIHRob3VnaCBJJ20gbm90IHlldCBzdXJlIGl0J3MgdGhlIHJlYXNvbiBm b3IKPiA+ID4gPiA+ID4gdGhlIGZhaWx1cmVzOgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gCj4g PiA+ID4gPiA+IDEuIG1tdV9ub3RpZmllcl9yZWdpc3RlciBzaG91bGRuJ3QgYmUgY2FsbGVkIGZy b20gdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyCj4gPiA+ID4gPiA+ICAgICAgIFRoYXQncyBqdXN0 IGEgYmFkIGhhY2ssCj4gPiA+ID4gPiBUaGlzIGlzIHVzZWQgdG8gYXZvaWQgaG9sZGluZyBsb2Nr IHdoZW4gY2hlY2tpbmcgd2hldGhlciB0aGUgYWRkcmVzc2VzIGFyZQo+ID4gPiA+ID4gb3Zlcmxh cHBlZC4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gdGFrZSBzcGlubG9jayBmb3IgZWFjaCBpbnZhbGlk YXRpb24gcmVxdWVzdAo+ID4gPiA+ID4gZXZlbiBpZiBpdCB3YXMgdGhlIHZhIHJhbmdlIHRoYXQg aXMgbm90IGludGVyZXN0ZWQgZm9yIHVzLiBUaGlzIHdpbGwgYmUgdmVyeQo+ID4gPiA+ID4gc2xv dyBlLmcgZHVyaW5nIGd1ZXN0IGJvb3QuCj4gPiA+ID4gS1ZNIHNlZW1zIHRvIGRvIGV4YWN0bHkg dGhhdC4KPiA+ID4gPiBJIHRyaWVkIGFuZCBndWVzdCBkb2VzIG5vdCBzZWVtIHRvIGJvb3QgYW55 IHNsb3dlci4KPiA+ID4gPiBEbyB5b3Ugb2JzZXJ2ZSBhbnkgc2xvd2Rvd24/Cj4gPiA+IAo+ID4g PiBZZXMgSSBkby4KPiA+ID4gCj4gPiA+IAo+ID4gPiA+IE5vdyBJIHRvb2sgYSBoYXJkIGxvb2sg YXQgdGhlIHVhZGRyIGhhY2tlcnkgaXQgcmVhbGx5IG1ha2VzCj4gPiA+ID4gbWUgbmVydmlvdXMu IFNvIEkgdGhpbmsgZm9yIHRoaXMgcmVsZWFzZSB3ZSB3YW50IHNvbWV0aGluZwo+ID4gPiA+IHNh ZmUsIGFuZCBvcHRpbWl6YXRpb25zIG9uIHRvcC4gQXMgYW4gYWx0ZXJuYXRpdmUgcmV2ZXJ0IHRo ZQo+ID4gPiA+IG9wdGltaXphdGlvbiBhbmQgdHJ5IGFnYWluIGZvciBuZXh0IG1lcmdlIHdpbmRv dy4KPiA+ID4gCj4gPiA+IFdpbGwgcG9zdCBhIHNlcmllcyBvZiBmaXhlcywgbGV0IG1lIGtub3cg aWYgeW91J3JlIG9rIHdpdGggdGhhdC4KPiA+ID4gCj4gPiA+IFRoYW5rcwo+ID4gSSdkIHByZWZl ciB5b3UgdG8gdGFrZSBhIGhhcmQgbG9vayBhdCB0aGUgcGF0Y2ggSSBwb3N0ZWQKPiA+IHdoaWNo IG1ha2VzIGNvZGUgY2xlYW5lciwKPiAKPiAKPiBJIGRpZC4gQnV0IGl0IGxvb2tzIHRvIG1lIGEg c2VyaWVzIHRoYXQgaXMgb25seSBhYm91dCA2MCBsaW5lcyBvZiBjb2RlIGNhbgo+IGZpeCBhbGwg dGhlIGlzc3VlcyB3ZSBmb3VuZCB3aXRob3V0IHJldmVydGluZyB0aGUgdWFkZHIgb3B0aW1pemF0 aW9uLgoKQW5vdGhlciB0aGluZyBJIGxpa2UgYWJvdXQgdGhlIHBhdGNoIEkgcG9zdGVkIGlzIHRo YXQKaXQgcmVtb3ZlcyA2MCBsaW5lcyBvZiBjb2RlLCBpbnN0ZWFkIG9mIGFkZGluZyBtb3JlIDop Ck1vc3RseSBiZWNhdXNlIG9mIHVuaWZ5aW5nIGV2ZXJ5dGhpbmcgaW50bwphIHNpbmdsZSBjbGVh bnVwIGZ1bmN0aW9uIGFuZCB1c2luZyBrZnJlZV9yY3UuCgpTbyBob3cgYWJvdXQgdGhpczogZG8g ZXhhY3RseSB3aGF0IHlvdSBwcm9wb3NlIGJ1dCBhcyBhIDIgcGF0Y2ggc2VyaWVzOgpzdGFydCB3 aXRoIHRoZSBzbG93IHNhZmUgcGF0Y2gsIGFuZCBhZGQgdGhlbiByZXR1cm4gdWFkZHIgb3B0aW1p emF0aW9ucwpvbiB0b3AuIFdlIGNhbiB0aGVuIG1vcmUgZWFzaWx5IHJlYXNvbiBhYm91dCB3aGV0 aGVyIHRoZXkgYXJlIHNhZmUuCgpCYXNpY2FsbHkgeW91IGFyZSBzYXlpbmcgdGhpczoKCS0gbm90 aWZpZXJzIGFyZSBvbmx5IG5lZWRlZCB0byBpbnZhbGlkYXRlIG1hcHMKCS0gd2UgbWFrZSBzdXJl IGFueSB1YWRkciBjaGFuZ2UgaW52YWxpZGF0ZXMgbWFwcyBhbnl3YXkKCS0gdGh1cyBpdCdzIG9r IG5vdCB0byBoYXZlIG5vdGlmaWVycyBzaW5jZSB3ZSBkbwoJICBub3QgaGF2ZSBtYXBzCgpBbGwg dGhpcyBsb29rcyBvayBidXQgdGhlIHF1ZXN0aW9uIGlzIHdoeSBkbyB3ZQpib3RoZXIgdW5yZWdp c3RlcmluZyB0aGVtLiBBbmQgdGhlIGFuc3dlciBzZWVtcyB0bwpiZSB0aGF0IHRoaXMgaXMgc28g d2UgY2FuIHN0YXJ0IHdpdGggYSBiYWxhbmNlZApjb3VudGVyOiBvdGhlcndpc2Ugd2UgY2FuIGJl IGJldHdlZW4gX3N0YXJ0IGFuZApfZW5kIGNhbGxzLgoKSSBhbHNvIHdvbmRlciBhYm91dCBvcmRl cmluZy4ga3ZtIGhhcyB0aGlzOgogICAgICAgLyoKICAgICAgICAgKiBVc2VkIHRvIGNoZWNrIGZv ciBpbnZhbGlkYXRpb25zIGluIHByb2dyZXNzLCBvZiB0aGUgcGZuIHRoYXQgaXMKICAgICAgICAg KiByZXR1cm5lZCBieSBwZm5fdG9fcGZuX3Byb3QgYmVsb3cuCiAgICAgICAgICovCiAgICAgICAg bW11X3NlcSA9IGt2bS0+bW11X25vdGlmaWVyX3NlcTsKICAgICAgICAvKgogICAgICAgICAqIEVu c3VyZSB0aGUgcmVhZCBvZiBtbXVfbm90aWZpZXJfc2VxIGlzbid0IHJlb3JkZXJlZCB3aXRoIFBU RSByZWFkcyBpbgogICAgICAgICAqIGdmbl90b19wZm5fcHJvdCgpICh3aGljaCBjYWxscyBnZXRf dXNlcl9wYWdlcygpKSwgc28gdGhhdCB3ZSBkb24ndAogICAgICAgICAqIHJpc2sgdGhlIHBhZ2Ug d2UgZ2V0IGEgcmVmZXJlbmNlIHRvIGdldHRpbmcgdW5tYXBwZWQgYmVmb3JlIHdlIGhhdmUgYQog ICAgICAgICAqIGNoYW5jZSB0byBncmFiIHRoZSBtbXVfbG9jayB3aXRob3V0IG1tdV9ub3RpZmll cl9yZXRyeSgpIG5vdGljaW5nLgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBzbXBfcm1iKCkg cGFpcnMgd2l0aCB0aGUgZWZmZWN0aXZlIHNtcF93bWIoKSBvZiB0aGUgY29tYmluYXRpb24KICAg ICAgICAgKiBvZiB0aGUgcHRlX3VubWFwX3VubG9jaygpIGFmdGVyIHRoZSBQVEUgaXMgemFwcGVk LCBhbmQgdGhlCiAgICAgICAgICogc3Bpbl9sb2NrKCkgaW4ga3ZtX21tdV9ub3RpZmllcl9pbnZh bGlkYXRlXzxwYWdlfHJhbmdlX2VuZD4oKSBiZWZvcmUKICAgICAgICAgKiBtbXVfbm90aWZpZXJf c2VxIGlzIGluY3JlbWVudGVkLgogICAgICAgICAqLwogICAgICAgIHNtcF9ybWIoKTsKCmRvZXMg dGhpcyBhcHBseSB0byB1cz8gQ2FuJ3Qgd2UgdXNlIGEgc2VxbG9jayBpbnN0ZWFkIHNvIHdlIGRv Cm5vdCBuZWVkIHRvIHdvcnJ5PwoKLS0gCk1TVAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgt YXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=