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=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham 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 05497C433E0 for ; Tue, 16 Mar 2021 14:07:50 +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 79F5464F9D for ; Tue, 16 Mar 2021 14:07:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 79F5464F9D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch 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 0541889AC0; Tue, 16 Mar 2021 14:07:49 +0000 (UTC) Received: from mail-ot1-x32e.google.com (mail-ot1-x32e.google.com [IPv6:2607:f8b0:4864:20::32e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 14FEE898C4 for ; Tue, 16 Mar 2021 14:07:48 +0000 (UTC) Received: by mail-ot1-x32e.google.com with SMTP id m1so8522136ote.10 for ; Tue, 16 Mar 2021 07:07:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=rAZsQ/KGwB2PIew6CbESHFBhGHputgxysQDJwMvD3/o=; b=UPaQ7KnOUL1lxmuUCVN3grMqlV4WLIiCyTXJWp7cda+w6fqI828lRr36BTjvWB9Ep0 R1z6F7HJGsVHABt+K4IUZGRxsy/mRt6lWioA9S+6vT8j/sEzFQqd3VWEnj5oSbaRgYeM +g5ycou04ECEgl4beYX3AEeJukx9DBkGHKXO4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=rAZsQ/KGwB2PIew6CbESHFBhGHputgxysQDJwMvD3/o=; b=cNXM3GXH7+cKw7X7kLsfdfWWWfvwUacWwAR7HKPIXx6b+n5/Mujg+XftLEo3IH109E gOWe1uS1LH4ZOfPhNQbXdA1Q/ez1YghZPBSFv9olu70TgitPaIP5O+k5i/1TVFH0EbGq sSFJ9DUikVz4u5pLq/vI6318aL+3zGShvvi35pDDIHnwdBKfszF/7QSk0Hxb5StkCLKn OeoZ4Ggr8HK6oyp84JQfk3Gyb3c8ByHZhnDhPawtKzPdInIjoIsM36cNmpjGeiFzrR7J kextB34QBBvBGv154zGct9DJGox5L+qGvrKqow/467xZRXy9iu3zZdmktv0uNwqn0ch5 lcog== X-Gm-Message-State: AOAM531phgapB+usFEBj/8qIyGbrqYvdsI4kCaloDQBlj8TFn1gWiliW viv57SlrJ78iirLv+E5bs7m6XIt0Y/5ypgTBuiQyMQ== X-Google-Smtp-Source: ABdhPJylYT9aIvqzy1dPRdH+dlGDuxsn7oA8U3bkjUKy9MmdP2R1mmbFXOSOeHdXmUFHSbI7RoSUxYpG4Vz4QrmsV/k= X-Received: by 2002:a9d:63d6:: with SMTP id e22mr3757192otl.188.1615903667162; Tue, 16 Mar 2021 07:07:47 -0700 (PDT) MIME-Version: 1.0 References: <20210312093810.2202-1-christian.koenig@amd.com> <15996529-b536-28aa-644c-c57e67788c97@gmail.com> <6654281b-5fb4-5d5f-779e-677cc2d54bb9@shipmail.org> <258002e0-7742-26fe-7fdd-991b411b6cf3@shipmail.org> In-Reply-To: <258002e0-7742-26fe-7fdd-991b411b6cf3@shipmail.org> From: Daniel Vetter Date: Tue, 16 Mar 2021 15:07:36 +0100 Message-ID: Subject: Re: [PATCH] drm/ttm: make ttm_bo_unpin more defensive To: =?UTF-8?Q?Thomas_Hellstr=C3=B6m_=28Intel=29?= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?Q?Christian_K=C3=B6nig?= , dri-devel Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gVHVlLCBNYXIgMTYsIDIwMjEgYXQgMTI6MjQgUE0gVGhvbWFzIEhlbGxzdHLDtm0gKEludGVs KQo8dGhvbWFzX29zQHNoaXBtYWlsLm9yZz4gd3JvdGU6Cj4KPgo+IE9uIDMvMTYvMjEgMTI6MDYg UE0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPiBPbiBUdWUsIE1hciAxNiwgMjAyMSBhdCAxMToz ODo1M0FNICswMTAwLCBUaG9tYXMgSGVsbHN0csO2bSAoSW50ZWwpIHdyb3RlOgo+ID4+IEhpLAo+ ID4+Cj4gPj4gT24gMy8xNi8yMSAxMDoyNyBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+Pj4g T24gTW9uLCBNYXIgMTUsIDIwMjEgYXQgMDg6MDA6MzBQTSArMDEwMCwgVGhvbWFzIEhlbGxzdHLD tm0gKEludGVsKSB3cm90ZToKPiA+Pj4+IE9uIDMvMTUvMjEgNzo0NyBQTSwgQ2hyaXN0aWFuIEvD tm5pZyB3cm90ZToKPiA+Pj4+PiBBbSAxNS4wMy4yMSB1bSAxODowOCBzY2hyaWViIFRob21hcyBI ZWxsc3Ryw7ZtIChJbnRlbCk6Cj4gPj4+Pj4+IE9uIDMvMTUvMjEgMTE6MjYgQU0sIENocmlzdGlh biBLw7ZuaWcgd3JvdGU6Cj4gPj4+Pj4+PiBBbSAxMy4wMy4yMSB1bSAxOToyOSBzY2hyaWViIFRo b21hcyBIZWxsc3Ryw7ZtIChJbnRlbCk6Cj4gPj4+Pj4+Pj4gSGksIENocmlzdGlhbgo+ID4+Pj4+ Pj4+Cj4gPj4+Pj4+Pj4gT24gMy8xMi8yMSAxMDozOCBBTSwgQ2hyaXN0aWFuIEvDtm5pZyB3cm90 ZToKPiA+Pj4+Pj4+Pj4gV2Ugc2VlbSB0byBoYXZlIHNvbWUgbW9yZSBkcml2ZXIgYnVncyB0aGFu IHRob3VnaHQuCj4gPj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlh biBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KPiA+Pj4+Pj4+Pj4gLS0tCj4gPj4+ Pj4+Pj4+ICAgICBpbmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oIHwgNiArKysrLS0KPiA+Pj4+ Pj4+Pj4gICAgIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0p Cj4gPj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90dG0vdHRt X2JvX2FwaS5oCj4gPj4+Pj4+Pj4+IGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19hcGkuaAo+ID4+ Pj4+Pj4+PiBpbmRleCA0ZmI1MjNkZmFiMzIuLmRmOWZlNTk2ZTdjNSAxMDA2NDQKPiA+Pj4+Pj4+ Pj4gLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19hcGkuaAo+ID4+Pj4+Pj4+PiArKysgYi9p bmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oCj4gPj4+Pj4+Pj4+IEBAIC02MDMsOSArNjAzLDEx IEBAIHN0YXRpYyBpbmxpbmUgdm9pZAo+ID4+Pj4+Pj4+PiB0dG1fYm9fcGluKHN0cnVjdCB0dG1f YnVmZmVyX29iamVjdCAqYm8pCj4gPj4+Pj4+Pj4+ICAgICBzdGF0aWMgaW5saW5lIHZvaWQgdHRt X2JvX3VucGluKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCj4gPj4+Pj4+Pj4+ICAgICB7 Cj4gPj4+Pj4+Pj4+ICAgICAgICAgZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYm8tPmJhc2UucmVzdik7 Cj4gPj4+Pj4+Pj4+IC0gICAgV0FSTl9PTl9PTkNFKCFiby0+cGluX2NvdW50KTsKPiA+Pj4+Pj4+ Pj4gICAgICAgICBXQVJOX09OX09OQ0UoIWtyZWZfcmVhZCgmYm8tPmtyZWYpKTsKPiA+Pj4+Pj4+ Pj4gLSAgICAtLWJvLT5waW5fY291bnQ7Cj4gPj4+Pj4+Pj4+ICsgICAgaWYgKGJvLT5waW5fY291 bnQpCj4gPj4+Pj4+Pj4+ICsgICAgICAgIC0tYm8tPnBpbl9jb3VudDsKPiA+Pj4+Pj4+Pj4gKyAg ICBlbHNlCj4gPj4+Pj4+Pj4+ICsgICAgICAgIFdBUk5fT05fT05DRSh0cnVlKTsKPiA+Pj4+Pj4+ Pj4gICAgIH0KPiA+Pj4+Pj4+Pj4gICAgICAgaW50IHR0bV9tZW1fZXZpY3RfZmlyc3Qoc3RydWN0 IHR0bV9kZXZpY2UgKmJkZXYsCj4gPj4+Pj4+Pj4gU2luY2UgSSBub3cgaGF2ZSBiZWVuIHN0YXJp bmcgZm9yIGhhbGYgYSB5ZWFyIGF0IHRoZSBjb2RlIG9mCj4gPj4+Pj4+Pj4gdGhlIGRyaXZlciB0 aGF0IG1hZGUgcGlubmluZyBhbiBhcnQsIEkgaGF2ZSBhIGNvdXBsZSBvZgo+ID4+Pj4+Pj4+IHN1 Z2dlc3Rpb25zIGhlcmUsIENvdWxkIHdlIHVzZSBhbiBhdG9taWMgZm9yIHBpbl9jb3VudCwKPiA+ Pj4+Pj4+PiBhbGxvd2luZyB1bmxvY2tlZCB1bnBpbm5pbmcgYnV0IHJlcXVpcmUgdGhlIGxvY2sg b25seSBmb3IKPiA+Pj4+Pj4+PiBwaW5fY291bnQgdHJhbnNpdGlvbiAwLT4xLCAoYnV0IHVubG9j a2VkIGZvcgo+ID4+Pj4+Pj4+IHBpbl9pZl9hbHJlYWR5X3Bpbm5lZCkuIEluIHBhcnRpY3VsYXIg SSB0aGluayB2bXdnZnggd291bGQKPiA+Pj4+Pj4+PiBiZW5lZml0IGZyb20gdW5sb2NrZWQgdW5w aW5zLiBBbHNvIGlmIHRoZSBhdG9taWMgd2VyZSBhCj4gPj4+Pj4+Pj4gcmVmY291bnRfdCwgdGhh dCB3b3VsZCBwcm9iYWJseSBnaXZlIHlvdSB0aGUgYWJvdmUKPiA+Pj4+Pj4+PiBiZWhhdmlvdXI/ Cj4gPj4+Pj4+PiBOb3BlLCBJJ3ZlIGNvbnNpZGVyZWQgdGhpcyBhcyB3ZWxsIHdoaWxlIG1vdmlu ZyB0aGUgcGluIGNvdW50IGludG8gVFRNLgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IFRoZSBwcm9ibGVt IGlzIHRoYXQgeW91IG5vdCBvbmx5IG5lZWQgdGhlIEJPIHJlc2VydmVkIGZvciAwLT4xCj4gPj4+ Pj4+PiB0cmFuc2l0aW9ucywgYnV0IGFsc28gZm9yIDEtPjAgdHJhbnNpdGlvbnMgdG8gbW92ZSB0 aGUgQk8gb24gdGhlCj4gPj4+Pj4+PiBMUlUgY29ycmVjdGx5Lgo+ID4+Pj4+PiBBaCwgYW5kIHRo ZXJlIGlzIG5vIHdheSB0byBoYXZlIHVzIGtub3cgdGhlIGNvcnJlY3QgTFJVIGxpc3Qgd2l0aG91 dAo+ID4+Pj4+PiByZXNlcnZhdGlvbj8KPiA+Pj4+PiBOb3QgcmVhbGx5LCB0aGVyZSBpcyBhbHdh eXMgdGhlIGNoYW5jZSB0aGF0IENQVSBBIGlzIHJlZHVjaW5nIHRoZSBjb3VudAo+ID4+Pj4+IGZy b20gMS0+MCB3aGlsZSBDUFUgQiBpcyBkb2luZyAwLT4xIGFuZCB5b3UgZW5kIHVwIHdpdGggYSBM UlUgc3RhdHVzCj4gPj4+Pj4gd2hpY2ggZG9lc24ndCBtYXRjaCB0aGUgcGluIGNvdW50Lgo+ID4+ Pj4+Cj4gPj4+Pj4gV2UgY291bGQgdHJ5IHRvIGRvIHNvbWV0aGluZyBsaWtlIGEgbG9vcCB1cGRh dGluZyB0aGUgTFJVIHN0YXR1cyB1bnRpbAo+ID4+Pj4+IGl0IG1hdGNoZXMgdGhlIHBpbiBjb3Vu dCwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBhcmUgdXN1YWxseQo+ID4+Pj4+IHJlYWxs eSBuYXN0eS4KPiA+Pj4+Pgo+ID4+Pj4gT0ssIHllYWggSSB3YXMgbW9yZSB0aGlua2luZyBhbG9u ZyB0aGUgbGluZXMgb2YgcHJvdGVjdGluZyB0aGUgTFJVIHN0YXR1cwo+ID4+Pj4gd2l0aCB0aGUg Z2xvYmFsIGxydSBsb2NrIGFuZCB1bnBpbiB3b3VsZCB0aGVuIGJlCj4gPj4+Pgo+ID4+Pj4gaWYg KHJlZmNvdW50X2RlY19hbmRfbG9jaygmYm8tPnBpbl9jb3VudCwgJnR0bV9nbG9iLmxydV9sb2Nr KSkgewo+ID4+Pj4gICAgICAgYWRkX3RvX3JlbGV2YW50X2xydXMoYm8sIGJvLT5scnVfc3RhdHVz KTsKPiA+Pj4+ICAgICAgIHNwaW5fdW5sb2NrKCZ0dG1fZ2xvYi5scnVfbG9jayk7Cj4gPj4+PiB9 Cj4gPj4+Pgo+ID4+Pj4gQnV0IGxvb2tpbmcgYXQgdHRtX2JvX21vdmVfdG9fbHJ1X3RhaWwoKSBJ IHJlYWxpemUgdGhhdCdzIG5vdCByZWFsbHkgdHJpdmlhbAo+ID4+Pj4gYW55bW9yZS4gSSBob3Bl IGl0J3MgZG9hYmxlIGF0IHNvbWUgcG9pbnQgdGhvdWdoLgo+ID4+Pj4KPiA+Pj4+IEJ1dCBtZWFu d2hpbGUsIHBlcmhhcHMgVFRNIG5lZWRzIHRvIGFjY2VwdCBhbmQgcGF2ZSBvdmVyIHRoYXQgZHJp dmVycyBhcmUgaW4KPiA+Pj4+IGZhY3QgZGVzdHJveWluZyBwaW5uZWQgYnVmZmVycz8KPiA+Pj4g RG8gd2UgaGF2ZSBtb3JlIHRyb3VibGUgdGhhbiB0aGUgdmVyeSBmYW5jeSB0cmlja3Mgdm13Z2Z4 IGRvZXM/IElmIHNvIEkKPiA+Pj4gdGhpbmsgd2UgY291bGQgZG8gYSBzbWFsbCBoZWxwZXIgdGhh dCBsaWtlIHR0bV9kb250X2NoZWNrX3VucGluKCkgdG8gc2h1dAo+ID4+PiBpdCB1cC4gU2luY2Ug dm13Z2Z4IGRyaXZlcnMgdGVuZCB0byBub3QgYmUgbG9hZGVkIHdpdGggYW55IG90aGVyIGRyaXZl cnMKPiA+Pj4gdGhhdCBzaG91bGRuJ3QgcmVkdWNlIGFueSB0ZXN0IGNvdmVyYWdlLiBBbmQgYWxs b3dzIHZtd2dmeCBmb2xrcyB0byBmaWd1cmUKPiA+Pj4gb3V0IHdoYXQgdG8gZG8gLSBtYXliZSB5 b3UgZG8gbmVlZCB5b3VyIG93biBpbi1ob3VzZSBwaW4vdW5waW4gZm9yIHRoZXNlCj4gPj4+IHNw ZWNpYWwgYm8/Cj4gPj4+Cj4gPj4+IEkgZGlkIHRyeSB0byBwYXJzZSB5b3VyIHJlcGx5IGluIHRo ZSBvdGhlciB0aHJlYWQsIGFuZCB0YmggSSBkaWRuJ3QgZ3JvY2sKPiA+Pj4gaXQuCj4gPj4gTm90 IHN1cmUgaWYgeW91IG1lYW4gdGhlIGRlc2NyaXB0aW9uIHdhcyB1bmNsZWFyIG9yIGlmIHlvdSB0 aG91Z2h0IGl0IHdhcyBhCj4gPj4gYmFkIGlkZWEsIGJ1dCBpbiBjYXNlIHRoZSBmb3JtZXIsIHdo YXQgSSBtZWFuIGlzCj4gPiBNeSB1bmNsYXJpdHkgaXMgb24gd2hhdCB5b3UgZXhwbGFpbmVkIGlu IHRoZSB2bXdnZnggdGhyZWFkIGFib3V0IGhvdwo+ID4gdm13Z2Z4IHVzZXMgaXRzIHBpbi91bnBp biBhbmQgd2h5LiBUaGF0IHdhcyBmdWxsIG9mIHZtd2dmeCBjb25jZXB0cyBJCj4gPiBkb24ndCBr bm93IGFib3V0LiBUaGlzIGhlcmUgbG9va3MgcmVhc29uYWJseSBjbGVhciB0byBtZSwgYnV0IGl0 IGRvZXMgaGF2ZQo+ID4gdGhlIHJhY2UgQ2hyaXN0aWFuIHNlZXMgSSB0aGluay4KPgo+IEhtbSwg T0ssIEkgdGhvdWdodCB0cmFuc2l0aW9uIDAtPjEgdW5kZXIgdGhlIExSVSBsb2NrIHdvdWxkIGhh dmUKPiByZXNvbHZlZCB0aGF0Li4uCgpIbSBub3cgeW91IG1ha2UgbWUgcXVlc3Rpb24gaG93IHRo aXMgYWxsIHdvcmtzIGFnYWluLCBhbmQgd2hlbiBpdApzdG9wcyB3b3JraW5nLiBJIGRvIHRoaW5r IHlvdXJzIHdvcmtzLCBidXQgaXQgdHJpZ2dlcnMgYW5vdGhlciBpY2t5CnRoaW5nIEkgaGF2ZSB3 aXRoIHJlZmNvdW50cyBhbmQgbG9ja2luZy4gQW5kIGF0IHRoaXMgcG9pbnQgcGluX2NvdW50Cmlz IG1vcmUgYSByZWZjb3VudCByZWFsbHkgLi4uCgpTbyBpbW8gdGhlIHdheSB0byBkbyBhIHdlYWsg cmVmY291bnQgaXMga3JlZl9nZXRfdW5sZXNzX3plcm8sIGJlY2F1c2UKdGhhdCB3YXkgeW91IGRv IG5vdCBoYXZlIHRvIGhvbGQgdGhlIGxvY2sgb24gdGhlIGZpbmFsIHVucmVmLCBidXQKaW5zdGVh ZCB5b3UgY2FuIHJlbW92ZSBhbGwgd2Vha2x5IHJlZmVyZW5jZWQgZW50cmllcyAobG9va3VwIGNh Y2hlcywKbHJ1LCB3aGF0ZXZlcikgc2ltcGx5IGluIHlvdXIgY2xlYW51cCBjb2RlIChhbmQgdGhl cmUgc3RpbGwgZ3JhYiB0aGUKcmlnaHQgbG9jayBvZmMpLCBhbmQgdGhlIHJlZmNvdW50X2RlYyBp c24ndCBzcGVjaWFsLgoKVGhlIG90aGVyIGFwcHJvYWNoIGlzIHRoZSByZWZjb3VudF9kZWNfYW5k X2xvY2ssIGFuZCB0aGlzIHdvcmtzLCBidXQKb25seSBmb3IgYSBzaW5nbGUgbG9jay4gU28gYXMg c29vbiBhcyB5b3UgaGF2ZSBtdWx0aXBsZSB3ZWFrCnJlZmVyZW5jZXMsIG9yIHBvc3NpYmxlIHdl YWsgcmVmZXJlbmNlcywgdGhlbiBpdCBmYWxscyBhcGFydCwgYmVjYXVzZQp5b3UgY2FuJ3QgdGFr ZSBhbGwgdGhlIGxvY2tzIGZvciBhbGwgb2YgdGhlbSBmb3IgdGhlIGZpbmFsIGRlY3JlbWVudC4K Ck5vdyBvZmMgb3VyIHBpbl9jb3VudCBoZXJlIGlzbid0IGEgd2VhayByZWZlcmVuY2UsIGJ1dCBJ IHRoaW5rIGl0J3MKZWFzaWVyIHRvIGFuYWx5emUgd2l0aCB0aGF0IGNvbmNlcHQgaW4gbWluZC4g QnV0IGNvbmNsdXNpb24gaXMgdGhlCnNhbWUsIGFzIHNvb24gYXMgd2UgbmVlZCBtdWx0aXBsZSBs cnUgbG9ja3MgZm9yIHRoZSBmaW5hbCB1bnBpbiwgd2UncmUKdG9hc3QuIEFuZCBDaHJpc3RpYW4g d2FudHMgdG8gbW92ZSB0byBhIHBlci1tZW1vcnkgcmVnaW9uIGxydSBsb2NrLCBzbwp0aGF0IHdv dWxkIGp1c3QgZGlnIHVzIGluIGluIGFub3RoZXIgY29ybmVyLgoKU28gdGhhdCBkb2VzIHdvcmsg bm93IHRoYXQgSSBsb29rIGNsb3NlciwgYnV0IGl0IGtpbmRhIHdvcnJpZXMgbWUgZm9yCm90aGVy IHJlYXNvbnMuIEFuZCBoYW5kbGluZyB3ZWFrIHJlZmVyZW5jZXMgd2l0aCB0aGUgcmVmY291bnRf YW5kX2xvY2sKaGFzIGNhdXNlIGEgbG90IG9mIHBhaW4gaW4gdGhlIHBhc3QgKGUuZy4ganVzdCBt b3ZpbmcgdGhlIGZpbmFsIGdlbV9ibwp1bnJlZmVyZW5jZSBmcm9tIHVuZGVyIGRybV9kZXZpY2Ut PnN0cnVjdF9tdXRleCB3YXMgYSBtdWx0aS15ZWFyCmVmZm9ydCBmdWxsIG9mIHBhaW4pLiBkcm1f cHJpbWUgaW1wb3J0L2V4cG9ydCBjYWNoZXMgYWxzbyBoYWQgc2ltaWxhcgpwcm9ibGVtcywgYW5k IHRoZSBzYW1lIGFwcGxpZXMgdG8gc29tZSBvZiB0aGUgdGhpbmdzIHdlIGRvIHdpdGgga21zCm9i amVjdHMuIEl0J3MgYmVjb21lIGEgYml0IGFuIGFudGktcGF0dGVybiBmb3IgaGFuZGxpbmcgcmVm Y291bnRfdCBhbmQKbG9ja3MgcHJvdGVjdGluZyB3ZWFrIHJlZmVyZW5jZXMgZm9yIG1lIGF0IGxl YXN0LgoKPiA+PiBzdGF0aWMgdm9pZCB0dG1fYm9fcGluKHN0cnVjdCB0dG1fYnVmZmVyX29iamVj dCAqYm8pCj4gPj4gewo+ID4+Cj4gPj4gZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoKSAgICAgICAgICAg ICAgICAgICAgICAgIC8vIE5vIHN1cnByaXNlcyBpZiBhbiBldmljdG9yCj4gPj4gZGV0ZXJtaW5l ZCB0aGF0IHRoaXMgb2JqZWN0IGlzIG5vdCBwaW5uZWQuCj4gPj4KPiA+PiAgICAgIGlmICghcmVm Y291bnRfaW5jX25vdF96ZXJvKCZiby0+cGluX2NvdW50KSkgeyAvLyBDb3VsZCBiZSBtYWRlCj4g Pj4gdHRtX2JvX3Bpbl9pZl9waW5uZWQoKSBhbmQgZXhwb3J0ZWQgaWYgdGhlcmUgYXJlIHVzZXJz Cj4gPj4gICAgICAgICAgc3Bpbl9sb2NrKCZ0dG1fZ2xvYi5scnVfbG9jayk7ICAgICAgICAgICAg Ly8gRG9uJ3QgcmFjZSB3aXRoIHVucGluCj4gPj4gMS0+MAo+ID4+ICAgICAgICAgIGlmIChyZWZj b3VudF9yZWFkKCZiby0+cGluX2NvdW50KSA9PSAwICYmIGJvLT5scnUpCj4gPj4gICAgICAgICAg ICAgIHR0bV9ib19kZWxfZnJvbV9scnUoYm8pOwo+ID4+ICAgICAgICAgIHJlZmNvdW50X2luYygm Ym8tPnBpbl9jb3VudCk7Cj4gPj4gICAgICAgICAgc3Bpbl91bmxvY2soJnR0bV9nbG9iLmxydV9s b2NrKTsKPiA+PiAgICAgIH0KPiA+PiB9Cj4gPj4KPiA+PiBzdGF0aWMgdm9pZCB0dG1fYm9fdW5w aW4oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKPiA+PiB7Cj4gPj4gICAgICBpZiAocmVm Y291bnRfZGVjX2FuZF9sb2NrKCZiby0+cGluX2NvdW50LCAmdHRtX2dsb2IubHJ1X2xvY2spKSB7 Cj4gPj4gICAgICAgICAgdHRtX2JvX21vdmVfdG9fbHJ1X3RhaWwoYm8sIGJvLT5scnVfbWVtX3R5 cGUsIGJvLT5scnVfcHJpbywKPiA+PiAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKPiA+PiAg ICAgICAgICBzcGluX3VubG9jaygmdHRtX2dsb2IubHJ1X2xvY2spOwo+ID4+ICAgICAgfQo+ID4+ IH0KPiA+Pgo+ID4+IEluIGFkZGl0aW9uLCBiby0+bHJ1X21lbV90eXBlIGFuZCBiby0+bHJ1X3By aW8gd291bGQgbmVlZCB0byBiZSBwcm90ZWN0ZWQgYnkKPiA+PiB0aGUgbHJ1IGxvY2ssIGFuZCB1 cGRhdGVkIHRvZ2V0aGVyIHdpdGggdGhlIExSVSBsaXN0IHBvc2l0aW9uLCB3aGljaCB3b3VsZAo+ ID4+IGJlIHRoZSBleHRyYSBjb21wbGV4aXR5IGluIGZhc3RwYXRocy4gV291bGRuJ3QgdGhhdCBy ZXNvbHZlIHRoZSBwaW4gLSBscnUKPiA+PiBpbmNvbnNpc3RlbmN5Pwo+ID4+Cj4gPj4gQnV0IHll YWggaWYgdm13Z2Z4IGlzIHRoZSBvbmx5IGRyaXZlciBoaXR0aW5nIHRyb3VibGUgYmVjYXVzZSBv ZiB0aGlzLCB0aGVuCj4gPj4gSSBhZ3JlZSBsZXQncyBsZWF2ZSBpdCBmb3Igd2hlbiAvIGlmIGl0 IGJlY29tZXMgbmVlZGVkLiBIYXZpbmcgaGFkIHRoYXQKPiA+PiByZXF1aXJlbWVudCBpbiB0aGUg SW50ZWwgZHJpdmVyIHdvdWxkIGhhdmUgY29tcGxpY2F0ZWQgdGhlIGRtYV9yZXN2IHdvcmsKPiA+ PiBxdWl0ZSBhIGxvdC4KPiA+IFllYWggSSBrbm93IGk5MTUgZG9lcyBhIGxvdCBvZiB1bnBpbiBp biBpbnRlcmVzdGluZyBwbGFjZXMsIGFuZCB0aGF0J3MKPiA+IHBhcnQgb2Ygd2h5IEknbSB3b3Jy aWVkLiBJJ3ZlIHNlZW4gc29tZSBidWdmaXhlcyBmbHkgYnkgdGhhdCBkcm9wcGVkCj4gPiBkbWFf cmVzdl9sb2NrIGFyb3VuZCB1bnBpbiB0byBmaXggcmVhbGx5IHNjYXJ5IGxvb2tpbmcgc3RhbGxz Cj4gPiAocmN1X3N5bmNocm9uaXplIHZzIG90aGVyIHN0dWZmIGFuZCBsb2NrZGVwIGRpZCBub3Qg Y2F0Y2ggaXQpLiBBbmQgb25jZSBJCj4gPiBzZWUgdGhhdCBraW5kIG9mIHN0dWZmIEknbSBoZWF2 aWx5IGxlYW5pbmcgdG93YXJkcyBzaW1wbGVyIGxvY2tpbmcgd2UgY2FuCj4gPiBncmFzcCwganVz dCB0byBiZSBhYmxlIHRvIHN0YXkgb24gdG9wIG9mIHRoZSBidWdzLiBCZWNhdXNlIHRoZSBidWdm aXggZGlkCj4gPiBub3QgY29tZSB3aXRoIGFueSBjbGVhciBleHBsYW5hdGlvbiBmb3Igd2h5IG5v dCB0YWtpbmcgZG1hX3Jlc3ZfbG9jawo+ID4gYWN0dWFsbHkgaGVscHMsIG9yIGFueSBvdGhlciBj bGVhciBhbmQgaW4tZGVwdGggbG9ja2luZyBhbmFseXNpcy4KPiA+Cj4gPiBJIHRoaW5rIHdlIGFs c28gc3RpbGwgaGF2ZSBzb21lIHRlbXBvcmFyeSBwaW4vdW5waW4gZmx5aW5nIGFib3V0LCBidXQK PiA+IG1heWJlIHRob3NlIGFyZSBhbGwgZ29uZSBub3cuCj4KPiBObywgdW5mb3J0dW5hdGVseSB0 aGV5IGFyZW4ndCBhbmQgeWVzLCBJIG5vdyBzZWUgeW91ciBwb2ludC4gQW5kIHllcywgaWYKPiB3 ZSBjYW4gcmVkdWNlIHRoZSBwaW5uaW5nIHRvIG9ubHkgZGlzcGxheSBraW5kcyBvZiB0aGluZ3Mg dGhpcyB3b3VsZG4ndAo+IHJlYWxseSBtYXR0ZXIuIEJ1dCBpZiBub3QsIEknbSBhZnJhaWQgdGhl IGFsdGVybmF0aXZlIGlzIHRoYXQgZHJpdmVycwo+IHdpbGwgaGF2ZSB0byBzdGFydCByZXNvcnRp bmcgdG8gYXNzdW1pbmcgcGVyaGFwcyBpbmNvcnJlY3RseSB0aGF0IGFuCj4gb2JqZWN0IGlzIGlz b2xhdGVkIChvbmx5IGEgc2luZ2xlIHVzZXIpLCBhbmQgdGhhdCB0aGVyZWZvcmUgdHJ5cmVzZXJ2 ZQo+IGZvciB1bnBpbm5pbmcgd2lsbCBhbHdheXMgc3VjY2VlZCwgd2hpY2ggaXMgZnJhZ2lsZSBh dCBiZXN0LiAoVGhpcyBpcwo+IHdoYXQgdm13Z2Z4IGRvZXMgZm9yIHRoZSBwYWdldGFibGVzKS4g QW5kIHBpbm5pbmcgcGFnZXRhYmxlcyBpbiB0aGF0Cj4gY2FzZSBtYWtlcyBzZW5zZSBzaW5jZSBp dCByZWR1Y2VzIHRoZSBudW1iZXIgb2YgYnVmZmVycyB0byB2YWxpZGF0ZSBhbmQKPiBmZW5jZSBi eSA1MCUuLi4KClllYWggV0FSTl9PTih0cnlyZXNlcnZlKSBpcyBhbHNvIGEgdmVyeSBmcmFnaWxl IGFwcHJvYWNoLgoKTm93IGZvciBwYWdldGFibGVzIEkgdGhpbmsgYW1kZ3B1IGhhcyBhIHZlcnkg bmljZSBhcHByb2FjaC4KRXNzZW50aWFsbHkgYW55IHBhZ2V0YWJsZSBvYmplY3QgeW91IGFzc2ln biB0byB0aGUgc2FtZSBkbWFfcmVzdgpvYmplY3QgdGhhdCB5b3UgaGF2ZSBvbiB5b3VyIHZtIHN0 cnVjdHVyZS4gVGhhdCB3YXkgeW91IGRtYV9yZXN2X2xvY2sKeW91ciB2bSwgYW5kIGFsbCB5b3Vy IHZtIHJlbGF0ZWQgYnVmZmVyIG9iamVjdHMgKGFsbCB0aGUgcGFnZXRhYmxlcwpyZWFsbHkpIGFy ZSBsb2NrZWQgYW5kIGNhbiBiZSByZXNlcnZlZC4gQWxzbywgYWN0aXZpdHkgdHJhY2tpbmcgKGlm CnlvdSBkb24ndCBoYXZlIHRsYiBmbHVzaGVzIHRocm91Z2ggbW1pbywgb25seSB0aHJvdWdoIGlu LWxpbmUgY29tbWFuZApzdWJtaXNzaW9uKSB3aXRoIGRtYV9mZW5jZXMgYWxzbyBiZWNvbWVzIE8o MSkuCgpOb3cgZXZlbiB0aGF0IGlzbid0IGdvb2QgZW5vdWdoIHNpbmNlIHlvdSBzdGlsbCBoYXZl IHRvCk8oI3BhZ2V0YWJsZV9vYmplY3RzKSByZXNlcnZlIHlvdXIgYnVmZmVycy4gQnV0IGFnYWlu IGFtZGdwdSBoYXMgYQp0cmljayBmb3IgdGhhdDogRm9yIHRoZXNlIHByaXZhdGUgb2JqZWN0cyB0 aGV5J3JlIGVzc2VudGlhbGx5IHRyZWF0ZWQKYXMgYWx3YXlzIGJvdW5kIGZvciB0aGF0IHZtIChi ZWNhdXNlIHJlYWxseSwgdGhleSBhcmUpLCBzbyB5b3UKb3B0aW1pemUgZm9yIHRoZSB1bmJvdW5k IGNhc2U6IFdoZW4gb25lIG9mIHRoZXNlIHZtIG9iamVjdHMgZ2V0cwpldmljdGVkIHdlIHB1dCB0 aGVtIG9uIHRoZSB2bS0+ZXZpY3RlZF9ibyBsaXN0LiBTaW5jZSB3ZSBrbm93IHRoZXNlCm9iamVj dHMgYXJlIHByaXZhdGUgd2Ugbm93IHRoZSBzaW5nbGUgbGlzdCBlbnRyeSBwZXIgYm8gaXNuJ3Qg YQpwcm9ibGVtLCB0aGVzZSBvYmplY3RzIGFyZSBuZXZlciB1c2VkIGJ5IGFueSBvdGhlciB2bS4K ClRoZSBmaW5hbCB0cmljayBpcyB0aGUgbHJ1LCBhbmQgdGhhdCdzIHNvbHZlZCB3aXRoIHRoZSBi dWxrIG1vdmUKdHJpY2tzLiBFbmQgcmVzdWx0OiBObyBuZWVkIHRvIHBpbiBwYWdldGFibGVzIHdo aWxlIHN0aWxsIGdldHRpbmcgTygxKQpleGVjYnVmIGZvciB0aGVtLiBJdCdzIHJlYWxseSBuZWF0 LgoKT24gdG9wIG9mIHRoYXQgYW1kZ3B1IGFsc28gaGFzIGFuIGFsbG9jYXRpb24gZmxhZyB3aGVy ZSB1c2Vyc3BhY2UKcHJvbWlzZXMgdG8gbmV2ZXIgc2hhcmUgYSBidWZmZXIgYmV5b25kIHRoYXQg c2luZ2xlIFZNIGl0J3MgYWxsb2NhdGVkCmZvci4gVGhhdCBhbGxvd3MgdGhlbSB0byBhbHNvIGhh bmRsZSBhbGwgdGhlIHZhcmlvdXMgc3RhdGUgYnVmZmVycyBhbmQKYW55dGhpbmcgZWxzZSB0aGF0 J3MgZ3VhcmFudGVlZCB0byBiZSB1bnNoYXJlZCB3aXRoIHRoZSBzYW1lIHRyaWNrLgpXaGljaCBm b3IgbWFueSBidWZmZXJzIGVzc2VudGlhbGx5IGdpdmVzIHlvdSBPKDEpIGV4ZWNidWYgZm9yIHdo YXQKd2UncmUgdHJ5aW5nIHRvIGRvIHdpdGggb3VyIFZNX0JJTkQuIEFsbCB3aGlsZSBzdGlsbCBt YWtpbmcgaXQgbG9vayB0bwp0aGUgZHJpdmVyIChhbmQgdHRtKSBhdCBsYXJnZSB0aGF0IHRoZSBi dWZmZXIgaXMgZnVsbHkgbWFuYWdlZCB3aXRoCmRtYV9yZXN2IGFuZCBmZW5jZXMsIHJ1bm5pbmcg YXJvdW5kIG9uIHRoZSBscnUgbGlrZSBhbnl0aGluZyBlbHNlLiBBbmQKc28gaW50ZWdyYXRlcyBp bnRvIHRoZSBldmljdGlvbiBjb2RlIHdpdGggemVybyBzcGVjaWFsIGNhc2VzLgoKTGFzdCB0aW1l IEkgbG9va2VkIG91ciBvd24gVk1fQklORCBpc24ndCBxdWl0ZSB0aGVyZSB5ZXQgd2l0aCB0aGF0 Cm11Y2ggZmluZXNzZSBpbiB0aGUgaW1wbGVtZW50YXRpb24uCgpCdXQgYWxzbywgSSdtIGtpbmRh IGRpdmVyZ2luZyBhIGJpdCBmcm9tIHRoZSB0b3BpYyA6LSkKCkJhY2sgdG8gaTkxNTogSSBkbyB0 aGluayB3ZSBuZWVkIHRvIGdpdmUgYWxsIG91ciB1bnBpbiBhIHNlcmlvdXMKcmV2aWV3LiBBIGxv dCBvZiB0aGVtIGFyZSBtb3RpdmF0ZWQgYnkgbG9jayBkcm9wcGluZyB0cmlja3MgdG8gY29tZQpm cm9tIHRoZSBnb29kIG9sZCBkYXlzIG9mIGV2ZXJ5dGhpbmcgaXMgcHJvdGVjdGVkIGJ5CmRldi0+ c3RydWN0X211dGV4LiBTbyBlc3NlbnRpYWxseSB3ZSd2ZSBoYW5kLXJvbGxlZCBhIGZhaXJseSBi YWQKc2VtYXBob3JlIHdpdGggb3VyIHBpbl9jb3VudCAoeW91IGNhbid0IGV2ZW4gd2FpdCBvbiBh bGwgdGhlIHRlbXAgcGlucwp0byBkcm9wIG91dCEpLiBBbmQgaW1vIHBhcnQgb2YgdGhlIGxvbmdl ciB0ZXJtIHN3aXRjaCB0byBkbWFfcmVzdgpzaG91bGQgYmUgdG8gY2hlY2sgd2hpY2ggb2YgdGhl c2UgbG9jayBkcm9wcGluZyB0cmlja3Mgd2UgcmVhbGx5IHN0aWxsCm5lZWQsIGFuZCB3aGljaCB3 ZSBjYW4gc3Vuc2V0LgotRGFuaWVsCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVy LCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK