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.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS 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 4860EC5DF60 for ; Thu, 7 Nov 2019 20:06:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 02BA4214D8 for ; Thu, 7 Nov 2019 20:06:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="jYDOc+HB" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725991AbfKGUGS (ORCPT ); Thu, 7 Nov 2019 15:06:18 -0500 Received: from mail-eopbgr130089.outbound.protection.outlook.com ([40.107.13.89]:31087 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725823AbfKGUGS (ORCPT ); Thu, 7 Nov 2019 15:06:18 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XbYR/uRivvAfvGKhO6vEH5IoVw52viT8SbTkxoUdnPU5seHSfhOvS2pOsgI7vWXVHIxG8+eaJw8xtq9dJW7R/kVLdusfK9tD6Z4kgQZnuTTEXDZQFXIjB0tFb5TuCVN8xGcmwE5gYYj67+hYV+TPwvT/qKIdL4J7iu0hGyxFT6XcFhlwOm2+vLj9VDpSJp9bT5bd+oYvfN4QmlI06xTqyqtMJ9Q4E9aTTmukC1nScZtQKYa53HybhzO92PBWCFLsD2kOHuBvrd4W5Ho5133vt1WwvIVANMNiiy1eFWh9EL156Ic4Vc2efxwulllFMoQSEe9fgXadBQ7uIV3Ta6Oh6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZLGtICPXHQeYMx3zwEUZ2kEBvqnlPF/xDCnKoeEU1Y=; b=FMGEdkApgkM+8CTxEC4sr0tb6phrZTIvf9VXG0mLTfnbMU6u7iAGzjR65ihQBvgTRsbnTmpr0l1EJ+766Buy7vse76t6FVgFElI8cNqi1KgKjIre76WBrjPWG8dbxsGPP9l5p9BtLEsAADhX6k7yWXA74vLtX7xxlapDkN7E+ki9U+QhAW2VDbIxzM1pdjn7NHa+iotezNzepsZ7bOjxNxgcxQPpeLQzL9IrCYEt33bWBvMGaSs6xJ6S5Rke8aUtmWlcl5Vm/lx46i5WIngLBE1iPeWTyrJN27c563sqvoXlqfRf79p7RVQ7wYMT+jW75ytqGn5ULIaP6aBzCD3yYQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZLGtICPXHQeYMx3zwEUZ2kEBvqnlPF/xDCnKoeEU1Y=; b=jYDOc+HBZxt1WV25q8ShhQioI8qPveMDugD/wyFzOh+eQjHsx+PF5jCAKTLEC3m5Bi5ymyLIM96x9SqxS79eYhdiTQ76YSSclVoxJ/0Hfp3ckpgkI0G6Io5ZevRDAoiCEW8T8T7qjY9uIpY2bycj8Z8Hu+zqMI1gIvSB5AFl2y0= Received: from VI1PR05MB4141.eurprd05.prod.outlook.com (52.133.14.15) by VI1PR05MB6653.eurprd05.prod.outlook.com (10.141.128.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2430.20; Thu, 7 Nov 2019 20:06:09 +0000 Received: from VI1PR05MB4141.eurprd05.prod.outlook.com ([fe80::b179:e8bf:22d4:bf8d]) by VI1PR05MB4141.eurprd05.prod.outlook.com ([fe80::b179:e8bf:22d4:bf8d%5]) with mapi id 15.20.2408.028; Thu, 7 Nov 2019 20:06:09 +0000 From: Jason Gunthorpe To: John Hubbard CC: "linux-mm@kvack.org" , Jerome Glisse , Ralph Campbell , "Felix.Kuehling@amd.com" , "linux-rdma@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , "amd-gfx@lists.freedesktop.org" , Alex Deucher , Ben Skeggs , Boris Ostrovsky , =?iso-8859-1?Q?Christian_K=F6nig?= , David Zhou , Dennis Dalessandro , Juergen Gross , Mike Marciniszyn , Oleksandr Andrushchenko , Petr Cvek , Stefano Stabellini , "nouveau@lists.freedesktop.org" , "xen-devel@lists.xenproject.org" , Christoph Hellwig , Andrea Arcangeli , Michal Hocko Subject: Re: [PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier Thread-Topic: [PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier Thread-Index: AQHVjcvJYOye0EiwZkisYK74G5bmhqd+54eAgAFKcgA= Date: Thu, 7 Nov 2019 20:06:08 +0000 Message-ID: <20191107200604.GB21728@mellanox.com> References: <20191028201032.6352-1-jgg@ziepe.ca> <20191028201032.6352-3-jgg@ziepe.ca> <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> In-Reply-To: <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BL0PR1501CA0002.namprd15.prod.outlook.com (2603:10b6:207:17::15) To VI1PR05MB4141.eurprd05.prod.outlook.com (2603:10a6:803:44::15) authentication-results: spf=none (sender IP is ) smtp.mailfrom=jgg@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [142.162.113.180] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 689fa69c-2ee1-4f94-10df-08d763bdedcc x-ms-traffictypediagnostic: VI1PR05MB6653: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0214EB3F68 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(346002)(39850400004)(136003)(396003)(366004)(376002)(199004)(189003)(476003)(1076003)(6916009)(71190400001)(486006)(71200400001)(305945005)(4326008)(7736002)(25786009)(30864003)(7416002)(446003)(6246003)(5660300002)(36756003)(186003)(81166006)(8676002)(256004)(14444005)(26005)(81156014)(386003)(102836004)(11346002)(33656002)(86362001)(2906002)(66946007)(76176011)(66446008)(478600001)(2616005)(99286004)(229853002)(66476007)(316002)(6116002)(6486002)(8936002)(6506007)(14454004)(6436002)(3846002)(52116002)(64756008)(66556008)(66066001)(6512007)(54906003);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR05MB6653;H:VI1PR05MB4141.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OhxIMxuIpy97a6eE8TxWtNSzY1GNivpNQHbZMy5HgAaLZV7EjFuJJFhhRC0eSEkk23Ucrn5O6/y8uDahQtqSzMgby5NIybxB6oNl3Tiy9YpQ/HGz6LjYfXGxr+iGWymZI46KuUjyOEW/Artb2IvH838mCDoq8r/svTaI9YTzMoGfguXhtoXCRR2ZOl4cPQW4zzQnaswTnKGwLrR9BdOni57n5G2KiYnbGGwYqSbn0Rs5er02tMs9PEHo7T/ry3vJoUO2MT6fwulWLcEBzzME2jiqevWPh/jL7N29Zz0Lfa7yO93RO3mb4XY7TTNSLSLcodhCWMlcIHdfW6qsnUZNPApRfktRwlTqrwII+xDEB2VTJvyQQRQ+APx9dokWh8wQ2QUibNnfvufJ6YYEtzs6Pk2B1CDbux6O3Qrw39NEUdcxxSykQOPIvJ+iZGKXilMy x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="iso-8859-1" Content-ID: <6113418291CBA3499D9869CD0CC8D233@eurprd05.prod.outlook.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 689fa69c-2ee1-4f94-10df-08d763bdedcc X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Nov 2019 20:06:09.1763 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +TuBIUtrktnBKZ6NZvy1veC+LPb7Nd6ABDYqCTCaNtlIuaUguMa6aZ8NnTlNlDmfIufFo0WoiB5EsbzpMF64bw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB6653 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org On Wed, Nov 06, 2019 at 04:23:21PM -0800, John Hubbard wrote: =20 > Nice design, I love the seq foundation! So far, I'm not able to spot anyt= hing > actually wrong with the implementation, sorry about that.=20 Alas :( I feel there must be a bug in here still, but onwards! One of the main sad points was it didn't make sense to use the existing seqlock/seqcount primitives as they have both the wrong write concurrancy model and extra barriers that are not needed when it is always manipulated under a spinlock =20 > 1. There is a rather severe naming overlap (not technically a naming conf= lict, > but still) with existing mmn work, which already has, for example: >=20 > struct mmu_notifier_range >=20 > ...and you're adding: >=20 > struct mmu_range_notifier >=20 > ...so I'll try to help sort that out. Yes, I've been sad about this too. > So this should read: >=20 > enum mmu_range_notifier_event { > MMU_NOTIFY_RELEASE, > }; >=20 > ...assuming that we stay with "mmu_range_notifier" as a core name for thi= s=20 > whole thing. >=20 > Also, it is best moved down to be next to the new MNR structs, so that al= l the > MNR stuff is in one group. I agree with Jerome, this enum is part of the 'struct mmu_notifier_range' (ie the description of the invalidation) and it doesn't really matter that only these new notifiers can be called with this type, it is still part of the mmu_notifier_range. The comment already says it only applies to the mmu_range_notifier scheme.. > > #define MMU_NOTIFIER_RANGE_BLOCKABLE (1 << 0) > > @@ -222,6 +228,26 @@ struct mmu_notifier { > > unsigned int users; > > }; > > =20 >=20 > That should also be moved down, next to the new structs. Which this? > > +/** > > + * struct mmu_range_notifier_ops > > + * @invalidate: Upon return the caller must stop using any SPTEs withi= n this > > + * range, this function can sleep. Return false if blocki= ng was > > + * required but range is non-blocking > > + */ >=20 > How about this (I'm not sure I fully understand the return value, though)= : >=20 > /** > * struct mmu_range_notifier_ops > * @invalidate: Upon return the caller must stop using any SPTEs within t= his > * range. > * > * This function is permitted to sleep. > * > * @Return: false if blocking was required, but @range is > * non-blocking. > * > */ Is this kdoc format for function pointers? =20 >=20 > > +struct mmu_range_notifier_ops { > > + bool (*invalidate)(struct mmu_range_notifier *mrn, > > + const struct mmu_notifier_range *range, > > + unsigned long cur_seq); > > +}; > > + > > +struct mmu_range_notifier { > > + struct interval_tree_node interval_tree; > > + const struct mmu_range_notifier_ops *ops; > > + struct hlist_node deferred_item; > > + unsigned long invalidate_seq; > > + struct mm_struct *mm; > > +}; > > + >=20 > Again, now we have the new struct mmu_range_notifier, and the old=20 > struct mmu_notifier_range, and it's not good. >=20 > Ideas: >=20 > a) Live with it. >=20 > b) (Discarded, too many callers): rename old one. Nope. >=20 > c) Rename new one. Ideas: >=20 > struct mmu_interval_notifier > struct mmu_range_intersection > ...other ideas? This odd duality has already cause some confusion, but names here are hard. mmu_interval_notifier is the best alternative I've heard. Changing this name is a lot of work - are we happy 'mmu_interval_notifier' is the right choice? > > +/** > > + * mmu_range_set_seq - Save the invalidation sequence >=20 > How about: >=20 > * mmu_range_set_seq - Set the .invalidate_seq to a new value. It is not a 'new value', it is a value that is provided to the invalidate callback >=20 > > + * @mrn - The mrn passed to invalidate > > + * @cur_seq - The cur_seq passed to invalidate > > + * > > + * This must be called unconditionally from the invalidate callback of= a > > + * struct mmu_range_notifier_ops under the same lock that is used to c= all > > + * mmu_range_read_retry(). It updates the sequence number for later us= e by > > + * mmu_range_read_retry(). > > + * > > + * If the user does not call mmu_range_read_begin() or mmu_range_read_= retry() >=20 > nit: "caller" is better than "user", when referring to...well, callers. "= user"=20 > most often refers to user space, whereas a call stack and function callin= g is=20 > clearly what you're referring to here (and in other places, especially "u= ser lock"). Done > > +/** > > + * mmu_range_check_retry - Test if a collision has occurred > > + * mrn: The range under lock > > + * seq: The return of the matching mmu_range_read_begin() > > + * > > + * This can be used in the critical section between mmu_range_read_beg= in() and > > + * mmu_range_read_retry(). A return of true indicates an invalidation= has > > + * collided with this lock and a future mmu_range_read_retry() will re= turn > > + * true. > > + * > > + * False is not reliable and only suggests a collision has not happene= d. It >=20 > let's say "suggests that a collision *may* not have occurred." =20 Sure > > +/* > > + * This is a collision-retry read-side/write-side 'lock', a lot like a > > + * seqcount, however this allows multiple write-sides to hold it at > > + * once. Conceptually the write side is protecting the values of the P= TEs in > > + * this mm, such that PTES cannot be read into SPTEs while any writer = exists. >=20 > Just to be kind, can we say "SPTEs (shadow PTEs)", just this once? :) Haha, sure, why not > > + * The write side has two states, fully excluded: > > + * - mm->active_invalidate_ranges !=3D 0 > > + * - mnn->invalidate_seq & 1 =3D=3D True > > + * - some range on the mm_struct is being invalidated > > + * - the itree is not allowed to change > > + * > > + * And partially excluded: > > + * - mm->active_invalidate_ranges !=3D 0 >=20 > I assume this implies mnn->invalidate_seq & 1 =3D=3D False in this case? = If so, > let's say so. I'm probably getting that wrong, too. Yes that is right, done >=20 > > + * - some range on the mm_struct is being invalidated > > + * - the itree is allowed to change > > + * > > + * The later state avoids some expensive work on inv_end in the common= case of > > + * no mrn monitoring the VA. > > + */ > > +static bool mn_itree_is_invalidating(struct mmu_notifier_mm *mmn_mm) > > +{ > > + lockdep_assert_held(&mmn_mm->lock); > > + return mmn_mm->invalidate_seq & 1; > > +} > > + > > +static struct mmu_range_notifier * > > +mn_itree_inv_start_range(struct mmu_notifier_mm *mmn_mm, > > + const struct mmu_notifier_range *range, > > + unsigned long *seq) > > +{ > > + struct interval_tree_node *node; > > + struct mmu_range_notifier *res =3D NULL; > > + > > + spin_lock(&mmn_mm->lock); > > + mmn_mm->active_invalidate_ranges++; > > + node =3D interval_tree_iter_first(&mmn_mm->itree, range->start, > > + range->end - 1); > > + if (node) { > > + mmn_mm->invalidate_seq |=3D 1; >=20 >=20 > OK, this either needs more documentation and assertions, or a different > approach. Because I see addition, subtraction, AND, OR and booleans > all being applied to this field, and it's darn near hopeless to figure > out whether or not it really is even or odd at the right times. This is a standard design for a seqlock scheme and follows the existing design of the linux seq lock. The lower bit indicates the lock'd state and the upper bits indicate the generation of the lock The operations on the lock itself are then: seq |=3D 1 # Take the lock seq++ # Release an acquired lock seq & 1 # True if locked Which is how this is written > Different approach: why not just add a mmn_mm->is_invalidating=20 > member variable? It's not like you're short of space in that struct. Splitting it makes alot of stuff more complex and unnatural. The ops above could be put in inline wrappers, but they only occur only in functions already called mn_itree_inv_start_range() and mn_itree_inv_end() and mn_itree_is_invalidating(). There is the one 'take the lock' outlier in __mmu_range_notifier_insert() though > > +static void mn_itree_inv_end(struct mmu_notifier_mm *mmn_mm) > > +{ > > + struct mmu_range_notifier *mrn; > > + struct hlist_node *next; > > + bool need_wake =3D false; > > + > > + spin_lock(&mmn_mm->lock); > > + if (--mmn_mm->active_invalidate_ranges || > > + !mn_itree_is_invalidating(mmn_mm)) { > > + spin_unlock(&mmn_mm->lock); > > + return; > > + } > > + > > + mmn_mm->invalidate_seq++; >=20 > Is this the right place for an assertion that this is now an even value? Yes, but I'm reluctant to add such a runtime check on this fastish path.. How about a comment? > > + need_wake =3D true; > > + > > + /* > > + * The inv_end incorporates a deferred mechanism like > > + * rtnl_lock(). Adds and removes are queued until the final inv_end >=20 > Let me point out that rtnl_lock() itself is a one-liner that calls mutex_= lock(). > But I suppose if one studies that file closely there is more. :) Lets change that to rtnl_unlock() then > > + spin_lock(&mmn_mm->lock); > > + /* Pairs with the WRITE_ONCE in mmu_range_set_seq() */ > > + seq =3D READ_ONCE(mrn->invalidate_seq); > > + is_invalidating =3D seq =3D=3D mmn_mm->invalidate_seq; > > + spin_unlock(&mmn_mm->lock); > > + > > + /* > > + * mrn->invalidate_seq is always set to an odd value. This ensures >=20 > This claim just looks wrong the first N times one reads the code, given t= hat > there is mmu_range_set_seq() to set it to an arbitrary value! Maybe > you mean mmu_range_set_seq() is NOT to be used to set to an arbitary value, it must only be used to set to the value provided in the invalidate() callback and that value is always odd. Lets make this super clear: /* * mrn->invalidate_seq must always be set to an odd value via * mmu_range_set_seq() using the provided cur_seq from * mn_itree_inv_start_range(). This ensures that if seq does wrap we * will always clear the below sleep in some reasonable time as * mmn_mm->invalidate_seq is even in the idle state. */ The invarient is that the 'struct mmu_range_notifier' always has an odd 'seq' > > + * that if seq does wrap we will always clear the below sleep in some > > + * reasonable time as mmn_mm->invalidate_seq is even in the idle > > + * state. > > + */ >=20 > Let's move that comment higher up. The code that follows it has nothing t= o > do with it, so it's confusing here. The comment is explaining why the wait_event is safe, even if we wrap the sequence number, which is a significant and very subtle corner case. This is really why we have the even/odd thing at all. > > + spin_lock(&mmn_mm->lock); > > + if (mmn_mm->active_invalidate_ranges) { > > + if (mn_itree_is_invalidating(mmn_mm)) > > + hlist_add_head(&mrn->deferred_item, > > + &mmn_mm->deferred_list); > > + else { > > + mmn_mm->invalidate_seq |=3D 1; > > + interval_tree_insert(&mrn->interval_tree, > > + &mmn_mm->itree); > > + } > > + mrn->invalidate_seq =3D mmn_mm->invalidate_seq; > > + } else { > > + WARN_ON(mn_itree_is_invalidating(mmn_mm)); > > + mrn->invalidate_seq =3D mmn_mm->invalidate_seq - 1; >=20 > Ohhh, checkmate. I lose. Why is *subtracting* the right thing to do > for seq numbers here? I'm acutely unhappy trying to figure this out. > I suspect it's another unfortunate side effect of trying to use the > lower bit of the seq number (even/odd) for something else. No, this is actually done for the seq number itself. We need to generate a seq number that is !=3D the current invalidate_seq as this new mrn is not invalidating. The best seq to use is one that the invalidate_seq will not reach for a long time, ie 'invalidate_seq + MAX' which is expressed as -1 The even/odd thing just takes care of itself naturally here as invalidate_seq is guarenteed even and -1 creates both an odd mrn value and a good seq number. The algorithm would actually work correctly if this was 'mrn->invalidate_seq =3D 1', but occasionally things would block when they don't need to block. Lets add a comment: /* * The starting seq for a mrn not under invalidation should be * odd, not equal to the current invalidate_seq and * invalidate_seq should not 'wrap' to the new seq any time * soon. */ > > +int mmu_range_notifier_insert(struct mmu_range_notifier *mrn, > > + unsigned long start, unsigned long length, > > + struct mm_struct *mm) > > +{ > > + struct mmu_notifier_mm *mmn_mm; > > + int ret; >=20 > Hmmm, I think a later patch improperly changes the above to "int ret =3D = 0;". > I'll check on that. It's correct here, though. Looks OK in my tree? > > + might_lock(&mm->mmap_sem); > > + > > + mmn_mm =3D smp_load_acquire(&mm->mmu_notifier_mm); >=20 > What does the above pair with? Should have a comment that specifies that. smp_load_acquire() always pairs with smp_store_release() to the same memory, there is only one store, is a comment really needed? Below are the comment updates I made, thanks! Jason diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h index 51b92ba013ddce..065c95002e9602 100644 --- a/include/linux/mmu_notifier.h +++ b/include/linux/mmu_notifier.h @@ -302,15 +302,15 @@ void mmu_range_notifier_remove(struct mmu_range_notif= ier *mrn); /** * mmu_range_set_seq - Save the invalidation sequence * @mrn - The mrn passed to invalidate - * @cur_seq - The cur_seq passed to invalidate + * @cur_seq - The cur_seq passed to the invalidate() callback * * This must be called unconditionally from the invalidate callback of a * struct mmu_range_notifier_ops under the same lock that is used to call * mmu_range_read_retry(). It updates the sequence number for later use by - * mmu_range_read_retry(). + * mmu_range_read_retry(). The provided cur_seq will always be odd. * - * If the user does not call mmu_range_read_begin() or mmu_range_read_retr= y() - * then this call is not required. + * If the caller does not call mmu_range_read_begin() or + * mmu_range_read_retry() then this call is not required. */ static inline void mmu_range_set_seq(struct mmu_range_notifier *mrn, unsigned long cur_seq) @@ -348,8 +348,9 @@ static inline bool mmu_range_read_retry(struct mmu_rang= e_notifier *mrn, * collided with this lock and a future mmu_range_read_retry() will return * true. * - * False is not reliable and only suggests a collision has not happened. I= t - * can be called many times and does not have to hold the user provided lo= ck. + * False is not reliable and only suggests a collision may not have + * occured. It can be called many times and does not have to hold the user + * provided lock. * * This call can be used as part of loops and other expensive operations t= o * expedite a retry. diff --git a/mm/mmu_notifier.c b/mm/mmu_notifier.c index 2b7485919ecfeb..afe1e2d94183f8 100644 --- a/mm/mmu_notifier.c +++ b/mm/mmu_notifier.c @@ -51,7 +51,8 @@ struct mmu_notifier_mm { * This is a collision-retry read-side/write-side 'lock', a lot like a * seqcount, however this allows multiple write-sides to hold it at * once. Conceptually the write side is protecting the values of the PTEs = in - * this mm, such that PTES cannot be read into SPTEs while any writer exis= ts. + * this mm, such that PTES cannot be read into SPTEs (shadow PTEs) while a= ny + * writer exists. * * Note that the core mm creates nested invalidate_range_start()/end() reg= ions * within the same thread, and runs invalidate_range_start()/end() in para= llel @@ -64,12 +65,13 @@ struct mmu_notifier_mm { * * The write side has two states, fully excluded: * - mm->active_invalidate_ranges !=3D 0 - * - mnn->invalidate_seq & 1 =3D=3D True + * - mnn->invalidate_seq & 1 =3D=3D True (odd) * - some range on the mm_struct is being invalidated * - the itree is not allowed to change * * And partially excluded: * - mm->active_invalidate_ranges !=3D 0 + * - mnn->invalidate_seq & 1 =3D=3D False (even) * - some range on the mm_struct is being invalidated * - the itree is allowed to change * @@ -131,12 +133,13 @@ static void mn_itree_inv_end(struct mmu_notifier_mm *= mmn_mm) return; } =20 + /* Make invalidate_seq even */ mmn_mm->invalidate_seq++; need_wake =3D true; =20 /* * The inv_end incorporates a deferred mechanism like - * rtnl_lock(). Adds and removes are queued until the final inv_end + * rtnl_unlock(). Adds and removes are queued until the final inv_end * happens then they are progressed. This arrangement for tree updates * is used to avoid using a blocking lock during * invalidate_range_start. @@ -230,10 +233,11 @@ unsigned long mmu_range_read_begin(struct mmu_range_n= otifier *mrn) spin_unlock(&mmn_mm->lock); =20 /* - * mrn->invalidate_seq is always set to an odd value. This ensures - * that if seq does wrap we will always clear the below sleep in some - * reasonable time as mmn_mm->invalidate_seq is even in the idle - * state. + * mrn->invalidate_seq must always be set to an odd value via + * mmu_range_set_seq() using the provided cur_seq from + * mn_itree_inv_start_range(). This ensures that if seq does wrap we + * will always clear the below sleep in some reasonable time as + * mmn_mm->invalidate_seq is even in the idle state. */ lock_map_acquire(&__mmu_notifier_invalidate_range_start_map); lock_map_release(&__mmu_notifier_invalidate_range_start_map); @@ -892,6 +896,12 @@ static int __mmu_range_notifier_insert(struct mmu_rang= e_notifier *mrn, mrn->invalidate_seq =3D mmn_mm->invalidate_seq; } else { WARN_ON(mn_itree_is_invalidating(mmn_mm)); + /* + * The starting seq for a mrn not under invalidation should be + * odd, not equal to the current invalidate_seq and + * invalidate_seq should not 'wrap' to the new seq any time + * soon. + */ mrn->invalidate_seq =3D mmn_mm->invalidate_seq - 1; interval_tree_insert(&mrn->interval_tree, &mmn_mm->itree); } From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Gunthorpe Subject: Re: [PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier Date: Thu, 7 Nov 2019 20:06:08 +0000 Message-ID: <20191107200604.GB21728@mellanox.com> References: <20191028201032.6352-1-jgg@ziepe.ca> <20191028201032.6352-3-jgg@ziepe.ca> <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> Content-Language: en-US Content-ID: <6113418291CBA3499D9869CD0CC8D233@eurprd05.prod.outlook.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: John Hubbard Cc: "nouveau@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , Michal Hocko , "linux-mm@kvack.org" , Andrea Arcangeli , David Zhou , Stefano Stabellini , Oleksandr Andrushchenko , "linux-rdma@vger.kernel.org" , "amd-gfx@lists.freedesktop.org" , Christoph Hellwig , Ben Skeggs , "xen-devel@lists.xenproject.org" , Ralph Campbell , Jerome Glisse , Boris Ostrovsky , Petr Cvek , Juergen Gross , Mike Marciniszyn List-Id: nouveau.vger.kernel.org T24gV2VkLCBOb3YgMDYsIDIwMTkgYXQgMDQ6MjM6MjFQTSAtMDgwMCwgSm9obiBIdWJiYXJkIHdy b3RlOgogCj4gTmljZSBkZXNpZ24sIEkgbG92ZSB0aGUgc2VxIGZvdW5kYXRpb24hIFNvIGZhciwg SSdtIG5vdCBhYmxlIHRvIHNwb3QgYW55dGhpbmcKPiBhY3R1YWxseSB3cm9uZyB3aXRoIHRoZSBp bXBsZW1lbnRhdGlvbiwgc29ycnkgYWJvdXQgdGhhdC4gCgpBbGFzIDooIEkgZmVlbCB0aGVyZSBt dXN0IGJlIGEgYnVnIGluIGhlcmUgc3RpbGwsIGJ1dCBvbndhcmRzIQoKT25lIG9mIHRoZSBtYWlu IHNhZCBwb2ludHMgd2FzIGl0IGRpZG4ndCBtYWtlIHNlbnNlIHRvIHVzZSB0aGUKZXhpc3Rpbmcg c2VxbG9jay9zZXFjb3VudCBwcmltaXRpdmVzIGFzIHRoZXkgaGF2ZSBib3RoIHRoZSB3cm9uZyB3 cml0ZQpjb25jdXJyYW5jeSBtb2RlbCBhbmQgZXh0cmEgYmFycmllcnMgdGhhdCBhcmUgbm90IG5l ZWRlZCB3aGVuIGl0IGlzCmFsd2F5cyBtYW5pcHVsYXRlZCB1bmRlciBhIHNwaW5sb2NrCiAKPiAx LiBUaGVyZSBpcyBhIHJhdGhlciBzZXZlcmUgbmFtaW5nIG92ZXJsYXAgKG5vdCB0ZWNobmljYWxs eSBhIG5hbWluZyBjb25mbGljdCwKPiBidXQgc3RpbGwpIHdpdGggZXhpc3RpbmcgbW1uIHdvcmss IHdoaWNoIGFscmVhZHkgaGFzLCBmb3IgZXhhbXBsZToKPiAKPiAgICAgc3RydWN0IG1tdV9ub3Rp Zmllcl9yYW5nZQo+IAo+IC4uLmFuZCB5b3UncmUgYWRkaW5nOgo+IAo+ICAgICBzdHJ1Y3QgbW11 X3JhbmdlX25vdGlmaWVyCj4gCj4gLi4uc28gSSdsbCB0cnkgdG8gaGVscCBzb3J0IHRoYXQgb3V0 LgoKWWVzLCBJJ3ZlIGJlZW4gc2FkIGFib3V0IHRoaXMgdG9vLgoKPiBTbyB0aGlzIHNob3VsZCBy ZWFkOgo+IAo+IGVudW0gbW11X3JhbmdlX25vdGlmaWVyX2V2ZW50IHsKPiAJTU1VX05PVElGWV9S RUxFQVNFLAo+IH07Cj4gCj4gLi4uYXNzdW1pbmcgdGhhdCB3ZSBzdGF5IHdpdGggIm1tdV9yYW5n ZV9ub3RpZmllciIgYXMgYSBjb3JlIG5hbWUgZm9yIHRoaXMgCj4gd2hvbGUgdGhpbmcuCj4gCj4g QWxzbywgaXQgaXMgYmVzdCBtb3ZlZCBkb3duIHRvIGJlIG5leHQgdG8gdGhlIG5ldyBNTlIgc3Ry dWN0cywgc28gdGhhdCBhbGwgdGhlCj4gTU5SIHN0dWZmIGlzIGluIG9uZSBncm91cC4KCkkgYWdy ZWUgd2l0aCBKZXJvbWUsIHRoaXMgZW51bSBpcyBwYXJ0IG9mIHRoZSAnc3RydWN0Cm1tdV9ub3Rp Zmllcl9yYW5nZScgKGllIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgaW52YWxpZGF0aW9uKSBhbmQg aXQKZG9lc24ndCByZWFsbHkgbWF0dGVyIHRoYXQgb25seSB0aGVzZSBuZXcgbm90aWZpZXJzIGNh biBiZSBjYWxsZWQgd2l0aAp0aGlzIHR5cGUsIGl0IGlzIHN0aWxsIHBhcnQgb2YgdGhlIG1tdV9u b3RpZmllcl9yYW5nZS4KClRoZSBjb21tZW50IGFscmVhZHkgc2F5cyBpdCBvbmx5IGFwcGxpZXMg dG8gdGhlIG1tdV9yYW5nZV9ub3RpZmllcgpzY2hlbWUuLgoKPiA+ICAjZGVmaW5lIE1NVV9OT1RJ RklFUl9SQU5HRV9CTE9DS0FCTEUgKDEgPDwgMCkKPiA+IEBAIC0yMjIsNiArMjI4LDI2IEBAIHN0 cnVjdCBtbXVfbm90aWZpZXIgewo+ID4gIAl1bnNpZ25lZCBpbnQgdXNlcnM7Cj4gPiAgfTsKPiA+ ICAKPiAKPiBUaGF0IHNob3VsZCBhbHNvIGJlIG1vdmVkIGRvd24sIG5leHQgdG8gdGhlIG5ldyBz dHJ1Y3RzLgoKV2hpY2ggdGhpcz8KCj4gPiArLyoqCj4gPiArICogc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllcl9vcHMKPiA+ICsgKiBAaW52YWxpZGF0ZTogVXBvbiByZXR1cm4gdGhlIGNhbGxlciBt dXN0IHN0b3AgdXNpbmcgYW55IFNQVEVzIHdpdGhpbiB0aGlzCj4gPiArICogICAgICAgICAgICAg IHJhbmdlLCB0aGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4gUmV0dXJuIGZhbHNlIGlmIGJsb2NraW5n IHdhcwo+ID4gKyAqICAgICAgICAgICAgICByZXF1aXJlZCBidXQgcmFuZ2UgaXMgbm9uLWJsb2Nr aW5nCj4gPiArICovCj4gCj4gSG93IGFib3V0IHRoaXMgKEknbSBub3Qgc3VyZSBJIGZ1bGx5IHVu ZGVyc3RhbmQgdGhlIHJldHVybiB2YWx1ZSwgdGhvdWdoKToKPiAKPiAvKioKPiAgKiBzdHJ1Y3Qg bW11X3JhbmdlX25vdGlmaWVyX29wcwo+ICAqIEBpbnZhbGlkYXRlOiBVcG9uIHJldHVybiB0aGUg Y2FsbGVyIG11c3Qgc3RvcCB1c2luZyBhbnkgU1BURXMgd2l0aGluIHRoaXMKPiAgKiAJCXJhbmdl Lgo+ICAqCj4gICogCQlUaGlzIGZ1bmN0aW9uIGlzIHBlcm1pdHRlZCB0byBzbGVlcC4KPiAgKgo+ ICAqICAgICAgCUBSZXR1cm46IGZhbHNlIGlmIGJsb2NraW5nIHdhcyByZXF1aXJlZCwgYnV0IEBy YW5nZSBpcwo+ICAqCQkJbm9uLWJsb2NraW5nLgo+ICAqCj4gICovCgpJcyB0aGlzIGtkb2MgZm9y bWF0IGZvciBmdW5jdGlvbiBwb2ludGVycz8KIAo+IAo+ID4gK3N0cnVjdCBtbXVfcmFuZ2Vfbm90 aWZpZXJfb3BzIHsKPiA+ICsJYm9vbCAoKmludmFsaWRhdGUpKHN0cnVjdCBtbXVfcmFuZ2Vfbm90 aWZpZXIgKm1ybiwKPiA+ICsJCQkgICBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpy YW5nZSwKPiA+ICsJCQkgICB1bnNpZ25lZCBsb25nIGN1cl9zZXEpOwo+ID4gK307Cj4gPiArCj4g PiArc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciB7Cj4gPiArCXN0cnVjdCBpbnRlcnZhbF90cmVl X25vZGUgaW50ZXJ2YWxfdHJlZTsKPiA+ICsJY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmll cl9vcHMgKm9wczsKPiA+ICsJc3RydWN0IGhsaXN0X25vZGUgZGVmZXJyZWRfaXRlbTsKPiA+ICsJ dW5zaWduZWQgbG9uZyBpbnZhbGlkYXRlX3NlcTsKPiA+ICsJc3RydWN0IG1tX3N0cnVjdCAqbW07 Cj4gPiArfTsKPiA+ICsKPiAKPiBBZ2Fpbiwgbm93IHdlIGhhdmUgdGhlIG5ldyBzdHJ1Y3QgbW11 X3JhbmdlX25vdGlmaWVyLCBhbmQgdGhlIG9sZCAKPiBzdHJ1Y3QgbW11X25vdGlmaWVyX3Jhbmdl LCBhbmQgaXQncyBub3QgZ29vZC4KPiAKPiBJZGVhczoKPiAKPiBhKSBMaXZlIHdpdGggaXQuCj4g Cj4gYikgKERpc2NhcmRlZCwgdG9vIG1hbnkgY2FsbGVycyk6IHJlbmFtZSBvbGQgb25lLiBOb3Bl Lgo+IAo+IGMpIFJlbmFtZSBuZXcgb25lLiBJZGVhczoKPiAKPiAgICAgc3RydWN0IG1tdV9pbnRl cnZhbF9ub3RpZmllcgo+ICAgICBzdHJ1Y3QgbW11X3JhbmdlX2ludGVyc2VjdGlvbgo+ICAgICAu Li5vdGhlciBpZGVhcz8KClRoaXMgb2RkIGR1YWxpdHkgaGFzIGFscmVhZHkgY2F1c2Ugc29tZSBj b25mdXNpb24sIGJ1dCBuYW1lcyBoZXJlIGFyZQpoYXJkLiAgbW11X2ludGVydmFsX25vdGlmaWVy IGlzIHRoZSBiZXN0IGFsdGVybmF0aXZlIEkndmUgaGVhcmQuCgpDaGFuZ2luZyB0aGlzIG5hbWUg aXMgYSBsb3Qgb2Ygd29yayAtIGFyZSB3ZSBoYXBweQonbW11X2ludGVydmFsX25vdGlmaWVyJyBp cyB0aGUgcmlnaHQgY2hvaWNlPwoKPiA+ICsvKioKPiA+ICsgKiBtbXVfcmFuZ2Vfc2V0X3NlcSAt IFNhdmUgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZQo+IAo+IEhvdyBhYm91dDoKPiAKPiAgKiBt bXVfcmFuZ2Vfc2V0X3NlcSAtIFNldCB0aGUgLmludmFsaWRhdGVfc2VxIHRvIGEgbmV3IHZhbHVl LgoKSXQgaXMgbm90IGEgJ25ldyB2YWx1ZScsIGl0IGlzIGEgdmFsdWUgdGhhdCBpcyBwcm92aWRl ZCB0byB0aGUKaW52YWxpZGF0ZSBjYWxsYmFjawoKPiAKPiA+ICsgKiBAbXJuIC0gVGhlIG1ybiBw YXNzZWQgdG8gaW52YWxpZGF0ZQo+ID4gKyAqIEBjdXJfc2VxIC0gVGhlIGN1cl9zZXEgcGFzc2Vk IHRvIGludmFsaWRhdGUKPiA+ICsgKgo+ID4gKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5jb25k aXRpb25hbGx5IGZyb20gdGhlIGludmFsaWRhdGUgY2FsbGJhY2sgb2YgYQo+ID4gKyAqIHN0cnVj dCBtbXVfcmFuZ2Vfbm90aWZpZXJfb3BzIHVuZGVyIHRoZSBzYW1lIGxvY2sgdGhhdCBpcyB1c2Vk IHRvIGNhbGwKPiA+ICsgKiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiBJdCB1cGRhdGVzIHRoZSBz ZXF1ZW5jZSBudW1iZXIgZm9yIGxhdGVyIHVzZSBieQo+ID4gKyAqIG1tdV9yYW5nZV9yZWFkX3Jl dHJ5KCkuCj4gPiArICoKPiA+ICsgKiBJZiB0aGUgdXNlciBkb2VzIG5vdCBjYWxsIG1tdV9yYW5n ZV9yZWFkX2JlZ2luKCkgb3IgbW11X3JhbmdlX3JlYWRfcmV0cnkoKQo+IAo+IG5pdDogImNhbGxl ciIgaXMgYmV0dGVyIHRoYW4gInVzZXIiLCB3aGVuIHJlZmVycmluZyB0by4uLndlbGwsIGNhbGxl cnMuICJ1c2VyIiAKPiBtb3N0IG9mdGVuIHJlZmVycyB0byB1c2VyIHNwYWNlLCB3aGVyZWFzIGEg Y2FsbCBzdGFjayBhbmQgZnVuY3Rpb24gY2FsbGluZyBpcyAKPiBjbGVhcmx5IHdoYXQgeW91J3Jl IHJlZmVycmluZyB0byBoZXJlIChhbmQgaW4gb3RoZXIgcGxhY2VzLCBlc3BlY2lhbGx5ICJ1c2Vy IGxvY2siKS4KCkRvbmUKCj4gPiArLyoqCj4gPiArICogbW11X3JhbmdlX2NoZWNrX3JldHJ5IC0g VGVzdCBpZiBhIGNvbGxpc2lvbiBoYXMgb2NjdXJyZWQKPiA+ICsgKiBtcm46IFRoZSByYW5nZSB1 bmRlciBsb2NrCj4gPiArICogc2VxOiBUaGUgcmV0dXJuIG9mIHRoZSBtYXRjaGluZyBtbXVfcmFu Z2VfcmVhZF9iZWdpbigpCj4gPiArICoKPiA+ICsgKiBUaGlzIGNhbiBiZSB1c2VkIGluIHRoZSBj cml0aWNhbCBzZWN0aW9uIGJldHdlZW4gbW11X3JhbmdlX3JlYWRfYmVnaW4oKSBhbmQKPiA+ICsg KiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiAgQSByZXR1cm4gb2YgdHJ1ZSBpbmRpY2F0ZXMgYW4g aW52YWxpZGF0aW9uIGhhcwo+ID4gKyAqIGNvbGxpZGVkIHdpdGggdGhpcyBsb2NrIGFuZCBhIGZ1 dHVyZSBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpIHdpbGwgcmV0dXJuCj4gPiArICogdHJ1ZS4KPiA+ ICsgKgo+ID4gKyAqIEZhbHNlIGlzIG5vdCByZWxpYWJsZSBhbmQgb25seSBzdWdnZXN0cyBhIGNv bGxpc2lvbiBoYXMgbm90IGhhcHBlbmVkLiBJdAo+IAo+IGxldCdzIHNheSAic3VnZ2VzdHMgdGhh dCBhIGNvbGxpc2lvbiAqbWF5KiBub3QgaGF2ZSBvY2N1cnJlZC4iICAKClN1cmUKCj4gPiArLyoK PiA+ICsgKiBUaGlzIGlzIGEgY29sbGlzaW9uLXJldHJ5IHJlYWQtc2lkZS93cml0ZS1zaWRlICds b2NrJywgYSBsb3QgbGlrZSBhCj4gPiArICogc2VxY291bnQsIGhvd2V2ZXIgdGhpcyBhbGxvd3Mg bXVsdGlwbGUgd3JpdGUtc2lkZXMgdG8gaG9sZCBpdCBhdAo+ID4gKyAqIG9uY2UuIENvbmNlcHR1 YWxseSB0aGUgd3JpdGUgc2lkZSBpcyBwcm90ZWN0aW5nIHRoZSB2YWx1ZXMgb2YgdGhlIFBURXMg aW4KPiA+ICsgKiB0aGlzIG1tLCBzdWNoIHRoYXQgUFRFUyBjYW5ub3QgYmUgcmVhZCBpbnRvIFNQ VEVzIHdoaWxlIGFueSB3cml0ZXIgZXhpc3RzLgo+IAo+IEp1c3QgdG8gYmUga2luZCwgY2FuIHdl IHNheSAiU1BURXMgKHNoYWRvdyBQVEVzKSIsIGp1c3QgdGhpcyBvbmNlPyA6KQoKSGFoYSwgc3Vy ZSwgd2h5IG5vdAoKPiA+ICsgKiBUaGUgd3JpdGUgc2lkZSBoYXMgdHdvIHN0YXRlcywgZnVsbHkg ZXhjbHVkZWQ6Cj4gPiArICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAhPSAwCj4g PiArICogIC0gbW5uLT5pbnZhbGlkYXRlX3NlcSAmIDEgPT0gVHJ1ZQo+ID4gKyAqICAtIHNvbWUg cmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBiZWluZyBpbnZhbGlkYXRlZAo+ID4gKyAqICAtIHRo ZSBpdHJlZSBpcyBub3QgYWxsb3dlZCB0byBjaGFuZ2UKPiA+ICsgKgo+ID4gKyAqIEFuZCBwYXJ0 aWFsbHkgZXhjbHVkZWQ6Cj4gPiArICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAh PSAwCj4gCj4gSSBhc3N1bWUgdGhpcyBpbXBsaWVzIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAxID09 IEZhbHNlIGluIHRoaXMgY2FzZT8gSWYgc28sCj4gbGV0J3Mgc2F5IHNvLiBJJ20gcHJvYmFibHkg Z2V0dGluZyB0aGF0IHdyb25nLCB0b28uCgpZZXMgdGhhdCBpcyByaWdodCwgZG9uZQoKPiAKPiA+ ICsgKiAgLSBzb21lIHJhbmdlIG9uIHRoZSBtbV9zdHJ1Y3QgaXMgYmVpbmcgaW52YWxpZGF0ZWQK PiA+ICsgKiAgLSB0aGUgaXRyZWUgaXMgYWxsb3dlZCB0byBjaGFuZ2UKPiA+ICsgKgo+ID4gKyAq IFRoZSBsYXRlciBzdGF0ZSBhdm9pZHMgc29tZSBleHBlbnNpdmUgd29yayBvbiBpbnZfZW5kIGlu IHRoZSBjb21tb24gY2FzZSBvZgo+ID4gKyAqIG5vIG1ybiBtb25pdG9yaW5nIHRoZSBWQS4KPiA+ ICsgKi8KPiA+ICtzdGF0aWMgYm9vbCBtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcoc3RydWN0IG1t dV9ub3RpZmllcl9tbSAqbW1uX21tKQo+ID4gK3sKPiA+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgm bW1uX21tLT5sb2NrKTsKPiA+ICsJcmV0dXJuIG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgJiAxOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqCj4gPiAr bW5faXRyZWVfaW52X3N0YXJ0X3JhbmdlKHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSwK PiA+ICsJCQkgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UsCj4gPiArCQkJ IHVuc2lnbmVkIGxvbmcgKnNlcSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBpbnRlcnZhbF90cmVlX25v ZGUgKm5vZGU7Cj4gPiArCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKnJlcyA9IE5VTEw7Cj4g PiArCj4gPiArCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJbW1uX21tLT5hY3RpdmVf aW52YWxpZGF0ZV9yYW5nZXMrKzsKPiA+ICsJbm9kZSA9IGludGVydmFsX3RyZWVfaXRlcl9maXJz dCgmbW1uX21tLT5pdHJlZSwgcmFuZ2UtPnN0YXJ0LAo+ID4gKwkJCQkJcmFuZ2UtPmVuZCAtIDEp Owo+ID4gKwlpZiAobm9kZSkgewo+ID4gKwkJbW1uX21tLT5pbnZhbGlkYXRlX3NlcSB8PSAxOwo+ IAo+IAo+IE9LLCB0aGlzIGVpdGhlciBuZWVkcyBtb3JlIGRvY3VtZW50YXRpb24gYW5kIGFzc2Vy dGlvbnMsIG9yIGEgZGlmZmVyZW50Cj4gYXBwcm9hY2guIEJlY2F1c2UgSSBzZWUgYWRkaXRpb24s IHN1YnRyYWN0aW9uLCBBTkQsIE9SIGFuZCBib29sZWFucwo+IGFsbCBiZWluZyBhcHBsaWVkIHRv IHRoaXMgZmllbGQsIGFuZCBpdCdzIGRhcm4gbmVhciBob3BlbGVzcyB0byBmaWd1cmUKPiBvdXQg d2hldGhlciBvciBub3QgaXQgcmVhbGx5IGlzIGV2ZW4gb3Igb2RkIGF0IHRoZSByaWdodCB0aW1l cy4KClRoaXMgaXMgYSBzdGFuZGFyZCBkZXNpZ24gZm9yIGEgc2VxbG9jayBzY2hlbWUgYW5kIGZv bGxvd3MgdGhlCmV4aXN0aW5nIGRlc2lnbiBvZiB0aGUgbGludXggc2VxIGxvY2suCgpUaGUgbG93 ZXIgYml0IGluZGljYXRlcyB0aGUgbG9jaydkIHN0YXRlIGFuZCB0aGUgdXBwZXIgYml0cyBpbmRp Y2F0ZQp0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgbG9jawoKVGhlIG9wZXJhdGlvbnMgb24gdGhlIGxv Y2sgaXRzZWxmIGFyZSB0aGVuOgogICBzZXEgfD0gMSAgIyBUYWtlIHRoZSBsb2NrCiAgIHNlcSsr ICAgICAjIFJlbGVhc2UgYW4gYWNxdWlyZWQgbG9jawogICBzZXEgJiAxICAgIyBUcnVlIGlmIGxv Y2tlZAoKV2hpY2ggaXMgaG93IHRoaXMgaXMgd3JpdHRlbgoKPiBEaWZmZXJlbnQgYXBwcm9hY2g6 IHdoeSBub3QganVzdCBhZGQgYSBtbW5fbW0tPmlzX2ludmFsaWRhdGluZyAKPiBtZW1iZXIgdmFy aWFibGU/IEl0J3Mgbm90IGxpa2UgeW91J3JlIHNob3J0IG9mIHNwYWNlIGluIHRoYXQgc3RydWN0 LgoKU3BsaXR0aW5nIGl0IG1ha2VzIGFsb3Qgb2Ygc3R1ZmYgbW9yZSBjb21wbGV4IGFuZCB1bm5h dHVyYWwuCgpUaGUgb3BzIGFib3ZlIGNvdWxkIGJlIHB1dCBpbiBpbmxpbmUgd3JhcHBlcnMsIGJ1 dCB0aGV5IG9ubHkgb2NjdXIKb25seSBpbiBmdW5jdGlvbnMgYWxyZWFkeSBjYWxsZWQgbW5faXRy ZWVfaW52X3N0YXJ0X3JhbmdlKCkgYW5kCm1uX2l0cmVlX2ludl9lbmQoKSBhbmQgbW5faXRyZWVf aXNfaW52YWxpZGF0aW5nKCkuCgpUaGVyZSBpcyB0aGUgb25lICd0YWtlIHRoZSBsb2NrJyBvdXRs aWVyIGluCl9fbW11X3JhbmdlX25vdGlmaWVyX2luc2VydCgpIHRob3VnaAoKPiA+ICtzdGF0aWMg dm9pZCBtbl9pdHJlZV9pbnZfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSkKPiA+ ICt7Cj4gPiArCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybjsKPiA+ICsJc3RydWN0IGhs aXN0X25vZGUgKm5leHQ7Cj4gPiArCWJvb2wgbmVlZF93YWtlID0gZmFsc2U7Cj4gPiArCj4gPiAr CXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJaWYgKC0tbW1uX21tLT5hY3RpdmVfaW52 YWxpZGF0ZV9yYW5nZXMgfHwKPiA+ICsJICAgICFtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1u X21tKSkgewo+ID4gKwkJc3Bpbl91bmxvY2soJm1tbl9tbS0+bG9jayk7Cj4gPiArCQlyZXR1cm47 Cj4gPiArCX0KPiA+ICsKPiA+ICsJbW1uX21tLT5pbnZhbGlkYXRlX3NlcSsrOwo+IAo+IElzIHRo aXMgdGhlIHJpZ2h0IHBsYWNlIGZvciBhbiBhc3NlcnRpb24gdGhhdCB0aGlzIGlzIG5vdyBhbiBl dmVuIHZhbHVlPwoKWWVzLCBidXQgSSdtIHJlbHVjdGFudCB0byBhZGQgc3VjaCBhIHJ1bnRpbWUg Y2hlY2sgb24gdGhpcyBmYXN0aXNoIHBhdGguLgpIb3cgYWJvdXQgYSBjb21tZW50PwoKPiA+ICsJ bmVlZF93YWtlID0gdHJ1ZTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogVGhlIGludl9lbmQgaW5j b3Jwb3JhdGVzIGEgZGVmZXJyZWQgbWVjaGFuaXNtIGxpa2UKPiA+ICsJICogcnRubF9sb2NrKCku IEFkZHMgYW5kIHJlbW92ZXMgYXJlIHF1ZXVlZCB1bnRpbCB0aGUgZmluYWwgaW52X2VuZAo+IAo+ IExldCBtZSBwb2ludCBvdXQgdGhhdCBydG5sX2xvY2soKSBpdHNlbGYgaXMgYSBvbmUtbGluZXIg dGhhdCBjYWxscyBtdXRleF9sb2NrKCkuCj4gQnV0IEkgc3VwcG9zZSBpZiBvbmUgc3R1ZGllcyB0 aGF0IGZpbGUgY2xvc2VseSB0aGVyZSBpcyBtb3JlLiA6KQoKTGV0cyBjaGFuZ2UgdGhhdCB0byBy dG5sX3VubG9jaygpIHRoZW4KCj4gPiArCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJ LyogUGFpcnMgd2l0aCB0aGUgV1JJVEVfT05DRSBpbiBtbXVfcmFuZ2Vfc2V0X3NlcSgpICovCj4g PiArCXNlcSA9IFJFQURfT05DRShtcm4tPmludmFsaWRhdGVfc2VxKTsKPiA+ICsJaXNfaW52YWxp ZGF0aW5nID0gc2VxID09IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7Cj4gPiArCXNwaW5fdW5sb2Nr KCZtbW5fbW0tPmxvY2spOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBtcm4tPmludmFsaWRhdGVf c2VxIGlzIGFsd2F5cyBzZXQgdG8gYW4gb2RkIHZhbHVlLiBUaGlzIGVuc3VyZXMKPiAKPiBUaGlz IGNsYWltIGp1c3QgbG9va3Mgd3JvbmcgdGhlIGZpcnN0IE4gdGltZXMgb25lIHJlYWRzIHRoZSBj b2RlLCBnaXZlbiB0aGF0Cj4gdGhlcmUgaXMgbW11X3JhbmdlX3NldF9zZXEoKSB0byBzZXQgaXQg dG8gYW4gYXJiaXRyYXJ5IHZhbHVlISAgTWF5YmUKPiB5b3UgbWVhbgoKbW11X3JhbmdlX3NldF9z ZXEoKSBpcyBOT1QgdG8gYmUgdXNlZCB0byBzZXQgdG8gYW4gYXJiaXRhcnkgdmFsdWUsIGl0Cm11 c3Qgb25seSBiZSB1c2VkIHRvIHNldCB0byB0aGUgdmFsdWUgcHJvdmlkZWQgaW4gdGhlIGludmFs aWRhdGUoKQpjYWxsYmFjayBhbmQgdGhhdCB2YWx1ZSBpcyBhbHdheXMgb2RkLiBMZXRzIG1ha2Ug dGhpcyBzdXBlciBjbGVhcjoKCgkvKgoJICogbXJuLT5pbnZhbGlkYXRlX3NlcSBtdXN0IGFsd2F5 cyBiZSBzZXQgdG8gYW4gb2RkIHZhbHVlIHZpYQoJICogbW11X3JhbmdlX3NldF9zZXEoKSB1c2lu ZyB0aGUgcHJvdmlkZWQgY3VyX3NlcSBmcm9tCgkgKiBtbl9pdHJlZV9pbnZfc3RhcnRfcmFuZ2Uo KS4gVGhpcyBlbnN1cmVzIHRoYXQgaWYgc2VxIGRvZXMgd3JhcCB3ZQoJICogd2lsbCBhbHdheXMg Y2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUgcmVhc29uYWJsZSB0aW1lIGFzCgkgKiBtbW5f bW0tPmludmFsaWRhdGVfc2VxIGlzIGV2ZW4gaW4gdGhlIGlkbGUgc3RhdGUuCgkgKi8KClRoZSBp bnZhcmllbnQgaXMgdGhhdCB0aGUgJ3N0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXInIGFsd2F5cyBo YXMgYW4Kb2RkICdzZXEnCgo+ID4gKwkgKiB0aGF0IGlmIHNlcSBkb2VzIHdyYXAgd2Ugd2lsbCBh bHdheXMgY2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUKPiA+ICsJICogcmVhc29uYWJsZSB0 aW1lIGFzIG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgaXMgZXZlbiBpbiB0aGUgaWRsZQo+ID4gKwkg KiBzdGF0ZS4KPiA+ICsJICovCj4gCj4gTGV0J3MgbW92ZSB0aGF0IGNvbW1lbnQgaGlnaGVyIHVw LiBUaGUgY29kZSB0aGF0IGZvbGxvd3MgaXQgaGFzIG5vdGhpbmcgdG8KPiBkbyB3aXRoIGl0LCBz byBpdCdzIGNvbmZ1c2luZyBoZXJlLgoKVGhlIGNvbW1lbnQgaXMgZXhwbGFpbmluZyB3aHkgdGhl IHdhaXRfZXZlbnQgaXMgc2FmZSwgZXZlbiBpZiB3ZSB3cmFwCnRoZSBzZXF1ZW5jZSBudW1iZXIs IHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYW5kIHZlcnkgc3VidGxlIGNvcm5lcgpjYXNlLiBUaGlz IGlzIHJlYWxseSB3aHkgd2UgaGF2ZSB0aGUgZXZlbi9vZGQgdGhpbmcgYXQgYWxsLgoKPiA+ICsJ c3Bpbl9sb2NrKCZtbW5fbW0tPmxvY2spOwo+ID4gKwlpZiAobW1uX21tLT5hY3RpdmVfaW52YWxp ZGF0ZV9yYW5nZXMpIHsKPiA+ICsJCWlmIChtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1uX21t KSkKPiA+ICsJCQlobGlzdF9hZGRfaGVhZCgmbXJuLT5kZWZlcnJlZF9pdGVtLAo+ID4gKwkJCQkg ICAgICAgJm1tbl9tbS0+ZGVmZXJyZWRfbGlzdCk7Cj4gPiArCQllbHNlIHsKPiA+ICsJCQltbW5f bW0tPmludmFsaWRhdGVfc2VxIHw9IDE7Cj4gPiArCQkJaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1y bi0+aW50ZXJ2YWxfdHJlZSwKPiA+ICsJCQkJCSAgICAgJm1tbl9tbS0+aXRyZWUpOwo+ID4gKwkJ fQo+ID4gKwkJbXJuLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7Cj4g PiArCX0gZWxzZSB7Cj4gPiArCQlXQVJOX09OKG1uX2l0cmVlX2lzX2ludmFsaWRhdGluZyhtbW5f bW0pKTsKPiA+ICsJCW1ybi0+aW52YWxpZGF0ZV9zZXEgPSBtbW5fbW0tPmludmFsaWRhdGVfc2Vx IC0gMTsKPiAKPiBPaGhoLCBjaGVja21hdGUuIEkgbG9zZS4gV2h5IGlzICpzdWJ0cmFjdGluZyog dGhlIHJpZ2h0IHRoaW5nIHRvIGRvCj4gZm9yIHNlcSBudW1iZXJzIGhlcmU/ICBJJ20gYWN1dGVs eSB1bmhhcHB5IHRyeWluZyB0byBmaWd1cmUgdGhpcyBvdXQuCj4gSSBzdXNwZWN0IGl0J3MgYW5v dGhlciB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0cnlpbmcgdG8gdXNlIHRoZQo+IGxvd2Vy IGJpdCBvZiB0aGUgc2VxIG51bWJlciAoZXZlbi9vZGQpIGZvciBzb21ldGhpbmcgZWxzZS4KCk5v LCB0aGlzIGlzIGFjdHVhbGx5IGRvbmUgZm9yIHRoZSBzZXEgbnVtYmVyIGl0c2VsZi4gV2UgbmVl ZCB0bwpnZW5lcmF0ZSBhIHNlcSBudW1iZXIgdGhhdCBpcyAhPSB0aGUgY3VycmVudCBpbnZhbGlk YXRlX3NlcSBhcyB0aGlzCm5ldyBtcm4gaXMgbm90IGludmFsaWRhdGluZy4KClRoZSBiZXN0IHNl cSB0byB1c2UgaXMgb25lIHRoYXQgdGhlIGludmFsaWRhdGVfc2VxIHdpbGwgbm90IHJlYWNoIGZv cgphIGxvbmcgdGltZSwgaWUgJ2ludmFsaWRhdGVfc2VxICsgTUFYJyB3aGljaCBpcyBleHByZXNz ZWQgYXMgLTEKClRoZSBldmVuL29kZCB0aGluZyBqdXN0IHRha2VzIGNhcmUgb2YgaXRzZWxmIG5h dHVyYWxseSBoZXJlIGFzCmludmFsaWRhdGVfc2VxIGlzIGd1YXJlbnRlZWQgZXZlbiBhbmQgLTEg Y3JlYXRlcyBib3RoIGFuIG9kZCBtcm4gdmFsdWUKYW5kIGEgZ29vZCBzZXEgbnVtYmVyLgoKVGhl IGFsZ29yaXRobSB3b3VsZCBhY3R1YWxseSB3b3JrIGNvcnJlY3RseSBpZiB0aGlzIHdhcwonbXJu LT5pbnZhbGlkYXRlX3NlcSA9IDEnLCBidXQgb2NjYXNpb25hbGx5IHRoaW5ncyB3b3VsZCBibG9j ayB3aGVuCnRoZXkgZG9uJ3QgbmVlZCB0byBibG9jay4KCkxldHMgYWRkIGEgY29tbWVudDoKCgkJ LyoKCQkgKiBUaGUgc3RhcnRpbmcgc2VxIGZvciBhIG1ybiBub3QgdW5kZXIgaW52YWxpZGF0aW9u IHNob3VsZCBiZQoJCSAqIG9kZCwgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IGludmFsaWRhdGVf c2VxIGFuZAoJCSAqIGludmFsaWRhdGVfc2VxIHNob3VsZCBub3QgJ3dyYXAnIHRvIHRoZSBuZXcg c2VxIGFueSB0aW1lCgkJICogc29vbi4KCQkgKi8KCj4gPiAraW50IG1tdV9yYW5nZV9ub3RpZmll cl9pbnNlcnQoc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqbXJuLAo+ID4gKwkJCSAgICAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAo+ID4gKwkJCSAgICAgIHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1tdV9ub3RpZmllcl9tbSAq bW1uX21tOwo+ID4gKwlpbnQgcmV0Owo+IAo+IEhtbW0sIEkgdGhpbmsgYSBsYXRlciBwYXRjaCBp bXByb3Blcmx5IGNoYW5nZXMgdGhlIGFib3ZlIHRvICJpbnQgcmV0ID0gMDsiLgo+IEknbGwgY2hl Y2sgb24gdGhhdC4gSXQncyBjb3JyZWN0IGhlcmUsIHRob3VnaC4KCkxvb2tzIE9LIGluIG15IHRy ZWU/Cgo+ID4gKwltaWdodF9sb2NrKCZtbS0+bW1hcF9zZW0pOwo+ID4gKwo+ID4gKwltbW5fbW0g PSBzbXBfbG9hZF9hY3F1aXJlKCZtbS0+bW11X25vdGlmaWVyX21tKTsKPiAKPiBXaGF0IGRvZXMg dGhlIGFib3ZlIHBhaXIgd2l0aD8gU2hvdWxkIGhhdmUgYSBjb21tZW50IHRoYXQgc3BlY2lmaWVz IHRoYXQuCgpzbXBfbG9hZF9hY3F1aXJlKCkgYWx3YXlzIHBhaXJzIHdpdGggc21wX3N0b3JlX3Jl bGVhc2UoKSB0byB0aGUgc2FtZQptZW1vcnksIHRoZXJlIGlzIG9ubHkgb25lIHN0b3JlLCBpcyBh IGNvbW1lbnQgcmVhbGx5IG5lZWRlZD8KCkJlbG93IGFyZSB0aGUgY29tbWVudCB1cGRhdGVzIEkg bWFkZSwgdGhhbmtzIQoKSmFzb24KCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tdV9ub3Rp Zmllci5oIGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaAppbmRleCA1MWI5MmJhMDEzZGRj ZS4uMDY1Yzk1MDAyZTk2MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW11X25vdGlmaWVy LmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaApAQCAtMzAyLDE1ICszMDIsMTUg QEAgdm9pZCBtbXVfcmFuZ2Vfbm90aWZpZXJfcmVtb3ZlKHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZp ZXIgKm1ybik7CiAvKioKICAqIG1tdV9yYW5nZV9zZXRfc2VxIC0gU2F2ZSB0aGUgaW52YWxpZGF0 aW9uIHNlcXVlbmNlCiAgKiBAbXJuIC0gVGhlIG1ybiBwYXNzZWQgdG8gaW52YWxpZGF0ZQotICog QGN1cl9zZXEgLSBUaGUgY3VyX3NlcSBwYXNzZWQgdG8gaW52YWxpZGF0ZQorICogQGN1cl9zZXEg LSBUaGUgY3VyX3NlcSBwYXNzZWQgdG8gdGhlIGludmFsaWRhdGUoKSBjYWxsYmFjawogICoKICAq IFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGZyb20gdGhlIGludmFsaWRhdGUg Y2FsbGJhY2sgb2YgYQogICogc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMgdW5kZXIgdGhl IHNhbWUgbG9jayB0aGF0IGlzIHVzZWQgdG8gY2FsbAogICogbW11X3JhbmdlX3JlYWRfcmV0cnko KS4gSXQgdXBkYXRlcyB0aGUgc2VxdWVuY2UgbnVtYmVyIGZvciBsYXRlciB1c2UgYnkKLSAqIG1t dV9yYW5nZV9yZWFkX3JldHJ5KCkuCisgKiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiBUaGUgcHJv dmlkZWQgY3VyX3NlcSB3aWxsIGFsd2F5cyBiZSBvZGQuCiAgKgotICogSWYgdGhlIHVzZXIgZG9l cyBub3QgY2FsbCBtbXVfcmFuZ2VfcmVhZF9iZWdpbigpIG9yIG1tdV9yYW5nZV9yZWFkX3JldHJ5 KCkKLSAqIHRoZW4gdGhpcyBjYWxsIGlzIG5vdCByZXF1aXJlZC4KKyAqIElmIHRoZSBjYWxsZXIg ZG9lcyBub3QgY2FsbCBtbXVfcmFuZ2VfcmVhZF9iZWdpbigpIG9yCisgKiBtbXVfcmFuZ2VfcmVh ZF9yZXRyeSgpIHRoZW4gdGhpcyBjYWxsIGlzIG5vdCByZXF1aXJlZC4KICAqLwogc3RhdGljIGlu bGluZSB2b2lkIG1tdV9yYW5nZV9zZXRfc2VxKHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1y biwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY3VyX3NlcSkKQEAgLTM0OCw4ICszNDgsOSBAQCBz dGF0aWMgaW5saW5lIGJvb2wgbW11X3JhbmdlX3JlYWRfcmV0cnkoc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllciAqbXJuLAogICogY29sbGlkZWQgd2l0aCB0aGlzIGxvY2sgYW5kIGEgZnV0dXJlIG1t dV9yYW5nZV9yZWFkX3JldHJ5KCkgd2lsbCByZXR1cm4KICAqIHRydWUuCiAgKgotICogRmFsc2Ug aXMgbm90IHJlbGlhYmxlIGFuZCBvbmx5IHN1Z2dlc3RzIGEgY29sbGlzaW9uIGhhcyBub3QgaGFw cGVuZWQuIEl0Ci0gKiBjYW4gYmUgY2FsbGVkIG1hbnkgdGltZXMgYW5kIGRvZXMgbm90IGhhdmUg dG8gaG9sZCB0aGUgdXNlciBwcm92aWRlZCBsb2NrLgorICogRmFsc2UgaXMgbm90IHJlbGlhYmxl IGFuZCBvbmx5IHN1Z2dlc3RzIGEgY29sbGlzaW9uIG1heSBub3QgaGF2ZQorICogb2NjdXJlZC4g SXQgY2FuIGJlIGNhbGxlZCBtYW55IHRpbWVzIGFuZCBkb2VzIG5vdCBoYXZlIHRvIGhvbGQgdGhl IHVzZXIKKyAqIHByb3ZpZGVkIGxvY2suCiAgKgogICogVGhpcyBjYWxsIGNhbiBiZSB1c2VkIGFz IHBhcnQgb2YgbG9vcHMgYW5kIG90aGVyIGV4cGVuc2l2ZSBvcGVyYXRpb25zIHRvCiAgKiBleHBl ZGl0ZSBhIHJldHJ5LgpkaWZmIC0tZ2l0IGEvbW0vbW11X25vdGlmaWVyLmMgYi9tbS9tbXVfbm90 aWZpZXIuYwppbmRleCAyYjc0ODU5MTllY2ZlYi4uYWZlMWUyZDk0MTgzZjggMTAwNjQ0Ci0tLSBh L21tL21tdV9ub3RpZmllci5jCisrKyBiL21tL21tdV9ub3RpZmllci5jCkBAIC01MSw3ICs1MSw4 IEBAIHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gewogICogVGhpcyBpcyBhIGNvbGxpc2lvbi1yZXRy eSByZWFkLXNpZGUvd3JpdGUtc2lkZSAnbG9jaycsIGEgbG90IGxpa2UgYQogICogc2VxY291bnQs IGhvd2V2ZXIgdGhpcyBhbGxvd3MgbXVsdGlwbGUgd3JpdGUtc2lkZXMgdG8gaG9sZCBpdCBhdAog ICogb25jZS4gQ29uY2VwdHVhbGx5IHRoZSB3cml0ZSBzaWRlIGlzIHByb3RlY3RpbmcgdGhlIHZh bHVlcyBvZiB0aGUgUFRFcyBpbgotICogdGhpcyBtbSwgc3VjaCB0aGF0IFBURVMgY2Fubm90IGJl IHJlYWQgaW50byBTUFRFcyB3aGlsZSBhbnkgd3JpdGVyIGV4aXN0cy4KKyAqIHRoaXMgbW0sIHN1 Y2ggdGhhdCBQVEVTIGNhbm5vdCBiZSByZWFkIGludG8gU1BURXMgKHNoYWRvdyBQVEVzKSB3aGls ZSBhbnkKKyAqIHdyaXRlciBleGlzdHMuCiAgKgogICogTm90ZSB0aGF0IHRoZSBjb3JlIG1tIGNy ZWF0ZXMgbmVzdGVkIGludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKS9lbmQoKSByZWdpb25zCiAgKiB3 aXRoaW4gdGhlIHNhbWUgdGhyZWFkLCBhbmQgcnVucyBpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCkv ZW5kKCkgaW4gcGFyYWxsZWwKQEAgLTY0LDEyICs2NSwxMyBAQCBzdHJ1Y3QgbW11X25vdGlmaWVy X21tIHsKICAqCiAgKiBUaGUgd3JpdGUgc2lkZSBoYXMgdHdvIHN0YXRlcywgZnVsbHkgZXhjbHVk ZWQ6CiAgKiAgLSBtbS0+YWN0aXZlX2ludmFsaWRhdGVfcmFuZ2VzICE9IDAKLSAqICAtIG1ubi0+ aW52YWxpZGF0ZV9zZXEgJiAxID09IFRydWUKKyAqICAtIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAx ID09IFRydWUgKG9kZCkKICAqICAtIHNvbWUgcmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBiZWlu ZyBpbnZhbGlkYXRlZAogICogIC0gdGhlIGl0cmVlIGlzIG5vdCBhbGxvd2VkIHRvIGNoYW5nZQog ICoKICAqIEFuZCBwYXJ0aWFsbHkgZXhjbHVkZWQ6CiAgKiAgLSBtbS0+YWN0aXZlX2ludmFsaWRh dGVfcmFuZ2VzICE9IDAKKyAqICAtIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAxID09IEZhbHNlIChl dmVuKQogICogIC0gc29tZSByYW5nZSBvbiB0aGUgbW1fc3RydWN0IGlzIGJlaW5nIGludmFsaWRh dGVkCiAgKiAgLSB0aGUgaXRyZWUgaXMgYWxsb3dlZCB0byBjaGFuZ2UKICAqCkBAIC0xMzEsMTIg KzEzMywxMyBAQCBzdGF0aWMgdm9pZCBtbl9pdHJlZV9pbnZfZW5kKHN0cnVjdCBtbXVfbm90aWZp ZXJfbW0gKm1tbl9tbSkKIAkJcmV0dXJuOwogCX0KIAorCS8qIE1ha2UgaW52YWxpZGF0ZV9zZXEg ZXZlbiAqLwogCW1tbl9tbS0+aW52YWxpZGF0ZV9zZXErKzsKIAluZWVkX3dha2UgPSB0cnVlOwog CiAJLyoKIAkgKiBUaGUgaW52X2VuZCBpbmNvcnBvcmF0ZXMgYSBkZWZlcnJlZCBtZWNoYW5pc20g bGlrZQotCSAqIHJ0bmxfbG9jaygpLiBBZGRzIGFuZCByZW1vdmVzIGFyZSBxdWV1ZWQgdW50aWwg dGhlIGZpbmFsIGludl9lbmQKKwkgKiBydG5sX3VubG9jaygpLiBBZGRzIGFuZCByZW1vdmVzIGFy ZSBxdWV1ZWQgdW50aWwgdGhlIGZpbmFsIGludl9lbmQKIAkgKiBoYXBwZW5zIHRoZW4gdGhleSBh cmUgcHJvZ3Jlc3NlZC4gVGhpcyBhcnJhbmdlbWVudCBmb3IgdHJlZSB1cGRhdGVzCiAJICogaXMg dXNlZCB0byBhdm9pZCB1c2luZyBhIGJsb2NraW5nIGxvY2sgZHVyaW5nCiAJICogaW52YWxpZGF0 ZV9yYW5nZV9zdGFydC4KQEAgLTIzMCwxMCArMjMzLDExIEBAIHVuc2lnbmVkIGxvbmcgbW11X3Jh bmdlX3JlYWRfYmVnaW4oc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqbXJuKQogCXNwaW5fdW5s b2NrKCZtbW5fbW0tPmxvY2spOwogCiAJLyoKLQkgKiBtcm4tPmludmFsaWRhdGVfc2VxIGlzIGFs d2F5cyBzZXQgdG8gYW4gb2RkIHZhbHVlLiBUaGlzIGVuc3VyZXMKLQkgKiB0aGF0IGlmIHNlcSBk b2VzIHdyYXAgd2Ugd2lsbCBhbHdheXMgY2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUKLQkg KiByZWFzb25hYmxlIHRpbWUgYXMgbW1uX21tLT5pbnZhbGlkYXRlX3NlcSBpcyBldmVuIGluIHRo ZSBpZGxlCi0JICogc3RhdGUuCisJICogbXJuLT5pbnZhbGlkYXRlX3NlcSBtdXN0IGFsd2F5cyBi ZSBzZXQgdG8gYW4gb2RkIHZhbHVlIHZpYQorCSAqIG1tdV9yYW5nZV9zZXRfc2VxKCkgdXNpbmcg dGhlIHByb3ZpZGVkIGN1cl9zZXEgZnJvbQorCSAqIG1uX2l0cmVlX2ludl9zdGFydF9yYW5nZSgp LiBUaGlzIGVuc3VyZXMgdGhhdCBpZiBzZXEgZG9lcyB3cmFwIHdlCisJICogd2lsbCBhbHdheXMg Y2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUgcmVhc29uYWJsZSB0aW1lIGFzCisJICogbW1u X21tLT5pbnZhbGlkYXRlX3NlcSBpcyBldmVuIGluIHRoZSBpZGxlIHN0YXRlLgogCSAqLwogCWxv Y2tfbWFwX2FjcXVpcmUoJl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFw KTsKIAlsb2NrX21hcF9yZWxlYXNlKCZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0 YXJ0X21hcCk7CkBAIC04OTIsNiArODk2LDEyIEBAIHN0YXRpYyBpbnQgX19tbXVfcmFuZ2Vfbm90 aWZpZXJfaW5zZXJ0KHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybiwKIAkJbXJuLT5pbnZh bGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7CiAJfSBlbHNlIHsKIAkJV0FSTl9P Tihtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1uX21tKSk7CisJCS8qCisJCSAqIFRoZSBzdGFy dGluZyBzZXEgZm9yIGEgbXJuIG5vdCB1bmRlciBpbnZhbGlkYXRpb24gc2hvdWxkIGJlCisJCSAq IG9kZCwgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IGludmFsaWRhdGVfc2VxIGFuZAorCQkgKiBp bnZhbGlkYXRlX3NlcSBzaG91bGQgbm90ICd3cmFwJyB0byB0aGUgbmV3IHNlcSBhbnkgdGltZQor CQkgKiBzb29uLgorCQkgKi8KIAkJbXJuLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxp ZGF0ZV9zZXEgLSAxOwogCQlpbnRlcnZhbF90cmVlX2luc2VydCgmbXJuLT5pbnRlcnZhbF90cmVl LCAmbW1uX21tLT5pdHJlZSk7CiAJfQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv L3hlbi1kZXZlbA== 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=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 41E63C5DF60 for ; Fri, 8 Nov 2019 08:12:55 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 2099C21D7B for ; Fri, 8 Nov 2019 08:12:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2099C21D7B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3770C6F86E; Fri, 8 Nov 2019 08:12:34 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on060a.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::60a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 48D8B6F78E; Thu, 7 Nov 2019 20:06:13 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XbYR/uRivvAfvGKhO6vEH5IoVw52viT8SbTkxoUdnPU5seHSfhOvS2pOsgI7vWXVHIxG8+eaJw8xtq9dJW7R/kVLdusfK9tD6Z4kgQZnuTTEXDZQFXIjB0tFb5TuCVN8xGcmwE5gYYj67+hYV+TPwvT/qKIdL4J7iu0hGyxFT6XcFhlwOm2+vLj9VDpSJp9bT5bd+oYvfN4QmlI06xTqyqtMJ9Q4E9aTTmukC1nScZtQKYa53HybhzO92PBWCFLsD2kOHuBvrd4W5Ho5133vt1WwvIVANMNiiy1eFWh9EL156Ic4Vc2efxwulllFMoQSEe9fgXadBQ7uIV3Ta6Oh6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZLGtICPXHQeYMx3zwEUZ2kEBvqnlPF/xDCnKoeEU1Y=; b=FMGEdkApgkM+8CTxEC4sr0tb6phrZTIvf9VXG0mLTfnbMU6u7iAGzjR65ihQBvgTRsbnTmpr0l1EJ+766Buy7vse76t6FVgFElI8cNqi1KgKjIre76WBrjPWG8dbxsGPP9l5p9BtLEsAADhX6k7yWXA74vLtX7xxlapDkN7E+ki9U+QhAW2VDbIxzM1pdjn7NHa+iotezNzepsZ7bOjxNxgcxQPpeLQzL9IrCYEt33bWBvMGaSs6xJ6S5Rke8aUtmWlcl5Vm/lx46i5WIngLBE1iPeWTyrJN27c563sqvoXlqfRf79p7RVQ7wYMT+jW75ytqGn5ULIaP6aBzCD3yYQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none Received: from VI1PR05MB4141.eurprd05.prod.outlook.com (52.133.14.15) by VI1PR05MB6653.eurprd05.prod.outlook.com (10.141.128.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2430.20; Thu, 7 Nov 2019 20:06:09 +0000 Received: from VI1PR05MB4141.eurprd05.prod.outlook.com ([fe80::b179:e8bf:22d4:bf8d]) by VI1PR05MB4141.eurprd05.prod.outlook.com ([fe80::b179:e8bf:22d4:bf8d%5]) with mapi id 15.20.2408.028; Thu, 7 Nov 2019 20:06:09 +0000 From: Jason Gunthorpe To: John Hubbard Subject: Re: [PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier Thread-Topic: [PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier Thread-Index: AQHVjcvJYOye0EiwZkisYK74G5bmhqd+54eAgAFKcgA= Date: Thu, 7 Nov 2019 20:06:08 +0000 Message-ID: <20191107200604.GB21728@mellanox.com> References: <20191028201032.6352-1-jgg@ziepe.ca> <20191028201032.6352-3-jgg@ziepe.ca> <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> In-Reply-To: <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BL0PR1501CA0002.namprd15.prod.outlook.com (2603:10b6:207:17::15) To VI1PR05MB4141.eurprd05.prod.outlook.com (2603:10a6:803:44::15) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [142.162.113.180] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 689fa69c-2ee1-4f94-10df-08d763bdedcc x-ms-traffictypediagnostic: VI1PR05MB6653: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0214EB3F68 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(346002)(39850400004)(136003)(396003)(366004)(376002)(199004)(189003)(476003)(1076003)(6916009)(71190400001)(486006)(71200400001)(305945005)(4326008)(7736002)(25786009)(30864003)(7416002)(446003)(6246003)(5660300002)(36756003)(186003)(81166006)(8676002)(256004)(14444005)(26005)(81156014)(386003)(102836004)(11346002)(33656002)(86362001)(2906002)(66946007)(76176011)(66446008)(478600001)(2616005)(99286004)(229853002)(66476007)(316002)(6116002)(6486002)(8936002)(6506007)(14454004)(6436002)(3846002)(52116002)(64756008)(66556008)(66066001)(6512007)(54906003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR05MB6653; H:VI1PR05MB4141.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OhxIMxuIpy97a6eE8TxWtNSzY1GNivpNQHbZMy5HgAaLZV7EjFuJJFhhRC0eSEkk23Ucrn5O6/y8uDahQtqSzMgby5NIybxB6oNl3Tiy9YpQ/HGz6LjYfXGxr+iGWymZI46KuUjyOEW/Artb2IvH838mCDoq8r/svTaI9YTzMoGfguXhtoXCRR2ZOl4cPQW4zzQnaswTnKGwLrR9BdOni57n5G2KiYnbGGwYqSbn0Rs5er02tMs9PEHo7T/ry3vJoUO2MT6fwulWLcEBzzME2jiqevWPh/jL7N29Zz0Lfa7yO93RO3mb4XY7TTNSLSLcodhCWMlcIHdfW6qsnUZNPApRfktRwlTqrwII+xDEB2VTJvyQQRQ+APx9dokWh8wQ2QUibNnfvufJ6YYEtzs6Pk2B1CDbux6O3Qrw39NEUdcxxSykQOPIvJ+iZGKXilMy x-ms-exchange-transport-forked: True Content-ID: <6113418291CBA3499D9869CD0CC8D233@eurprd05.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 689fa69c-2ee1-4f94-10df-08d763bdedcc X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Nov 2019 20:06:09.1763 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +TuBIUtrktnBKZ6NZvy1veC+LPb7Nd6ABDYqCTCaNtlIuaUguMa6aZ8NnTlNlDmfIufFo0WoiB5EsbzpMF64bw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB6653 X-Mailman-Approved-At: Fri, 08 Nov 2019 08:12:31 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZLGtICPXHQeYMx3zwEUZ2kEBvqnlPF/xDCnKoeEU1Y=; b=jYDOc+HBZxt1WV25q8ShhQioI8qPveMDugD/wyFzOh+eQjHsx+PF5jCAKTLEC3m5Bi5ymyLIM96x9SqxS79eYhdiTQ76YSSclVoxJ/0Hfp3ckpgkI0G6Io5ZevRDAoiCEW8T8T7qjY9uIpY2bycj8Z8Hu+zqMI1gIvSB5AFl2y0= X-Mailman-Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jgg@mellanox.com; X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "nouveau@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , Michal Hocko , "linux-mm@kvack.org" , Andrea Arcangeli , Stefano Stabellini , Oleksandr Andrushchenko , "linux-rdma@vger.kernel.org" , "amd-gfx@lists.freedesktop.org" , Christoph Hellwig , Ben Skeggs , "xen-devel@lists.xenproject.org" , Ralph Campbell , Jerome Glisse , Boris Ostrovsky , Petr Cvek , Juergen Gross , Mike Marciniszyn , Dennis Dalessandro , =?iso-8859-1?Q?Christian_K=F6nig?= , Alex Deucher , "Felix.Kuehling@amd.com" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191107200608.3epHkqfFjdAqbPwZ2crP7g4piUpCzRVj6ui6eGyUz48@z> T24gV2VkLCBOb3YgMDYsIDIwMTkgYXQgMDQ6MjM6MjFQTSAtMDgwMCwgSm9obiBIdWJiYXJkIHdy b3RlOgogCj4gTmljZSBkZXNpZ24sIEkgbG92ZSB0aGUgc2VxIGZvdW5kYXRpb24hIFNvIGZhciwg SSdtIG5vdCBhYmxlIHRvIHNwb3QgYW55dGhpbmcKPiBhY3R1YWxseSB3cm9uZyB3aXRoIHRoZSBp bXBsZW1lbnRhdGlvbiwgc29ycnkgYWJvdXQgdGhhdC4gCgpBbGFzIDooIEkgZmVlbCB0aGVyZSBt dXN0IGJlIGEgYnVnIGluIGhlcmUgc3RpbGwsIGJ1dCBvbndhcmRzIQoKT25lIG9mIHRoZSBtYWlu IHNhZCBwb2ludHMgd2FzIGl0IGRpZG4ndCBtYWtlIHNlbnNlIHRvIHVzZSB0aGUKZXhpc3Rpbmcg c2VxbG9jay9zZXFjb3VudCBwcmltaXRpdmVzIGFzIHRoZXkgaGF2ZSBib3RoIHRoZSB3cm9uZyB3 cml0ZQpjb25jdXJyYW5jeSBtb2RlbCBhbmQgZXh0cmEgYmFycmllcnMgdGhhdCBhcmUgbm90IG5l ZWRlZCB3aGVuIGl0IGlzCmFsd2F5cyBtYW5pcHVsYXRlZCB1bmRlciBhIHNwaW5sb2NrCiAKPiAx LiBUaGVyZSBpcyBhIHJhdGhlciBzZXZlcmUgbmFtaW5nIG92ZXJsYXAgKG5vdCB0ZWNobmljYWxs eSBhIG5hbWluZyBjb25mbGljdCwKPiBidXQgc3RpbGwpIHdpdGggZXhpc3RpbmcgbW1uIHdvcmss IHdoaWNoIGFscmVhZHkgaGFzLCBmb3IgZXhhbXBsZToKPiAKPiAgICAgc3RydWN0IG1tdV9ub3Rp Zmllcl9yYW5nZQo+IAo+IC4uLmFuZCB5b3UncmUgYWRkaW5nOgo+IAo+ICAgICBzdHJ1Y3QgbW11 X3JhbmdlX25vdGlmaWVyCj4gCj4gLi4uc28gSSdsbCB0cnkgdG8gaGVscCBzb3J0IHRoYXQgb3V0 LgoKWWVzLCBJJ3ZlIGJlZW4gc2FkIGFib3V0IHRoaXMgdG9vLgoKPiBTbyB0aGlzIHNob3VsZCBy ZWFkOgo+IAo+IGVudW0gbW11X3JhbmdlX25vdGlmaWVyX2V2ZW50IHsKPiAJTU1VX05PVElGWV9S RUxFQVNFLAo+IH07Cj4gCj4gLi4uYXNzdW1pbmcgdGhhdCB3ZSBzdGF5IHdpdGggIm1tdV9yYW5n ZV9ub3RpZmllciIgYXMgYSBjb3JlIG5hbWUgZm9yIHRoaXMgCj4gd2hvbGUgdGhpbmcuCj4gCj4g QWxzbywgaXQgaXMgYmVzdCBtb3ZlZCBkb3duIHRvIGJlIG5leHQgdG8gdGhlIG5ldyBNTlIgc3Ry dWN0cywgc28gdGhhdCBhbGwgdGhlCj4gTU5SIHN0dWZmIGlzIGluIG9uZSBncm91cC4KCkkgYWdy ZWUgd2l0aCBKZXJvbWUsIHRoaXMgZW51bSBpcyBwYXJ0IG9mIHRoZSAnc3RydWN0Cm1tdV9ub3Rp Zmllcl9yYW5nZScgKGllIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgaW52YWxpZGF0aW9uKSBhbmQg aXQKZG9lc24ndCByZWFsbHkgbWF0dGVyIHRoYXQgb25seSB0aGVzZSBuZXcgbm90aWZpZXJzIGNh biBiZSBjYWxsZWQgd2l0aAp0aGlzIHR5cGUsIGl0IGlzIHN0aWxsIHBhcnQgb2YgdGhlIG1tdV9u b3RpZmllcl9yYW5nZS4KClRoZSBjb21tZW50IGFscmVhZHkgc2F5cyBpdCBvbmx5IGFwcGxpZXMg dG8gdGhlIG1tdV9yYW5nZV9ub3RpZmllcgpzY2hlbWUuLgoKPiA+ICAjZGVmaW5lIE1NVV9OT1RJ RklFUl9SQU5HRV9CTE9DS0FCTEUgKDEgPDwgMCkKPiA+IEBAIC0yMjIsNiArMjI4LDI2IEBAIHN0 cnVjdCBtbXVfbm90aWZpZXIgewo+ID4gIAl1bnNpZ25lZCBpbnQgdXNlcnM7Cj4gPiAgfTsKPiA+ ICAKPiAKPiBUaGF0IHNob3VsZCBhbHNvIGJlIG1vdmVkIGRvd24sIG5leHQgdG8gdGhlIG5ldyBz dHJ1Y3RzLgoKV2hpY2ggdGhpcz8KCj4gPiArLyoqCj4gPiArICogc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllcl9vcHMKPiA+ICsgKiBAaW52YWxpZGF0ZTogVXBvbiByZXR1cm4gdGhlIGNhbGxlciBt dXN0IHN0b3AgdXNpbmcgYW55IFNQVEVzIHdpdGhpbiB0aGlzCj4gPiArICogICAgICAgICAgICAg IHJhbmdlLCB0aGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4gUmV0dXJuIGZhbHNlIGlmIGJsb2NraW5n IHdhcwo+ID4gKyAqICAgICAgICAgICAgICByZXF1aXJlZCBidXQgcmFuZ2UgaXMgbm9uLWJsb2Nr aW5nCj4gPiArICovCj4gCj4gSG93IGFib3V0IHRoaXMgKEknbSBub3Qgc3VyZSBJIGZ1bGx5IHVu ZGVyc3RhbmQgdGhlIHJldHVybiB2YWx1ZSwgdGhvdWdoKToKPiAKPiAvKioKPiAgKiBzdHJ1Y3Qg bW11X3JhbmdlX25vdGlmaWVyX29wcwo+ICAqIEBpbnZhbGlkYXRlOiBVcG9uIHJldHVybiB0aGUg Y2FsbGVyIG11c3Qgc3RvcCB1c2luZyBhbnkgU1BURXMgd2l0aGluIHRoaXMKPiAgKiAJCXJhbmdl Lgo+ICAqCj4gICogCQlUaGlzIGZ1bmN0aW9uIGlzIHBlcm1pdHRlZCB0byBzbGVlcC4KPiAgKgo+ ICAqICAgICAgCUBSZXR1cm46IGZhbHNlIGlmIGJsb2NraW5nIHdhcyByZXF1aXJlZCwgYnV0IEBy YW5nZSBpcwo+ICAqCQkJbm9uLWJsb2NraW5nLgo+ICAqCj4gICovCgpJcyB0aGlzIGtkb2MgZm9y bWF0IGZvciBmdW5jdGlvbiBwb2ludGVycz8KIAo+IAo+ID4gK3N0cnVjdCBtbXVfcmFuZ2Vfbm90 aWZpZXJfb3BzIHsKPiA+ICsJYm9vbCAoKmludmFsaWRhdGUpKHN0cnVjdCBtbXVfcmFuZ2Vfbm90 aWZpZXIgKm1ybiwKPiA+ICsJCQkgICBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpy YW5nZSwKPiA+ICsJCQkgICB1bnNpZ25lZCBsb25nIGN1cl9zZXEpOwo+ID4gK307Cj4gPiArCj4g PiArc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciB7Cj4gPiArCXN0cnVjdCBpbnRlcnZhbF90cmVl X25vZGUgaW50ZXJ2YWxfdHJlZTsKPiA+ICsJY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmll cl9vcHMgKm9wczsKPiA+ICsJc3RydWN0IGhsaXN0X25vZGUgZGVmZXJyZWRfaXRlbTsKPiA+ICsJ dW5zaWduZWQgbG9uZyBpbnZhbGlkYXRlX3NlcTsKPiA+ICsJc3RydWN0IG1tX3N0cnVjdCAqbW07 Cj4gPiArfTsKPiA+ICsKPiAKPiBBZ2Fpbiwgbm93IHdlIGhhdmUgdGhlIG5ldyBzdHJ1Y3QgbW11 X3JhbmdlX25vdGlmaWVyLCBhbmQgdGhlIG9sZCAKPiBzdHJ1Y3QgbW11X25vdGlmaWVyX3Jhbmdl LCBhbmQgaXQncyBub3QgZ29vZC4KPiAKPiBJZGVhczoKPiAKPiBhKSBMaXZlIHdpdGggaXQuCj4g Cj4gYikgKERpc2NhcmRlZCwgdG9vIG1hbnkgY2FsbGVycyk6IHJlbmFtZSBvbGQgb25lLiBOb3Bl Lgo+IAo+IGMpIFJlbmFtZSBuZXcgb25lLiBJZGVhczoKPiAKPiAgICAgc3RydWN0IG1tdV9pbnRl cnZhbF9ub3RpZmllcgo+ICAgICBzdHJ1Y3QgbW11X3JhbmdlX2ludGVyc2VjdGlvbgo+ICAgICAu Li5vdGhlciBpZGVhcz8KClRoaXMgb2RkIGR1YWxpdHkgaGFzIGFscmVhZHkgY2F1c2Ugc29tZSBj b25mdXNpb24sIGJ1dCBuYW1lcyBoZXJlIGFyZQpoYXJkLiAgbW11X2ludGVydmFsX25vdGlmaWVy IGlzIHRoZSBiZXN0IGFsdGVybmF0aXZlIEkndmUgaGVhcmQuCgpDaGFuZ2luZyB0aGlzIG5hbWUg aXMgYSBsb3Qgb2Ygd29yayAtIGFyZSB3ZSBoYXBweQonbW11X2ludGVydmFsX25vdGlmaWVyJyBp cyB0aGUgcmlnaHQgY2hvaWNlPwoKPiA+ICsvKioKPiA+ICsgKiBtbXVfcmFuZ2Vfc2V0X3NlcSAt IFNhdmUgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZQo+IAo+IEhvdyBhYm91dDoKPiAKPiAgKiBt bXVfcmFuZ2Vfc2V0X3NlcSAtIFNldCB0aGUgLmludmFsaWRhdGVfc2VxIHRvIGEgbmV3IHZhbHVl LgoKSXQgaXMgbm90IGEgJ25ldyB2YWx1ZScsIGl0IGlzIGEgdmFsdWUgdGhhdCBpcyBwcm92aWRl ZCB0byB0aGUKaW52YWxpZGF0ZSBjYWxsYmFjawoKPiAKPiA+ICsgKiBAbXJuIC0gVGhlIG1ybiBw YXNzZWQgdG8gaW52YWxpZGF0ZQo+ID4gKyAqIEBjdXJfc2VxIC0gVGhlIGN1cl9zZXEgcGFzc2Vk IHRvIGludmFsaWRhdGUKPiA+ICsgKgo+ID4gKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5jb25k aXRpb25hbGx5IGZyb20gdGhlIGludmFsaWRhdGUgY2FsbGJhY2sgb2YgYQo+ID4gKyAqIHN0cnVj dCBtbXVfcmFuZ2Vfbm90aWZpZXJfb3BzIHVuZGVyIHRoZSBzYW1lIGxvY2sgdGhhdCBpcyB1c2Vk IHRvIGNhbGwKPiA+ICsgKiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiBJdCB1cGRhdGVzIHRoZSBz ZXF1ZW5jZSBudW1iZXIgZm9yIGxhdGVyIHVzZSBieQo+ID4gKyAqIG1tdV9yYW5nZV9yZWFkX3Jl dHJ5KCkuCj4gPiArICoKPiA+ICsgKiBJZiB0aGUgdXNlciBkb2VzIG5vdCBjYWxsIG1tdV9yYW5n ZV9yZWFkX2JlZ2luKCkgb3IgbW11X3JhbmdlX3JlYWRfcmV0cnkoKQo+IAo+IG5pdDogImNhbGxl ciIgaXMgYmV0dGVyIHRoYW4gInVzZXIiLCB3aGVuIHJlZmVycmluZyB0by4uLndlbGwsIGNhbGxl cnMuICJ1c2VyIiAKPiBtb3N0IG9mdGVuIHJlZmVycyB0byB1c2VyIHNwYWNlLCB3aGVyZWFzIGEg Y2FsbCBzdGFjayBhbmQgZnVuY3Rpb24gY2FsbGluZyBpcyAKPiBjbGVhcmx5IHdoYXQgeW91J3Jl IHJlZmVycmluZyB0byBoZXJlIChhbmQgaW4gb3RoZXIgcGxhY2VzLCBlc3BlY2lhbGx5ICJ1c2Vy IGxvY2siKS4KCkRvbmUKCj4gPiArLyoqCj4gPiArICogbW11X3JhbmdlX2NoZWNrX3JldHJ5IC0g VGVzdCBpZiBhIGNvbGxpc2lvbiBoYXMgb2NjdXJyZWQKPiA+ICsgKiBtcm46IFRoZSByYW5nZSB1 bmRlciBsb2NrCj4gPiArICogc2VxOiBUaGUgcmV0dXJuIG9mIHRoZSBtYXRjaGluZyBtbXVfcmFu Z2VfcmVhZF9iZWdpbigpCj4gPiArICoKPiA+ICsgKiBUaGlzIGNhbiBiZSB1c2VkIGluIHRoZSBj cml0aWNhbCBzZWN0aW9uIGJldHdlZW4gbW11X3JhbmdlX3JlYWRfYmVnaW4oKSBhbmQKPiA+ICsg KiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiAgQSByZXR1cm4gb2YgdHJ1ZSBpbmRpY2F0ZXMgYW4g aW52YWxpZGF0aW9uIGhhcwo+ID4gKyAqIGNvbGxpZGVkIHdpdGggdGhpcyBsb2NrIGFuZCBhIGZ1 dHVyZSBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpIHdpbGwgcmV0dXJuCj4gPiArICogdHJ1ZS4KPiA+ ICsgKgo+ID4gKyAqIEZhbHNlIGlzIG5vdCByZWxpYWJsZSBhbmQgb25seSBzdWdnZXN0cyBhIGNv bGxpc2lvbiBoYXMgbm90IGhhcHBlbmVkLiBJdAo+IAo+IGxldCdzIHNheSAic3VnZ2VzdHMgdGhh dCBhIGNvbGxpc2lvbiAqbWF5KiBub3QgaGF2ZSBvY2N1cnJlZC4iICAKClN1cmUKCj4gPiArLyoK PiA+ICsgKiBUaGlzIGlzIGEgY29sbGlzaW9uLXJldHJ5IHJlYWQtc2lkZS93cml0ZS1zaWRlICds b2NrJywgYSBsb3QgbGlrZSBhCj4gPiArICogc2VxY291bnQsIGhvd2V2ZXIgdGhpcyBhbGxvd3Mg bXVsdGlwbGUgd3JpdGUtc2lkZXMgdG8gaG9sZCBpdCBhdAo+ID4gKyAqIG9uY2UuIENvbmNlcHR1 YWxseSB0aGUgd3JpdGUgc2lkZSBpcyBwcm90ZWN0aW5nIHRoZSB2YWx1ZXMgb2YgdGhlIFBURXMg aW4KPiA+ICsgKiB0aGlzIG1tLCBzdWNoIHRoYXQgUFRFUyBjYW5ub3QgYmUgcmVhZCBpbnRvIFNQ VEVzIHdoaWxlIGFueSB3cml0ZXIgZXhpc3RzLgo+IAo+IEp1c3QgdG8gYmUga2luZCwgY2FuIHdl IHNheSAiU1BURXMgKHNoYWRvdyBQVEVzKSIsIGp1c3QgdGhpcyBvbmNlPyA6KQoKSGFoYSwgc3Vy ZSwgd2h5IG5vdAoKPiA+ICsgKiBUaGUgd3JpdGUgc2lkZSBoYXMgdHdvIHN0YXRlcywgZnVsbHkg ZXhjbHVkZWQ6Cj4gPiArICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAhPSAwCj4g PiArICogIC0gbW5uLT5pbnZhbGlkYXRlX3NlcSAmIDEgPT0gVHJ1ZQo+ID4gKyAqICAtIHNvbWUg cmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBiZWluZyBpbnZhbGlkYXRlZAo+ID4gKyAqICAtIHRo ZSBpdHJlZSBpcyBub3QgYWxsb3dlZCB0byBjaGFuZ2UKPiA+ICsgKgo+ID4gKyAqIEFuZCBwYXJ0 aWFsbHkgZXhjbHVkZWQ6Cj4gPiArICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAh PSAwCj4gCj4gSSBhc3N1bWUgdGhpcyBpbXBsaWVzIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAxID09 IEZhbHNlIGluIHRoaXMgY2FzZT8gSWYgc28sCj4gbGV0J3Mgc2F5IHNvLiBJJ20gcHJvYmFibHkg Z2V0dGluZyB0aGF0IHdyb25nLCB0b28uCgpZZXMgdGhhdCBpcyByaWdodCwgZG9uZQoKPiAKPiA+ ICsgKiAgLSBzb21lIHJhbmdlIG9uIHRoZSBtbV9zdHJ1Y3QgaXMgYmVpbmcgaW52YWxpZGF0ZWQK PiA+ICsgKiAgLSB0aGUgaXRyZWUgaXMgYWxsb3dlZCB0byBjaGFuZ2UKPiA+ICsgKgo+ID4gKyAq IFRoZSBsYXRlciBzdGF0ZSBhdm9pZHMgc29tZSBleHBlbnNpdmUgd29yayBvbiBpbnZfZW5kIGlu IHRoZSBjb21tb24gY2FzZSBvZgo+ID4gKyAqIG5vIG1ybiBtb25pdG9yaW5nIHRoZSBWQS4KPiA+ ICsgKi8KPiA+ICtzdGF0aWMgYm9vbCBtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcoc3RydWN0IG1t dV9ub3RpZmllcl9tbSAqbW1uX21tKQo+ID4gK3sKPiA+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgm bW1uX21tLT5sb2NrKTsKPiA+ICsJcmV0dXJuIG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgJiAxOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqCj4gPiAr bW5faXRyZWVfaW52X3N0YXJ0X3JhbmdlKHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSwK PiA+ICsJCQkgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UsCj4gPiArCQkJ IHVuc2lnbmVkIGxvbmcgKnNlcSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBpbnRlcnZhbF90cmVlX25v ZGUgKm5vZGU7Cj4gPiArCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKnJlcyA9IE5VTEw7Cj4g PiArCj4gPiArCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJbW1uX21tLT5hY3RpdmVf aW52YWxpZGF0ZV9yYW5nZXMrKzsKPiA+ICsJbm9kZSA9IGludGVydmFsX3RyZWVfaXRlcl9maXJz dCgmbW1uX21tLT5pdHJlZSwgcmFuZ2UtPnN0YXJ0LAo+ID4gKwkJCQkJcmFuZ2UtPmVuZCAtIDEp Owo+ID4gKwlpZiAobm9kZSkgewo+ID4gKwkJbW1uX21tLT5pbnZhbGlkYXRlX3NlcSB8PSAxOwo+ IAo+IAo+IE9LLCB0aGlzIGVpdGhlciBuZWVkcyBtb3JlIGRvY3VtZW50YXRpb24gYW5kIGFzc2Vy dGlvbnMsIG9yIGEgZGlmZmVyZW50Cj4gYXBwcm9hY2guIEJlY2F1c2UgSSBzZWUgYWRkaXRpb24s IHN1YnRyYWN0aW9uLCBBTkQsIE9SIGFuZCBib29sZWFucwo+IGFsbCBiZWluZyBhcHBsaWVkIHRv IHRoaXMgZmllbGQsIGFuZCBpdCdzIGRhcm4gbmVhciBob3BlbGVzcyB0byBmaWd1cmUKPiBvdXQg d2hldGhlciBvciBub3QgaXQgcmVhbGx5IGlzIGV2ZW4gb3Igb2RkIGF0IHRoZSByaWdodCB0aW1l cy4KClRoaXMgaXMgYSBzdGFuZGFyZCBkZXNpZ24gZm9yIGEgc2VxbG9jayBzY2hlbWUgYW5kIGZv bGxvd3MgdGhlCmV4aXN0aW5nIGRlc2lnbiBvZiB0aGUgbGludXggc2VxIGxvY2suCgpUaGUgbG93 ZXIgYml0IGluZGljYXRlcyB0aGUgbG9jaydkIHN0YXRlIGFuZCB0aGUgdXBwZXIgYml0cyBpbmRp Y2F0ZQp0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgbG9jawoKVGhlIG9wZXJhdGlvbnMgb24gdGhlIGxv Y2sgaXRzZWxmIGFyZSB0aGVuOgogICBzZXEgfD0gMSAgIyBUYWtlIHRoZSBsb2NrCiAgIHNlcSsr ICAgICAjIFJlbGVhc2UgYW4gYWNxdWlyZWQgbG9jawogICBzZXEgJiAxICAgIyBUcnVlIGlmIGxv Y2tlZAoKV2hpY2ggaXMgaG93IHRoaXMgaXMgd3JpdHRlbgoKPiBEaWZmZXJlbnQgYXBwcm9hY2g6 IHdoeSBub3QganVzdCBhZGQgYSBtbW5fbW0tPmlzX2ludmFsaWRhdGluZyAKPiBtZW1iZXIgdmFy aWFibGU/IEl0J3Mgbm90IGxpa2UgeW91J3JlIHNob3J0IG9mIHNwYWNlIGluIHRoYXQgc3RydWN0 LgoKU3BsaXR0aW5nIGl0IG1ha2VzIGFsb3Qgb2Ygc3R1ZmYgbW9yZSBjb21wbGV4IGFuZCB1bm5h dHVyYWwuCgpUaGUgb3BzIGFib3ZlIGNvdWxkIGJlIHB1dCBpbiBpbmxpbmUgd3JhcHBlcnMsIGJ1 dCB0aGV5IG9ubHkgb2NjdXIKb25seSBpbiBmdW5jdGlvbnMgYWxyZWFkeSBjYWxsZWQgbW5faXRy ZWVfaW52X3N0YXJ0X3JhbmdlKCkgYW5kCm1uX2l0cmVlX2ludl9lbmQoKSBhbmQgbW5faXRyZWVf aXNfaW52YWxpZGF0aW5nKCkuCgpUaGVyZSBpcyB0aGUgb25lICd0YWtlIHRoZSBsb2NrJyBvdXRs aWVyIGluCl9fbW11X3JhbmdlX25vdGlmaWVyX2luc2VydCgpIHRob3VnaAoKPiA+ICtzdGF0aWMg dm9pZCBtbl9pdHJlZV9pbnZfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSkKPiA+ ICt7Cj4gPiArCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybjsKPiA+ICsJc3RydWN0IGhs aXN0X25vZGUgKm5leHQ7Cj4gPiArCWJvb2wgbmVlZF93YWtlID0gZmFsc2U7Cj4gPiArCj4gPiAr CXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJaWYgKC0tbW1uX21tLT5hY3RpdmVfaW52 YWxpZGF0ZV9yYW5nZXMgfHwKPiA+ICsJICAgICFtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1u X21tKSkgewo+ID4gKwkJc3Bpbl91bmxvY2soJm1tbl9tbS0+bG9jayk7Cj4gPiArCQlyZXR1cm47 Cj4gPiArCX0KPiA+ICsKPiA+ICsJbW1uX21tLT5pbnZhbGlkYXRlX3NlcSsrOwo+IAo+IElzIHRo aXMgdGhlIHJpZ2h0IHBsYWNlIGZvciBhbiBhc3NlcnRpb24gdGhhdCB0aGlzIGlzIG5vdyBhbiBl dmVuIHZhbHVlPwoKWWVzLCBidXQgSSdtIHJlbHVjdGFudCB0byBhZGQgc3VjaCBhIHJ1bnRpbWUg Y2hlY2sgb24gdGhpcyBmYXN0aXNoIHBhdGguLgpIb3cgYWJvdXQgYSBjb21tZW50PwoKPiA+ICsJ bmVlZF93YWtlID0gdHJ1ZTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogVGhlIGludl9lbmQgaW5j b3Jwb3JhdGVzIGEgZGVmZXJyZWQgbWVjaGFuaXNtIGxpa2UKPiA+ICsJICogcnRubF9sb2NrKCku IEFkZHMgYW5kIHJlbW92ZXMgYXJlIHF1ZXVlZCB1bnRpbCB0aGUgZmluYWwgaW52X2VuZAo+IAo+ IExldCBtZSBwb2ludCBvdXQgdGhhdCBydG5sX2xvY2soKSBpdHNlbGYgaXMgYSBvbmUtbGluZXIg dGhhdCBjYWxscyBtdXRleF9sb2NrKCkuCj4gQnV0IEkgc3VwcG9zZSBpZiBvbmUgc3R1ZGllcyB0 aGF0IGZpbGUgY2xvc2VseSB0aGVyZSBpcyBtb3JlLiA6KQoKTGV0cyBjaGFuZ2UgdGhhdCB0byBy dG5sX3VubG9jaygpIHRoZW4KCj4gPiArCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJ LyogUGFpcnMgd2l0aCB0aGUgV1JJVEVfT05DRSBpbiBtbXVfcmFuZ2Vfc2V0X3NlcSgpICovCj4g PiArCXNlcSA9IFJFQURfT05DRShtcm4tPmludmFsaWRhdGVfc2VxKTsKPiA+ICsJaXNfaW52YWxp ZGF0aW5nID0gc2VxID09IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7Cj4gPiArCXNwaW5fdW5sb2Nr KCZtbW5fbW0tPmxvY2spOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBtcm4tPmludmFsaWRhdGVf c2VxIGlzIGFsd2F5cyBzZXQgdG8gYW4gb2RkIHZhbHVlLiBUaGlzIGVuc3VyZXMKPiAKPiBUaGlz IGNsYWltIGp1c3QgbG9va3Mgd3JvbmcgdGhlIGZpcnN0IE4gdGltZXMgb25lIHJlYWRzIHRoZSBj b2RlLCBnaXZlbiB0aGF0Cj4gdGhlcmUgaXMgbW11X3JhbmdlX3NldF9zZXEoKSB0byBzZXQgaXQg dG8gYW4gYXJiaXRyYXJ5IHZhbHVlISAgTWF5YmUKPiB5b3UgbWVhbgoKbW11X3JhbmdlX3NldF9z ZXEoKSBpcyBOT1QgdG8gYmUgdXNlZCB0byBzZXQgdG8gYW4gYXJiaXRhcnkgdmFsdWUsIGl0Cm11 c3Qgb25seSBiZSB1c2VkIHRvIHNldCB0byB0aGUgdmFsdWUgcHJvdmlkZWQgaW4gdGhlIGludmFs aWRhdGUoKQpjYWxsYmFjayBhbmQgdGhhdCB2YWx1ZSBpcyBhbHdheXMgb2RkLiBMZXRzIG1ha2Ug dGhpcyBzdXBlciBjbGVhcjoKCgkvKgoJICogbXJuLT5pbnZhbGlkYXRlX3NlcSBtdXN0IGFsd2F5 cyBiZSBzZXQgdG8gYW4gb2RkIHZhbHVlIHZpYQoJICogbW11X3JhbmdlX3NldF9zZXEoKSB1c2lu ZyB0aGUgcHJvdmlkZWQgY3VyX3NlcSBmcm9tCgkgKiBtbl9pdHJlZV9pbnZfc3RhcnRfcmFuZ2Uo KS4gVGhpcyBlbnN1cmVzIHRoYXQgaWYgc2VxIGRvZXMgd3JhcCB3ZQoJICogd2lsbCBhbHdheXMg Y2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUgcmVhc29uYWJsZSB0aW1lIGFzCgkgKiBtbW5f bW0tPmludmFsaWRhdGVfc2VxIGlzIGV2ZW4gaW4gdGhlIGlkbGUgc3RhdGUuCgkgKi8KClRoZSBp bnZhcmllbnQgaXMgdGhhdCB0aGUgJ3N0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXInIGFsd2F5cyBo YXMgYW4Kb2RkICdzZXEnCgo+ID4gKwkgKiB0aGF0IGlmIHNlcSBkb2VzIHdyYXAgd2Ugd2lsbCBh bHdheXMgY2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUKPiA+ICsJICogcmVhc29uYWJsZSB0 aW1lIGFzIG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgaXMgZXZlbiBpbiB0aGUgaWRsZQo+ID4gKwkg KiBzdGF0ZS4KPiA+ICsJICovCj4gCj4gTGV0J3MgbW92ZSB0aGF0IGNvbW1lbnQgaGlnaGVyIHVw LiBUaGUgY29kZSB0aGF0IGZvbGxvd3MgaXQgaGFzIG5vdGhpbmcgdG8KPiBkbyB3aXRoIGl0LCBz byBpdCdzIGNvbmZ1c2luZyBoZXJlLgoKVGhlIGNvbW1lbnQgaXMgZXhwbGFpbmluZyB3aHkgdGhl IHdhaXRfZXZlbnQgaXMgc2FmZSwgZXZlbiBpZiB3ZSB3cmFwCnRoZSBzZXF1ZW5jZSBudW1iZXIs IHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYW5kIHZlcnkgc3VidGxlIGNvcm5lcgpjYXNlLiBUaGlz IGlzIHJlYWxseSB3aHkgd2UgaGF2ZSB0aGUgZXZlbi9vZGQgdGhpbmcgYXQgYWxsLgoKPiA+ICsJ c3Bpbl9sb2NrKCZtbW5fbW0tPmxvY2spOwo+ID4gKwlpZiAobW1uX21tLT5hY3RpdmVfaW52YWxp ZGF0ZV9yYW5nZXMpIHsKPiA+ICsJCWlmIChtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1uX21t KSkKPiA+ICsJCQlobGlzdF9hZGRfaGVhZCgmbXJuLT5kZWZlcnJlZF9pdGVtLAo+ID4gKwkJCQkg ICAgICAgJm1tbl9tbS0+ZGVmZXJyZWRfbGlzdCk7Cj4gPiArCQllbHNlIHsKPiA+ICsJCQltbW5f bW0tPmludmFsaWRhdGVfc2VxIHw9IDE7Cj4gPiArCQkJaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1y bi0+aW50ZXJ2YWxfdHJlZSwKPiA+ICsJCQkJCSAgICAgJm1tbl9tbS0+aXRyZWUpOwo+ID4gKwkJ fQo+ID4gKwkJbXJuLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7Cj4g PiArCX0gZWxzZSB7Cj4gPiArCQlXQVJOX09OKG1uX2l0cmVlX2lzX2ludmFsaWRhdGluZyhtbW5f bW0pKTsKPiA+ICsJCW1ybi0+aW52YWxpZGF0ZV9zZXEgPSBtbW5fbW0tPmludmFsaWRhdGVfc2Vx IC0gMTsKPiAKPiBPaGhoLCBjaGVja21hdGUuIEkgbG9zZS4gV2h5IGlzICpzdWJ0cmFjdGluZyog dGhlIHJpZ2h0IHRoaW5nIHRvIGRvCj4gZm9yIHNlcSBudW1iZXJzIGhlcmU/ICBJJ20gYWN1dGVs eSB1bmhhcHB5IHRyeWluZyB0byBmaWd1cmUgdGhpcyBvdXQuCj4gSSBzdXNwZWN0IGl0J3MgYW5v dGhlciB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0cnlpbmcgdG8gdXNlIHRoZQo+IGxvd2Vy IGJpdCBvZiB0aGUgc2VxIG51bWJlciAoZXZlbi9vZGQpIGZvciBzb21ldGhpbmcgZWxzZS4KCk5v LCB0aGlzIGlzIGFjdHVhbGx5IGRvbmUgZm9yIHRoZSBzZXEgbnVtYmVyIGl0c2VsZi4gV2UgbmVl ZCB0bwpnZW5lcmF0ZSBhIHNlcSBudW1iZXIgdGhhdCBpcyAhPSB0aGUgY3VycmVudCBpbnZhbGlk YXRlX3NlcSBhcyB0aGlzCm5ldyBtcm4gaXMgbm90IGludmFsaWRhdGluZy4KClRoZSBiZXN0IHNl cSB0byB1c2UgaXMgb25lIHRoYXQgdGhlIGludmFsaWRhdGVfc2VxIHdpbGwgbm90IHJlYWNoIGZv cgphIGxvbmcgdGltZSwgaWUgJ2ludmFsaWRhdGVfc2VxICsgTUFYJyB3aGljaCBpcyBleHByZXNz ZWQgYXMgLTEKClRoZSBldmVuL29kZCB0aGluZyBqdXN0IHRha2VzIGNhcmUgb2YgaXRzZWxmIG5h dHVyYWxseSBoZXJlIGFzCmludmFsaWRhdGVfc2VxIGlzIGd1YXJlbnRlZWQgZXZlbiBhbmQgLTEg Y3JlYXRlcyBib3RoIGFuIG9kZCBtcm4gdmFsdWUKYW5kIGEgZ29vZCBzZXEgbnVtYmVyLgoKVGhl IGFsZ29yaXRobSB3b3VsZCBhY3R1YWxseSB3b3JrIGNvcnJlY3RseSBpZiB0aGlzIHdhcwonbXJu LT5pbnZhbGlkYXRlX3NlcSA9IDEnLCBidXQgb2NjYXNpb25hbGx5IHRoaW5ncyB3b3VsZCBibG9j ayB3aGVuCnRoZXkgZG9uJ3QgbmVlZCB0byBibG9jay4KCkxldHMgYWRkIGEgY29tbWVudDoKCgkJ LyoKCQkgKiBUaGUgc3RhcnRpbmcgc2VxIGZvciBhIG1ybiBub3QgdW5kZXIgaW52YWxpZGF0aW9u IHNob3VsZCBiZQoJCSAqIG9kZCwgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IGludmFsaWRhdGVf c2VxIGFuZAoJCSAqIGludmFsaWRhdGVfc2VxIHNob3VsZCBub3QgJ3dyYXAnIHRvIHRoZSBuZXcg c2VxIGFueSB0aW1lCgkJICogc29vbi4KCQkgKi8KCj4gPiAraW50IG1tdV9yYW5nZV9ub3RpZmll cl9pbnNlcnQoc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqbXJuLAo+ID4gKwkJCSAgICAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAo+ID4gKwkJCSAgICAgIHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1tdV9ub3RpZmllcl9tbSAq bW1uX21tOwo+ID4gKwlpbnQgcmV0Owo+IAo+IEhtbW0sIEkgdGhpbmsgYSBsYXRlciBwYXRjaCBp bXByb3Blcmx5IGNoYW5nZXMgdGhlIGFib3ZlIHRvICJpbnQgcmV0ID0gMDsiLgo+IEknbGwgY2hl Y2sgb24gdGhhdC4gSXQncyBjb3JyZWN0IGhlcmUsIHRob3VnaC4KCkxvb2tzIE9LIGluIG15IHRy ZWU/Cgo+ID4gKwltaWdodF9sb2NrKCZtbS0+bW1hcF9zZW0pOwo+ID4gKwo+ID4gKwltbW5fbW0g PSBzbXBfbG9hZF9hY3F1aXJlKCZtbS0+bW11X25vdGlmaWVyX21tKTsKPiAKPiBXaGF0IGRvZXMg dGhlIGFib3ZlIHBhaXIgd2l0aD8gU2hvdWxkIGhhdmUgYSBjb21tZW50IHRoYXQgc3BlY2lmaWVz IHRoYXQuCgpzbXBfbG9hZF9hY3F1aXJlKCkgYWx3YXlzIHBhaXJzIHdpdGggc21wX3N0b3JlX3Jl bGVhc2UoKSB0byB0aGUgc2FtZQptZW1vcnksIHRoZXJlIGlzIG9ubHkgb25lIHN0b3JlLCBpcyBh IGNvbW1lbnQgcmVhbGx5IG5lZWRlZD8KCkJlbG93IGFyZSB0aGUgY29tbWVudCB1cGRhdGVzIEkg bWFkZSwgdGhhbmtzIQoKSmFzb24KCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tdV9ub3Rp Zmllci5oIGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaAppbmRleCA1MWI5MmJhMDEzZGRj ZS4uMDY1Yzk1MDAyZTk2MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW11X25vdGlmaWVy LmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaApAQCAtMzAyLDE1ICszMDIsMTUg QEAgdm9pZCBtbXVfcmFuZ2Vfbm90aWZpZXJfcmVtb3ZlKHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZp ZXIgKm1ybik7CiAvKioKICAqIG1tdV9yYW5nZV9zZXRfc2VxIC0gU2F2ZSB0aGUgaW52YWxpZGF0 aW9uIHNlcXVlbmNlCiAgKiBAbXJuIC0gVGhlIG1ybiBwYXNzZWQgdG8gaW52YWxpZGF0ZQotICog QGN1cl9zZXEgLSBUaGUgY3VyX3NlcSBwYXNzZWQgdG8gaW52YWxpZGF0ZQorICogQGN1cl9zZXEg LSBUaGUgY3VyX3NlcSBwYXNzZWQgdG8gdGhlIGludmFsaWRhdGUoKSBjYWxsYmFjawogICoKICAq IFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGZyb20gdGhlIGludmFsaWRhdGUg Y2FsbGJhY2sgb2YgYQogICogc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMgdW5kZXIgdGhl IHNhbWUgbG9jayB0aGF0IGlzIHVzZWQgdG8gY2FsbAogICogbW11X3JhbmdlX3JlYWRfcmV0cnko KS4gSXQgdXBkYXRlcyB0aGUgc2VxdWVuY2UgbnVtYmVyIGZvciBsYXRlciB1c2UgYnkKLSAqIG1t dV9yYW5nZV9yZWFkX3JldHJ5KCkuCisgKiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiBUaGUgcHJv dmlkZWQgY3VyX3NlcSB3aWxsIGFsd2F5cyBiZSBvZGQuCiAgKgotICogSWYgdGhlIHVzZXIgZG9l cyBub3QgY2FsbCBtbXVfcmFuZ2VfcmVhZF9iZWdpbigpIG9yIG1tdV9yYW5nZV9yZWFkX3JldHJ5 KCkKLSAqIHRoZW4gdGhpcyBjYWxsIGlzIG5vdCByZXF1aXJlZC4KKyAqIElmIHRoZSBjYWxsZXIg ZG9lcyBub3QgY2FsbCBtbXVfcmFuZ2VfcmVhZF9iZWdpbigpIG9yCisgKiBtbXVfcmFuZ2VfcmVh ZF9yZXRyeSgpIHRoZW4gdGhpcyBjYWxsIGlzIG5vdCByZXF1aXJlZC4KICAqLwogc3RhdGljIGlu bGluZSB2b2lkIG1tdV9yYW5nZV9zZXRfc2VxKHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1y biwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY3VyX3NlcSkKQEAgLTM0OCw4ICszNDgsOSBAQCBz dGF0aWMgaW5saW5lIGJvb2wgbW11X3JhbmdlX3JlYWRfcmV0cnkoc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllciAqbXJuLAogICogY29sbGlkZWQgd2l0aCB0aGlzIGxvY2sgYW5kIGEgZnV0dXJlIG1t dV9yYW5nZV9yZWFkX3JldHJ5KCkgd2lsbCByZXR1cm4KICAqIHRydWUuCiAgKgotICogRmFsc2Ug aXMgbm90IHJlbGlhYmxlIGFuZCBvbmx5IHN1Z2dlc3RzIGEgY29sbGlzaW9uIGhhcyBub3QgaGFw cGVuZWQuIEl0Ci0gKiBjYW4gYmUgY2FsbGVkIG1hbnkgdGltZXMgYW5kIGRvZXMgbm90IGhhdmUg dG8gaG9sZCB0aGUgdXNlciBwcm92aWRlZCBsb2NrLgorICogRmFsc2UgaXMgbm90IHJlbGlhYmxl IGFuZCBvbmx5IHN1Z2dlc3RzIGEgY29sbGlzaW9uIG1heSBub3QgaGF2ZQorICogb2NjdXJlZC4g SXQgY2FuIGJlIGNhbGxlZCBtYW55IHRpbWVzIGFuZCBkb2VzIG5vdCBoYXZlIHRvIGhvbGQgdGhl IHVzZXIKKyAqIHByb3ZpZGVkIGxvY2suCiAgKgogICogVGhpcyBjYWxsIGNhbiBiZSB1c2VkIGFz IHBhcnQgb2YgbG9vcHMgYW5kIG90aGVyIGV4cGVuc2l2ZSBvcGVyYXRpb25zIHRvCiAgKiBleHBl ZGl0ZSBhIHJldHJ5LgpkaWZmIC0tZ2l0IGEvbW0vbW11X25vdGlmaWVyLmMgYi9tbS9tbXVfbm90 aWZpZXIuYwppbmRleCAyYjc0ODU5MTllY2ZlYi4uYWZlMWUyZDk0MTgzZjggMTAwNjQ0Ci0tLSBh L21tL21tdV9ub3RpZmllci5jCisrKyBiL21tL21tdV9ub3RpZmllci5jCkBAIC01MSw3ICs1MSw4 IEBAIHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gewogICogVGhpcyBpcyBhIGNvbGxpc2lvbi1yZXRy eSByZWFkLXNpZGUvd3JpdGUtc2lkZSAnbG9jaycsIGEgbG90IGxpa2UgYQogICogc2VxY291bnQs IGhvd2V2ZXIgdGhpcyBhbGxvd3MgbXVsdGlwbGUgd3JpdGUtc2lkZXMgdG8gaG9sZCBpdCBhdAog ICogb25jZS4gQ29uY2VwdHVhbGx5IHRoZSB3cml0ZSBzaWRlIGlzIHByb3RlY3RpbmcgdGhlIHZh bHVlcyBvZiB0aGUgUFRFcyBpbgotICogdGhpcyBtbSwgc3VjaCB0aGF0IFBURVMgY2Fubm90IGJl IHJlYWQgaW50byBTUFRFcyB3aGlsZSBhbnkgd3JpdGVyIGV4aXN0cy4KKyAqIHRoaXMgbW0sIHN1 Y2ggdGhhdCBQVEVTIGNhbm5vdCBiZSByZWFkIGludG8gU1BURXMgKHNoYWRvdyBQVEVzKSB3aGls ZSBhbnkKKyAqIHdyaXRlciBleGlzdHMuCiAgKgogICogTm90ZSB0aGF0IHRoZSBjb3JlIG1tIGNy ZWF0ZXMgbmVzdGVkIGludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKS9lbmQoKSByZWdpb25zCiAgKiB3 aXRoaW4gdGhlIHNhbWUgdGhyZWFkLCBhbmQgcnVucyBpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCkv ZW5kKCkgaW4gcGFyYWxsZWwKQEAgLTY0LDEyICs2NSwxMyBAQCBzdHJ1Y3QgbW11X25vdGlmaWVy X21tIHsKICAqCiAgKiBUaGUgd3JpdGUgc2lkZSBoYXMgdHdvIHN0YXRlcywgZnVsbHkgZXhjbHVk ZWQ6CiAgKiAgLSBtbS0+YWN0aXZlX2ludmFsaWRhdGVfcmFuZ2VzICE9IDAKLSAqICAtIG1ubi0+ aW52YWxpZGF0ZV9zZXEgJiAxID09IFRydWUKKyAqICAtIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAx ID09IFRydWUgKG9kZCkKICAqICAtIHNvbWUgcmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBiZWlu ZyBpbnZhbGlkYXRlZAogICogIC0gdGhlIGl0cmVlIGlzIG5vdCBhbGxvd2VkIHRvIGNoYW5nZQog ICoKICAqIEFuZCBwYXJ0aWFsbHkgZXhjbHVkZWQ6CiAgKiAgLSBtbS0+YWN0aXZlX2ludmFsaWRh dGVfcmFuZ2VzICE9IDAKKyAqICAtIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAxID09IEZhbHNlIChl dmVuKQogICogIC0gc29tZSByYW5nZSBvbiB0aGUgbW1fc3RydWN0IGlzIGJlaW5nIGludmFsaWRh dGVkCiAgKiAgLSB0aGUgaXRyZWUgaXMgYWxsb3dlZCB0byBjaGFuZ2UKICAqCkBAIC0xMzEsMTIg KzEzMywxMyBAQCBzdGF0aWMgdm9pZCBtbl9pdHJlZV9pbnZfZW5kKHN0cnVjdCBtbXVfbm90aWZp ZXJfbW0gKm1tbl9tbSkKIAkJcmV0dXJuOwogCX0KIAorCS8qIE1ha2UgaW52YWxpZGF0ZV9zZXEg ZXZlbiAqLwogCW1tbl9tbS0+aW52YWxpZGF0ZV9zZXErKzsKIAluZWVkX3dha2UgPSB0cnVlOwog CiAJLyoKIAkgKiBUaGUgaW52X2VuZCBpbmNvcnBvcmF0ZXMgYSBkZWZlcnJlZCBtZWNoYW5pc20g bGlrZQotCSAqIHJ0bmxfbG9jaygpLiBBZGRzIGFuZCByZW1vdmVzIGFyZSBxdWV1ZWQgdW50aWwg dGhlIGZpbmFsIGludl9lbmQKKwkgKiBydG5sX3VubG9jaygpLiBBZGRzIGFuZCByZW1vdmVzIGFy ZSBxdWV1ZWQgdW50aWwgdGhlIGZpbmFsIGludl9lbmQKIAkgKiBoYXBwZW5zIHRoZW4gdGhleSBh cmUgcHJvZ3Jlc3NlZC4gVGhpcyBhcnJhbmdlbWVudCBmb3IgdHJlZSB1cGRhdGVzCiAJICogaXMg dXNlZCB0byBhdm9pZCB1c2luZyBhIGJsb2NraW5nIGxvY2sgZHVyaW5nCiAJICogaW52YWxpZGF0 ZV9yYW5nZV9zdGFydC4KQEAgLTIzMCwxMCArMjMzLDExIEBAIHVuc2lnbmVkIGxvbmcgbW11X3Jh bmdlX3JlYWRfYmVnaW4oc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqbXJuKQogCXNwaW5fdW5s b2NrKCZtbW5fbW0tPmxvY2spOwogCiAJLyoKLQkgKiBtcm4tPmludmFsaWRhdGVfc2VxIGlzIGFs d2F5cyBzZXQgdG8gYW4gb2RkIHZhbHVlLiBUaGlzIGVuc3VyZXMKLQkgKiB0aGF0IGlmIHNlcSBk b2VzIHdyYXAgd2Ugd2lsbCBhbHdheXMgY2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUKLQkg KiByZWFzb25hYmxlIHRpbWUgYXMgbW1uX21tLT5pbnZhbGlkYXRlX3NlcSBpcyBldmVuIGluIHRo ZSBpZGxlCi0JICogc3RhdGUuCisJICogbXJuLT5pbnZhbGlkYXRlX3NlcSBtdXN0IGFsd2F5cyBi ZSBzZXQgdG8gYW4gb2RkIHZhbHVlIHZpYQorCSAqIG1tdV9yYW5nZV9zZXRfc2VxKCkgdXNpbmcg dGhlIHByb3ZpZGVkIGN1cl9zZXEgZnJvbQorCSAqIG1uX2l0cmVlX2ludl9zdGFydF9yYW5nZSgp LiBUaGlzIGVuc3VyZXMgdGhhdCBpZiBzZXEgZG9lcyB3cmFwIHdlCisJICogd2lsbCBhbHdheXMg Y2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUgcmVhc29uYWJsZSB0aW1lIGFzCisJICogbW1u X21tLT5pbnZhbGlkYXRlX3NlcSBpcyBldmVuIGluIHRoZSBpZGxlIHN0YXRlLgogCSAqLwogCWxv Y2tfbWFwX2FjcXVpcmUoJl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFw KTsKIAlsb2NrX21hcF9yZWxlYXNlKCZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0 YXJ0X21hcCk7CkBAIC04OTIsNiArODk2LDEyIEBAIHN0YXRpYyBpbnQgX19tbXVfcmFuZ2Vfbm90 aWZpZXJfaW5zZXJ0KHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybiwKIAkJbXJuLT5pbnZh bGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7CiAJfSBlbHNlIHsKIAkJV0FSTl9P Tihtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1uX21tKSk7CisJCS8qCisJCSAqIFRoZSBzdGFy dGluZyBzZXEgZm9yIGEgbXJuIG5vdCB1bmRlciBpbnZhbGlkYXRpb24gc2hvdWxkIGJlCisJCSAq IG9kZCwgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IGludmFsaWRhdGVfc2VxIGFuZAorCQkgKiBp bnZhbGlkYXRlX3NlcSBzaG91bGQgbm90ICd3cmFwJyB0byB0aGUgbmV3IHNlcSBhbnkgdGltZQor CQkgKiBzb29uLgorCQkgKi8KIAkJbXJuLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxp ZGF0ZV9zZXEgLSAxOwogCQlpbnRlcnZhbF90cmVlX2luc2VydCgmbXJuLT5pbnRlcnZhbF90cmVl LCAmbW1uX21tLT5pdHJlZSk7CiAJfQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWw= 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.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,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 A6D91C43331 for ; Thu, 7 Nov 2019 20:06:48 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (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 6A5AA2067B for ; Thu, 7 Nov 2019 20:06:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="jYDOc+HB" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6A5AA2067B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iSo2q-0007Ay-MV; Thu, 07 Nov 2019 20:06:16 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iSo2o-0007At-NS for xen-devel@lists.xenproject.org; Thu, 07 Nov 2019 20:06:14 +0000 X-Inumbo-ID: 0b7d9b86-019a-11ea-a1cb-12813bfff9fa Received: from EUR01-HE1-obe.outbound.protection.outlook.com (unknown [40.107.13.85]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 0b7d9b86-019a-11ea-a1cb-12813bfff9fa; Thu, 07 Nov 2019 20:06:12 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XbYR/uRivvAfvGKhO6vEH5IoVw52viT8SbTkxoUdnPU5seHSfhOvS2pOsgI7vWXVHIxG8+eaJw8xtq9dJW7R/kVLdusfK9tD6Z4kgQZnuTTEXDZQFXIjB0tFb5TuCVN8xGcmwE5gYYj67+hYV+TPwvT/qKIdL4J7iu0hGyxFT6XcFhlwOm2+vLj9VDpSJp9bT5bd+oYvfN4QmlI06xTqyqtMJ9Q4E9aTTmukC1nScZtQKYa53HybhzO92PBWCFLsD2kOHuBvrd4W5Ho5133vt1WwvIVANMNiiy1eFWh9EL156Ic4Vc2efxwulllFMoQSEe9fgXadBQ7uIV3Ta6Oh6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZLGtICPXHQeYMx3zwEUZ2kEBvqnlPF/xDCnKoeEU1Y=; b=FMGEdkApgkM+8CTxEC4sr0tb6phrZTIvf9VXG0mLTfnbMU6u7iAGzjR65ihQBvgTRsbnTmpr0l1EJ+766Buy7vse76t6FVgFElI8cNqi1KgKjIre76WBrjPWG8dbxsGPP9l5p9BtLEsAADhX6k7yWXA74vLtX7xxlapDkN7E+ki9U+QhAW2VDbIxzM1pdjn7NHa+iotezNzepsZ7bOjxNxgcxQPpeLQzL9IrCYEt33bWBvMGaSs6xJ6S5Rke8aUtmWlcl5Vm/lx46i5WIngLBE1iPeWTyrJN27c563sqvoXlqfRf79p7RVQ7wYMT+jW75ytqGn5ULIaP6aBzCD3yYQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZLGtICPXHQeYMx3zwEUZ2kEBvqnlPF/xDCnKoeEU1Y=; b=jYDOc+HBZxt1WV25q8ShhQioI8qPveMDugD/wyFzOh+eQjHsx+PF5jCAKTLEC3m5Bi5ymyLIM96x9SqxS79eYhdiTQ76YSSclVoxJ/0Hfp3ckpgkI0G6Io5ZevRDAoiCEW8T8T7qjY9uIpY2bycj8Z8Hu+zqMI1gIvSB5AFl2y0= Received: from VI1PR05MB4141.eurprd05.prod.outlook.com (52.133.14.15) by VI1PR05MB6653.eurprd05.prod.outlook.com (10.141.128.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2430.20; Thu, 7 Nov 2019 20:06:09 +0000 Received: from VI1PR05MB4141.eurprd05.prod.outlook.com ([fe80::b179:e8bf:22d4:bf8d]) by VI1PR05MB4141.eurprd05.prod.outlook.com ([fe80::b179:e8bf:22d4:bf8d%5]) with mapi id 15.20.2408.028; Thu, 7 Nov 2019 20:06:09 +0000 From: Jason Gunthorpe To: John Hubbard Thread-Topic: [PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier Thread-Index: AQHVjcvJYOye0EiwZkisYK74G5bmhqd+54eAgAFKcgA= Date: Thu, 7 Nov 2019 20:06:08 +0000 Message-ID: <20191107200604.GB21728@mellanox.com> References: <20191028201032.6352-1-jgg@ziepe.ca> <20191028201032.6352-3-jgg@ziepe.ca> <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> In-Reply-To: <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BL0PR1501CA0002.namprd15.prod.outlook.com (2603:10b6:207:17::15) To VI1PR05MB4141.eurprd05.prod.outlook.com (2603:10a6:803:44::15) authentication-results: spf=none (sender IP is ) smtp.mailfrom=jgg@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [142.162.113.180] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 689fa69c-2ee1-4f94-10df-08d763bdedcc x-ms-traffictypediagnostic: VI1PR05MB6653: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0214EB3F68 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(346002)(39850400004)(136003)(396003)(366004)(376002)(199004)(189003)(476003)(1076003)(6916009)(71190400001)(486006)(71200400001)(305945005)(4326008)(7736002)(25786009)(30864003)(7416002)(446003)(6246003)(5660300002)(36756003)(186003)(81166006)(8676002)(256004)(14444005)(26005)(81156014)(386003)(102836004)(11346002)(33656002)(86362001)(2906002)(66946007)(76176011)(66446008)(478600001)(2616005)(99286004)(229853002)(66476007)(316002)(6116002)(6486002)(8936002)(6506007)(14454004)(6436002)(3846002)(52116002)(64756008)(66556008)(66066001)(6512007)(54906003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR05MB6653; H:VI1PR05MB4141.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OhxIMxuIpy97a6eE8TxWtNSzY1GNivpNQHbZMy5HgAaLZV7EjFuJJFhhRC0eSEkk23Ucrn5O6/y8uDahQtqSzMgby5NIybxB6oNl3Tiy9YpQ/HGz6LjYfXGxr+iGWymZI46KuUjyOEW/Artb2IvH838mCDoq8r/svTaI9YTzMoGfguXhtoXCRR2ZOl4cPQW4zzQnaswTnKGwLrR9BdOni57n5G2KiYnbGGwYqSbn0Rs5er02tMs9PEHo7T/ry3vJoUO2MT6fwulWLcEBzzME2jiqevWPh/jL7N29Zz0Lfa7yO93RO3mb4XY7TTNSLSLcodhCWMlcIHdfW6qsnUZNPApRfktRwlTqrwII+xDEB2VTJvyQQRQ+APx9dokWh8wQ2QUibNnfvufJ6YYEtzs6Pk2B1CDbux6O3Qrw39NEUdcxxSykQOPIvJ+iZGKXilMy x-ms-exchange-transport-forked: True Content-ID: <6113418291CBA3499D9869CD0CC8D233@eurprd05.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 689fa69c-2ee1-4f94-10df-08d763bdedcc X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Nov 2019 20:06:09.1763 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +TuBIUtrktnBKZ6NZvy1veC+LPb7Nd6ABDYqCTCaNtlIuaUguMa6aZ8NnTlNlDmfIufFo0WoiB5EsbzpMF64bw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB6653 Subject: Re: [Xen-devel] [PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: "nouveau@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , Michal Hocko , "linux-mm@kvack.org" , Andrea Arcangeli , David Zhou , Stefano Stabellini , Oleksandr Andrushchenko , "linux-rdma@vger.kernel.org" , "amd-gfx@lists.freedesktop.org" , Christoph Hellwig , Ben Skeggs , "xen-devel@lists.xenproject.org" , Ralph Campbell , Jerome Glisse , Boris Ostrovsky , Petr Cvek , Juergen Gross , Mike Marciniszyn , Dennis Dalessandro , =?iso-8859-1?Q?Christian_K=F6nig?= , Alex Deucher , "Felix.Kuehling@amd.com" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" T24gV2VkLCBOb3YgMDYsIDIwMTkgYXQgMDQ6MjM6MjFQTSAtMDgwMCwgSm9obiBIdWJiYXJkIHdy b3RlOgogCj4gTmljZSBkZXNpZ24sIEkgbG92ZSB0aGUgc2VxIGZvdW5kYXRpb24hIFNvIGZhciwg SSdtIG5vdCBhYmxlIHRvIHNwb3QgYW55dGhpbmcKPiBhY3R1YWxseSB3cm9uZyB3aXRoIHRoZSBp bXBsZW1lbnRhdGlvbiwgc29ycnkgYWJvdXQgdGhhdC4gCgpBbGFzIDooIEkgZmVlbCB0aGVyZSBt dXN0IGJlIGEgYnVnIGluIGhlcmUgc3RpbGwsIGJ1dCBvbndhcmRzIQoKT25lIG9mIHRoZSBtYWlu IHNhZCBwb2ludHMgd2FzIGl0IGRpZG4ndCBtYWtlIHNlbnNlIHRvIHVzZSB0aGUKZXhpc3Rpbmcg c2VxbG9jay9zZXFjb3VudCBwcmltaXRpdmVzIGFzIHRoZXkgaGF2ZSBib3RoIHRoZSB3cm9uZyB3 cml0ZQpjb25jdXJyYW5jeSBtb2RlbCBhbmQgZXh0cmEgYmFycmllcnMgdGhhdCBhcmUgbm90IG5l ZWRlZCB3aGVuIGl0IGlzCmFsd2F5cyBtYW5pcHVsYXRlZCB1bmRlciBhIHNwaW5sb2NrCiAKPiAx LiBUaGVyZSBpcyBhIHJhdGhlciBzZXZlcmUgbmFtaW5nIG92ZXJsYXAgKG5vdCB0ZWNobmljYWxs eSBhIG5hbWluZyBjb25mbGljdCwKPiBidXQgc3RpbGwpIHdpdGggZXhpc3RpbmcgbW1uIHdvcmss IHdoaWNoIGFscmVhZHkgaGFzLCBmb3IgZXhhbXBsZToKPiAKPiAgICAgc3RydWN0IG1tdV9ub3Rp Zmllcl9yYW5nZQo+IAo+IC4uLmFuZCB5b3UncmUgYWRkaW5nOgo+IAo+ICAgICBzdHJ1Y3QgbW11 X3JhbmdlX25vdGlmaWVyCj4gCj4gLi4uc28gSSdsbCB0cnkgdG8gaGVscCBzb3J0IHRoYXQgb3V0 LgoKWWVzLCBJJ3ZlIGJlZW4gc2FkIGFib3V0IHRoaXMgdG9vLgoKPiBTbyB0aGlzIHNob3VsZCBy ZWFkOgo+IAo+IGVudW0gbW11X3JhbmdlX25vdGlmaWVyX2V2ZW50IHsKPiAJTU1VX05PVElGWV9S RUxFQVNFLAo+IH07Cj4gCj4gLi4uYXNzdW1pbmcgdGhhdCB3ZSBzdGF5IHdpdGggIm1tdV9yYW5n ZV9ub3RpZmllciIgYXMgYSBjb3JlIG5hbWUgZm9yIHRoaXMgCj4gd2hvbGUgdGhpbmcuCj4gCj4g QWxzbywgaXQgaXMgYmVzdCBtb3ZlZCBkb3duIHRvIGJlIG5leHQgdG8gdGhlIG5ldyBNTlIgc3Ry dWN0cywgc28gdGhhdCBhbGwgdGhlCj4gTU5SIHN0dWZmIGlzIGluIG9uZSBncm91cC4KCkkgYWdy ZWUgd2l0aCBKZXJvbWUsIHRoaXMgZW51bSBpcyBwYXJ0IG9mIHRoZSAnc3RydWN0Cm1tdV9ub3Rp Zmllcl9yYW5nZScgKGllIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgaW52YWxpZGF0aW9uKSBhbmQg aXQKZG9lc24ndCByZWFsbHkgbWF0dGVyIHRoYXQgb25seSB0aGVzZSBuZXcgbm90aWZpZXJzIGNh biBiZSBjYWxsZWQgd2l0aAp0aGlzIHR5cGUsIGl0IGlzIHN0aWxsIHBhcnQgb2YgdGhlIG1tdV9u b3RpZmllcl9yYW5nZS4KClRoZSBjb21tZW50IGFscmVhZHkgc2F5cyBpdCBvbmx5IGFwcGxpZXMg dG8gdGhlIG1tdV9yYW5nZV9ub3RpZmllcgpzY2hlbWUuLgoKPiA+ICAjZGVmaW5lIE1NVV9OT1RJ RklFUl9SQU5HRV9CTE9DS0FCTEUgKDEgPDwgMCkKPiA+IEBAIC0yMjIsNiArMjI4LDI2IEBAIHN0 cnVjdCBtbXVfbm90aWZpZXIgewo+ID4gIAl1bnNpZ25lZCBpbnQgdXNlcnM7Cj4gPiAgfTsKPiA+ ICAKPiAKPiBUaGF0IHNob3VsZCBhbHNvIGJlIG1vdmVkIGRvd24sIG5leHQgdG8gdGhlIG5ldyBz dHJ1Y3RzLgoKV2hpY2ggdGhpcz8KCj4gPiArLyoqCj4gPiArICogc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllcl9vcHMKPiA+ICsgKiBAaW52YWxpZGF0ZTogVXBvbiByZXR1cm4gdGhlIGNhbGxlciBt dXN0IHN0b3AgdXNpbmcgYW55IFNQVEVzIHdpdGhpbiB0aGlzCj4gPiArICogICAgICAgICAgICAg IHJhbmdlLCB0aGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4gUmV0dXJuIGZhbHNlIGlmIGJsb2NraW5n IHdhcwo+ID4gKyAqICAgICAgICAgICAgICByZXF1aXJlZCBidXQgcmFuZ2UgaXMgbm9uLWJsb2Nr aW5nCj4gPiArICovCj4gCj4gSG93IGFib3V0IHRoaXMgKEknbSBub3Qgc3VyZSBJIGZ1bGx5IHVu ZGVyc3RhbmQgdGhlIHJldHVybiB2YWx1ZSwgdGhvdWdoKToKPiAKPiAvKioKPiAgKiBzdHJ1Y3Qg bW11X3JhbmdlX25vdGlmaWVyX29wcwo+ICAqIEBpbnZhbGlkYXRlOiBVcG9uIHJldHVybiB0aGUg Y2FsbGVyIG11c3Qgc3RvcCB1c2luZyBhbnkgU1BURXMgd2l0aGluIHRoaXMKPiAgKiAJCXJhbmdl Lgo+ICAqCj4gICogCQlUaGlzIGZ1bmN0aW9uIGlzIHBlcm1pdHRlZCB0byBzbGVlcC4KPiAgKgo+ ICAqICAgICAgCUBSZXR1cm46IGZhbHNlIGlmIGJsb2NraW5nIHdhcyByZXF1aXJlZCwgYnV0IEBy YW5nZSBpcwo+ICAqCQkJbm9uLWJsb2NraW5nLgo+ICAqCj4gICovCgpJcyB0aGlzIGtkb2MgZm9y bWF0IGZvciBmdW5jdGlvbiBwb2ludGVycz8KIAo+IAo+ID4gK3N0cnVjdCBtbXVfcmFuZ2Vfbm90 aWZpZXJfb3BzIHsKPiA+ICsJYm9vbCAoKmludmFsaWRhdGUpKHN0cnVjdCBtbXVfcmFuZ2Vfbm90 aWZpZXIgKm1ybiwKPiA+ICsJCQkgICBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpy YW5nZSwKPiA+ICsJCQkgICB1bnNpZ25lZCBsb25nIGN1cl9zZXEpOwo+ID4gK307Cj4gPiArCj4g PiArc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciB7Cj4gPiArCXN0cnVjdCBpbnRlcnZhbF90cmVl X25vZGUgaW50ZXJ2YWxfdHJlZTsKPiA+ICsJY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmll cl9vcHMgKm9wczsKPiA+ICsJc3RydWN0IGhsaXN0X25vZGUgZGVmZXJyZWRfaXRlbTsKPiA+ICsJ dW5zaWduZWQgbG9uZyBpbnZhbGlkYXRlX3NlcTsKPiA+ICsJc3RydWN0IG1tX3N0cnVjdCAqbW07 Cj4gPiArfTsKPiA+ICsKPiAKPiBBZ2Fpbiwgbm93IHdlIGhhdmUgdGhlIG5ldyBzdHJ1Y3QgbW11 X3JhbmdlX25vdGlmaWVyLCBhbmQgdGhlIG9sZCAKPiBzdHJ1Y3QgbW11X25vdGlmaWVyX3Jhbmdl LCBhbmQgaXQncyBub3QgZ29vZC4KPiAKPiBJZGVhczoKPiAKPiBhKSBMaXZlIHdpdGggaXQuCj4g Cj4gYikgKERpc2NhcmRlZCwgdG9vIG1hbnkgY2FsbGVycyk6IHJlbmFtZSBvbGQgb25lLiBOb3Bl Lgo+IAo+IGMpIFJlbmFtZSBuZXcgb25lLiBJZGVhczoKPiAKPiAgICAgc3RydWN0IG1tdV9pbnRl cnZhbF9ub3RpZmllcgo+ICAgICBzdHJ1Y3QgbW11X3JhbmdlX2ludGVyc2VjdGlvbgo+ICAgICAu Li5vdGhlciBpZGVhcz8KClRoaXMgb2RkIGR1YWxpdHkgaGFzIGFscmVhZHkgY2F1c2Ugc29tZSBj b25mdXNpb24sIGJ1dCBuYW1lcyBoZXJlIGFyZQpoYXJkLiAgbW11X2ludGVydmFsX25vdGlmaWVy IGlzIHRoZSBiZXN0IGFsdGVybmF0aXZlIEkndmUgaGVhcmQuCgpDaGFuZ2luZyB0aGlzIG5hbWUg aXMgYSBsb3Qgb2Ygd29yayAtIGFyZSB3ZSBoYXBweQonbW11X2ludGVydmFsX25vdGlmaWVyJyBp cyB0aGUgcmlnaHQgY2hvaWNlPwoKPiA+ICsvKioKPiA+ICsgKiBtbXVfcmFuZ2Vfc2V0X3NlcSAt IFNhdmUgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZQo+IAo+IEhvdyBhYm91dDoKPiAKPiAgKiBt bXVfcmFuZ2Vfc2V0X3NlcSAtIFNldCB0aGUgLmludmFsaWRhdGVfc2VxIHRvIGEgbmV3IHZhbHVl LgoKSXQgaXMgbm90IGEgJ25ldyB2YWx1ZScsIGl0IGlzIGEgdmFsdWUgdGhhdCBpcyBwcm92aWRl ZCB0byB0aGUKaW52YWxpZGF0ZSBjYWxsYmFjawoKPiAKPiA+ICsgKiBAbXJuIC0gVGhlIG1ybiBw YXNzZWQgdG8gaW52YWxpZGF0ZQo+ID4gKyAqIEBjdXJfc2VxIC0gVGhlIGN1cl9zZXEgcGFzc2Vk IHRvIGludmFsaWRhdGUKPiA+ICsgKgo+ID4gKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5jb25k aXRpb25hbGx5IGZyb20gdGhlIGludmFsaWRhdGUgY2FsbGJhY2sgb2YgYQo+ID4gKyAqIHN0cnVj dCBtbXVfcmFuZ2Vfbm90aWZpZXJfb3BzIHVuZGVyIHRoZSBzYW1lIGxvY2sgdGhhdCBpcyB1c2Vk IHRvIGNhbGwKPiA+ICsgKiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiBJdCB1cGRhdGVzIHRoZSBz ZXF1ZW5jZSBudW1iZXIgZm9yIGxhdGVyIHVzZSBieQo+ID4gKyAqIG1tdV9yYW5nZV9yZWFkX3Jl dHJ5KCkuCj4gPiArICoKPiA+ICsgKiBJZiB0aGUgdXNlciBkb2VzIG5vdCBjYWxsIG1tdV9yYW5n ZV9yZWFkX2JlZ2luKCkgb3IgbW11X3JhbmdlX3JlYWRfcmV0cnkoKQo+IAo+IG5pdDogImNhbGxl ciIgaXMgYmV0dGVyIHRoYW4gInVzZXIiLCB3aGVuIHJlZmVycmluZyB0by4uLndlbGwsIGNhbGxl cnMuICJ1c2VyIiAKPiBtb3N0IG9mdGVuIHJlZmVycyB0byB1c2VyIHNwYWNlLCB3aGVyZWFzIGEg Y2FsbCBzdGFjayBhbmQgZnVuY3Rpb24gY2FsbGluZyBpcyAKPiBjbGVhcmx5IHdoYXQgeW91J3Jl IHJlZmVycmluZyB0byBoZXJlIChhbmQgaW4gb3RoZXIgcGxhY2VzLCBlc3BlY2lhbGx5ICJ1c2Vy IGxvY2siKS4KCkRvbmUKCj4gPiArLyoqCj4gPiArICogbW11X3JhbmdlX2NoZWNrX3JldHJ5IC0g VGVzdCBpZiBhIGNvbGxpc2lvbiBoYXMgb2NjdXJyZWQKPiA+ICsgKiBtcm46IFRoZSByYW5nZSB1 bmRlciBsb2NrCj4gPiArICogc2VxOiBUaGUgcmV0dXJuIG9mIHRoZSBtYXRjaGluZyBtbXVfcmFu Z2VfcmVhZF9iZWdpbigpCj4gPiArICoKPiA+ICsgKiBUaGlzIGNhbiBiZSB1c2VkIGluIHRoZSBj cml0aWNhbCBzZWN0aW9uIGJldHdlZW4gbW11X3JhbmdlX3JlYWRfYmVnaW4oKSBhbmQKPiA+ICsg KiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiAgQSByZXR1cm4gb2YgdHJ1ZSBpbmRpY2F0ZXMgYW4g aW52YWxpZGF0aW9uIGhhcwo+ID4gKyAqIGNvbGxpZGVkIHdpdGggdGhpcyBsb2NrIGFuZCBhIGZ1 dHVyZSBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpIHdpbGwgcmV0dXJuCj4gPiArICogdHJ1ZS4KPiA+ ICsgKgo+ID4gKyAqIEZhbHNlIGlzIG5vdCByZWxpYWJsZSBhbmQgb25seSBzdWdnZXN0cyBhIGNv bGxpc2lvbiBoYXMgbm90IGhhcHBlbmVkLiBJdAo+IAo+IGxldCdzIHNheSAic3VnZ2VzdHMgdGhh dCBhIGNvbGxpc2lvbiAqbWF5KiBub3QgaGF2ZSBvY2N1cnJlZC4iICAKClN1cmUKCj4gPiArLyoK PiA+ICsgKiBUaGlzIGlzIGEgY29sbGlzaW9uLXJldHJ5IHJlYWQtc2lkZS93cml0ZS1zaWRlICds b2NrJywgYSBsb3QgbGlrZSBhCj4gPiArICogc2VxY291bnQsIGhvd2V2ZXIgdGhpcyBhbGxvd3Mg bXVsdGlwbGUgd3JpdGUtc2lkZXMgdG8gaG9sZCBpdCBhdAo+ID4gKyAqIG9uY2UuIENvbmNlcHR1 YWxseSB0aGUgd3JpdGUgc2lkZSBpcyBwcm90ZWN0aW5nIHRoZSB2YWx1ZXMgb2YgdGhlIFBURXMg aW4KPiA+ICsgKiB0aGlzIG1tLCBzdWNoIHRoYXQgUFRFUyBjYW5ub3QgYmUgcmVhZCBpbnRvIFNQ VEVzIHdoaWxlIGFueSB3cml0ZXIgZXhpc3RzLgo+IAo+IEp1c3QgdG8gYmUga2luZCwgY2FuIHdl IHNheSAiU1BURXMgKHNoYWRvdyBQVEVzKSIsIGp1c3QgdGhpcyBvbmNlPyA6KQoKSGFoYSwgc3Vy ZSwgd2h5IG5vdAoKPiA+ICsgKiBUaGUgd3JpdGUgc2lkZSBoYXMgdHdvIHN0YXRlcywgZnVsbHkg ZXhjbHVkZWQ6Cj4gPiArICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAhPSAwCj4g PiArICogIC0gbW5uLT5pbnZhbGlkYXRlX3NlcSAmIDEgPT0gVHJ1ZQo+ID4gKyAqICAtIHNvbWUg cmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBiZWluZyBpbnZhbGlkYXRlZAo+ID4gKyAqICAtIHRo ZSBpdHJlZSBpcyBub3QgYWxsb3dlZCB0byBjaGFuZ2UKPiA+ICsgKgo+ID4gKyAqIEFuZCBwYXJ0 aWFsbHkgZXhjbHVkZWQ6Cj4gPiArICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAh PSAwCj4gCj4gSSBhc3N1bWUgdGhpcyBpbXBsaWVzIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAxID09 IEZhbHNlIGluIHRoaXMgY2FzZT8gSWYgc28sCj4gbGV0J3Mgc2F5IHNvLiBJJ20gcHJvYmFibHkg Z2V0dGluZyB0aGF0IHdyb25nLCB0b28uCgpZZXMgdGhhdCBpcyByaWdodCwgZG9uZQoKPiAKPiA+ ICsgKiAgLSBzb21lIHJhbmdlIG9uIHRoZSBtbV9zdHJ1Y3QgaXMgYmVpbmcgaW52YWxpZGF0ZWQK PiA+ICsgKiAgLSB0aGUgaXRyZWUgaXMgYWxsb3dlZCB0byBjaGFuZ2UKPiA+ICsgKgo+ID4gKyAq IFRoZSBsYXRlciBzdGF0ZSBhdm9pZHMgc29tZSBleHBlbnNpdmUgd29yayBvbiBpbnZfZW5kIGlu IHRoZSBjb21tb24gY2FzZSBvZgo+ID4gKyAqIG5vIG1ybiBtb25pdG9yaW5nIHRoZSBWQS4KPiA+ ICsgKi8KPiA+ICtzdGF0aWMgYm9vbCBtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcoc3RydWN0IG1t dV9ub3RpZmllcl9tbSAqbW1uX21tKQo+ID4gK3sKPiA+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgm bW1uX21tLT5sb2NrKTsKPiA+ICsJcmV0dXJuIG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgJiAxOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqCj4gPiAr bW5faXRyZWVfaW52X3N0YXJ0X3JhbmdlKHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSwK PiA+ICsJCQkgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UsCj4gPiArCQkJ IHVuc2lnbmVkIGxvbmcgKnNlcSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBpbnRlcnZhbF90cmVlX25v ZGUgKm5vZGU7Cj4gPiArCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKnJlcyA9IE5VTEw7Cj4g PiArCj4gPiArCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJbW1uX21tLT5hY3RpdmVf aW52YWxpZGF0ZV9yYW5nZXMrKzsKPiA+ICsJbm9kZSA9IGludGVydmFsX3RyZWVfaXRlcl9maXJz dCgmbW1uX21tLT5pdHJlZSwgcmFuZ2UtPnN0YXJ0LAo+ID4gKwkJCQkJcmFuZ2UtPmVuZCAtIDEp Owo+ID4gKwlpZiAobm9kZSkgewo+ID4gKwkJbW1uX21tLT5pbnZhbGlkYXRlX3NlcSB8PSAxOwo+ IAo+IAo+IE9LLCB0aGlzIGVpdGhlciBuZWVkcyBtb3JlIGRvY3VtZW50YXRpb24gYW5kIGFzc2Vy dGlvbnMsIG9yIGEgZGlmZmVyZW50Cj4gYXBwcm9hY2guIEJlY2F1c2UgSSBzZWUgYWRkaXRpb24s IHN1YnRyYWN0aW9uLCBBTkQsIE9SIGFuZCBib29sZWFucwo+IGFsbCBiZWluZyBhcHBsaWVkIHRv IHRoaXMgZmllbGQsIGFuZCBpdCdzIGRhcm4gbmVhciBob3BlbGVzcyB0byBmaWd1cmUKPiBvdXQg d2hldGhlciBvciBub3QgaXQgcmVhbGx5IGlzIGV2ZW4gb3Igb2RkIGF0IHRoZSByaWdodCB0aW1l cy4KClRoaXMgaXMgYSBzdGFuZGFyZCBkZXNpZ24gZm9yIGEgc2VxbG9jayBzY2hlbWUgYW5kIGZv bGxvd3MgdGhlCmV4aXN0aW5nIGRlc2lnbiBvZiB0aGUgbGludXggc2VxIGxvY2suCgpUaGUgbG93 ZXIgYml0IGluZGljYXRlcyB0aGUgbG9jaydkIHN0YXRlIGFuZCB0aGUgdXBwZXIgYml0cyBpbmRp Y2F0ZQp0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgbG9jawoKVGhlIG9wZXJhdGlvbnMgb24gdGhlIGxv Y2sgaXRzZWxmIGFyZSB0aGVuOgogICBzZXEgfD0gMSAgIyBUYWtlIHRoZSBsb2NrCiAgIHNlcSsr ICAgICAjIFJlbGVhc2UgYW4gYWNxdWlyZWQgbG9jawogICBzZXEgJiAxICAgIyBUcnVlIGlmIGxv Y2tlZAoKV2hpY2ggaXMgaG93IHRoaXMgaXMgd3JpdHRlbgoKPiBEaWZmZXJlbnQgYXBwcm9hY2g6 IHdoeSBub3QganVzdCBhZGQgYSBtbW5fbW0tPmlzX2ludmFsaWRhdGluZyAKPiBtZW1iZXIgdmFy aWFibGU/IEl0J3Mgbm90IGxpa2UgeW91J3JlIHNob3J0IG9mIHNwYWNlIGluIHRoYXQgc3RydWN0 LgoKU3BsaXR0aW5nIGl0IG1ha2VzIGFsb3Qgb2Ygc3R1ZmYgbW9yZSBjb21wbGV4IGFuZCB1bm5h dHVyYWwuCgpUaGUgb3BzIGFib3ZlIGNvdWxkIGJlIHB1dCBpbiBpbmxpbmUgd3JhcHBlcnMsIGJ1 dCB0aGV5IG9ubHkgb2NjdXIKb25seSBpbiBmdW5jdGlvbnMgYWxyZWFkeSBjYWxsZWQgbW5faXRy ZWVfaW52X3N0YXJ0X3JhbmdlKCkgYW5kCm1uX2l0cmVlX2ludl9lbmQoKSBhbmQgbW5faXRyZWVf aXNfaW52YWxpZGF0aW5nKCkuCgpUaGVyZSBpcyB0aGUgb25lICd0YWtlIHRoZSBsb2NrJyBvdXRs aWVyIGluCl9fbW11X3JhbmdlX25vdGlmaWVyX2luc2VydCgpIHRob3VnaAoKPiA+ICtzdGF0aWMg dm9pZCBtbl9pdHJlZV9pbnZfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSkKPiA+ ICt7Cj4gPiArCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybjsKPiA+ICsJc3RydWN0IGhs aXN0X25vZGUgKm5leHQ7Cj4gPiArCWJvb2wgbmVlZF93YWtlID0gZmFsc2U7Cj4gPiArCj4gPiAr CXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJaWYgKC0tbW1uX21tLT5hY3RpdmVfaW52 YWxpZGF0ZV9yYW5nZXMgfHwKPiA+ICsJICAgICFtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1u X21tKSkgewo+ID4gKwkJc3Bpbl91bmxvY2soJm1tbl9tbS0+bG9jayk7Cj4gPiArCQlyZXR1cm47 Cj4gPiArCX0KPiA+ICsKPiA+ICsJbW1uX21tLT5pbnZhbGlkYXRlX3NlcSsrOwo+IAo+IElzIHRo aXMgdGhlIHJpZ2h0IHBsYWNlIGZvciBhbiBhc3NlcnRpb24gdGhhdCB0aGlzIGlzIG5vdyBhbiBl dmVuIHZhbHVlPwoKWWVzLCBidXQgSSdtIHJlbHVjdGFudCB0byBhZGQgc3VjaCBhIHJ1bnRpbWUg Y2hlY2sgb24gdGhpcyBmYXN0aXNoIHBhdGguLgpIb3cgYWJvdXQgYSBjb21tZW50PwoKPiA+ICsJ bmVlZF93YWtlID0gdHJ1ZTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogVGhlIGludl9lbmQgaW5j b3Jwb3JhdGVzIGEgZGVmZXJyZWQgbWVjaGFuaXNtIGxpa2UKPiA+ICsJICogcnRubF9sb2NrKCku IEFkZHMgYW5kIHJlbW92ZXMgYXJlIHF1ZXVlZCB1bnRpbCB0aGUgZmluYWwgaW52X2VuZAo+IAo+ IExldCBtZSBwb2ludCBvdXQgdGhhdCBydG5sX2xvY2soKSBpdHNlbGYgaXMgYSBvbmUtbGluZXIg dGhhdCBjYWxscyBtdXRleF9sb2NrKCkuCj4gQnV0IEkgc3VwcG9zZSBpZiBvbmUgc3R1ZGllcyB0 aGF0IGZpbGUgY2xvc2VseSB0aGVyZSBpcyBtb3JlLiA6KQoKTGV0cyBjaGFuZ2UgdGhhdCB0byBy dG5sX3VubG9jaygpIHRoZW4KCj4gPiArCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJ LyogUGFpcnMgd2l0aCB0aGUgV1JJVEVfT05DRSBpbiBtbXVfcmFuZ2Vfc2V0X3NlcSgpICovCj4g PiArCXNlcSA9IFJFQURfT05DRShtcm4tPmludmFsaWRhdGVfc2VxKTsKPiA+ICsJaXNfaW52YWxp ZGF0aW5nID0gc2VxID09IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7Cj4gPiArCXNwaW5fdW5sb2Nr KCZtbW5fbW0tPmxvY2spOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBtcm4tPmludmFsaWRhdGVf c2VxIGlzIGFsd2F5cyBzZXQgdG8gYW4gb2RkIHZhbHVlLiBUaGlzIGVuc3VyZXMKPiAKPiBUaGlz IGNsYWltIGp1c3QgbG9va3Mgd3JvbmcgdGhlIGZpcnN0IE4gdGltZXMgb25lIHJlYWRzIHRoZSBj b2RlLCBnaXZlbiB0aGF0Cj4gdGhlcmUgaXMgbW11X3JhbmdlX3NldF9zZXEoKSB0byBzZXQgaXQg dG8gYW4gYXJiaXRyYXJ5IHZhbHVlISAgTWF5YmUKPiB5b3UgbWVhbgoKbW11X3JhbmdlX3NldF9z ZXEoKSBpcyBOT1QgdG8gYmUgdXNlZCB0byBzZXQgdG8gYW4gYXJiaXRhcnkgdmFsdWUsIGl0Cm11 c3Qgb25seSBiZSB1c2VkIHRvIHNldCB0byB0aGUgdmFsdWUgcHJvdmlkZWQgaW4gdGhlIGludmFs aWRhdGUoKQpjYWxsYmFjayBhbmQgdGhhdCB2YWx1ZSBpcyBhbHdheXMgb2RkLiBMZXRzIG1ha2Ug dGhpcyBzdXBlciBjbGVhcjoKCgkvKgoJICogbXJuLT5pbnZhbGlkYXRlX3NlcSBtdXN0IGFsd2F5 cyBiZSBzZXQgdG8gYW4gb2RkIHZhbHVlIHZpYQoJICogbW11X3JhbmdlX3NldF9zZXEoKSB1c2lu ZyB0aGUgcHJvdmlkZWQgY3VyX3NlcSBmcm9tCgkgKiBtbl9pdHJlZV9pbnZfc3RhcnRfcmFuZ2Uo KS4gVGhpcyBlbnN1cmVzIHRoYXQgaWYgc2VxIGRvZXMgd3JhcCB3ZQoJICogd2lsbCBhbHdheXMg Y2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUgcmVhc29uYWJsZSB0aW1lIGFzCgkgKiBtbW5f bW0tPmludmFsaWRhdGVfc2VxIGlzIGV2ZW4gaW4gdGhlIGlkbGUgc3RhdGUuCgkgKi8KClRoZSBp bnZhcmllbnQgaXMgdGhhdCB0aGUgJ3N0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXInIGFsd2F5cyBo YXMgYW4Kb2RkICdzZXEnCgo+ID4gKwkgKiB0aGF0IGlmIHNlcSBkb2VzIHdyYXAgd2Ugd2lsbCBh bHdheXMgY2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUKPiA+ICsJICogcmVhc29uYWJsZSB0 aW1lIGFzIG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgaXMgZXZlbiBpbiB0aGUgaWRsZQo+ID4gKwkg KiBzdGF0ZS4KPiA+ICsJICovCj4gCj4gTGV0J3MgbW92ZSB0aGF0IGNvbW1lbnQgaGlnaGVyIHVw LiBUaGUgY29kZSB0aGF0IGZvbGxvd3MgaXQgaGFzIG5vdGhpbmcgdG8KPiBkbyB3aXRoIGl0LCBz byBpdCdzIGNvbmZ1c2luZyBoZXJlLgoKVGhlIGNvbW1lbnQgaXMgZXhwbGFpbmluZyB3aHkgdGhl IHdhaXRfZXZlbnQgaXMgc2FmZSwgZXZlbiBpZiB3ZSB3cmFwCnRoZSBzZXF1ZW5jZSBudW1iZXIs IHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYW5kIHZlcnkgc3VidGxlIGNvcm5lcgpjYXNlLiBUaGlz IGlzIHJlYWxseSB3aHkgd2UgaGF2ZSB0aGUgZXZlbi9vZGQgdGhpbmcgYXQgYWxsLgoKPiA+ICsJ c3Bpbl9sb2NrKCZtbW5fbW0tPmxvY2spOwo+ID4gKwlpZiAobW1uX21tLT5hY3RpdmVfaW52YWxp ZGF0ZV9yYW5nZXMpIHsKPiA+ICsJCWlmIChtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1uX21t KSkKPiA+ICsJCQlobGlzdF9hZGRfaGVhZCgmbXJuLT5kZWZlcnJlZF9pdGVtLAo+ID4gKwkJCQkg ICAgICAgJm1tbl9tbS0+ZGVmZXJyZWRfbGlzdCk7Cj4gPiArCQllbHNlIHsKPiA+ICsJCQltbW5f bW0tPmludmFsaWRhdGVfc2VxIHw9IDE7Cj4gPiArCQkJaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1y bi0+aW50ZXJ2YWxfdHJlZSwKPiA+ICsJCQkJCSAgICAgJm1tbl9tbS0+aXRyZWUpOwo+ID4gKwkJ fQo+ID4gKwkJbXJuLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7Cj4g PiArCX0gZWxzZSB7Cj4gPiArCQlXQVJOX09OKG1uX2l0cmVlX2lzX2ludmFsaWRhdGluZyhtbW5f bW0pKTsKPiA+ICsJCW1ybi0+aW52YWxpZGF0ZV9zZXEgPSBtbW5fbW0tPmludmFsaWRhdGVfc2Vx IC0gMTsKPiAKPiBPaGhoLCBjaGVja21hdGUuIEkgbG9zZS4gV2h5IGlzICpzdWJ0cmFjdGluZyog dGhlIHJpZ2h0IHRoaW5nIHRvIGRvCj4gZm9yIHNlcSBudW1iZXJzIGhlcmU/ICBJJ20gYWN1dGVs eSB1bmhhcHB5IHRyeWluZyB0byBmaWd1cmUgdGhpcyBvdXQuCj4gSSBzdXNwZWN0IGl0J3MgYW5v dGhlciB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0cnlpbmcgdG8gdXNlIHRoZQo+IGxvd2Vy IGJpdCBvZiB0aGUgc2VxIG51bWJlciAoZXZlbi9vZGQpIGZvciBzb21ldGhpbmcgZWxzZS4KCk5v LCB0aGlzIGlzIGFjdHVhbGx5IGRvbmUgZm9yIHRoZSBzZXEgbnVtYmVyIGl0c2VsZi4gV2UgbmVl ZCB0bwpnZW5lcmF0ZSBhIHNlcSBudW1iZXIgdGhhdCBpcyAhPSB0aGUgY3VycmVudCBpbnZhbGlk YXRlX3NlcSBhcyB0aGlzCm5ldyBtcm4gaXMgbm90IGludmFsaWRhdGluZy4KClRoZSBiZXN0IHNl cSB0byB1c2UgaXMgb25lIHRoYXQgdGhlIGludmFsaWRhdGVfc2VxIHdpbGwgbm90IHJlYWNoIGZv cgphIGxvbmcgdGltZSwgaWUgJ2ludmFsaWRhdGVfc2VxICsgTUFYJyB3aGljaCBpcyBleHByZXNz ZWQgYXMgLTEKClRoZSBldmVuL29kZCB0aGluZyBqdXN0IHRha2VzIGNhcmUgb2YgaXRzZWxmIG5h dHVyYWxseSBoZXJlIGFzCmludmFsaWRhdGVfc2VxIGlzIGd1YXJlbnRlZWQgZXZlbiBhbmQgLTEg Y3JlYXRlcyBib3RoIGFuIG9kZCBtcm4gdmFsdWUKYW5kIGEgZ29vZCBzZXEgbnVtYmVyLgoKVGhl IGFsZ29yaXRobSB3b3VsZCBhY3R1YWxseSB3b3JrIGNvcnJlY3RseSBpZiB0aGlzIHdhcwonbXJu LT5pbnZhbGlkYXRlX3NlcSA9IDEnLCBidXQgb2NjYXNpb25hbGx5IHRoaW5ncyB3b3VsZCBibG9j ayB3aGVuCnRoZXkgZG9uJ3QgbmVlZCB0byBibG9jay4KCkxldHMgYWRkIGEgY29tbWVudDoKCgkJ LyoKCQkgKiBUaGUgc3RhcnRpbmcgc2VxIGZvciBhIG1ybiBub3QgdW5kZXIgaW52YWxpZGF0aW9u IHNob3VsZCBiZQoJCSAqIG9kZCwgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IGludmFsaWRhdGVf c2VxIGFuZAoJCSAqIGludmFsaWRhdGVfc2VxIHNob3VsZCBub3QgJ3dyYXAnIHRvIHRoZSBuZXcg c2VxIGFueSB0aW1lCgkJICogc29vbi4KCQkgKi8KCj4gPiAraW50IG1tdV9yYW5nZV9ub3RpZmll cl9pbnNlcnQoc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqbXJuLAo+ID4gKwkJCSAgICAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAo+ID4gKwkJCSAgICAgIHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1tdV9ub3RpZmllcl9tbSAq bW1uX21tOwo+ID4gKwlpbnQgcmV0Owo+IAo+IEhtbW0sIEkgdGhpbmsgYSBsYXRlciBwYXRjaCBp bXByb3Blcmx5IGNoYW5nZXMgdGhlIGFib3ZlIHRvICJpbnQgcmV0ID0gMDsiLgo+IEknbGwgY2hl Y2sgb24gdGhhdC4gSXQncyBjb3JyZWN0IGhlcmUsIHRob3VnaC4KCkxvb2tzIE9LIGluIG15IHRy ZWU/Cgo+ID4gKwltaWdodF9sb2NrKCZtbS0+bW1hcF9zZW0pOwo+ID4gKwo+ID4gKwltbW5fbW0g PSBzbXBfbG9hZF9hY3F1aXJlKCZtbS0+bW11X25vdGlmaWVyX21tKTsKPiAKPiBXaGF0IGRvZXMg dGhlIGFib3ZlIHBhaXIgd2l0aD8gU2hvdWxkIGhhdmUgYSBjb21tZW50IHRoYXQgc3BlY2lmaWVz IHRoYXQuCgpzbXBfbG9hZF9hY3F1aXJlKCkgYWx3YXlzIHBhaXJzIHdpdGggc21wX3N0b3JlX3Jl bGVhc2UoKSB0byB0aGUgc2FtZQptZW1vcnksIHRoZXJlIGlzIG9ubHkgb25lIHN0b3JlLCBpcyBh IGNvbW1lbnQgcmVhbGx5IG5lZWRlZD8KCkJlbG93IGFyZSB0aGUgY29tbWVudCB1cGRhdGVzIEkg bWFkZSwgdGhhbmtzIQoKSmFzb24KCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tdV9ub3Rp Zmllci5oIGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaAppbmRleCA1MWI5MmJhMDEzZGRj ZS4uMDY1Yzk1MDAyZTk2MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW11X25vdGlmaWVy LmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaApAQCAtMzAyLDE1ICszMDIsMTUg QEAgdm9pZCBtbXVfcmFuZ2Vfbm90aWZpZXJfcmVtb3ZlKHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZp ZXIgKm1ybik7CiAvKioKICAqIG1tdV9yYW5nZV9zZXRfc2VxIC0gU2F2ZSB0aGUgaW52YWxpZGF0 aW9uIHNlcXVlbmNlCiAgKiBAbXJuIC0gVGhlIG1ybiBwYXNzZWQgdG8gaW52YWxpZGF0ZQotICog QGN1cl9zZXEgLSBUaGUgY3VyX3NlcSBwYXNzZWQgdG8gaW52YWxpZGF0ZQorICogQGN1cl9zZXEg LSBUaGUgY3VyX3NlcSBwYXNzZWQgdG8gdGhlIGludmFsaWRhdGUoKSBjYWxsYmFjawogICoKICAq IFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGZyb20gdGhlIGludmFsaWRhdGUg Y2FsbGJhY2sgb2YgYQogICogc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMgdW5kZXIgdGhl IHNhbWUgbG9jayB0aGF0IGlzIHVzZWQgdG8gY2FsbAogICogbW11X3JhbmdlX3JlYWRfcmV0cnko KS4gSXQgdXBkYXRlcyB0aGUgc2VxdWVuY2UgbnVtYmVyIGZvciBsYXRlciB1c2UgYnkKLSAqIG1t dV9yYW5nZV9yZWFkX3JldHJ5KCkuCisgKiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiBUaGUgcHJv dmlkZWQgY3VyX3NlcSB3aWxsIGFsd2F5cyBiZSBvZGQuCiAgKgotICogSWYgdGhlIHVzZXIgZG9l cyBub3QgY2FsbCBtbXVfcmFuZ2VfcmVhZF9iZWdpbigpIG9yIG1tdV9yYW5nZV9yZWFkX3JldHJ5 KCkKLSAqIHRoZW4gdGhpcyBjYWxsIGlzIG5vdCByZXF1aXJlZC4KKyAqIElmIHRoZSBjYWxsZXIg ZG9lcyBub3QgY2FsbCBtbXVfcmFuZ2VfcmVhZF9iZWdpbigpIG9yCisgKiBtbXVfcmFuZ2VfcmVh ZF9yZXRyeSgpIHRoZW4gdGhpcyBjYWxsIGlzIG5vdCByZXF1aXJlZC4KICAqLwogc3RhdGljIGlu bGluZSB2b2lkIG1tdV9yYW5nZV9zZXRfc2VxKHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1y biwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY3VyX3NlcSkKQEAgLTM0OCw4ICszNDgsOSBAQCBz dGF0aWMgaW5saW5lIGJvb2wgbW11X3JhbmdlX3JlYWRfcmV0cnkoc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllciAqbXJuLAogICogY29sbGlkZWQgd2l0aCB0aGlzIGxvY2sgYW5kIGEgZnV0dXJlIG1t dV9yYW5nZV9yZWFkX3JldHJ5KCkgd2lsbCByZXR1cm4KICAqIHRydWUuCiAgKgotICogRmFsc2Ug aXMgbm90IHJlbGlhYmxlIGFuZCBvbmx5IHN1Z2dlc3RzIGEgY29sbGlzaW9uIGhhcyBub3QgaGFw cGVuZWQuIEl0Ci0gKiBjYW4gYmUgY2FsbGVkIG1hbnkgdGltZXMgYW5kIGRvZXMgbm90IGhhdmUg dG8gaG9sZCB0aGUgdXNlciBwcm92aWRlZCBsb2NrLgorICogRmFsc2UgaXMgbm90IHJlbGlhYmxl IGFuZCBvbmx5IHN1Z2dlc3RzIGEgY29sbGlzaW9uIG1heSBub3QgaGF2ZQorICogb2NjdXJlZC4g SXQgY2FuIGJlIGNhbGxlZCBtYW55IHRpbWVzIGFuZCBkb2VzIG5vdCBoYXZlIHRvIGhvbGQgdGhl IHVzZXIKKyAqIHByb3ZpZGVkIGxvY2suCiAgKgogICogVGhpcyBjYWxsIGNhbiBiZSB1c2VkIGFz IHBhcnQgb2YgbG9vcHMgYW5kIG90aGVyIGV4cGVuc2l2ZSBvcGVyYXRpb25zIHRvCiAgKiBleHBl ZGl0ZSBhIHJldHJ5LgpkaWZmIC0tZ2l0IGEvbW0vbW11X25vdGlmaWVyLmMgYi9tbS9tbXVfbm90 aWZpZXIuYwppbmRleCAyYjc0ODU5MTllY2ZlYi4uYWZlMWUyZDk0MTgzZjggMTAwNjQ0Ci0tLSBh L21tL21tdV9ub3RpZmllci5jCisrKyBiL21tL21tdV9ub3RpZmllci5jCkBAIC01MSw3ICs1MSw4 IEBAIHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gewogICogVGhpcyBpcyBhIGNvbGxpc2lvbi1yZXRy eSByZWFkLXNpZGUvd3JpdGUtc2lkZSAnbG9jaycsIGEgbG90IGxpa2UgYQogICogc2VxY291bnQs IGhvd2V2ZXIgdGhpcyBhbGxvd3MgbXVsdGlwbGUgd3JpdGUtc2lkZXMgdG8gaG9sZCBpdCBhdAog ICogb25jZS4gQ29uY2VwdHVhbGx5IHRoZSB3cml0ZSBzaWRlIGlzIHByb3RlY3RpbmcgdGhlIHZh bHVlcyBvZiB0aGUgUFRFcyBpbgotICogdGhpcyBtbSwgc3VjaCB0aGF0IFBURVMgY2Fubm90IGJl IHJlYWQgaW50byBTUFRFcyB3aGlsZSBhbnkgd3JpdGVyIGV4aXN0cy4KKyAqIHRoaXMgbW0sIHN1 Y2ggdGhhdCBQVEVTIGNhbm5vdCBiZSByZWFkIGludG8gU1BURXMgKHNoYWRvdyBQVEVzKSB3aGls ZSBhbnkKKyAqIHdyaXRlciBleGlzdHMuCiAgKgogICogTm90ZSB0aGF0IHRoZSBjb3JlIG1tIGNy ZWF0ZXMgbmVzdGVkIGludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKS9lbmQoKSByZWdpb25zCiAgKiB3 aXRoaW4gdGhlIHNhbWUgdGhyZWFkLCBhbmQgcnVucyBpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCkv ZW5kKCkgaW4gcGFyYWxsZWwKQEAgLTY0LDEyICs2NSwxMyBAQCBzdHJ1Y3QgbW11X25vdGlmaWVy X21tIHsKICAqCiAgKiBUaGUgd3JpdGUgc2lkZSBoYXMgdHdvIHN0YXRlcywgZnVsbHkgZXhjbHVk ZWQ6CiAgKiAgLSBtbS0+YWN0aXZlX2ludmFsaWRhdGVfcmFuZ2VzICE9IDAKLSAqICAtIG1ubi0+ aW52YWxpZGF0ZV9zZXEgJiAxID09IFRydWUKKyAqICAtIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAx ID09IFRydWUgKG9kZCkKICAqICAtIHNvbWUgcmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBiZWlu ZyBpbnZhbGlkYXRlZAogICogIC0gdGhlIGl0cmVlIGlzIG5vdCBhbGxvd2VkIHRvIGNoYW5nZQog ICoKICAqIEFuZCBwYXJ0aWFsbHkgZXhjbHVkZWQ6CiAgKiAgLSBtbS0+YWN0aXZlX2ludmFsaWRh dGVfcmFuZ2VzICE9IDAKKyAqICAtIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAxID09IEZhbHNlIChl dmVuKQogICogIC0gc29tZSByYW5nZSBvbiB0aGUgbW1fc3RydWN0IGlzIGJlaW5nIGludmFsaWRh dGVkCiAgKiAgLSB0aGUgaXRyZWUgaXMgYWxsb3dlZCB0byBjaGFuZ2UKICAqCkBAIC0xMzEsMTIg KzEzMywxMyBAQCBzdGF0aWMgdm9pZCBtbl9pdHJlZV9pbnZfZW5kKHN0cnVjdCBtbXVfbm90aWZp ZXJfbW0gKm1tbl9tbSkKIAkJcmV0dXJuOwogCX0KIAorCS8qIE1ha2UgaW52YWxpZGF0ZV9zZXEg ZXZlbiAqLwogCW1tbl9tbS0+aW52YWxpZGF0ZV9zZXErKzsKIAluZWVkX3dha2UgPSB0cnVlOwog CiAJLyoKIAkgKiBUaGUgaW52X2VuZCBpbmNvcnBvcmF0ZXMgYSBkZWZlcnJlZCBtZWNoYW5pc20g bGlrZQotCSAqIHJ0bmxfbG9jaygpLiBBZGRzIGFuZCByZW1vdmVzIGFyZSBxdWV1ZWQgdW50aWwg dGhlIGZpbmFsIGludl9lbmQKKwkgKiBydG5sX3VubG9jaygpLiBBZGRzIGFuZCByZW1vdmVzIGFy ZSBxdWV1ZWQgdW50aWwgdGhlIGZpbmFsIGludl9lbmQKIAkgKiBoYXBwZW5zIHRoZW4gdGhleSBh cmUgcHJvZ3Jlc3NlZC4gVGhpcyBhcnJhbmdlbWVudCBmb3IgdHJlZSB1cGRhdGVzCiAJICogaXMg dXNlZCB0byBhdm9pZCB1c2luZyBhIGJsb2NraW5nIGxvY2sgZHVyaW5nCiAJICogaW52YWxpZGF0 ZV9yYW5nZV9zdGFydC4KQEAgLTIzMCwxMCArMjMzLDExIEBAIHVuc2lnbmVkIGxvbmcgbW11X3Jh bmdlX3JlYWRfYmVnaW4oc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqbXJuKQogCXNwaW5fdW5s b2NrKCZtbW5fbW0tPmxvY2spOwogCiAJLyoKLQkgKiBtcm4tPmludmFsaWRhdGVfc2VxIGlzIGFs d2F5cyBzZXQgdG8gYW4gb2RkIHZhbHVlLiBUaGlzIGVuc3VyZXMKLQkgKiB0aGF0IGlmIHNlcSBk b2VzIHdyYXAgd2Ugd2lsbCBhbHdheXMgY2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUKLQkg KiByZWFzb25hYmxlIHRpbWUgYXMgbW1uX21tLT5pbnZhbGlkYXRlX3NlcSBpcyBldmVuIGluIHRo ZSBpZGxlCi0JICogc3RhdGUuCisJICogbXJuLT5pbnZhbGlkYXRlX3NlcSBtdXN0IGFsd2F5cyBi ZSBzZXQgdG8gYW4gb2RkIHZhbHVlIHZpYQorCSAqIG1tdV9yYW5nZV9zZXRfc2VxKCkgdXNpbmcg dGhlIHByb3ZpZGVkIGN1cl9zZXEgZnJvbQorCSAqIG1uX2l0cmVlX2ludl9zdGFydF9yYW5nZSgp LiBUaGlzIGVuc3VyZXMgdGhhdCBpZiBzZXEgZG9lcyB3cmFwIHdlCisJICogd2lsbCBhbHdheXMg Y2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUgcmVhc29uYWJsZSB0aW1lIGFzCisJICogbW1u X21tLT5pbnZhbGlkYXRlX3NlcSBpcyBldmVuIGluIHRoZSBpZGxlIHN0YXRlLgogCSAqLwogCWxv Y2tfbWFwX2FjcXVpcmUoJl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFw KTsKIAlsb2NrX21hcF9yZWxlYXNlKCZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0 YXJ0X21hcCk7CkBAIC04OTIsNiArODk2LDEyIEBAIHN0YXRpYyBpbnQgX19tbXVfcmFuZ2Vfbm90 aWZpZXJfaW5zZXJ0KHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybiwKIAkJbXJuLT5pbnZh bGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7CiAJfSBlbHNlIHsKIAkJV0FSTl9P Tihtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1uX21tKSk7CisJCS8qCisJCSAqIFRoZSBzdGFy dGluZyBzZXEgZm9yIGEgbXJuIG5vdCB1bmRlciBpbnZhbGlkYXRpb24gc2hvdWxkIGJlCisJCSAq IG9kZCwgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IGludmFsaWRhdGVfc2VxIGFuZAorCQkgKiBp bnZhbGlkYXRlX3NlcSBzaG91bGQgbm90ICd3cmFwJyB0byB0aGUgbmV3IHNlcSBhbnkgdGltZQor CQkgKiBzb29uLgorCQkgKi8KIAkJbXJuLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxp ZGF0ZV9zZXEgLSAxOwogCQlpbnRlcnZhbF90cmVlX2luc2VydCgmbXJuLT5pbnRlcnZhbF90cmVl LCAmbW1uX21tLT5pdHJlZSk7CiAJfQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv L3hlbi1kZXZlbA== 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=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 6FEA8C5DF60 for ; Thu, 7 Nov 2019 20:19:44 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 4E43A21882 for ; Thu, 7 Nov 2019 20:19:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4E43A21882 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D3E916F798; Thu, 7 Nov 2019 20:19:43 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on060a.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::60a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 48D8B6F78E; Thu, 7 Nov 2019 20:06:13 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XbYR/uRivvAfvGKhO6vEH5IoVw52viT8SbTkxoUdnPU5seHSfhOvS2pOsgI7vWXVHIxG8+eaJw8xtq9dJW7R/kVLdusfK9tD6Z4kgQZnuTTEXDZQFXIjB0tFb5TuCVN8xGcmwE5gYYj67+hYV+TPwvT/qKIdL4J7iu0hGyxFT6XcFhlwOm2+vLj9VDpSJp9bT5bd+oYvfN4QmlI06xTqyqtMJ9Q4E9aTTmukC1nScZtQKYa53HybhzO92PBWCFLsD2kOHuBvrd4W5Ho5133vt1WwvIVANMNiiy1eFWh9EL156Ic4Vc2efxwulllFMoQSEe9fgXadBQ7uIV3Ta6Oh6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZLGtICPXHQeYMx3zwEUZ2kEBvqnlPF/xDCnKoeEU1Y=; b=FMGEdkApgkM+8CTxEC4sr0tb6phrZTIvf9VXG0mLTfnbMU6u7iAGzjR65ihQBvgTRsbnTmpr0l1EJ+766Buy7vse76t6FVgFElI8cNqi1KgKjIre76WBrjPWG8dbxsGPP9l5p9BtLEsAADhX6k7yWXA74vLtX7xxlapDkN7E+ki9U+QhAW2VDbIxzM1pdjn7NHa+iotezNzepsZ7bOjxNxgcxQPpeLQzL9IrCYEt33bWBvMGaSs6xJ6S5Rke8aUtmWlcl5Vm/lx46i5WIngLBE1iPeWTyrJN27c563sqvoXlqfRf79p7RVQ7wYMT+jW75ytqGn5ULIaP6aBzCD3yYQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none Received: from VI1PR05MB4141.eurprd05.prod.outlook.com (52.133.14.15) by VI1PR05MB6653.eurprd05.prod.outlook.com (10.141.128.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2430.20; Thu, 7 Nov 2019 20:06:09 +0000 Received: from VI1PR05MB4141.eurprd05.prod.outlook.com ([fe80::b179:e8bf:22d4:bf8d]) by VI1PR05MB4141.eurprd05.prod.outlook.com ([fe80::b179:e8bf:22d4:bf8d%5]) with mapi id 15.20.2408.028; Thu, 7 Nov 2019 20:06:09 +0000 From: Jason Gunthorpe To: John Hubbard Subject: Re: [PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier Thread-Topic: [PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier Thread-Index: AQHVjcvJYOye0EiwZkisYK74G5bmhqd+54eAgAFKcgA= Date: Thu, 7 Nov 2019 20:06:08 +0000 Message-ID: <20191107200604.GB21728@mellanox.com> References: <20191028201032.6352-1-jgg@ziepe.ca> <20191028201032.6352-3-jgg@ziepe.ca> <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> In-Reply-To: <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BL0PR1501CA0002.namprd15.prod.outlook.com (2603:10b6:207:17::15) To VI1PR05MB4141.eurprd05.prod.outlook.com (2603:10a6:803:44::15) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [142.162.113.180] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 689fa69c-2ee1-4f94-10df-08d763bdedcc x-ms-traffictypediagnostic: VI1PR05MB6653: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0214EB3F68 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(346002)(39850400004)(136003)(396003)(366004)(376002)(199004)(189003)(476003)(1076003)(6916009)(71190400001)(486006)(71200400001)(305945005)(4326008)(7736002)(25786009)(30864003)(7416002)(446003)(6246003)(5660300002)(36756003)(186003)(81166006)(8676002)(256004)(14444005)(26005)(81156014)(386003)(102836004)(11346002)(33656002)(86362001)(2906002)(66946007)(76176011)(66446008)(478600001)(2616005)(99286004)(229853002)(66476007)(316002)(6116002)(6486002)(8936002)(6506007)(14454004)(6436002)(3846002)(52116002)(64756008)(66556008)(66066001)(6512007)(54906003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR05MB6653; H:VI1PR05MB4141.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OhxIMxuIpy97a6eE8TxWtNSzY1GNivpNQHbZMy5HgAaLZV7EjFuJJFhhRC0eSEkk23Ucrn5O6/y8uDahQtqSzMgby5NIybxB6oNl3Tiy9YpQ/HGz6LjYfXGxr+iGWymZI46KuUjyOEW/Artb2IvH838mCDoq8r/svTaI9YTzMoGfguXhtoXCRR2ZOl4cPQW4zzQnaswTnKGwLrR9BdOni57n5G2KiYnbGGwYqSbn0Rs5er02tMs9PEHo7T/ry3vJoUO2MT6fwulWLcEBzzME2jiqevWPh/jL7N29Zz0Lfa7yO93RO3mb4XY7TTNSLSLcodhCWMlcIHdfW6qsnUZNPApRfktRwlTqrwII+xDEB2VTJvyQQRQ+APx9dokWh8wQ2QUibNnfvufJ6YYEtzs6Pk2B1CDbux6O3Qrw39NEUdcxxSykQOPIvJ+iZGKXilMy x-ms-exchange-transport-forked: True Content-ID: <6113418291CBA3499D9869CD0CC8D233@eurprd05.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 689fa69c-2ee1-4f94-10df-08d763bdedcc X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Nov 2019 20:06:09.1763 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +TuBIUtrktnBKZ6NZvy1veC+LPb7Nd6ABDYqCTCaNtlIuaUguMa6aZ8NnTlNlDmfIufFo0WoiB5EsbzpMF64bw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB6653 X-Mailman-Approved-At: Thu, 07 Nov 2019 20:19:42 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZLGtICPXHQeYMx3zwEUZ2kEBvqnlPF/xDCnKoeEU1Y=; b=jYDOc+HBZxt1WV25q8ShhQioI8qPveMDugD/wyFzOh+eQjHsx+PF5jCAKTLEC3m5Bi5ymyLIM96x9SqxS79eYhdiTQ76YSSclVoxJ/0Hfp3ckpgkI0G6Io5ZevRDAoiCEW8T8T7qjY9uIpY2bycj8Z8Hu+zqMI1gIvSB5AFl2y0= X-Mailman-Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jgg@mellanox.com; X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "nouveau@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , Michal Hocko , "linux-mm@kvack.org" , Andrea Arcangeli , David Zhou , Stefano Stabellini , Oleksandr Andrushchenko , "linux-rdma@vger.kernel.org" , "amd-gfx@lists.freedesktop.org" , Christoph Hellwig , Ben Skeggs , "xen-devel@lists.xenproject.org" , Ralph Campbell , Jerome Glisse , Boris Ostrovsky , Petr Cvek , Juergen Gross , Mike Marciniszyn , Dennis Dalessandro , =?iso-8859-1?Q?Christian_K=F6nig?= , Alex Deucher , "Felix.Kuehling@amd.com" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" Message-ID: <20191107200608.11LYABiRD5Ihpx9VJv1iq4uruIMSTqxeEtKURph3gt4@z> T24gV2VkLCBOb3YgMDYsIDIwMTkgYXQgMDQ6MjM6MjFQTSAtMDgwMCwgSm9obiBIdWJiYXJkIHdy b3RlOgogCj4gTmljZSBkZXNpZ24sIEkgbG92ZSB0aGUgc2VxIGZvdW5kYXRpb24hIFNvIGZhciwg SSdtIG5vdCBhYmxlIHRvIHNwb3QgYW55dGhpbmcKPiBhY3R1YWxseSB3cm9uZyB3aXRoIHRoZSBp bXBsZW1lbnRhdGlvbiwgc29ycnkgYWJvdXQgdGhhdC4gCgpBbGFzIDooIEkgZmVlbCB0aGVyZSBt dXN0IGJlIGEgYnVnIGluIGhlcmUgc3RpbGwsIGJ1dCBvbndhcmRzIQoKT25lIG9mIHRoZSBtYWlu IHNhZCBwb2ludHMgd2FzIGl0IGRpZG4ndCBtYWtlIHNlbnNlIHRvIHVzZSB0aGUKZXhpc3Rpbmcg c2VxbG9jay9zZXFjb3VudCBwcmltaXRpdmVzIGFzIHRoZXkgaGF2ZSBib3RoIHRoZSB3cm9uZyB3 cml0ZQpjb25jdXJyYW5jeSBtb2RlbCBhbmQgZXh0cmEgYmFycmllcnMgdGhhdCBhcmUgbm90IG5l ZWRlZCB3aGVuIGl0IGlzCmFsd2F5cyBtYW5pcHVsYXRlZCB1bmRlciBhIHNwaW5sb2NrCiAKPiAx LiBUaGVyZSBpcyBhIHJhdGhlciBzZXZlcmUgbmFtaW5nIG92ZXJsYXAgKG5vdCB0ZWNobmljYWxs eSBhIG5hbWluZyBjb25mbGljdCwKPiBidXQgc3RpbGwpIHdpdGggZXhpc3RpbmcgbW1uIHdvcmss IHdoaWNoIGFscmVhZHkgaGFzLCBmb3IgZXhhbXBsZToKPiAKPiAgICAgc3RydWN0IG1tdV9ub3Rp Zmllcl9yYW5nZQo+IAo+IC4uLmFuZCB5b3UncmUgYWRkaW5nOgo+IAo+ICAgICBzdHJ1Y3QgbW11 X3JhbmdlX25vdGlmaWVyCj4gCj4gLi4uc28gSSdsbCB0cnkgdG8gaGVscCBzb3J0IHRoYXQgb3V0 LgoKWWVzLCBJJ3ZlIGJlZW4gc2FkIGFib3V0IHRoaXMgdG9vLgoKPiBTbyB0aGlzIHNob3VsZCBy ZWFkOgo+IAo+IGVudW0gbW11X3JhbmdlX25vdGlmaWVyX2V2ZW50IHsKPiAJTU1VX05PVElGWV9S RUxFQVNFLAo+IH07Cj4gCj4gLi4uYXNzdW1pbmcgdGhhdCB3ZSBzdGF5IHdpdGggIm1tdV9yYW5n ZV9ub3RpZmllciIgYXMgYSBjb3JlIG5hbWUgZm9yIHRoaXMgCj4gd2hvbGUgdGhpbmcuCj4gCj4g QWxzbywgaXQgaXMgYmVzdCBtb3ZlZCBkb3duIHRvIGJlIG5leHQgdG8gdGhlIG5ldyBNTlIgc3Ry dWN0cywgc28gdGhhdCBhbGwgdGhlCj4gTU5SIHN0dWZmIGlzIGluIG9uZSBncm91cC4KCkkgYWdy ZWUgd2l0aCBKZXJvbWUsIHRoaXMgZW51bSBpcyBwYXJ0IG9mIHRoZSAnc3RydWN0Cm1tdV9ub3Rp Zmllcl9yYW5nZScgKGllIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgaW52YWxpZGF0aW9uKSBhbmQg aXQKZG9lc24ndCByZWFsbHkgbWF0dGVyIHRoYXQgb25seSB0aGVzZSBuZXcgbm90aWZpZXJzIGNh biBiZSBjYWxsZWQgd2l0aAp0aGlzIHR5cGUsIGl0IGlzIHN0aWxsIHBhcnQgb2YgdGhlIG1tdV9u b3RpZmllcl9yYW5nZS4KClRoZSBjb21tZW50IGFscmVhZHkgc2F5cyBpdCBvbmx5IGFwcGxpZXMg dG8gdGhlIG1tdV9yYW5nZV9ub3RpZmllcgpzY2hlbWUuLgoKPiA+ICAjZGVmaW5lIE1NVV9OT1RJ RklFUl9SQU5HRV9CTE9DS0FCTEUgKDEgPDwgMCkKPiA+IEBAIC0yMjIsNiArMjI4LDI2IEBAIHN0 cnVjdCBtbXVfbm90aWZpZXIgewo+ID4gIAl1bnNpZ25lZCBpbnQgdXNlcnM7Cj4gPiAgfTsKPiA+ ICAKPiAKPiBUaGF0IHNob3VsZCBhbHNvIGJlIG1vdmVkIGRvd24sIG5leHQgdG8gdGhlIG5ldyBz dHJ1Y3RzLgoKV2hpY2ggdGhpcz8KCj4gPiArLyoqCj4gPiArICogc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllcl9vcHMKPiA+ICsgKiBAaW52YWxpZGF0ZTogVXBvbiByZXR1cm4gdGhlIGNhbGxlciBt dXN0IHN0b3AgdXNpbmcgYW55IFNQVEVzIHdpdGhpbiB0aGlzCj4gPiArICogICAgICAgICAgICAg IHJhbmdlLCB0aGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4gUmV0dXJuIGZhbHNlIGlmIGJsb2NraW5n IHdhcwo+ID4gKyAqICAgICAgICAgICAgICByZXF1aXJlZCBidXQgcmFuZ2UgaXMgbm9uLWJsb2Nr aW5nCj4gPiArICovCj4gCj4gSG93IGFib3V0IHRoaXMgKEknbSBub3Qgc3VyZSBJIGZ1bGx5IHVu ZGVyc3RhbmQgdGhlIHJldHVybiB2YWx1ZSwgdGhvdWdoKToKPiAKPiAvKioKPiAgKiBzdHJ1Y3Qg bW11X3JhbmdlX25vdGlmaWVyX29wcwo+ICAqIEBpbnZhbGlkYXRlOiBVcG9uIHJldHVybiB0aGUg Y2FsbGVyIG11c3Qgc3RvcCB1c2luZyBhbnkgU1BURXMgd2l0aGluIHRoaXMKPiAgKiAJCXJhbmdl Lgo+ICAqCj4gICogCQlUaGlzIGZ1bmN0aW9uIGlzIHBlcm1pdHRlZCB0byBzbGVlcC4KPiAgKgo+ ICAqICAgICAgCUBSZXR1cm46IGZhbHNlIGlmIGJsb2NraW5nIHdhcyByZXF1aXJlZCwgYnV0IEBy YW5nZSBpcwo+ICAqCQkJbm9uLWJsb2NraW5nLgo+ICAqCj4gICovCgpJcyB0aGlzIGtkb2MgZm9y bWF0IGZvciBmdW5jdGlvbiBwb2ludGVycz8KIAo+IAo+ID4gK3N0cnVjdCBtbXVfcmFuZ2Vfbm90 aWZpZXJfb3BzIHsKPiA+ICsJYm9vbCAoKmludmFsaWRhdGUpKHN0cnVjdCBtbXVfcmFuZ2Vfbm90 aWZpZXIgKm1ybiwKPiA+ICsJCQkgICBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpy YW5nZSwKPiA+ICsJCQkgICB1bnNpZ25lZCBsb25nIGN1cl9zZXEpOwo+ID4gK307Cj4gPiArCj4g PiArc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciB7Cj4gPiArCXN0cnVjdCBpbnRlcnZhbF90cmVl X25vZGUgaW50ZXJ2YWxfdHJlZTsKPiA+ICsJY29uc3Qgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmll cl9vcHMgKm9wczsKPiA+ICsJc3RydWN0IGhsaXN0X25vZGUgZGVmZXJyZWRfaXRlbTsKPiA+ICsJ dW5zaWduZWQgbG9uZyBpbnZhbGlkYXRlX3NlcTsKPiA+ICsJc3RydWN0IG1tX3N0cnVjdCAqbW07 Cj4gPiArfTsKPiA+ICsKPiAKPiBBZ2Fpbiwgbm93IHdlIGhhdmUgdGhlIG5ldyBzdHJ1Y3QgbW11 X3JhbmdlX25vdGlmaWVyLCBhbmQgdGhlIG9sZCAKPiBzdHJ1Y3QgbW11X25vdGlmaWVyX3Jhbmdl LCBhbmQgaXQncyBub3QgZ29vZC4KPiAKPiBJZGVhczoKPiAKPiBhKSBMaXZlIHdpdGggaXQuCj4g Cj4gYikgKERpc2NhcmRlZCwgdG9vIG1hbnkgY2FsbGVycyk6IHJlbmFtZSBvbGQgb25lLiBOb3Bl Lgo+IAo+IGMpIFJlbmFtZSBuZXcgb25lLiBJZGVhczoKPiAKPiAgICAgc3RydWN0IG1tdV9pbnRl cnZhbF9ub3RpZmllcgo+ICAgICBzdHJ1Y3QgbW11X3JhbmdlX2ludGVyc2VjdGlvbgo+ICAgICAu Li5vdGhlciBpZGVhcz8KClRoaXMgb2RkIGR1YWxpdHkgaGFzIGFscmVhZHkgY2F1c2Ugc29tZSBj b25mdXNpb24sIGJ1dCBuYW1lcyBoZXJlIGFyZQpoYXJkLiAgbW11X2ludGVydmFsX25vdGlmaWVy IGlzIHRoZSBiZXN0IGFsdGVybmF0aXZlIEkndmUgaGVhcmQuCgpDaGFuZ2luZyB0aGlzIG5hbWUg aXMgYSBsb3Qgb2Ygd29yayAtIGFyZSB3ZSBoYXBweQonbW11X2ludGVydmFsX25vdGlmaWVyJyBp cyB0aGUgcmlnaHQgY2hvaWNlPwoKPiA+ICsvKioKPiA+ICsgKiBtbXVfcmFuZ2Vfc2V0X3NlcSAt IFNhdmUgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZQo+IAo+IEhvdyBhYm91dDoKPiAKPiAgKiBt bXVfcmFuZ2Vfc2V0X3NlcSAtIFNldCB0aGUgLmludmFsaWRhdGVfc2VxIHRvIGEgbmV3IHZhbHVl LgoKSXQgaXMgbm90IGEgJ25ldyB2YWx1ZScsIGl0IGlzIGEgdmFsdWUgdGhhdCBpcyBwcm92aWRl ZCB0byB0aGUKaW52YWxpZGF0ZSBjYWxsYmFjawoKPiAKPiA+ICsgKiBAbXJuIC0gVGhlIG1ybiBw YXNzZWQgdG8gaW52YWxpZGF0ZQo+ID4gKyAqIEBjdXJfc2VxIC0gVGhlIGN1cl9zZXEgcGFzc2Vk IHRvIGludmFsaWRhdGUKPiA+ICsgKgo+ID4gKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5jb25k aXRpb25hbGx5IGZyb20gdGhlIGludmFsaWRhdGUgY2FsbGJhY2sgb2YgYQo+ID4gKyAqIHN0cnVj dCBtbXVfcmFuZ2Vfbm90aWZpZXJfb3BzIHVuZGVyIHRoZSBzYW1lIGxvY2sgdGhhdCBpcyB1c2Vk IHRvIGNhbGwKPiA+ICsgKiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiBJdCB1cGRhdGVzIHRoZSBz ZXF1ZW5jZSBudW1iZXIgZm9yIGxhdGVyIHVzZSBieQo+ID4gKyAqIG1tdV9yYW5nZV9yZWFkX3Jl dHJ5KCkuCj4gPiArICoKPiA+ICsgKiBJZiB0aGUgdXNlciBkb2VzIG5vdCBjYWxsIG1tdV9yYW5n ZV9yZWFkX2JlZ2luKCkgb3IgbW11X3JhbmdlX3JlYWRfcmV0cnkoKQo+IAo+IG5pdDogImNhbGxl ciIgaXMgYmV0dGVyIHRoYW4gInVzZXIiLCB3aGVuIHJlZmVycmluZyB0by4uLndlbGwsIGNhbGxl cnMuICJ1c2VyIiAKPiBtb3N0IG9mdGVuIHJlZmVycyB0byB1c2VyIHNwYWNlLCB3aGVyZWFzIGEg Y2FsbCBzdGFjayBhbmQgZnVuY3Rpb24gY2FsbGluZyBpcyAKPiBjbGVhcmx5IHdoYXQgeW91J3Jl IHJlZmVycmluZyB0byBoZXJlIChhbmQgaW4gb3RoZXIgcGxhY2VzLCBlc3BlY2lhbGx5ICJ1c2Vy IGxvY2siKS4KCkRvbmUKCj4gPiArLyoqCj4gPiArICogbW11X3JhbmdlX2NoZWNrX3JldHJ5IC0g VGVzdCBpZiBhIGNvbGxpc2lvbiBoYXMgb2NjdXJyZWQKPiA+ICsgKiBtcm46IFRoZSByYW5nZSB1 bmRlciBsb2NrCj4gPiArICogc2VxOiBUaGUgcmV0dXJuIG9mIHRoZSBtYXRjaGluZyBtbXVfcmFu Z2VfcmVhZF9iZWdpbigpCj4gPiArICoKPiA+ICsgKiBUaGlzIGNhbiBiZSB1c2VkIGluIHRoZSBj cml0aWNhbCBzZWN0aW9uIGJldHdlZW4gbW11X3JhbmdlX3JlYWRfYmVnaW4oKSBhbmQKPiA+ICsg KiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiAgQSByZXR1cm4gb2YgdHJ1ZSBpbmRpY2F0ZXMgYW4g aW52YWxpZGF0aW9uIGhhcwo+ID4gKyAqIGNvbGxpZGVkIHdpdGggdGhpcyBsb2NrIGFuZCBhIGZ1 dHVyZSBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpIHdpbGwgcmV0dXJuCj4gPiArICogdHJ1ZS4KPiA+ ICsgKgo+ID4gKyAqIEZhbHNlIGlzIG5vdCByZWxpYWJsZSBhbmQgb25seSBzdWdnZXN0cyBhIGNv bGxpc2lvbiBoYXMgbm90IGhhcHBlbmVkLiBJdAo+IAo+IGxldCdzIHNheSAic3VnZ2VzdHMgdGhh dCBhIGNvbGxpc2lvbiAqbWF5KiBub3QgaGF2ZSBvY2N1cnJlZC4iICAKClN1cmUKCj4gPiArLyoK PiA+ICsgKiBUaGlzIGlzIGEgY29sbGlzaW9uLXJldHJ5IHJlYWQtc2lkZS93cml0ZS1zaWRlICds b2NrJywgYSBsb3QgbGlrZSBhCj4gPiArICogc2VxY291bnQsIGhvd2V2ZXIgdGhpcyBhbGxvd3Mg bXVsdGlwbGUgd3JpdGUtc2lkZXMgdG8gaG9sZCBpdCBhdAo+ID4gKyAqIG9uY2UuIENvbmNlcHR1 YWxseSB0aGUgd3JpdGUgc2lkZSBpcyBwcm90ZWN0aW5nIHRoZSB2YWx1ZXMgb2YgdGhlIFBURXMg aW4KPiA+ICsgKiB0aGlzIG1tLCBzdWNoIHRoYXQgUFRFUyBjYW5ub3QgYmUgcmVhZCBpbnRvIFNQ VEVzIHdoaWxlIGFueSB3cml0ZXIgZXhpc3RzLgo+IAo+IEp1c3QgdG8gYmUga2luZCwgY2FuIHdl IHNheSAiU1BURXMgKHNoYWRvdyBQVEVzKSIsIGp1c3QgdGhpcyBvbmNlPyA6KQoKSGFoYSwgc3Vy ZSwgd2h5IG5vdAoKPiA+ICsgKiBUaGUgd3JpdGUgc2lkZSBoYXMgdHdvIHN0YXRlcywgZnVsbHkg ZXhjbHVkZWQ6Cj4gPiArICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAhPSAwCj4g PiArICogIC0gbW5uLT5pbnZhbGlkYXRlX3NlcSAmIDEgPT0gVHJ1ZQo+ID4gKyAqICAtIHNvbWUg cmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBiZWluZyBpbnZhbGlkYXRlZAo+ID4gKyAqICAtIHRo ZSBpdHJlZSBpcyBub3QgYWxsb3dlZCB0byBjaGFuZ2UKPiA+ICsgKgo+ID4gKyAqIEFuZCBwYXJ0 aWFsbHkgZXhjbHVkZWQ6Cj4gPiArICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAh PSAwCj4gCj4gSSBhc3N1bWUgdGhpcyBpbXBsaWVzIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAxID09 IEZhbHNlIGluIHRoaXMgY2FzZT8gSWYgc28sCj4gbGV0J3Mgc2F5IHNvLiBJJ20gcHJvYmFibHkg Z2V0dGluZyB0aGF0IHdyb25nLCB0b28uCgpZZXMgdGhhdCBpcyByaWdodCwgZG9uZQoKPiAKPiA+ ICsgKiAgLSBzb21lIHJhbmdlIG9uIHRoZSBtbV9zdHJ1Y3QgaXMgYmVpbmcgaW52YWxpZGF0ZWQK PiA+ICsgKiAgLSB0aGUgaXRyZWUgaXMgYWxsb3dlZCB0byBjaGFuZ2UKPiA+ICsgKgo+ID4gKyAq IFRoZSBsYXRlciBzdGF0ZSBhdm9pZHMgc29tZSBleHBlbnNpdmUgd29yayBvbiBpbnZfZW5kIGlu IHRoZSBjb21tb24gY2FzZSBvZgo+ID4gKyAqIG5vIG1ybiBtb25pdG9yaW5nIHRoZSBWQS4KPiA+ ICsgKi8KPiA+ICtzdGF0aWMgYm9vbCBtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcoc3RydWN0IG1t dV9ub3RpZmllcl9tbSAqbW1uX21tKQo+ID4gK3sKPiA+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgm bW1uX21tLT5sb2NrKTsKPiA+ICsJcmV0dXJuIG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgJiAxOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqCj4gPiAr bW5faXRyZWVfaW52X3N0YXJ0X3JhbmdlKHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSwK PiA+ICsJCQkgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UsCj4gPiArCQkJ IHVuc2lnbmVkIGxvbmcgKnNlcSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBpbnRlcnZhbF90cmVlX25v ZGUgKm5vZGU7Cj4gPiArCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKnJlcyA9IE5VTEw7Cj4g PiArCj4gPiArCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJbW1uX21tLT5hY3RpdmVf aW52YWxpZGF0ZV9yYW5nZXMrKzsKPiA+ICsJbm9kZSA9IGludGVydmFsX3RyZWVfaXRlcl9maXJz dCgmbW1uX21tLT5pdHJlZSwgcmFuZ2UtPnN0YXJ0LAo+ID4gKwkJCQkJcmFuZ2UtPmVuZCAtIDEp Owo+ID4gKwlpZiAobm9kZSkgewo+ID4gKwkJbW1uX21tLT5pbnZhbGlkYXRlX3NlcSB8PSAxOwo+ IAo+IAo+IE9LLCB0aGlzIGVpdGhlciBuZWVkcyBtb3JlIGRvY3VtZW50YXRpb24gYW5kIGFzc2Vy dGlvbnMsIG9yIGEgZGlmZmVyZW50Cj4gYXBwcm9hY2guIEJlY2F1c2UgSSBzZWUgYWRkaXRpb24s IHN1YnRyYWN0aW9uLCBBTkQsIE9SIGFuZCBib29sZWFucwo+IGFsbCBiZWluZyBhcHBsaWVkIHRv IHRoaXMgZmllbGQsIGFuZCBpdCdzIGRhcm4gbmVhciBob3BlbGVzcyB0byBmaWd1cmUKPiBvdXQg d2hldGhlciBvciBub3QgaXQgcmVhbGx5IGlzIGV2ZW4gb3Igb2RkIGF0IHRoZSByaWdodCB0aW1l cy4KClRoaXMgaXMgYSBzdGFuZGFyZCBkZXNpZ24gZm9yIGEgc2VxbG9jayBzY2hlbWUgYW5kIGZv bGxvd3MgdGhlCmV4aXN0aW5nIGRlc2lnbiBvZiB0aGUgbGludXggc2VxIGxvY2suCgpUaGUgbG93 ZXIgYml0IGluZGljYXRlcyB0aGUgbG9jaydkIHN0YXRlIGFuZCB0aGUgdXBwZXIgYml0cyBpbmRp Y2F0ZQp0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgbG9jawoKVGhlIG9wZXJhdGlvbnMgb24gdGhlIGxv Y2sgaXRzZWxmIGFyZSB0aGVuOgogICBzZXEgfD0gMSAgIyBUYWtlIHRoZSBsb2NrCiAgIHNlcSsr ICAgICAjIFJlbGVhc2UgYW4gYWNxdWlyZWQgbG9jawogICBzZXEgJiAxICAgIyBUcnVlIGlmIGxv Y2tlZAoKV2hpY2ggaXMgaG93IHRoaXMgaXMgd3JpdHRlbgoKPiBEaWZmZXJlbnQgYXBwcm9hY2g6 IHdoeSBub3QganVzdCBhZGQgYSBtbW5fbW0tPmlzX2ludmFsaWRhdGluZyAKPiBtZW1iZXIgdmFy aWFibGU/IEl0J3Mgbm90IGxpa2UgeW91J3JlIHNob3J0IG9mIHNwYWNlIGluIHRoYXQgc3RydWN0 LgoKU3BsaXR0aW5nIGl0IG1ha2VzIGFsb3Qgb2Ygc3R1ZmYgbW9yZSBjb21wbGV4IGFuZCB1bm5h dHVyYWwuCgpUaGUgb3BzIGFib3ZlIGNvdWxkIGJlIHB1dCBpbiBpbmxpbmUgd3JhcHBlcnMsIGJ1 dCB0aGV5IG9ubHkgb2NjdXIKb25seSBpbiBmdW5jdGlvbnMgYWxyZWFkeSBjYWxsZWQgbW5faXRy ZWVfaW52X3N0YXJ0X3JhbmdlKCkgYW5kCm1uX2l0cmVlX2ludl9lbmQoKSBhbmQgbW5faXRyZWVf aXNfaW52YWxpZGF0aW5nKCkuCgpUaGVyZSBpcyB0aGUgb25lICd0YWtlIHRoZSBsb2NrJyBvdXRs aWVyIGluCl9fbW11X3JhbmdlX25vdGlmaWVyX2luc2VydCgpIHRob3VnaAoKPiA+ICtzdGF0aWMg dm9pZCBtbl9pdHJlZV9pbnZfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSkKPiA+ ICt7Cj4gPiArCXN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybjsKPiA+ICsJc3RydWN0IGhs aXN0X25vZGUgKm5leHQ7Cj4gPiArCWJvb2wgbmVlZF93YWtlID0gZmFsc2U7Cj4gPiArCj4gPiAr CXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJaWYgKC0tbW1uX21tLT5hY3RpdmVfaW52 YWxpZGF0ZV9yYW5nZXMgfHwKPiA+ICsJICAgICFtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1u X21tKSkgewo+ID4gKwkJc3Bpbl91bmxvY2soJm1tbl9tbS0+bG9jayk7Cj4gPiArCQlyZXR1cm47 Cj4gPiArCX0KPiA+ICsKPiA+ICsJbW1uX21tLT5pbnZhbGlkYXRlX3NlcSsrOwo+IAo+IElzIHRo aXMgdGhlIHJpZ2h0IHBsYWNlIGZvciBhbiBhc3NlcnRpb24gdGhhdCB0aGlzIGlzIG5vdyBhbiBl dmVuIHZhbHVlPwoKWWVzLCBidXQgSSdtIHJlbHVjdGFudCB0byBhZGQgc3VjaCBhIHJ1bnRpbWUg Y2hlY2sgb24gdGhpcyBmYXN0aXNoIHBhdGguLgpIb3cgYWJvdXQgYSBjb21tZW50PwoKPiA+ICsJ bmVlZF93YWtlID0gdHJ1ZTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogVGhlIGludl9lbmQgaW5j b3Jwb3JhdGVzIGEgZGVmZXJyZWQgbWVjaGFuaXNtIGxpa2UKPiA+ICsJICogcnRubF9sb2NrKCku IEFkZHMgYW5kIHJlbW92ZXMgYXJlIHF1ZXVlZCB1bnRpbCB0aGUgZmluYWwgaW52X2VuZAo+IAo+ IExldCBtZSBwb2ludCBvdXQgdGhhdCBydG5sX2xvY2soKSBpdHNlbGYgaXMgYSBvbmUtbGluZXIg dGhhdCBjYWxscyBtdXRleF9sb2NrKCkuCj4gQnV0IEkgc3VwcG9zZSBpZiBvbmUgc3R1ZGllcyB0 aGF0IGZpbGUgY2xvc2VseSB0aGVyZSBpcyBtb3JlLiA6KQoKTGV0cyBjaGFuZ2UgdGhhdCB0byBy dG5sX3VubG9jaygpIHRoZW4KCj4gPiArCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJ LyogUGFpcnMgd2l0aCB0aGUgV1JJVEVfT05DRSBpbiBtbXVfcmFuZ2Vfc2V0X3NlcSgpICovCj4g PiArCXNlcSA9IFJFQURfT05DRShtcm4tPmludmFsaWRhdGVfc2VxKTsKPiA+ICsJaXNfaW52YWxp ZGF0aW5nID0gc2VxID09IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7Cj4gPiArCXNwaW5fdW5sb2Nr KCZtbW5fbW0tPmxvY2spOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBtcm4tPmludmFsaWRhdGVf c2VxIGlzIGFsd2F5cyBzZXQgdG8gYW4gb2RkIHZhbHVlLiBUaGlzIGVuc3VyZXMKPiAKPiBUaGlz IGNsYWltIGp1c3QgbG9va3Mgd3JvbmcgdGhlIGZpcnN0IE4gdGltZXMgb25lIHJlYWRzIHRoZSBj b2RlLCBnaXZlbiB0aGF0Cj4gdGhlcmUgaXMgbW11X3JhbmdlX3NldF9zZXEoKSB0byBzZXQgaXQg dG8gYW4gYXJiaXRyYXJ5IHZhbHVlISAgTWF5YmUKPiB5b3UgbWVhbgoKbW11X3JhbmdlX3NldF9z ZXEoKSBpcyBOT1QgdG8gYmUgdXNlZCB0byBzZXQgdG8gYW4gYXJiaXRhcnkgdmFsdWUsIGl0Cm11 c3Qgb25seSBiZSB1c2VkIHRvIHNldCB0byB0aGUgdmFsdWUgcHJvdmlkZWQgaW4gdGhlIGludmFs aWRhdGUoKQpjYWxsYmFjayBhbmQgdGhhdCB2YWx1ZSBpcyBhbHdheXMgb2RkLiBMZXRzIG1ha2Ug dGhpcyBzdXBlciBjbGVhcjoKCgkvKgoJICogbXJuLT5pbnZhbGlkYXRlX3NlcSBtdXN0IGFsd2F5 cyBiZSBzZXQgdG8gYW4gb2RkIHZhbHVlIHZpYQoJICogbW11X3JhbmdlX3NldF9zZXEoKSB1c2lu ZyB0aGUgcHJvdmlkZWQgY3VyX3NlcSBmcm9tCgkgKiBtbl9pdHJlZV9pbnZfc3RhcnRfcmFuZ2Uo KS4gVGhpcyBlbnN1cmVzIHRoYXQgaWYgc2VxIGRvZXMgd3JhcCB3ZQoJICogd2lsbCBhbHdheXMg Y2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUgcmVhc29uYWJsZSB0aW1lIGFzCgkgKiBtbW5f bW0tPmludmFsaWRhdGVfc2VxIGlzIGV2ZW4gaW4gdGhlIGlkbGUgc3RhdGUuCgkgKi8KClRoZSBp bnZhcmllbnQgaXMgdGhhdCB0aGUgJ3N0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXInIGFsd2F5cyBo YXMgYW4Kb2RkICdzZXEnCgo+ID4gKwkgKiB0aGF0IGlmIHNlcSBkb2VzIHdyYXAgd2Ugd2lsbCBh bHdheXMgY2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUKPiA+ICsJICogcmVhc29uYWJsZSB0 aW1lIGFzIG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgaXMgZXZlbiBpbiB0aGUgaWRsZQo+ID4gKwkg KiBzdGF0ZS4KPiA+ICsJICovCj4gCj4gTGV0J3MgbW92ZSB0aGF0IGNvbW1lbnQgaGlnaGVyIHVw LiBUaGUgY29kZSB0aGF0IGZvbGxvd3MgaXQgaGFzIG5vdGhpbmcgdG8KPiBkbyB3aXRoIGl0LCBz byBpdCdzIGNvbmZ1c2luZyBoZXJlLgoKVGhlIGNvbW1lbnQgaXMgZXhwbGFpbmluZyB3aHkgdGhl IHdhaXRfZXZlbnQgaXMgc2FmZSwgZXZlbiBpZiB3ZSB3cmFwCnRoZSBzZXF1ZW5jZSBudW1iZXIs IHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYW5kIHZlcnkgc3VidGxlIGNvcm5lcgpjYXNlLiBUaGlz IGlzIHJlYWxseSB3aHkgd2UgaGF2ZSB0aGUgZXZlbi9vZGQgdGhpbmcgYXQgYWxsLgoKPiA+ICsJ c3Bpbl9sb2NrKCZtbW5fbW0tPmxvY2spOwo+ID4gKwlpZiAobW1uX21tLT5hY3RpdmVfaW52YWxp ZGF0ZV9yYW5nZXMpIHsKPiA+ICsJCWlmIChtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1uX21t KSkKPiA+ICsJCQlobGlzdF9hZGRfaGVhZCgmbXJuLT5kZWZlcnJlZF9pdGVtLAo+ID4gKwkJCQkg ICAgICAgJm1tbl9tbS0+ZGVmZXJyZWRfbGlzdCk7Cj4gPiArCQllbHNlIHsKPiA+ICsJCQltbW5f bW0tPmludmFsaWRhdGVfc2VxIHw9IDE7Cj4gPiArCQkJaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1y bi0+aW50ZXJ2YWxfdHJlZSwKPiA+ICsJCQkJCSAgICAgJm1tbl9tbS0+aXRyZWUpOwo+ID4gKwkJ fQo+ID4gKwkJbXJuLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7Cj4g PiArCX0gZWxzZSB7Cj4gPiArCQlXQVJOX09OKG1uX2l0cmVlX2lzX2ludmFsaWRhdGluZyhtbW5f bW0pKTsKPiA+ICsJCW1ybi0+aW52YWxpZGF0ZV9zZXEgPSBtbW5fbW0tPmludmFsaWRhdGVfc2Vx IC0gMTsKPiAKPiBPaGhoLCBjaGVja21hdGUuIEkgbG9zZS4gV2h5IGlzICpzdWJ0cmFjdGluZyog dGhlIHJpZ2h0IHRoaW5nIHRvIGRvCj4gZm9yIHNlcSBudW1iZXJzIGhlcmU/ICBJJ20gYWN1dGVs eSB1bmhhcHB5IHRyeWluZyB0byBmaWd1cmUgdGhpcyBvdXQuCj4gSSBzdXNwZWN0IGl0J3MgYW5v dGhlciB1bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0cnlpbmcgdG8gdXNlIHRoZQo+IGxvd2Vy IGJpdCBvZiB0aGUgc2VxIG51bWJlciAoZXZlbi9vZGQpIGZvciBzb21ldGhpbmcgZWxzZS4KCk5v LCB0aGlzIGlzIGFjdHVhbGx5IGRvbmUgZm9yIHRoZSBzZXEgbnVtYmVyIGl0c2VsZi4gV2UgbmVl ZCB0bwpnZW5lcmF0ZSBhIHNlcSBudW1iZXIgdGhhdCBpcyAhPSB0aGUgY3VycmVudCBpbnZhbGlk YXRlX3NlcSBhcyB0aGlzCm5ldyBtcm4gaXMgbm90IGludmFsaWRhdGluZy4KClRoZSBiZXN0IHNl cSB0byB1c2UgaXMgb25lIHRoYXQgdGhlIGludmFsaWRhdGVfc2VxIHdpbGwgbm90IHJlYWNoIGZv cgphIGxvbmcgdGltZSwgaWUgJ2ludmFsaWRhdGVfc2VxICsgTUFYJyB3aGljaCBpcyBleHByZXNz ZWQgYXMgLTEKClRoZSBldmVuL29kZCB0aGluZyBqdXN0IHRha2VzIGNhcmUgb2YgaXRzZWxmIG5h dHVyYWxseSBoZXJlIGFzCmludmFsaWRhdGVfc2VxIGlzIGd1YXJlbnRlZWQgZXZlbiBhbmQgLTEg Y3JlYXRlcyBib3RoIGFuIG9kZCBtcm4gdmFsdWUKYW5kIGEgZ29vZCBzZXEgbnVtYmVyLgoKVGhl IGFsZ29yaXRobSB3b3VsZCBhY3R1YWxseSB3b3JrIGNvcnJlY3RseSBpZiB0aGlzIHdhcwonbXJu LT5pbnZhbGlkYXRlX3NlcSA9IDEnLCBidXQgb2NjYXNpb25hbGx5IHRoaW5ncyB3b3VsZCBibG9j ayB3aGVuCnRoZXkgZG9uJ3QgbmVlZCB0byBibG9jay4KCkxldHMgYWRkIGEgY29tbWVudDoKCgkJ LyoKCQkgKiBUaGUgc3RhcnRpbmcgc2VxIGZvciBhIG1ybiBub3QgdW5kZXIgaW52YWxpZGF0aW9u IHNob3VsZCBiZQoJCSAqIG9kZCwgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IGludmFsaWRhdGVf c2VxIGFuZAoJCSAqIGludmFsaWRhdGVfc2VxIHNob3VsZCBub3QgJ3dyYXAnIHRvIHRoZSBuZXcg c2VxIGFueSB0aW1lCgkJICogc29vbi4KCQkgKi8KCj4gPiAraW50IG1tdV9yYW5nZV9ub3RpZmll cl9pbnNlcnQoc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqbXJuLAo+ID4gKwkJCSAgICAgIHVu c2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAo+ID4gKwkJCSAgICAgIHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1tdV9ub3RpZmllcl9tbSAq bW1uX21tOwo+ID4gKwlpbnQgcmV0Owo+IAo+IEhtbW0sIEkgdGhpbmsgYSBsYXRlciBwYXRjaCBp bXByb3Blcmx5IGNoYW5nZXMgdGhlIGFib3ZlIHRvICJpbnQgcmV0ID0gMDsiLgo+IEknbGwgY2hl Y2sgb24gdGhhdC4gSXQncyBjb3JyZWN0IGhlcmUsIHRob3VnaC4KCkxvb2tzIE9LIGluIG15IHRy ZWU/Cgo+ID4gKwltaWdodF9sb2NrKCZtbS0+bW1hcF9zZW0pOwo+ID4gKwo+ID4gKwltbW5fbW0g PSBzbXBfbG9hZF9hY3F1aXJlKCZtbS0+bW11X25vdGlmaWVyX21tKTsKPiAKPiBXaGF0IGRvZXMg dGhlIGFib3ZlIHBhaXIgd2l0aD8gU2hvdWxkIGhhdmUgYSBjb21tZW50IHRoYXQgc3BlY2lmaWVz IHRoYXQuCgpzbXBfbG9hZF9hY3F1aXJlKCkgYWx3YXlzIHBhaXJzIHdpdGggc21wX3N0b3JlX3Jl bGVhc2UoKSB0byB0aGUgc2FtZQptZW1vcnksIHRoZXJlIGlzIG9ubHkgb25lIHN0b3JlLCBpcyBh IGNvbW1lbnQgcmVhbGx5IG5lZWRlZD8KCkJlbG93IGFyZSB0aGUgY29tbWVudCB1cGRhdGVzIEkg bWFkZSwgdGhhbmtzIQoKSmFzb24KCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tdV9ub3Rp Zmllci5oIGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaAppbmRleCA1MWI5MmJhMDEzZGRj ZS4uMDY1Yzk1MDAyZTk2MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW11X25vdGlmaWVy LmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaApAQCAtMzAyLDE1ICszMDIsMTUg QEAgdm9pZCBtbXVfcmFuZ2Vfbm90aWZpZXJfcmVtb3ZlKHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZp ZXIgKm1ybik7CiAvKioKICAqIG1tdV9yYW5nZV9zZXRfc2VxIC0gU2F2ZSB0aGUgaW52YWxpZGF0 aW9uIHNlcXVlbmNlCiAgKiBAbXJuIC0gVGhlIG1ybiBwYXNzZWQgdG8gaW52YWxpZGF0ZQotICog QGN1cl9zZXEgLSBUaGUgY3VyX3NlcSBwYXNzZWQgdG8gaW52YWxpZGF0ZQorICogQGN1cl9zZXEg LSBUaGUgY3VyX3NlcSBwYXNzZWQgdG8gdGhlIGludmFsaWRhdGUoKSBjYWxsYmFjawogICoKICAq IFRoaXMgbXVzdCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGZyb20gdGhlIGludmFsaWRhdGUg Y2FsbGJhY2sgb2YgYQogICogc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMgdW5kZXIgdGhl IHNhbWUgbG9jayB0aGF0IGlzIHVzZWQgdG8gY2FsbAogICogbW11X3JhbmdlX3JlYWRfcmV0cnko KS4gSXQgdXBkYXRlcyB0aGUgc2VxdWVuY2UgbnVtYmVyIGZvciBsYXRlciB1c2UgYnkKLSAqIG1t dV9yYW5nZV9yZWFkX3JldHJ5KCkuCisgKiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpLiBUaGUgcHJv dmlkZWQgY3VyX3NlcSB3aWxsIGFsd2F5cyBiZSBvZGQuCiAgKgotICogSWYgdGhlIHVzZXIgZG9l cyBub3QgY2FsbCBtbXVfcmFuZ2VfcmVhZF9iZWdpbigpIG9yIG1tdV9yYW5nZV9yZWFkX3JldHJ5 KCkKLSAqIHRoZW4gdGhpcyBjYWxsIGlzIG5vdCByZXF1aXJlZC4KKyAqIElmIHRoZSBjYWxsZXIg ZG9lcyBub3QgY2FsbCBtbXVfcmFuZ2VfcmVhZF9iZWdpbigpIG9yCisgKiBtbXVfcmFuZ2VfcmVh ZF9yZXRyeSgpIHRoZW4gdGhpcyBjYWxsIGlzIG5vdCByZXF1aXJlZC4KICAqLwogc3RhdGljIGlu bGluZSB2b2lkIG1tdV9yYW5nZV9zZXRfc2VxKHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1y biwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY3VyX3NlcSkKQEAgLTM0OCw4ICszNDgsOSBAQCBz dGF0aWMgaW5saW5lIGJvb2wgbW11X3JhbmdlX3JlYWRfcmV0cnkoc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllciAqbXJuLAogICogY29sbGlkZWQgd2l0aCB0aGlzIGxvY2sgYW5kIGEgZnV0dXJlIG1t dV9yYW5nZV9yZWFkX3JldHJ5KCkgd2lsbCByZXR1cm4KICAqIHRydWUuCiAgKgotICogRmFsc2Ug aXMgbm90IHJlbGlhYmxlIGFuZCBvbmx5IHN1Z2dlc3RzIGEgY29sbGlzaW9uIGhhcyBub3QgaGFw cGVuZWQuIEl0Ci0gKiBjYW4gYmUgY2FsbGVkIG1hbnkgdGltZXMgYW5kIGRvZXMgbm90IGhhdmUg dG8gaG9sZCB0aGUgdXNlciBwcm92aWRlZCBsb2NrLgorICogRmFsc2UgaXMgbm90IHJlbGlhYmxl IGFuZCBvbmx5IHN1Z2dlc3RzIGEgY29sbGlzaW9uIG1heSBub3QgaGF2ZQorICogb2NjdXJlZC4g SXQgY2FuIGJlIGNhbGxlZCBtYW55IHRpbWVzIGFuZCBkb2VzIG5vdCBoYXZlIHRvIGhvbGQgdGhl IHVzZXIKKyAqIHByb3ZpZGVkIGxvY2suCiAgKgogICogVGhpcyBjYWxsIGNhbiBiZSB1c2VkIGFz IHBhcnQgb2YgbG9vcHMgYW5kIG90aGVyIGV4cGVuc2l2ZSBvcGVyYXRpb25zIHRvCiAgKiBleHBl ZGl0ZSBhIHJldHJ5LgpkaWZmIC0tZ2l0IGEvbW0vbW11X25vdGlmaWVyLmMgYi9tbS9tbXVfbm90 aWZpZXIuYwppbmRleCAyYjc0ODU5MTllY2ZlYi4uYWZlMWUyZDk0MTgzZjggMTAwNjQ0Ci0tLSBh L21tL21tdV9ub3RpZmllci5jCisrKyBiL21tL21tdV9ub3RpZmllci5jCkBAIC01MSw3ICs1MSw4 IEBAIHN0cnVjdCBtbXVfbm90aWZpZXJfbW0gewogICogVGhpcyBpcyBhIGNvbGxpc2lvbi1yZXRy eSByZWFkLXNpZGUvd3JpdGUtc2lkZSAnbG9jaycsIGEgbG90IGxpa2UgYQogICogc2VxY291bnQs IGhvd2V2ZXIgdGhpcyBhbGxvd3MgbXVsdGlwbGUgd3JpdGUtc2lkZXMgdG8gaG9sZCBpdCBhdAog ICogb25jZS4gQ29uY2VwdHVhbGx5IHRoZSB3cml0ZSBzaWRlIGlzIHByb3RlY3RpbmcgdGhlIHZh bHVlcyBvZiB0aGUgUFRFcyBpbgotICogdGhpcyBtbSwgc3VjaCB0aGF0IFBURVMgY2Fubm90IGJl IHJlYWQgaW50byBTUFRFcyB3aGlsZSBhbnkgd3JpdGVyIGV4aXN0cy4KKyAqIHRoaXMgbW0sIHN1 Y2ggdGhhdCBQVEVTIGNhbm5vdCBiZSByZWFkIGludG8gU1BURXMgKHNoYWRvdyBQVEVzKSB3aGls ZSBhbnkKKyAqIHdyaXRlciBleGlzdHMuCiAgKgogICogTm90ZSB0aGF0IHRoZSBjb3JlIG1tIGNy ZWF0ZXMgbmVzdGVkIGludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKS9lbmQoKSByZWdpb25zCiAgKiB3 aXRoaW4gdGhlIHNhbWUgdGhyZWFkLCBhbmQgcnVucyBpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCkv ZW5kKCkgaW4gcGFyYWxsZWwKQEAgLTY0LDEyICs2NSwxMyBAQCBzdHJ1Y3QgbW11X25vdGlmaWVy X21tIHsKICAqCiAgKiBUaGUgd3JpdGUgc2lkZSBoYXMgdHdvIHN0YXRlcywgZnVsbHkgZXhjbHVk ZWQ6CiAgKiAgLSBtbS0+YWN0aXZlX2ludmFsaWRhdGVfcmFuZ2VzICE9IDAKLSAqICAtIG1ubi0+ aW52YWxpZGF0ZV9zZXEgJiAxID09IFRydWUKKyAqICAtIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAx ID09IFRydWUgKG9kZCkKICAqICAtIHNvbWUgcmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBiZWlu ZyBpbnZhbGlkYXRlZAogICogIC0gdGhlIGl0cmVlIGlzIG5vdCBhbGxvd2VkIHRvIGNoYW5nZQog ICoKICAqIEFuZCBwYXJ0aWFsbHkgZXhjbHVkZWQ6CiAgKiAgLSBtbS0+YWN0aXZlX2ludmFsaWRh dGVfcmFuZ2VzICE9IDAKKyAqICAtIG1ubi0+aW52YWxpZGF0ZV9zZXEgJiAxID09IEZhbHNlIChl dmVuKQogICogIC0gc29tZSByYW5nZSBvbiB0aGUgbW1fc3RydWN0IGlzIGJlaW5nIGludmFsaWRh dGVkCiAgKiAgLSB0aGUgaXRyZWUgaXMgYWxsb3dlZCB0byBjaGFuZ2UKICAqCkBAIC0xMzEsMTIg KzEzMywxMyBAQCBzdGF0aWMgdm9pZCBtbl9pdHJlZV9pbnZfZW5kKHN0cnVjdCBtbXVfbm90aWZp ZXJfbW0gKm1tbl9tbSkKIAkJcmV0dXJuOwogCX0KIAorCS8qIE1ha2UgaW52YWxpZGF0ZV9zZXEg ZXZlbiAqLwogCW1tbl9tbS0+aW52YWxpZGF0ZV9zZXErKzsKIAluZWVkX3dha2UgPSB0cnVlOwog CiAJLyoKIAkgKiBUaGUgaW52X2VuZCBpbmNvcnBvcmF0ZXMgYSBkZWZlcnJlZCBtZWNoYW5pc20g bGlrZQotCSAqIHJ0bmxfbG9jaygpLiBBZGRzIGFuZCByZW1vdmVzIGFyZSBxdWV1ZWQgdW50aWwg dGhlIGZpbmFsIGludl9lbmQKKwkgKiBydG5sX3VubG9jaygpLiBBZGRzIGFuZCByZW1vdmVzIGFy ZSBxdWV1ZWQgdW50aWwgdGhlIGZpbmFsIGludl9lbmQKIAkgKiBoYXBwZW5zIHRoZW4gdGhleSBh cmUgcHJvZ3Jlc3NlZC4gVGhpcyBhcnJhbmdlbWVudCBmb3IgdHJlZSB1cGRhdGVzCiAJICogaXMg dXNlZCB0byBhdm9pZCB1c2luZyBhIGJsb2NraW5nIGxvY2sgZHVyaW5nCiAJICogaW52YWxpZGF0 ZV9yYW5nZV9zdGFydC4KQEAgLTIzMCwxMCArMjMzLDExIEBAIHVuc2lnbmVkIGxvbmcgbW11X3Jh bmdlX3JlYWRfYmVnaW4oc3RydWN0IG1tdV9yYW5nZV9ub3RpZmllciAqbXJuKQogCXNwaW5fdW5s b2NrKCZtbW5fbW0tPmxvY2spOwogCiAJLyoKLQkgKiBtcm4tPmludmFsaWRhdGVfc2VxIGlzIGFs d2F5cyBzZXQgdG8gYW4gb2RkIHZhbHVlLiBUaGlzIGVuc3VyZXMKLQkgKiB0aGF0IGlmIHNlcSBk b2VzIHdyYXAgd2Ugd2lsbCBhbHdheXMgY2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUKLQkg KiByZWFzb25hYmxlIHRpbWUgYXMgbW1uX21tLT5pbnZhbGlkYXRlX3NlcSBpcyBldmVuIGluIHRo ZSBpZGxlCi0JICogc3RhdGUuCisJICogbXJuLT5pbnZhbGlkYXRlX3NlcSBtdXN0IGFsd2F5cyBi ZSBzZXQgdG8gYW4gb2RkIHZhbHVlIHZpYQorCSAqIG1tdV9yYW5nZV9zZXRfc2VxKCkgdXNpbmcg dGhlIHByb3ZpZGVkIGN1cl9zZXEgZnJvbQorCSAqIG1uX2l0cmVlX2ludl9zdGFydF9yYW5nZSgp LiBUaGlzIGVuc3VyZXMgdGhhdCBpZiBzZXEgZG9lcyB3cmFwIHdlCisJICogd2lsbCBhbHdheXMg Y2xlYXIgdGhlIGJlbG93IHNsZWVwIGluIHNvbWUgcmVhc29uYWJsZSB0aW1lIGFzCisJICogbW1u X21tLT5pbnZhbGlkYXRlX3NlcSBpcyBldmVuIGluIHRoZSBpZGxlIHN0YXRlLgogCSAqLwogCWxv Y2tfbWFwX2FjcXVpcmUoJl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFw KTsKIAlsb2NrX21hcF9yZWxlYXNlKCZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0 YXJ0X21hcCk7CkBAIC04OTIsNiArODk2LDEyIEBAIHN0YXRpYyBpbnQgX19tbXVfcmFuZ2Vfbm90 aWZpZXJfaW5zZXJ0KHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybiwKIAkJbXJuLT5pbnZh bGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7CiAJfSBlbHNlIHsKIAkJV0FSTl9P Tihtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1uX21tKSk7CisJCS8qCisJCSAqIFRoZSBzdGFy dGluZyBzZXEgZm9yIGEgbXJuIG5vdCB1bmRlciBpbnZhbGlkYXRpb24gc2hvdWxkIGJlCisJCSAq IG9kZCwgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IGludmFsaWRhdGVfc2VxIGFuZAorCQkgKiBp bnZhbGlkYXRlX3NlcSBzaG91bGQgbm90ICd3cmFwJyB0byB0aGUgbmV3IHNlcSBhbnkgdGltZQor CQkgKiBzb29uLgorCQkgKi8KIAkJbXJuLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxp ZGF0ZV9zZXEgLSAxOwogCQlpbnRlcnZhbF90cmVlX2luc2VydCgmbXJuLT5pbnRlcnZhbF90cmVl LCAmbW1uX21tLT5pdHJlZSk7CiAJfQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ft ZC1nZng=