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 CDDBFC47094 for ; Thu, 10 Jun 2021 16:38:07 +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 CFF7660231 for ; Thu, 10 Jun 2021 16:38:06 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CFF7660231 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6C7EF6ED93; Thu, 10 Jun 2021 16:38:06 +0000 (UTC) Received: from mail-oi1-x22b.google.com (mail-oi1-x22b.google.com [IPv6:2607:f8b0:4864:20::22b]) by gabe.freedesktop.org (Postfix) with ESMTPS id 34E476ED93 for ; Thu, 10 Jun 2021 16:38:05 +0000 (UTC) Received: by mail-oi1-x22b.google.com with SMTP id c13so2732647oib.13 for ; Thu, 10 Jun 2021 09:38:05 -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=WsGtv6JBgVqMrOrVbk+hTarizYKR8Iuy1tXEkvo1aL4=; b=Lo/ZnOYJOW/UIyIW0eTI0uAUwjNiQx/ACQkhh1v3op68IWG/1dHDihlW7ImPM30uQ7 /mxuV5y4pOF1ow0KcKqsuRhxf3SHlyWroDVSAT+1vtB3o6TrIww0lO7CvbQyBT4bsGoP i3uLhsicPylnBf/SSOYDZ7rCvol9TZlfjrsSA= 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=WsGtv6JBgVqMrOrVbk+hTarizYKR8Iuy1tXEkvo1aL4=; b=jWCNeUoiKczadrlDZghBfl5N42NtCCNoAi48rssWO7jGJAcvtv1DFtKr6mqZaD0GXD SvBOCCZn4oCurudzDrHYum2g9eUdsYa7PE29MRZmEJttPllB+p36x9+jDYaCf7fzSE+F UzTPKEfSKSytPxPFLi1ZQH3RRv9WE4vyf5q2MEDt1+TS3is+1IUUaptgtwuv7g1snvDO /mHm9o0lVYJnsgTVs/fAb7TtMmKsinzi4KIfbh5jUSjJLNwu9O+KnAFC4RDUI4tY6MdC nCfQzds3xIcJ/auZDfqZq7JtsZYAtI9eX3VpChgPlf4D8RVvm35P7pvSV9dBui0gBRys wxIQ== X-Gm-Message-State: AOAM531bFt/zJx6CExsVCPIgz1Q4yjbYDocwZzpKcCfJexdGJOEhe1Xe vJOqEePwXDz4n20+BBmZJeGK8KTmn0CeN2GIF1MTAg== X-Google-Smtp-Source: ABdhPJxFzH0oBJ+m/AaUFXwnj4oAdlaO0O7RtyY7teBZwo97r1cMsaZ3gATIHc8MFY2KS4qEJbdj31hXrK4kK1aYn84= X-Received: by 2002:aca:530f:: with SMTP id h15mr4128869oib.128.1623343084684; Thu, 10 Jun 2021 09:38:04 -0700 (PDT) MIME-Version: 1.0 References: <20210609212959.471209-1-jason@jlekstrand.net> <20210609212959.471209-6-jason@jlekstrand.net> In-Reply-To: From: Daniel Vetter Date: Thu, 10 Jun 2021 18:37:53 +0200 Message-ID: To: Jason Ekstrand Subject: Re: [Intel-gfx] [PATCH 5/5] DONOTMERGE: dma-buf: Get rid of dma_fence_get_rcu_safe X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Intel GFX , =?UTF-8?Q?Christian_K=C3=B6nig?= , Maling list - DRI developers , Matthew Auld Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gVGh1LCBKdW4gMTAsIDIwMjEgYXQgNjoyNCBQTSBKYXNvbiBFa3N0cmFuZCA8amFzb25Aamxl a3N0cmFuZC5uZXQ+IHdyb3RlOgo+Cj4gT24gVGh1LCBKdW4gMTAsIDIwMjEgYXQgMTA6MTMgQU0g RGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4gd3JvdGU6Cj4gPgo+ID4gT24g VGh1LCBKdW4gMTAsIDIwMjEgYXQgMzo1OSBQTSBKYXNvbiBFa3N0cmFuZCA8amFzb25Aamxla3N0 cmFuZC5uZXQ+IHdyb3RlOgo+ID4gPgo+ID4gPiBPbiBUaHUsIEp1biAxMCwgMjAyMSBhdCAxOjUx IEFNIENocmlzdGlhbiBLw7ZuaWcKPiA+ID4gPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4gd3Jv dGU6Cj4gPiA+ID4KPiA+ID4gPiBBbSAwOS4wNi4yMSB1bSAyMzoyOSBzY2hyaWViIEphc29uIEVr c3RyYW5kOgo+ID4gPiA+ID4gVGhpcyBoZWxwZXIgZXhpc3RlZCB0byBoYW5kbGUgdGhlIHdlaXJk IGNvcm5lci1jYXNlcyBjYXVzZWQgYnkgdXNpbmcKPiA+ID4gPiA+IFNMQUJfVFlQRVNBRkVfQllf UkNVIGZvciBiYWNraW5nIGRtYV9mZW5jZS4gIE5vdyB0aGF0IG5vIG9uZSBpcyB1c2luZwo+ID4g PiA+ID4gdGhhdCBhbnltb3JlIChpOTE1IHdhcyB0aGUgb25seSByZWFsIHVzZXIpLCBkbWFfZmVu Y2VfZ2V0X3JjdSBpcwo+ID4gPiA+ID4gc3VmZmljaWVudC4gIFRoZSBvbmUgc2xpZ2h0bHkgYW5u b3lpbmcgdGhpbmcgd2UgaGF2ZSB0byBkZWFsIHdpdGggaGVyZQo+ID4gPiA+ID4gaXMgdGhhdCBk bWFfZmVuY2VfZ2V0X3JjdV9zYWZlIGRpZCBhbiByY3VfZGVyZWZlcmVuY2UgYXMgd2VsbCBhcyBh Cj4gPiA+ID4gPiBTTEFCX1RZUEVTQUZFX0JZX1JDVS1zYWZlIGRtYV9mZW5jZV9nZXRfcmN1LiAg VGhpcyBtZWFucyBlYWNoIGNhbGwgc2l0ZQo+ID4gPiA+ID4gZW5kcyB1cCBiZWluZyAzIGxpbmVz IGluc3RlYWQgb2YgMS4KPiA+ID4gPgo+ID4gPiA+IFRoYXQncyBhbiBvdXRyaWdodCBOQUsuCj4g PiA+ID4KPiA+ID4gPiBUaGUgbG9vcCBpbiBkbWFfZmVuY2VfZ2V0X3JjdV9zYWZlIGlzIG5lY2Vz c2FyeSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nCj4gPiA+ID4gZmVuY2Ugb2JqZWN0IGNhbiBiZSBy ZXBsYWNlZCB3aGlsZSB0YWtpbmcgdGhlIHJlZmVyZW5jZS4KPiA+ID4KPiA+ID4gUmlnaHQuICBJ IGhhZCBtaXNzZWQgYSBiaXQgb2YgdGhhdCB3aGVuIEkgZmlyc3QgcmVhZCB0aHJvdWdoIGl0LiAg SQo+ID4gPiBzZWUgdGhlIG5lZWQgZm9yIHRoZSBsb29wIG5vdy4gIEJ1dCB0aGVyZSBhcmUgc29t ZSBvdGhlciB0cmlja3kgYml0cwo+ID4gPiBpbiB0aGVyZSBiZXNpZGVzIGp1c3QgdGhlIGxvb3Au Cj4gPgo+ID4gSSB0aG91Z2h0IHRoYXQncyB3aGF0IHRoZSBrcmVmX2dldF91bmxlc3NfemVybyB3 YXMgZm9yIGluCj4gPiBkbWFfZmVuY2VfZ2V0X3JjdT8gT3RoZXJ3aXNlIEkgZ3Vlc3MgSSdtIG5v dCBzZWVpbmcgd2h5IHN0aWxsIGhhdmUKPiA+IGRtYV9mZW5jZV9nZXRfcmN1IGFyb3VuZCwgc2lu Y2UgdGhhdCBzaG91bGQgZWl0aGVyIGJlIGEga3JlZl9nZXQgb3IKPiA+IGl0J3MganVzdCB1bnNh ZmUgdG8gY2FsbCBpdCAuLi4KPgo+IEFGQUlDVCwgZG1hX2ZlbmNlX2dldF9yY3UgaXMgdW5zYWZl IHVubGVzcyB5b3Ugc29tZWhvdyBrbm93IHRoYXQgaXQncwo+IHlvdXIgZmVuY2UgYW5kIGl0J3Mg bmV2ZXIgcmVjeWNsZWQuCj4KPiBXaGVyZSB0aGUgbG9vcCBjb21lcyBpbiBpcyBpZiB5b3UgaGF2 ZSBzb21lb25lIGNvbWUgYWxvbmcsIHVuZGVyIHRoZQo+IFJDVSB3cml0ZSBsb2NrIG9yIG5vdCwg YW5kIHN3YXAgb3V0IHRoZSBwb2ludGVyIGFuZCB1bnJlZiBpdCB3aGlsZQo+IHlvdSdyZSB0cnlp bmcgdG8gZmV0Y2ggaXQuICBJbiB0aGlzIGNhc2UsIGlmIHlvdSBqdXN0IHdyaXRlIHRoZSB0aHJl ZQo+IGxpbmVzIEkgZHVwbGljYXRlZCB0aHJvdWdob3V0IHRoaXMgcGF0Y2gsIHlvdSdsbCBlbmQg dXAgd2l0aCBOVUxMIGlmCj4geW91IChwYXJ0aWFsbHkpIGxvc2UgdGhlIHJhY2UuICBUaGUgbG9v cCBleGlzdHMgdG8gZW5zdXJlIHRoYXQgeW91IGdldAo+IGVpdGhlciB0aGUgb2xkIHBvaW50ZXIg b3IgdGhlIG5ldyBwb2ludGVyIGFuZCB5b3Ugb25seSBldmVyIGdldCBOVUxMCj4gaWYgc29tZXdo ZXJlIGR1cmluZyB0aGUgbWVzcywgdGhlIHBvaW50ZXIgYWN0dWFsbHkgZ2V0cyBzZXQgdG8gTlVM TC4KCkl0J3Mgbm90IHRoYXQgZWFzeS4gQXQgbGVhc3Qgbm90IGZvciBkbWFfcmVzdi4KClRoZSB0 aGluZyBpcywgeW91IGNhbid0IGp1c3QgZ28gaW4gYW5kIHJlcGxhY2UgdGhlIHdyaXRlIGZlbmNl IHdpdGgKc29tZXRoaW5nIGVsc2UuIFRoZXJlJ3Mgc3VwcG9zZWQgdG8gYmUgc29tZSBvcmRlcmlu ZyBoZXJlIChob3cgbXVjaCB3ZQphY3R1YWxseSBzdGlsbCBmb2xsb3cgdGhhdCBvciBub3QgaXMg YSBiaXQgYW5vdGhlciBxdWVzdGlvbiwgdGhhdCBJJ20KdHJ5aW5nIHRvIGFuc3dlciB3aXRoIGFu IGF1ZGl0IG9mIGxvdHMgb2YgZHJpdmVycyksIHdoaWNoIG1lYW5zIGlmIHlvdQpyZXBsYWNlIGUu Zy4gdGhlIGV4Y2x1c2l2ZSBmZW5jZSwgdGhlIHByZXZpb3VzIGZlbmNlIHdpbGwgX25vdF8ganVz dApnZXQgZnJlZWQuIEJlY2F1c2UgdGhlIG5leHQgZXhjbHVzaXZlIGZlbmNlIG5lZWRzIHRvIHdh aXQgZm9yIHRoYXQgdG8KZmluaXNoIGZpcnN0LgoKQ29uY2VwdHVhbGx5IHRoZSByZWZjb3VudCB3 aWxsIF9vbmx5XyBnbyB0byAwIG9uY2UgYWxsIGxhdGVyCmRlcGVuZGVuY2llcyBoYXZlIHNlZW4g aXQgZ2V0IHNpZ25hbGxlZCwgYW5kIG9uY2UgdGhlIGZlbmNlIGl0c2VsZiBoYXMKYmVlbiBzaWdu YWxsZWQuIEEgc2lnbmFsbGVkIGZlbmNlIG1pZ2h0IGFzIHdlbGwgbm90IGV4aXN0LCBzbyBpZgp0 aGF0J3Mgd2hhdCAgaGFwcGVuZWQgaW4gdGhhdCB0aW55IHdpbmRvdywgdGhlbiB5ZXMgYSBsZWdh bCBzY2VuYXJpbwppcyB0aGUgZm9sbG93aW5nOgoKdGhyZWFkIEE6Ci0gcmN1X2RlcmVmZXJlbmNl KHJlc3YtPmV4Y2x1c2l2ZV9mZW5jZSk7Cgp0aHJlYWQgQjoKLSBkbWFfZmVuY2Ugc2lnbmFscywg cmV0aXJlcywgZHJvcHMgcmVmY291bnQgdG8gMAotIHNldHMgdGhlIGV4Y2x1c2l2ZSBmZW5jZSB0 byBOVUxMCi0gY3JlYXRlcyBhIG5ldyBkbWFfZmVuY2UKLSBzZXRzIHRoZSBleGNsdXNpdmUgZmVu Y2UgdG8gdGhhdCBuZXcgZmVuY2UKCnRocmVhZCBBOgotIGtyZWZfZ2V0X3VubGVzc196ZXJvIGZh aWxzLCB3ZSByZXBvcnQgdGhhdCB0aGUgZXhjbHVzaXZlIGZlbmNlIHNsb3QgaXMgTlVMTAoKT2Zj IG5vcm1hbGx5IHdlJ3JlIGZ1bGx5IHBpcGVsaW5lLCBhbmQgd2UgbGF6aWx5IGNsZWFyIHNsb3Rz LCBzbyBubwpvbmUgZXZlciB3cml0ZXMgdGhlIGZlbmNlIHB0ciB0byBOVUxMLiBCdXQgY29uY2Vw dHVhbGx5IGl0J3MgdG90YWxseQpmaW5lLCBhbmQgYW4gaW5kaXN0aW5ndWlzaGFibGUgc2VxdWVu Y2Ugb2YgZXZlbnRzIGZyb20gdGhlIHBvaW50IG9mCnZpZXcgb2YgdGhyZWFkIEEuCgpFcmdvIGRt YV9mZW5jZV9nZXRfcmN1IGlzIGVub3VnaC4gSWYgaXQncyBub3QsIHdlJ3ZlIHNjcmV3ZWQgdXAg cmVhbGx5CmJpZyB0aW1lLiBUaGUgb25seSByZWFzb24geW91IG5lZWQgX3Vuc2FmZSBpcyBpZiB5 b3UgaGF2ZQp0eXBlc2FmZV9ieV9yY3UsIG9yIG1heWJlIGlmIHlvdSB5b2xvIHlvdXIgZmVuY2Ug b3JkZXJpbmcgYSBiaXQgbXVjaAphbmQgYnJlYWsgdGhlIERBRyBwcm9wZXJ0eSBpbiBhIGZldyBj YXNlcy4KCj4gSSBhZ3JlZSB3aXRoIENocmlzdGlhbiB0aGF0IHRoYXQgcGFydCBvZiBkbWFfZmVu Y2VfZ2V0X3JjdV9zYWZlIG5lZWRzCj4gdG8gc3RheS4gIEkgd2FzIG1pc3NpbmcgdGhhdCB1bnRp bCBJIGRpZCBteSBnaWFudCAibGV0J3Mgd2FsayB0aHJvdWdoCj4gdGhlIGNvZGUiIGUtbWFpbC4K CldlbGwgaWYgSSdtIHdyb25nIHRoZXJlJ3MgYSBfdG9uXyBvZiBicm9rZW4gY29kZSBpbiB1cHN0 cmVhbSByaWdodApub3csIGV2ZW4gaW4gZG1hLWJ1Zi9kbWEtcmVzdi5jLiBXZSdyZSB1c2luZyBk bWFfZmVuY2VfZ2V0X3JjdSBhIGxvdC4KCkFsc28gdGhlIHRpbWluZyBpcyBhbGwgYmFja3dhcmRz OiBnZXRfcmN1X3NhZmUgd2FzIGFkZGVkIGFzIGEgZml4IGZvcgp3aGVuIGk5MTUgbWFkZSBpdHMg ZG1hX2ZlbmNlIHR5cGVzYWZlX2J5X3JjdS4gV2UgZGlkbid0IGhhdmUgYW55IG5lZWQKZm9yIHRo aXMgYmVmb3JlaGFuZC4gU28gSSdtIHJlYWxseSBub3QgcXVpdGUgYnV5aW5nIHRoaXMgc3Rvcnkg aGVyZQp5ZXQgeW91J3JlIGFsbCB0cnlpbmcgdG8gc2VsbCBtZSBvbi4KLURhbmllbAoKPgo+IC0t SmFzb24KPgo+ID4gPiA+IFRoaXMgaXMgY29tcGxldGVseSB1bnJlbGF0ZWQgdG8gU0xBQl9UWVBF U0FGRV9CWV9SQ1UuIFNlZSB0aGUKPiA+ID4gPiBkbWFfZmVuY2VfY2hhaW4gdXNhZ2UgZm9yIHJl ZmVyZW5jZS4KPiA+ID4gPgo+ID4gPiA+IFdoYXQgeW91IGNhbiByZW1vdmUgaXMgdGhlIHNlcXVl bmNlIG51bWJlciBoYW5kbGluZyBpbiBkbWEtYnVmLiBUaGF0Cj4gPiA+ID4gc2hvdWxkIG1ha2Ug YWRkaW5nIGZlbmNlcyBxdWl0ZSBhIGJpdCBxdWlja2VyLgo+ID4gPgo+ID4gPiBJJ2xsIGxvb2sg YXQgdGhhdCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLgo+ID4K PiA+IEhtIEkgdGhvdWdodCB0aGUgc2VxbG9jayB3YXMgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBj b25zaXN0ZW50IHNldCBvZgo+ID4gZmVuY2VzIGFjcm9zcyBleGNsdXNpdmUgYW5kIGFsbCBzaGFy ZWQgc2xvdC4gTm90IHRvIHByb3RlY3QgYWdhaW5zdAo+ID4gdGhlIGZlbmNlIGRpc2FwcGVhcmlu ZyBkdWUgdG8gdHlwZXNhZmVfYnlfcmN1Lgo+ID4gLURhbmllbAo+ID4KPiA+ID4gLS1KYXNvbgo+ ID4gPgo+ID4gPiA+IFJlZ2FyZHMsCj4gPiA+ID4gQ2hyaXN0aWFuLgo+ID4gPiA+Cj4gPiA+ID4g Pgo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogSmFzb24gRWtzdHJhbmQgPGphc29uQGpsZWtzdHJh bmQubmV0Pgo+ID4gPiA+ID4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwu Y2g+Cj4gPiA+ID4gPiBDYzogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQu Y29tPgo+ID4gPiA+ID4gQ2M6IE1hdHRoZXcgQXVsZCA8bWF0dGhldy5hdWxkQGludGVsLmNvbT4K PiA+ID4gPiA+IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXgu aW50ZWwuY29tPgo+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiAgIGRyaXZlcnMvZG1hLWJ1Zi9kbWEt ZmVuY2UtY2hhaW4uYyAgICAgICAgIHwgIDggKystLQo+ID4gPiA+ID4gICBkcml2ZXJzL2RtYS1i dWYvZG1hLXJlc3YuYyAgICAgICAgICAgICAgICB8ICA0ICstCj4gPiA+ID4gPiAgIGRyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9mZW5jZS5jIHwgIDQgKy0KPiA+ID4gPiA+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuaCAgICAgICAgfCAgNCArLQo+ID4gPiA+ID4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jICAgICAgICAgICB8ICA0ICstCj4gPiA+ ID4gPiAgIGluY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmggICAgICAgICAgICAgICAgIHwgIDQgKy0K PiA+ID4gPiA+ICAgaW5jbHVkZS9saW51eC9kbWEtZmVuY2UuaCAgICAgICAgICAgICAgICAgfCA1 MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gPiA+ID4gICBpbmNsdWRlL2xpbnV4L2RtYS1y ZXN2LmggICAgICAgICAgICAgICAgICB8ICA0ICstCj4gPiA+ID4gPiAgIDggZmlsZXMgY2hhbmdl ZCwgMjMgaW5zZXJ0aW9ucygrKSwgNTkgZGVsZXRpb25zKC0pCj4gPiA+ID4gPgo+ID4gPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UtY2hhaW4uYyBiL2RyaXZlcnMv ZG1hLWJ1Zi9kbWEtZmVuY2UtY2hhaW4uYwo+ID4gPiA+ID4gaW5kZXggN2QxMjllNjhhYzcwMS4u NDZkZmM3ZDk0ZDhlZCAxMDA2NDQKPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEt ZmVuY2UtY2hhaW4uYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS1j aGFpbi5jCj4gPiA+ID4gPiBAQCAtMTUsMTUgKzE1LDE3IEBAIHN0YXRpYyBib29sIGRtYV9mZW5j ZV9jaGFpbl9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKTsKPiA+ID4g PiA+ICAgICogZG1hX2ZlbmNlX2NoYWluX2dldF9wcmV2IC0gdXNlIFJDVSB0byBnZXQgYSByZWZl cmVuY2UgdG8gdGhlIHByZXZpb3VzIGZlbmNlCj4gPiA+ID4gPiAgICAqIEBjaGFpbjogY2hhaW4g bm9kZSB0byBnZXQgdGhlIHByZXZpb3VzIG5vZGUgZnJvbQo+ID4gPiA+ID4gICAgKgo+ID4gPiA+ ID4gLSAqIFVzZSBkbWFfZmVuY2VfZ2V0X3JjdV9zYWZlIHRvIGdldCBhIHJlZmVyZW5jZSB0byB0 aGUgcHJldmlvdXMgZmVuY2Ugb2YgdGhlCj4gPiA+ID4gPiAtICogY2hhaW4gbm9kZS4KPiA+ID4g PiA+ICsgKiBVc2UgcmN1X2RlcmVmZXJlbmNlIGFuZCBkbWFfZmVuY2VfZ2V0X3JjdSB0byBnZXQg YSByZWZlcmVuY2UgdG8gdGhlCj4gPiA+ID4gPiArICogcHJldmlvdXMgZmVuY2Ugb2YgdGhlIGNo YWluIG5vZGUuCj4gPiA+ID4gPiAgICAqLwo+ID4gPiA+ID4gICBzdGF0aWMgc3RydWN0IGRtYV9m ZW5jZSAqZG1hX2ZlbmNlX2NoYWluX2dldF9wcmV2KHN0cnVjdCBkbWFfZmVuY2VfY2hhaW4gKmNo YWluKQo+ID4gPiA+ID4gICB7Cj4gPiA+ID4gPiAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpwcmV2 Owo+ID4gPiA+ID4KPiA+ID4gPiA+ICAgICAgIHJjdV9yZWFkX2xvY2soKTsKPiA+ID4gPiA+IC0g ICAgIHByZXYgPSBkbWFfZmVuY2VfZ2V0X3JjdV9zYWZlKCZjaGFpbi0+cHJldik7Cj4gPiA+ID4g PiArICAgICBwcmV2ID0gcmN1X2RlcmVmZXJlbmNlKGNoYWluLT5wcmV2KTsKPiA+ID4gPiA+ICsg ICAgIGlmIChwcmV2KQo+ID4gPiA+ID4gKyAgICAgICAgICAgICBwcmV2ID0gZG1hX2ZlbmNlX2dl dF9yY3UocHJldik7Cj4gPiA+ID4gPiAgICAgICByY3VfcmVhZF91bmxvY2soKTsKPiA+ID4gPiA+ ICAgICAgIHJldHVybiBwcmV2Owo+ID4gPiA+ID4gICB9Cj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9kbWEtYnVmL2RtYS1yZXN2LmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLXJlc3YuYwo+ ID4gPiA+ID4gaW5kZXggZjI2YzcxNzQ3ZDQzYS4uY2ZlMGRiM2NjYTI5MiAxMDA2NDQKPiA+ID4g PiA+IC0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtcmVzdi5jCj4gPiA+ID4gPiArKysgYi9kcml2 ZXJzL2RtYS1idWYvZG1hLXJlc3YuYwo+ID4gPiA+ID4gQEAgLTM3Niw3ICszNzYsOSBAQCBpbnQg ZG1hX3Jlc3ZfY29weV9mZW5jZXMoc3RydWN0IGRtYV9yZXN2ICpkc3QsIHN0cnVjdCBkbWFfcmVz diAqc3JjKQo+ID4gPiA+ID4gICAgICAgICAgICAgICBkc3RfbGlzdCA9IE5VTEw7Cj4gPiA+ID4g PiAgICAgICB9Cj4gPiA+ID4gPgo+ID4gPiA+ID4gLSAgICAgbmV3ID0gZG1hX2ZlbmNlX2dldF9y Y3Vfc2FmZSgmc3JjLT5mZW5jZV9leGNsKTsKPiA+ID4gPiA+ICsgICAgIG5ldyA9IHJjdV9kZXJl ZmVyZW5jZShzcmMtPmZlbmNlX2V4Y2wpOwo+ID4gPiA+ID4gKyAgICAgaWYgKG5ldykKPiA+ID4g PiA+ICsgICAgICAgICAgICAgbmV3ID0gZG1hX2ZlbmNlX2dldF9yY3UobmV3KTsKPiA+ID4gPiA+ ICAgICAgIHJjdV9yZWFkX3VubG9jaygpOwo+ID4gPiA+ID4KPiA+ID4gPiA+ICAgICAgIHNyY19s aXN0ID0gZG1hX3Jlc3Zfc2hhcmVkX2xpc3QoZHN0KTsKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9mZW5jZS5jCj4gPiA+ID4gPiBpbmRleCA3MmQ5YjkyYjE3NTQ3 Li4wYWViNjExN2YzODkzIDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2ZlbmNlLmMKPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9mZW5jZS5jCj4gPiA+ID4gPiBAQCAtMTYxLDcgKzE2MSw5IEBAIGlu dCBhbWRncHVfZmVuY2VfZW1pdChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHN0cnVjdCBkbWFf ZmVuY2UgKipmLAo+ID4gPiA+ID4gICAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpvbGQ7 Cj4gPiA+ID4gPgo+ID4gPiA+ID4gICAgICAgICAgICAgICByY3VfcmVhZF9sb2NrKCk7Cj4gPiA+ ID4gPiAtICAgICAgICAgICAgIG9sZCA9IGRtYV9mZW5jZV9nZXRfcmN1X3NhZmUocHRyKTsKPiA+ ID4gPiA+ICsgICAgICAgICAgICAgb2xkID0gcmN1X2RlcmVmZXJlbmNlKCpwdHIpOwo+ID4gPiA+ ID4gKyAgICAgICAgICAgICBpZiAob2xkKQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg IG9sZCA9IGRtYV9mZW5jZV9nZXRfcmN1KG9sZCk7Cj4gPiA+ID4gPiAgICAgICAgICAgICAgIHJj dV9yZWFkX3VubG9jaygpOwo+ID4gPiA+ID4KPiA+ID4gPiA+ICAgICAgICAgICAgICAgaWYgKG9s ZCkgewo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0 aXZlLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZS5oCj4gPiA+ID4gPiBpbmRl eCBkMGZlZGE2OGI4NzRmLi5iZDg5Y2ZjODA2Y2E1IDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuaAo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuaAo+ID4gPiA+ID4gQEAgLTEwMyw3ICsxMDMsOSBAQCBp OTE1X2FjdGl2ZV9mZW5jZV9nZXQoc3RydWN0IGk5MTVfYWN0aXZlX2ZlbmNlICphY3RpdmUpCj4g PiA+ID4gPiAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKPiA+ID4gPiA+Cj4gPiA+ID4g PiAgICAgICByY3VfcmVhZF9sb2NrKCk7Cj4gPiA+ID4gPiAtICAgICBmZW5jZSA9IGRtYV9mZW5j ZV9nZXRfcmN1X3NhZmUoJmFjdGl2ZS0+ZmVuY2UpOwo+ID4gPiA+ID4gKyAgICAgZmVuY2UgPSBy Y3VfZGVyZWZlcmVuY2UoYWN0aXZlLT5mZW5jZSk7Cj4gPiA+ID4gPiArICAgICBpZiAoZmVuY2Up Cj4gPiA+ID4gPiArICAgICAgICAgICAgIGZlbmNlID0gZG1hX2ZlbmNlX2dldF9yY3UoZmVuY2Up Owo+ID4gPiA+ID4gICAgICAgcmN1X3JlYWRfdW5sb2NrKCk7Cj4gPiA+ID4gPgo+ID4gPiA+ID4g ICAgICAgcmV0dXJuIGZlbmNlOwo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfdm1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jCj4gPiA+ ID4gPiBpbmRleCAwZjIyN2YyOGIyODAyLi5lZDAzODhkOTkxOTdlIDEwMDY0NAo+ID4gPiA+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYwo+ID4gPiA+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYwo+ID4gPiA+ID4gQEAgLTM1MSw3ICszNTEsOSBA QCBpbnQgaTkxNV92bWFfd2FpdF9mb3JfYmluZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiA+ID4g PiA+ICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4gPiA+ID4gPgo+ID4g PiA+ID4gICAgICAgICAgICAgICByY3VfcmVhZF9sb2NrKCk7Cj4gPiA+ID4gPiAtICAgICAgICAg ICAgIGZlbmNlID0gZG1hX2ZlbmNlX2dldF9yY3Vfc2FmZSgmdm1hLT5hY3RpdmUuZXhjbC5mZW5j ZSk7Cj4gPiA+ID4gPiArICAgICAgICAgICAgIGZlbmNlID0gcmN1X2RlcmVmZXJlbmNlKHZtYS0+ YWN0aXZlLmV4Y2wuZmVuY2UpOwo+ID4gPiA+ID4gKyAgICAgICAgICAgICBpZiAoZmVuY2UpCj4g PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgZmVuY2UgPSBkbWFfZmVuY2VfZ2V0X3JjdShm ZW5jZSk7Cj4gPiA+ID4gPiAgICAgICAgICAgICAgIHJjdV9yZWFkX3VubG9jaygpOwo+ID4gPiA+ ID4gICAgICAgICAgICAgICBpZiAoZmVuY2UpIHsKPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAg ICAgICBlcnIgPSBkbWFfZmVuY2Vfd2FpdChmZW5jZSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+ ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmggYi9pbmNsdWRl L2RybS9kcm1fc3luY29iai5oCj4gPiA+ID4gPiBpbmRleCA2Y2Y3MjQzYTFkYzVlLi42YzQ1ZDUy OTg4YmNjIDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3N5bmNvYmouaAo+ ID4gPiA+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX3N5bmNvYmouaAo+ID4gPiA+ID4gQEAgLTEw NSw3ICsxMDUsOSBAQCBkcm1fc3luY29ial9mZW5jZV9nZXQoc3RydWN0IGRybV9zeW5jb2JqICpz eW5jb2JqKQo+ID4gPiA+ID4gICAgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4gPiA+ID4g Pgo+ID4gPiA+ID4gICAgICAgcmN1X3JlYWRfbG9jaygpOwo+ID4gPiA+ID4gLSAgICAgZmVuY2Ug PSBkbWFfZmVuY2VfZ2V0X3JjdV9zYWZlKCZzeW5jb2JqLT5mZW5jZSk7Cj4gPiA+ID4gPiArICAg ICBmZW5jZSA9IHJjdV9kZXJlZmVyZW5jZShzeW5jb2JqLT5mZW5jZSk7Cj4gPiA+ID4gPiArICAg ICBpZiAoZmVuY2UpCj4gPiA+ID4gPiArICAgICAgICAgICAgIGZlbmNlID0gZG1hX2ZlbmNlX2dl dF9yY3Uoc3luY29iai0+ZmVuY2UpOwo+ID4gPiA+ID4gICAgICAgcmN1X3JlYWRfdW5sb2NrKCk7 Cj4gPiA+ID4gPgo+ID4gPiA+ID4gICAgICAgcmV0dXJuIGZlbmNlOwo+ID4gPiA+ID4gZGlmZiAt LWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWZlbmNlLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1mZW5j ZS5oCj4gPiA+ID4gPiBpbmRleCA2ZmZiNGIyYzYzNzE1Li5mNGEyYWIyYjFhZTQ2IDEwMDY0NAo+ ID4gPiA+ID4gLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtZmVuY2UuaAo+ID4gPiA+ID4gKysrIGIv aW5jbHVkZS9saW51eC9kbWEtZmVuY2UuaAo+ID4gPiA+ID4gQEAgLTMwNyw1NiArMzA3LDYgQEAg c3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX2ZlbmNlICpkbWFfZmVuY2VfZ2V0X3JjdShzdHJ1Y3Qg ZG1hX2ZlbmNlICpmZW5jZSkKPiA+ID4gPiA+ICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4g PiA+ID4gPiAgIH0KPiA+ID4gPiA+Cj4gPiA+ID4gPiAtLyoqCj4gPiA+ID4gPiAtICogZG1hX2Zl bmNlX2dldF9yY3Vfc2FmZSAgLSBhY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGFuIFJDVSB0cmFja2Vk IGZlbmNlCj4gPiA+ID4gPiAtICogQGZlbmNlcDogcG9pbnRlciB0byBmZW5jZSB0byBpbmNyZWFz ZSByZWZjb3VudCBvZgo+ID4gPiA+ID4gLSAqCj4gPiA+ID4gPiAtICogRnVuY3Rpb24gcmV0dXJu cyBOVUxMIGlmIG5vIHJlZmNvdW50IGNvdWxkIGJlIG9idGFpbmVkLCBvciB0aGUgZmVuY2UuCj4g PiA+ID4gPiAtICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFjcXVpcmluZyBhIHJlZmVyZW5jZSB0 byBhIGZlbmNlIHRoYXQgbWF5IGJlCj4gPiA+ID4gPiAtICogcmVhbGxvY2F0ZWQgd2l0aGluIHRo ZSBSQ1UgZ3JhY2UgcGVyaW9kIChzdWNoIGFzIHdpdGggU0xBQl9UWVBFU0FGRV9CWV9SQ1UpLAo+ ID4gPiA+ID4gLSAqIHNvIGxvbmcgYXMgdGhlIGNhbGxlciBpcyB1c2luZyBSQ1Ugb24gdGhlIHBv aW50ZXIgdG8gdGhlIGZlbmNlLgo+ID4gPiA+ID4gLSAqCj4gPiA+ID4gPiAtICogQW4gYWx0ZXJu YXRpdmUgbWVjaGFuaXNtIGlzIHRvIGVtcGxveSBhIHNlcWxvY2sgdG8gcHJvdGVjdCBhIGJ1bmNo IG9mCj4gPiA+ID4gPiAtICogZmVuY2VzLCBzdWNoIGFzIHVzZWQgYnkgc3RydWN0IGRtYV9yZXN2 LiBXaGVuIHVzaW5nIGEgc2VxbG9jaywKPiA+ID4gPiA+IC0gKiB0aGUgc2VxbG9jayBtdXN0IGJl IHRha2VuIGJlZm9yZSBhbmQgY2hlY2tlZCBhZnRlciBhIHJlZmVyZW5jZSB0byB0aGUKPiA+ID4g PiA+IC0gKiBmZW5jZSBpcyBhY3F1aXJlZCAoYXMgc2hvd24gaGVyZSkuCj4gPiA+ID4gPiAtICoK PiA+ID4gPiA+IC0gKiBUaGUgY2FsbGVyIGlzIHJlcXVpcmVkIHRvIGhvbGQgdGhlIFJDVSByZWFk IGxvY2suCj4gPiA+ID4gPiAtICovCj4gPiA+ID4gPiAtc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1h X2ZlbmNlICoKPiA+ID4gPiA+IC1kbWFfZmVuY2VfZ2V0X3JjdV9zYWZlKHN0cnVjdCBkbWFfZmVu Y2UgX19yY3UgKipmZW5jZXApCj4gPiA+ID4gPiAtewo+ID4gPiA+ID4gLSAgICAgZG8gewo+ID4g PiA+ID4gLSAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKPiA+ID4gPiA+IC0K PiA+ID4gPiA+IC0gICAgICAgICAgICAgZmVuY2UgPSByY3VfZGVyZWZlcmVuY2UoKmZlbmNlcCk7 Cj4gPiA+ID4gPiAtICAgICAgICAgICAgIGlmICghZmVuY2UpCj4gPiA+ID4gPiAtICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gPiA+ID4gPiAtCj4gPiA+ID4gPiAtICAgICAgICAg ICAgIGlmICghZG1hX2ZlbmNlX2dldF9yY3UoZmVuY2UpKQo+ID4gPiA+ID4gLSAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gLSAgICAgICAgICAgICAv KiBUaGUgYXRvbWljX2luY19ub3RfemVybygpIGluc2lkZSBkbWFfZmVuY2VfZ2V0X3JjdSgpCj4g PiA+ID4gPiAtICAgICAgICAgICAgICAqIHByb3ZpZGVzIGEgZnVsbCBtZW1vcnkgYmFycmllciB1 cG9uIHN1Y2Nlc3MgKHN1Y2ggYXMgbm93KS4KPiA+ID4gPiA+IC0gICAgICAgICAgICAgICogVGhp cyBpcyBwYWlyZWQgd2l0aCB0aGUgd3JpdGUgYmFycmllciBmcm9tIGFzc2lnbmluZwo+ID4gPiA+ ID4gLSAgICAgICAgICAgICAgKiB0byB0aGUgX19yY3UgcHJvdGVjdGVkIGZlbmNlIHBvaW50ZXIg c28gdGhhdCBpZiB0aGF0Cj4gPiA+ID4gPiAtICAgICAgICAgICAgICAqIHBvaW50ZXIgc3RpbGwg bWF0Y2hlcyB0aGUgY3VycmVudCBmZW5jZSwgd2Uga25vdyB3ZQo+ID4gPiA+ID4gLSAgICAgICAg ICAgICAgKiBoYXZlIHN1Y2Nlc3NmdWxseSBhY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGl0LiBJZiBp dCBubwo+ID4gPiA+ID4gLSAgICAgICAgICAgICAgKiBsb25nZXIgbWF0Y2hlcywgd2UgYXJlIGhv bGRpbmcgYSByZWZlcmVuY2UgdG8gc29tZSBvdGhlcgo+ID4gPiA+ID4gLSAgICAgICAgICAgICAg KiByZWFsbG9jYXRlZCBwb2ludGVyLiBUaGlzIGlzIHBvc3NpYmxlIGlmIHRoZSBhbGxvY2F0b3IK PiA+ID4gPiA+IC0gICAgICAgICAgICAgICogaXMgdXNpbmcgYSBmcmVlbGlzdCBsaWtlIFNMQUJf VFlQRVNBRkVfQllfUkNVIHdoZXJlIHRoZQo+ID4gPiA+ID4gLSAgICAgICAgICAgICAgKiBmZW5j ZSByZW1haW5zIHZhbGlkIGZvciB0aGUgUkNVIGdyYWNlIHBlcmlvZCwgYnV0IGl0Cj4gPiA+ID4g PiAtICAgICAgICAgICAgICAqIG1heSBiZSByZWFsbG9jYXRlZC4gV2hlbiB1c2luZyBzdWNoIGFs bG9jYXRvcnMsIHdlIGFyZQo+ID4gPiA+ID4gLSAgICAgICAgICAgICAgKiByZXNwb25zaWJsZSBm b3IgZW5zdXJpbmcgdGhlIHJlZmVyZW5jZSB3ZSBnZXQgaXMgdG8KPiA+ID4gPiA+IC0gICAgICAg ICAgICAgICogdGhlIHJpZ2h0IGZlbmNlLCBhcyBiZWxvdy4KPiA+ID4gPiA+IC0gICAgICAgICAg ICAgICovCj4gPiA+ID4gPiAtICAgICAgICAgICAgIGlmIChmZW5jZSA9PSByY3VfYWNjZXNzX3Bv aW50ZXIoKmZlbmNlcCkpCj4gPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJj dV9wb2ludGVyX2hhbmRvZmYoZmVuY2UpOwo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gLSAgICAgICAg ICAgICBkbWFfZmVuY2VfcHV0KGZlbmNlKTsKPiA+ID4gPiA+IC0gICAgIH0gd2hpbGUgKDEpOwo+ ID4gPiA+ID4gLX0KPiA+ID4gPiA+IC0KPiA+ID4gPiA+ICAgI2lmZGVmIENPTkZJR19MT0NLREVQ Cj4gPiA+ID4gPiAgIGJvb2wgZG1hX2ZlbmNlX2JlZ2luX3NpZ25hbGxpbmcodm9pZCk7Cj4gPiA+ ID4gPiAgIHZvaWQgZG1hX2ZlbmNlX2VuZF9zaWduYWxsaW5nKGJvb2wgY29va2llKTsKPiA+ID4g PiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1yZXN2LmggYi9pbmNsdWRlL2xpbnV4 L2RtYS1yZXN2LmgKPiA+ID4gPiA+IGluZGV4IDU2MmI4ODVjZjljM2QuLmEzOGMwMjFmMzc5YWYg MTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1yZXN2LmgKPiA+ID4gPiA+ ICsrKyBiL2luY2x1ZGUvbGludXgvZG1hLXJlc3YuaAo+ID4gPiA+ID4gQEAgLTI0OCw3ICsyNDgs OSBAQCBkbWFfcmVzdl9nZXRfZXhjbF91bmxvY2tlZChzdHJ1Y3QgZG1hX3Jlc3YgKm9iaikKPiA+ ID4gPiA+ICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gPiA+ID4gPgo+ID4gPiA+ID4gICAg ICAgcmN1X3JlYWRfbG9jaygpOwo+ID4gPiA+ID4gLSAgICAgZmVuY2UgPSBkbWFfZmVuY2VfZ2V0 X3JjdV9zYWZlKCZvYmotPmZlbmNlX2V4Y2wpOwo+ID4gPiA+ID4gKyAgICAgZmVuY2UgPSByY3Vf ZGVyZWZlcmVuY2Uob2JqLT5mZW5jZV9leGNsKTsKPiA+ID4gPiA+ICsgICAgIGlmIChmZW5jZSkK PiA+ID4gPiA+ICsgICAgICAgICAgICAgZmVuY2UgPSBkbWFfZmVuY2VfZ2V0X3JjdShmZW5jZSk7 Cj4gPiA+ID4gPiAgICAgICByY3VfcmVhZF91bmxvY2soKTsKPiA+ID4gPiA+Cj4gPiA+ID4gPiAg ICAgICByZXR1cm4gZmVuY2U7Cj4gPiA+ID4KPiA+Cj4gPgo+ID4KPiA+IC0tCj4gPiBEYW5pZWwg VmV0dGVyCj4gPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiA+IGh0dHA6 Ly9ibG9nLmZmd2xsLmNoCgoKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJ bnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK 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 50DE2C48BDF for ; Thu, 10 Jun 2021 16:38:09 +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 22CBD613DD for ; Thu, 10 Jun 2021 16:38:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 22CBD613DD 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 191C36EDAA; Thu, 10 Jun 2021 16:38:07 +0000 (UTC) Received: from mail-oi1-x22b.google.com (mail-oi1-x22b.google.com [IPv6:2607:f8b0:4864:20::22b]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3547F6EDA9 for ; Thu, 10 Jun 2021 16:38:05 +0000 (UTC) Received: by mail-oi1-x22b.google.com with SMTP id h9so2764282oih.4 for ; Thu, 10 Jun 2021 09:38:05 -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=WsGtv6JBgVqMrOrVbk+hTarizYKR8Iuy1tXEkvo1aL4=; b=Lo/ZnOYJOW/UIyIW0eTI0uAUwjNiQx/ACQkhh1v3op68IWG/1dHDihlW7ImPM30uQ7 /mxuV5y4pOF1ow0KcKqsuRhxf3SHlyWroDVSAT+1vtB3o6TrIww0lO7CvbQyBT4bsGoP i3uLhsicPylnBf/SSOYDZ7rCvol9TZlfjrsSA= 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=WsGtv6JBgVqMrOrVbk+hTarizYKR8Iuy1tXEkvo1aL4=; b=V7jm0Uqgp7IKSVR4W4YP4kpTsqC9dgvod/MISdeY+lfa/HhFnBYbwCan72R8uE2m3n prB6PLmwjxhVGm78K/KlAKPWJ3JF9PCHP57XME5fncs6dK7Xt5Wq80m22rHN+oQpVhmn bVhFulaVvPHSdPQaymMSkHPB1DtBVjXGmFoIycg7wIZKxC4tGD+3tZ9N1PMCmrvlNViC nuqOz+/KN1TsrbGcBh/HW65eiWsLK8CrNZOc2nJlWzU4dA/24MALcOpvKqxC61v85DOz OQpsaIyMp07AWgYW+1HNZ00O0gq0smgs9K4Sxu/4YYYKbWVjpmvQBHGYgE7lNbqLvCF/ o5YQ== X-Gm-Message-State: AOAM533WpTNB2D5CJOEkb0E66F4TO+qN9qzrbkVjvcnQuaPyH/vAqGTg 1cjpc9vKPEp3cJLXnUiYe+srO9Np3fjLfyyoXWUckxYMxUI= X-Google-Smtp-Source: ABdhPJxFzH0oBJ+m/AaUFXwnj4oAdlaO0O7RtyY7teBZwo97r1cMsaZ3gATIHc8MFY2KS4qEJbdj31hXrK4kK1aYn84= X-Received: by 2002:aca:530f:: with SMTP id h15mr4128869oib.128.1623343084684; Thu, 10 Jun 2021 09:38:04 -0700 (PDT) MIME-Version: 1.0 References: <20210609212959.471209-1-jason@jlekstrand.net> <20210609212959.471209-6-jason@jlekstrand.net> In-Reply-To: From: Daniel Vetter Date: Thu, 10 Jun 2021 18:37:53 +0200 Message-ID: Subject: Re: [PATCH 5/5] DONOTMERGE: dma-buf: Get rid of dma_fence_get_rcu_safe To: Jason Ekstrand Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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: Intel GFX , =?UTF-8?Q?Christian_K=C3=B6nig?= , Maling list - DRI developers , Matthew Auld Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Thu, Jun 10, 2021 at 6:24 PM Jason Ekstrand wrote= : > > On Thu, Jun 10, 2021 at 10:13 AM Daniel Vetter w= rote: > > > > On Thu, Jun 10, 2021 at 3:59 PM Jason Ekstrand w= rote: > > > > > > On Thu, Jun 10, 2021 at 1:51 AM Christian K=C3=B6nig > > > wrote: > > > > > > > > Am 09.06.21 um 23:29 schrieb Jason Ekstrand: > > > > > This helper existed to handle the weird corner-cases caused by us= ing > > > > > SLAB_TYPESAFE_BY_RCU for backing dma_fence. Now that no one is u= sing > > > > > that anymore (i915 was the only real user), dma_fence_get_rcu is > > > > > sufficient. The one slightly annoying thing we have to deal with= here > > > > > is that dma_fence_get_rcu_safe did an rcu_dereference as well as = a > > > > > SLAB_TYPESAFE_BY_RCU-safe dma_fence_get_rcu. This means each cal= l site > > > > > ends up being 3 lines instead of 1. > > > > > > > > That's an outright NAK. > > > > > > > > The loop in dma_fence_get_rcu_safe is necessary because the underly= ing > > > > fence object can be replaced while taking the reference. > > > > > > Right. I had missed a bit of that when I first read through it. I > > > see the need for the loop now. But there are some other tricky bits > > > in there besides just the loop. > > > > I thought that's what the kref_get_unless_zero was for in > > dma_fence_get_rcu? Otherwise I guess I'm not seeing why still have > > dma_fence_get_rcu around, since that should either be a kref_get or > > it's just unsafe to call it ... > > AFAICT, dma_fence_get_rcu is unsafe unless you somehow know that it's > your fence and it's never recycled. > > Where the loop comes in is if you have someone come along, under the > RCU write lock or not, and swap out the pointer and unref it while > you're trying to fetch it. In this case, if you just write the three > lines I duplicated throughout this patch, you'll end up with NULL if > you (partially) lose the race. The loop exists to ensure that you get > either the old pointer or the new pointer and you only ever get NULL > if somewhere during the mess, the pointer actually gets set to NULL. It's not that easy. At least not for dma_resv. The thing is, you can't just go in and replace the write fence with something else. There's supposed to be some ordering here (how much we actually still follow that or not is a bit another question, that I'm trying to answer with an audit of lots of drivers), which means if you replace e.g. the exclusive fence, the previous fence will _not_ just get freed. Because the next exclusive fence needs to wait for that to finish first. Conceptually the refcount will _only_ go to 0 once all later dependencies have seen it get signalled, and once the fence itself has been signalled. A signalled fence might as well not exist, so if that's what happened in that tiny window, then yes a legal scenario is the following: thread A: - rcu_dereference(resv->exclusive_fence); thread B: - dma_fence signals, retires, drops refcount to 0 - sets the exclusive fence to NULL - creates a new dma_fence - sets the exclusive fence to that new fence thread A: - kref_get_unless_zero fails, we report that the exclusive fence slot is NU= LL Ofc normally we're fully pipeline, and we lazily clear slots, so no one ever writes the fence ptr to NULL. But conceptually it's totally fine, and an indistinguishable sequence of events from the point of view of thread A. Ergo dma_fence_get_rcu is enough. If it's not, we've screwed up really big time. The only reason you need _unsafe is if you have typesafe_by_rcu, or maybe if you yolo your fence ordering a bit much and break the DAG property in a few cases. > I agree with Christian that that part of dma_fence_get_rcu_safe needs > to stay. I was missing that until I did my giant "let's walk through > the code" e-mail. Well if I'm wrong there's a _ton_ of broken code in upstream right now, even in dma-buf/dma-resv.c. We're using dma_fence_get_rcu a lot. Also the timing is all backwards: get_rcu_safe was added as a fix for when i915 made its dma_fence typesafe_by_rcu. We didn't have any need for this beforehand. So I'm really not quite buying this story here yet you're all trying to sell me on. -Daniel > > --Jason > > > > > This is completely unrelated to SLAB_TYPESAFE_BY_RCU. See the > > > > dma_fence_chain usage for reference. > > > > > > > > What you can remove is the sequence number handling in dma-buf. Tha= t > > > > should make adding fences quite a bit quicker. > > > > > > I'll look at that and try to understand what's going on there. > > > > Hm I thought the seqlock was to make sure we have a consistent set of > > fences across exclusive and all shared slot. Not to protect against > > the fence disappearing due to typesafe_by_rcu. > > -Daniel > > > > > --Jason > > > > > > > Regards, > > > > Christian. > > > > > > > > > > > > > > Signed-off-by: Jason Ekstrand > > > > > Cc: Daniel Vetter > > > > > Cc: Christian K=C3=B6nig > > > > > Cc: Matthew Auld > > > > > Cc: Maarten Lankhorst > > > > > --- > > > > > drivers/dma-buf/dma-fence-chain.c | 8 ++-- > > > > > drivers/dma-buf/dma-resv.c | 4 +- > > > > > drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 4 +- > > > > > drivers/gpu/drm/i915/i915_active.h | 4 +- > > > > > drivers/gpu/drm/i915/i915_vma.c | 4 +- > > > > > include/drm/drm_syncobj.h | 4 +- > > > > > include/linux/dma-fence.h | 50 ----------------= ------- > > > > > include/linux/dma-resv.h | 4 +- > > > > > 8 files changed, 23 insertions(+), 59 deletions(-) > > > > > > > > > > diff --git a/drivers/dma-buf/dma-fence-chain.c b/drivers/dma-buf/= dma-fence-chain.c > > > > > index 7d129e68ac701..46dfc7d94d8ed 100644 > > > > > --- a/drivers/dma-buf/dma-fence-chain.c > > > > > +++ b/drivers/dma-buf/dma-fence-chain.c > > > > > @@ -15,15 +15,17 @@ static bool dma_fence_chain_enable_signaling(= struct dma_fence *fence); > > > > > * dma_fence_chain_get_prev - use RCU to get a reference to the= previous fence > > > > > * @chain: chain node to get the previous node from > > > > > * > > > > > - * Use dma_fence_get_rcu_safe to get a reference to the previous= fence of the > > > > > - * chain node. > > > > > + * Use rcu_dereference and dma_fence_get_rcu to get a reference = to the > > > > > + * previous fence of the chain node. > > > > > */ > > > > > static struct dma_fence *dma_fence_chain_get_prev(struct dma_fe= nce_chain *chain) > > > > > { > > > > > struct dma_fence *prev; > > > > > > > > > > rcu_read_lock(); > > > > > - prev =3D dma_fence_get_rcu_safe(&chain->prev); > > > > > + prev =3D rcu_dereference(chain->prev); > > > > > + if (prev) > > > > > + prev =3D dma_fence_get_rcu(prev); > > > > > rcu_read_unlock(); > > > > > return prev; > > > > > } > > > > > diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-res= v.c > > > > > index f26c71747d43a..cfe0db3cca292 100644 > > > > > --- a/drivers/dma-buf/dma-resv.c > > > > > +++ b/drivers/dma-buf/dma-resv.c > > > > > @@ -376,7 +376,9 @@ int dma_resv_copy_fences(struct dma_resv *dst= , struct dma_resv *src) > > > > > dst_list =3D NULL; > > > > > } > > > > > > > > > > - new =3D dma_fence_get_rcu_safe(&src->fence_excl); > > > > > + new =3D rcu_dereference(src->fence_excl); > > > > > + if (new) > > > > > + new =3D dma_fence_get_rcu(new); > > > > > rcu_read_unlock(); > > > > > > > > > > src_list =3D dma_resv_shared_list(dst); > > > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/= gpu/drm/amd/amdgpu/amdgpu_fence.c > > > > > index 72d9b92b17547..0aeb6117f3893 100644 > > > > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c > > > > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c > > > > > @@ -161,7 +161,9 @@ int amdgpu_fence_emit(struct amdgpu_ring *rin= g, struct dma_fence **f, > > > > > struct dma_fence *old; > > > > > > > > > > rcu_read_lock(); > > > > > - old =3D dma_fence_get_rcu_safe(ptr); > > > > > + old =3D rcu_dereference(*ptr); > > > > > + if (old) > > > > > + old =3D dma_fence_get_rcu(old); > > > > > rcu_read_unlock(); > > > > > > > > > > if (old) { > > > > > diff --git a/drivers/gpu/drm/i915/i915_active.h b/drivers/gpu/drm= /i915/i915_active.h > > > > > index d0feda68b874f..bd89cfc806ca5 100644 > > > > > --- a/drivers/gpu/drm/i915/i915_active.h > > > > > +++ b/drivers/gpu/drm/i915/i915_active.h > > > > > @@ -103,7 +103,9 @@ i915_active_fence_get(struct i915_active_fenc= e *active) > > > > > struct dma_fence *fence; > > > > > > > > > > rcu_read_lock(); > > > > > - fence =3D dma_fence_get_rcu_safe(&active->fence); > > > > > + fence =3D rcu_dereference(active->fence); > > > > > + if (fence) > > > > > + fence =3D dma_fence_get_rcu(fence); > > > > > rcu_read_unlock(); > > > > > > > > > > return fence; > > > > > diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i9= 15/i915_vma.c > > > > > index 0f227f28b2802..ed0388d99197e 100644 > > > > > --- a/drivers/gpu/drm/i915/i915_vma.c > > > > > +++ b/drivers/gpu/drm/i915/i915_vma.c > > > > > @@ -351,7 +351,9 @@ int i915_vma_wait_for_bind(struct i915_vma *v= ma) > > > > > struct dma_fence *fence; > > > > > > > > > > rcu_read_lock(); > > > > > - fence =3D dma_fence_get_rcu_safe(&vma->active.excl.= fence); > > > > > + fence =3D rcu_dereference(vma->active.excl.fence); > > > > > + if (fence) > > > > > + fence =3D dma_fence_get_rcu(fence); > > > > > rcu_read_unlock(); > > > > > if (fence) { > > > > > err =3D dma_fence_wait(fence, MAX_SCHEDULE_= TIMEOUT); > > > > > diff --git a/include/drm/drm_syncobj.h b/include/drm/drm_syncobj.= h > > > > > index 6cf7243a1dc5e..6c45d52988bcc 100644 > > > > > --- a/include/drm/drm_syncobj.h > > > > > +++ b/include/drm/drm_syncobj.h > > > > > @@ -105,7 +105,9 @@ drm_syncobj_fence_get(struct drm_syncobj *syn= cobj) > > > > > struct dma_fence *fence; > > > > > > > > > > rcu_read_lock(); > > > > > - fence =3D dma_fence_get_rcu_safe(&syncobj->fence); > > > > > + fence =3D rcu_dereference(syncobj->fence); > > > > > + if (fence) > > > > > + fence =3D dma_fence_get_rcu(syncobj->fence); > > > > > rcu_read_unlock(); > > > > > > > > > > return fence; > > > > > diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.= h > > > > > index 6ffb4b2c63715..f4a2ab2b1ae46 100644 > > > > > --- a/include/linux/dma-fence.h > > > > > +++ b/include/linux/dma-fence.h > > > > > @@ -307,56 +307,6 @@ static inline struct dma_fence *dma_fence_ge= t_rcu(struct dma_fence *fence) > > > > > return NULL; > > > > > } > > > > > > > > > > -/** > > > > > - * dma_fence_get_rcu_safe - acquire a reference to an RCU track= ed fence > > > > > - * @fencep: pointer to fence to increase refcount of > > > > > - * > > > > > - * Function returns NULL if no refcount could be obtained, or th= e fence. > > > > > - * This function handles acquiring a reference to a fence that m= ay be > > > > > - * reallocated within the RCU grace period (such as with SLAB_TY= PESAFE_BY_RCU), > > > > > - * so long as the caller is using RCU on the pointer to the fenc= e. > > > > > - * > > > > > - * An alternative mechanism is to employ a seqlock to protect a = bunch of > > > > > - * fences, such as used by struct dma_resv. When using a seqlock= , > > > > > - * the seqlock must be taken before and checked after a referenc= e to the > > > > > - * fence is acquired (as shown here). > > > > > - * > > > > > - * The caller is required to hold the RCU read lock. > > > > > - */ > > > > > -static inline struct dma_fence * > > > > > -dma_fence_get_rcu_safe(struct dma_fence __rcu **fencep) > > > > > -{ > > > > > - do { > > > > > - struct dma_fence *fence; > > > > > - > > > > > - fence =3D rcu_dereference(*fencep); > > > > > - if (!fence) > > > > > - return NULL; > > > > > - > > > > > - if (!dma_fence_get_rcu(fence)) > > > > > - continue; > > > > > - > > > > > - /* The atomic_inc_not_zero() inside dma_fence_get_r= cu() > > > > > - * provides a full memory barrier upon success (suc= h as now). > > > > > - * This is paired with the write barrier from assig= ning > > > > > - * to the __rcu protected fence pointer so that if = that > > > > > - * pointer still matches the current fence, we know= we > > > > > - * have successfully acquire a reference to it. If = it no > > > > > - * longer matches, we are holding a reference to so= me other > > > > > - * reallocated pointer. This is possible if the all= ocator > > > > > - * is using a freelist like SLAB_TYPESAFE_BY_RCU wh= ere the > > > > > - * fence remains valid for the RCU grace period, bu= t it > > > > > - * may be reallocated. When using such allocators, = we are > > > > > - * responsible for ensuring the reference we get is= to > > > > > - * the right fence, as below. > > > > > - */ > > > > > - if (fence =3D=3D rcu_access_pointer(*fencep)) > > > > > - return rcu_pointer_handoff(fence); > > > > > - > > > > > - dma_fence_put(fence); > > > > > - } while (1); > > > > > -} > > > > > - > > > > > #ifdef CONFIG_LOCKDEP > > > > > bool dma_fence_begin_signalling(void); > > > > > void dma_fence_end_signalling(bool cookie); > > > > > diff --git a/include/linux/dma-resv.h b/include/linux/dma-resv.h > > > > > index 562b885cf9c3d..a38c021f379af 100644 > > > > > --- a/include/linux/dma-resv.h > > > > > +++ b/include/linux/dma-resv.h > > > > > @@ -248,7 +248,9 @@ dma_resv_get_excl_unlocked(struct dma_resv *o= bj) > > > > > return NULL; > > > > > > > > > > rcu_read_lock(); > > > > > - fence =3D dma_fence_get_rcu_safe(&obj->fence_excl); > > > > > + fence =3D rcu_dereference(obj->fence_excl); > > > > > + if (fence) > > > > > + fence =3D dma_fence_get_rcu(fence); > > > > > rcu_read_unlock(); > > > > > > > > > > return fence; > > > > > > > > > > > > -- > > Daniel Vetter > > Software Engineer, Intel Corporation > > http://blog.ffwll.ch --=20 Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch