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.5 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,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 B2A90C47094 for ; Thu, 10 Jun 2021 16:52:37 +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 6F1C26044F for ; Thu, 10 Jun 2021 16:52:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6F1C26044F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=jlekstrand.net 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 147346EDB4; Thu, 10 Jun 2021 16:52:37 +0000 (UTC) Received: from mail-yb1-xb2d.google.com (mail-yb1-xb2d.google.com [IPv6:2607:f8b0:4864:20::b2d]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1E5776EDB5 for ; Thu, 10 Jun 2021 16:52:36 +0000 (UTC) Received: by mail-yb1-xb2d.google.com with SMTP id b9so229688ybg.10 for ; Thu, 10 Jun 2021 09:52:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jlekstrand-net.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=yUKjA2CcdOSgHjObJE60yhiBeGUAGUGUG7OgeissM3g=; b=1+4DK9spJG3AXdRsC7UasHfNapz+9TmqMwND6/1zD1Kul+e/KjZECg/3vwpXZ/oKGG UdFkLx3zNRrKLosBRQWUwc4DLQqDap02OxVmLh8D7LsU+lA3lV6IlVJzpQz+aTHjNdp7 cEUHDO0NS5wCUFBJ3y2fJNyHAw1nUIZ0LavTgVThFm2IamUeRsJOayLikeY0oeFFVMOH 1aGFESA6mvq1ZMfFugwLI6OmQQB6at1uoaOa8sJb3ObJValLJa9vhj74ecMHppaxp+Vx 3W6izj3Kqs759u+JU4CIhXlqKtk5r7+9vIQLgG5FViqqYIv5aQaM5xC/GRXQW42LDLOU RjeQ== 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=yUKjA2CcdOSgHjObJE60yhiBeGUAGUGUG7OgeissM3g=; b=dPTJNC0LXp3/cCH/f3J3xFFsg24gpYCuH8xu2SRGXCxK1PrrtsU6aq+i0OjHS3Hqrn /K30Kp5IWTl6EeIoWx8wdSbdyzJj/EUjkYk4PW72ayfEavsjjvcgTgAltnnNTlWQIhGg l8bBe3XXGis7b9Rd1fNR1b7AbLQ8CaTdqvaOUKYKbfDPt5StVG5D7iXEiLrrVevybFig akpY8PZsAPKaHSkp+LDR2tgo+muAA1+zUhed6/Mwrqifp4Bh9JZ6kenHHpVroGieTxNH OATVXUaFS89o/hs2wWDUwKM6DhmLG/4gfxvcNHu1CvcWPSMyRgQJIv9SOJwOPtTr9hSb +qNg== X-Gm-Message-State: AOAM530nKHSPm0wlaHlY7p6Wvp4yU0Y3r0dNZhoydvZ2CAyI8VNlf9zF uIeCZGHB8hzL65CfvyB9ppR/71ZhfP3YEUn/aLNeOQ== X-Google-Smtp-Source: ABdhPJxNDkpGwuUOQvptuJKD8Abz9yPahef26rtQjVruTV/KdMIH02fjSnp1rGu9EHM8LV7A/BRv8OP+rd5FfqT28AI= X-Received: by 2002:a25:208b:: with SMTP id g133mr8186088ybg.211.1623343954985; Thu, 10 Jun 2021 09:52:34 -0700 (PDT) MIME-Version: 1.0 References: <20210609212959.471209-1-jason@jlekstrand.net> <20210609212959.471209-6-jason@jlekstrand.net> In-Reply-To: From: Jason Ekstrand Date: Thu, 10 Jun 2021 11:52:23 -0500 Message-ID: To: Daniel Vetter 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" T24gVGh1LCBKdW4gMTAsIDIwMjEgYXQgMTE6MzggQU0gRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZl dHRlckBmZndsbC5jaD4gd3JvdGU6Cj4KPiBPbiBUaHUsIEp1biAxMCwgMjAyMSBhdCA2OjI0IFBN IEphc29uIEVrc3RyYW5kIDxqYXNvbkBqbGVrc3RyYW5kLm5ldD4gd3JvdGU6Cj4gPgo+ID4gT24g VGh1LCBKdW4gMTAsIDIwMjEgYXQgMTA6MTMgQU0gRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRl ckBmZndsbC5jaD4gd3JvdGU6Cj4gPiA+Cj4gPiA+IE9uIFRodSwgSnVuIDEwLCAyMDIxIGF0IDM6 NTkgUE0gSmFzb24gRWtzdHJhbmQgPGphc29uQGpsZWtzdHJhbmQubmV0PiB3cm90ZToKPiA+ID4g Pgo+ID4gPiA+IE9uIFRodSwgSnVuIDEwLCAyMDIxIGF0IDE6NTEgQU0gQ2hyaXN0aWFuIEvDtm5p Zwo+ID4gPiA+IDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+IHdyb3RlOgo+ID4gPiA+ID4KPiA+ ID4gPiA+IEFtIDA5LjA2LjIxIHVtIDIzOjI5IHNjaHJpZWIgSmFzb24gRWtzdHJhbmQ6Cj4gPiA+ ID4gPiA+IFRoaXMgaGVscGVyIGV4aXN0ZWQgdG8gaGFuZGxlIHRoZSB3ZWlyZCBjb3JuZXItY2Fz ZXMgY2F1c2VkIGJ5IHVzaW5nCj4gPiA+ID4gPiA+IFNMQUJfVFlQRVNBRkVfQllfUkNVIGZvciBi YWNraW5nIGRtYV9mZW5jZS4gIE5vdyB0aGF0IG5vIG9uZSBpcyB1c2luZwo+ID4gPiA+ID4gPiB0 aGF0IGFueW1vcmUgKGk5MTUgd2FzIHRoZSBvbmx5IHJlYWwgdXNlciksIGRtYV9mZW5jZV9nZXRf cmN1IGlzCj4gPiA+ID4gPiA+IHN1ZmZpY2llbnQuICBUaGUgb25lIHNsaWdodGx5IGFubm95aW5n IHRoaW5nIHdlIGhhdmUgdG8gZGVhbCB3aXRoIGhlcmUKPiA+ID4gPiA+ID4gaXMgdGhhdCBkbWFf ZmVuY2VfZ2V0X3JjdV9zYWZlIGRpZCBhbiByY3VfZGVyZWZlcmVuY2UgYXMgd2VsbCBhcyBhCj4g PiA+ID4gPiA+IFNMQUJfVFlQRVNBRkVfQllfUkNVLXNhZmUgZG1hX2ZlbmNlX2dldF9yY3UuICBU aGlzIG1lYW5zIGVhY2ggY2FsbCBzaXRlCj4gPiA+ID4gPiA+IGVuZHMgdXAgYmVpbmcgMyBsaW5l cyBpbnN0ZWFkIG9mIDEuCj4gPiA+ID4gPgo+ID4gPiA+ID4gVGhhdCdzIGFuIG91dHJpZ2h0IE5B Sy4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBUaGUgbG9vcCBpbiBkbWFfZmVuY2VfZ2V0X3JjdV9zYWZl IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nCj4gPiA+ID4gPiBmZW5jZSBvYmpl Y3QgY2FuIGJlIHJlcGxhY2VkIHdoaWxlIHRha2luZyB0aGUgcmVmZXJlbmNlLgo+ID4gPiA+Cj4g PiA+ID4gUmlnaHQuICBJIGhhZCBtaXNzZWQgYSBiaXQgb2YgdGhhdCB3aGVuIEkgZmlyc3QgcmVh ZCB0aHJvdWdoIGl0LiAgSQo+ID4gPiA+IHNlZSB0aGUgbmVlZCBmb3IgdGhlIGxvb3Agbm93LiAg QnV0IHRoZXJlIGFyZSBzb21lIG90aGVyIHRyaWNreSBiaXRzCj4gPiA+ID4gaW4gdGhlcmUgYmVz aWRlcyBqdXN0IHRoZSBsb29wLgo+ID4gPgo+ID4gPiBJIHRob3VnaHQgdGhhdCdzIHdoYXQgdGhl IGtyZWZfZ2V0X3VubGVzc196ZXJvIHdhcyBmb3IgaW4KPiA+ID4gZG1hX2ZlbmNlX2dldF9yY3U/ IE90aGVyd2lzZSBJIGd1ZXNzIEknbSBub3Qgc2VlaW5nIHdoeSBzdGlsbCBoYXZlCj4gPiA+IGRt YV9mZW5jZV9nZXRfcmN1IGFyb3VuZCwgc2luY2UgdGhhdCBzaG91bGQgZWl0aGVyIGJlIGEga3Jl Zl9nZXQgb3IKPiA+ID4gaXQncyBqdXN0IHVuc2FmZSB0byBjYWxsIGl0IC4uLgo+ID4KPiA+IEFG QUlDVCwgZG1hX2ZlbmNlX2dldF9yY3UgaXMgdW5zYWZlIHVubGVzcyB5b3Ugc29tZWhvdyBrbm93 IHRoYXQgaXQncwo+ID4geW91ciBmZW5jZSBhbmQgaXQncyBuZXZlciByZWN5Y2xlZC4KPiA+Cj4g PiBXaGVyZSB0aGUgbG9vcCBjb21lcyBpbiBpcyBpZiB5b3UgaGF2ZSBzb21lb25lIGNvbWUgYWxv bmcsIHVuZGVyIHRoZQo+ID4gUkNVIHdyaXRlIGxvY2sgb3Igbm90LCBhbmQgc3dhcCBvdXQgdGhl IHBvaW50ZXIgYW5kIHVucmVmIGl0IHdoaWxlCj4gPiB5b3UncmUgdHJ5aW5nIHRvIGZldGNoIGl0 LiAgSW4gdGhpcyBjYXNlLCBpZiB5b3UganVzdCB3cml0ZSB0aGUgdGhyZWUKPiA+IGxpbmVzIEkg ZHVwbGljYXRlZCB0aHJvdWdob3V0IHRoaXMgcGF0Y2gsIHlvdSdsbCBlbmQgdXAgd2l0aCBOVUxM IGlmCj4gPiB5b3UgKHBhcnRpYWxseSkgbG9zZSB0aGUgcmFjZS4gIFRoZSBsb29wIGV4aXN0cyB0 byBlbnN1cmUgdGhhdCB5b3UgZ2V0Cj4gPiBlaXRoZXIgdGhlIG9sZCBwb2ludGVyIG9yIHRoZSBu ZXcgcG9pbnRlciBhbmQgeW91IG9ubHkgZXZlciBnZXQgTlVMTAo+ID4gaWYgc29tZXdoZXJlIGR1 cmluZyB0aGUgbWVzcywgdGhlIHBvaW50ZXIgYWN0dWFsbHkgZ2V0cyBzZXQgdG8gTlVMTC4KPgo+ IEl0J3Mgbm90IHRoYXQgZWFzeS4gQXQgbGVhc3Qgbm90IGZvciBkbWFfcmVzdi4KPgo+IFRoZSB0 aGluZyBpcywgeW91IGNhbid0IGp1c3QgZ28gaW4gYW5kIHJlcGxhY2UgdGhlIHdyaXRlIGZlbmNl IHdpdGgKPiBzb21ldGhpbmcgZWxzZS4gVGhlcmUncyBzdXBwb3NlZCB0byBiZSBzb21lIG9yZGVy aW5nIGhlcmUgKGhvdyBtdWNoIHdlCj4gYWN0dWFsbHkgc3RpbGwgZm9sbG93IHRoYXQgb3Igbm90 IGlzIGEgYml0IGFub3RoZXIgcXVlc3Rpb24sIHRoYXQgSSdtCj4gdHJ5aW5nIHRvIGFuc3dlciB3 aXRoIGFuIGF1ZGl0IG9mIGxvdHMgb2YgZHJpdmVycyksIHdoaWNoIG1lYW5zIGlmIHlvdQo+IHJl cGxhY2UgZS5nLiB0aGUgZXhjbHVzaXZlIGZlbmNlLCB0aGUgcHJldmlvdXMgZmVuY2Ugd2lsbCBf bm90XyBqdXN0Cj4gZ2V0IGZyZWVkLiBCZWNhdXNlIHRoZSBuZXh0IGV4Y2x1c2l2ZSBmZW5jZSBu ZWVkcyB0byB3YWl0IGZvciB0aGF0IHRvCj4gZmluaXNoIGZpcnN0Lgo+Cj4gQ29uY2VwdHVhbGx5 IHRoZSByZWZjb3VudCB3aWxsIF9vbmx5XyBnbyB0byAwIG9uY2UgYWxsIGxhdGVyCj4gZGVwZW5k ZW5jaWVzIGhhdmUgc2VlbiBpdCBnZXQgc2lnbmFsbGVkLCBhbmQgb25jZSB0aGUgZmVuY2UgaXRz ZWxmIGhhcwo+IGJlZW4gc2lnbmFsbGVkLiBBIHNpZ25hbGxlZCBmZW5jZSBtaWdodCBhcyB3ZWxs IG5vdCBleGlzdCwgc28gaWYKPiB0aGF0J3Mgd2hhdCAgaGFwcGVuZWQgaW4gdGhhdCB0aW55IHdp bmRvdywgdGhlbiB5ZXMgYSBsZWdhbCBzY2VuYXJpbwo+IGlzIHRoZSBmb2xsb3dpbmc6Cj4KPiB0 aHJlYWQgQToKPiAtIHJjdV9kZXJlZmVyZW5jZShyZXN2LT5leGNsdXNpdmVfZmVuY2UpOwo+Cj4g dGhyZWFkIEI6Cj4gLSBkbWFfZmVuY2Ugc2lnbmFscywgcmV0aXJlcywgZHJvcHMgcmVmY291bnQg dG8gMAo+IC0gc2V0cyB0aGUgZXhjbHVzaXZlIGZlbmNlIHRvIE5VTEwKPiAtIGNyZWF0ZXMgYSBu ZXcgZG1hX2ZlbmNlCj4gLSBzZXRzIHRoZSBleGNsdXNpdmUgZmVuY2UgdG8gdGhhdCBuZXcgZmVu Y2UKPgo+IHRocmVhZCBBOgo+IC0ga3JlZl9nZXRfdW5sZXNzX3plcm8gZmFpbHMsIHdlIHJlcG9y dCB0aGF0IHRoZSBleGNsdXNpdmUgZmVuY2Ugc2xvdCBpcyBOVUxMCj4KPiBPZmMgbm9ybWFsbHkg d2UncmUgZnVsbHkgcGlwZWxpbmUsIGFuZCB3ZSBsYXppbHkgY2xlYXIgc2xvdHMsIHNvIG5vCj4g b25lIGV2ZXIgd3JpdGVzIHRoZSBmZW5jZSBwdHIgdG8gTlVMTC4gQnV0IGNvbmNlcHR1YWxseSBp dCdzIHRvdGFsbHkKPiBmaW5lLCBhbmQgYW4gaW5kaXN0aW5ndWlzaGFibGUgc2VxdWVuY2Ugb2Yg ZXZlbnRzIGZyb20gdGhlIHBvaW50IG9mCj4gdmlldyBvZiB0aHJlYWQgQS4KCkhvdyBpcyByZXBv cnRpbmcgdGhhdCB0aGUgZXhjbHVzaXZlIGZlbmNlIGlzIE5VTEwgb2sgaW4gdGhhdCBzY2VuYXJp bz8KIElmIHNvbWVvbmUgY29tZXMgYWxvbmcgYW5kIGNhbGxzIGRtYV9yZXN2X2dldF9leGNsX2Zl bmNlKCksIHdlIHdhbnQKdGhlbSB0byBnZXQgZWl0aGVyIHRoZSBvbGQgZmVuY2Ugb3IgdGhlIG5l dyBmZW5jZSBidXQgbmV2ZXIgTlVMTC4KTlVMTCB3b3VsZCBpbXBseSB0aGF0IHRoZSBvYmplY3Qg aXMgaWRsZSB3aGljaCBpdCBwcm9iYWJseSBpc24ndCBpbgphbnkgc29ydCBvZiBwaXBlbGluZWQg d29ybGQuCgo+IEVyZ28gZG1hX2ZlbmNlX2dldF9yY3UgaXMgZW5vdWdoLiBJZiBpdCdzIG5vdCwg d2UndmUgc2NyZXdlZCB1cCByZWFsbHkKPiBiaWcgdGltZS4gVGhlIG9ubHkgcmVhc29uIHlvdSBu ZWVkIF91bnNhZmUgaXMgaWYgeW91IGhhdmUKPiB0eXBlc2FmZV9ieV9yY3UsIG9yIG1heWJlIGlm IHlvdSB5b2xvIHlvdXIgZmVuY2Ugb3JkZXJpbmcgYSBiaXQgbXVjaAo+IGFuZCBicmVhayB0aGUg REFHIHByb3BlcnR5IGluIGEgZmV3IGNhc2VzLgo+Cj4gPiBJIGFncmVlIHdpdGggQ2hyaXN0aWFu IHRoYXQgdGhhdCBwYXJ0IG9mIGRtYV9mZW5jZV9nZXRfcmN1X3NhZmUgbmVlZHMKPiA+IHRvIHN0 YXkuICBJIHdhcyBtaXNzaW5nIHRoYXQgdW50aWwgSSBkaWQgbXkgZ2lhbnQgImxldCdzIHdhbGsg dGhyb3VnaAo+ID4gdGhlIGNvZGUiIGUtbWFpbC4KPgo+IFdlbGwgaWYgSSdtIHdyb25nIHRoZXJl J3MgYSBfdG9uXyBvZiBicm9rZW4gY29kZSBpbiB1cHN0cmVhbSByaWdodAo+IG5vdywgZXZlbiBp biBkbWEtYnVmL2RtYS1yZXN2LmMuIFdlJ3JlIHVzaW5nIGRtYV9mZW5jZV9nZXRfcmN1IGEgbG90 LgoKWXVwLiAgMTkgdGltZXMuICBXaGF0IEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpcyBob3cg bXVjaCBvZiB0aGF0CmNvZGUgZGVwZW5kcyBvbiBwcm9wZXJseSBjYXRjaGluZyBhIHBvaW50ZXIt c3dpdGNoIHJhY2UgYW5kIGhvdyBtdWNoCmlzIG9rIHdpdGggYSBOVUxMIGZhaWx1cmUgbW9kZS4g IFRoaXMgdHJ5Ym90IHNlZW1zIHRvIGltcGx5IHRoYXQgbW9zdAp0aGluZ3MgYXJlIG9rIHdpdGgg dGhlIE5VTEwgZmFpbHVyZSBtb2RlOgoKaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3Jn L3Nlcmllcy85MTI2Ny8KCk9mIGNvdXJzZSwgYXMgd2UgZGlzY3Vzc2VkIG9uIElSQywgSSdtIG5v dCBzdXJlIGhvdyBtdWNoIEkgdHJ1c3QKcHJvb2YtYnktdHJ5Ym90IGhlcmUuIDotKQoKPiBBbHNv IHRoZSB0aW1pbmcgaXMgYWxsIGJhY2t3YXJkczogZ2V0X3JjdV9zYWZlIHdhcyBhZGRlZCBhcyBh IGZpeCBmb3IKPiB3aGVuIGk5MTUgbWFkZSBpdHMgZG1hX2ZlbmNlIHR5cGVzYWZlX2J5X3JjdS4g V2UgZGlkbid0IGhhdmUgYW55IG5lZWQKPiBmb3IgdGhpcyBiZWZvcmVoYW5kLiBTbyBJJ20gcmVh bGx5IG5vdCBxdWl0ZSBidXlpbmcgdGhpcyBzdG9yeSBoZXJlCj4geWV0IHlvdSdyZSBhbGwgdHJ5 aW5nIHRvIHNlbGwgbWUgb24uCgpZZWFoLCB0aGF0J3MgcmVhbGx5IGNvbmNlcm5pbmcuICBJdCdz IHBvc3NpYmxlIHRoYXQgbWFueSBvZiB0aGUgdXNlcwpvZiBnZXRfcmN1X3NhZmUgd2VyZSBhZGRl ZCBiZWNhdXNlIHNvbWVvbmUgaGFkIHJlY3ljbGUgYnVncyBhbmQgb3RoZXJzCndlcmUgYWRkZWQg YmVjYXVzZSBvZiBwb2ludGVyIGNoYXNlIGJ1Z3MgYW5kIHBlb3BsZSB3ZXJlbid0IGVudGlyZWx5 CmNsZWFyIG9uIHdoaWNoLgoKLS1KYXNvbgoKPiAtRGFuaWVsCj4KPiA+Cj4gPiAtLUphc29uCj4g Pgo+ID4gPiA+ID4gVGhpcyBpcyBjb21wbGV0ZWx5IHVucmVsYXRlZCB0byBTTEFCX1RZUEVTQUZF X0JZX1JDVS4gU2VlIHRoZQo+ID4gPiA+ID4gZG1hX2ZlbmNlX2NoYWluIHVzYWdlIGZvciByZWZl cmVuY2UuCj4gPiA+ID4gPgo+ID4gPiA+ID4gV2hhdCB5b3UgY2FuIHJlbW92ZSBpcyB0aGUgc2Vx dWVuY2UgbnVtYmVyIGhhbmRsaW5nIGluIGRtYS1idWYuIFRoYXQKPiA+ID4gPiA+IHNob3VsZCBt YWtlIGFkZGluZyBmZW5jZXMgcXVpdGUgYSBiaXQgcXVpY2tlci4KPiA+ID4gPgo+ID4gPiA+IEkn bGwgbG9vayBhdCB0aGF0IGFuZCB0cnkgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gdGhl cmUuCj4gPiA+Cj4gPiA+IEhtIEkgdGhvdWdodCB0aGUgc2VxbG9jayB3YXMgdG8gbWFrZSBzdXJl IHdlIGhhdmUgYSBjb25zaXN0ZW50IHNldCBvZgo+ID4gPiBmZW5jZXMgYWNyb3NzIGV4Y2x1c2l2 ZSBhbmQgYWxsIHNoYXJlZCBzbG90LiBOb3QgdG8gcHJvdGVjdCBhZ2FpbnN0Cj4gPiA+IHRoZSBm ZW5jZSBkaXNhcHBlYXJpbmcgZHVlIHRvIHR5cGVzYWZlX2J5X3JjdS4KPiA+ID4gLURhbmllbAo+ ID4gPgo+ID4gPiA+IC0tSmFzb24KPiA+ID4gPgo+ID4gPiA+ID4gUmVnYXJkcywKPiA+ID4gPiA+ IENocmlzdGlhbi4KPiA+ID4gPiA+Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IFNpZ25lZC1vZmYt Ynk6IEphc29uIEVrc3RyYW5kIDxqYXNvbkBqbGVrc3RyYW5kLm5ldD4KPiA+ID4gPiA+ID4gQ2M6 IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gPiA+ID4gPiA+IENjOiBD aHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4gPiA+ID4gPiA+IENj OiBNYXR0aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+Cj4gPiA+ID4gPiA+IENjOiBN YWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgo+ID4g PiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gICBkcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNlLWNoYWlu LmMgICAgICAgICB8ICA4ICsrLS0KPiA+ID4gPiA+ID4gICBkcml2ZXJzL2RtYS1idWYvZG1hLXJl c3YuYyAgICAgICAgICAgICAgICB8ICA0ICstCj4gPiA+ID4gPiA+ICAgZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2ZlbmNlLmMgfCAgNCArLQo+ID4gPiA+ID4gPiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlLmggICAgICAgIHwgIDQgKy0KPiA+ID4gPiA+ID4gICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jICAgICAgICAgICB8ICA0ICstCj4gPiA+ID4g PiA+ICAgaW5jbHVkZS9kcm0vZHJtX3N5bmNvYmouaCAgICAgICAgICAgICAgICAgfCAgNCArLQo+ ID4gPiA+ID4gPiAgIGluY2x1ZGUvbGludXgvZG1hLWZlbmNlLmggICAgICAgICAgICAgICAgIHwg NTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ID4gPiA+ID4gICBpbmNsdWRlL2xpbnV4L2Rt YS1yZXN2LmggICAgICAgICAgICAgICAgICB8ICA0ICstCj4gPiA+ID4gPiA+ICAgOCBmaWxlcyBj aGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCA1OSBkZWxldGlvbnMoLSkKPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UtY2hhaW4uYyBi L2RyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UtY2hhaW4uYwo+ID4gPiA+ID4gPiBpbmRleCA3ZDEy OWU2OGFjNzAxLi40NmRmYzdkOTRkOGVkIDEwMDY0NAo+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJz L2RtYS1idWYvZG1hLWZlbmNlLWNoYWluLmMKPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9kbWEt YnVmL2RtYS1mZW5jZS1jaGFpbi5jCj4gPiA+ID4gPiA+IEBAIC0xNSwxNSArMTUsMTcgQEAgc3Rh dGljIGJvb2wgZG1hX2ZlbmNlX2NoYWluX2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGRtYV9mZW5j ZSAqZmVuY2UpOwo+ID4gPiA+ID4gPiAgICAqIGRtYV9mZW5jZV9jaGFpbl9nZXRfcHJldiAtIHVz ZSBSQ1UgdG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBmZW5jZQo+ID4gPiA+ID4g PiAgICAqIEBjaGFpbjogY2hhaW4gbm9kZSB0byBnZXQgdGhlIHByZXZpb3VzIG5vZGUgZnJvbQo+ ID4gPiA+ID4gPiAgICAqCj4gPiA+ID4gPiA+IC0gKiBVc2UgZG1hX2ZlbmNlX2dldF9yY3Vfc2Fm ZSB0byBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzIGZlbmNlIG9mIHRoZQo+ID4gPiA+ ID4gPiAtICogY2hhaW4gbm9kZS4KPiA+ID4gPiA+ID4gKyAqIFVzZSByY3VfZGVyZWZlcmVuY2Ug YW5kIGRtYV9mZW5jZV9nZXRfcmN1IHRvIGdldCBhIHJlZmVyZW5jZSB0byB0aGUKPiA+ID4gPiA+ ID4gKyAqIHByZXZpb3VzIGZlbmNlIG9mIHRoZSBjaGFpbiBub2RlLgo+ID4gPiA+ID4gPiAgICAq Lwo+ID4gPiA+ID4gPiAgIHN0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlICpkbWFfZmVuY2VfY2hhaW5f Z2V0X3ByZXYoc3RydWN0IGRtYV9mZW5jZV9jaGFpbiAqY2hhaW4pCj4gPiA+ID4gPiA+ICAgewo+ ID4gPiA+ID4gPiAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpwcmV2Owo+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiAgICAgICByY3VfcmVhZF9sb2NrKCk7Cj4gPiA+ID4gPiA+IC0gICAgIHByZXYgPSBk bWFfZmVuY2VfZ2V0X3JjdV9zYWZlKCZjaGFpbi0+cHJldik7Cj4gPiA+ID4gPiA+ICsgICAgIHBy ZXYgPSByY3VfZGVyZWZlcmVuY2UoY2hhaW4tPnByZXYpOwo+ID4gPiA+ID4gPiArICAgICBpZiAo cHJldikKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICBwcmV2ID0gZG1hX2ZlbmNlX2dldF9yY3Uo cHJldik7Cj4gPiA+ID4gPiA+ICAgICAgIHJjdV9yZWFkX3VubG9jaygpOwo+ID4gPiA+ID4gPiAg ICAgICByZXR1cm4gcHJldjsKPiA+ID4gPiA+ID4gICB9Cj4gPiA+ID4gPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2RtYS1idWYvZG1hLXJlc3YuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtcmVzdi5j Cj4gPiA+ID4gPiA+IGluZGV4IGYyNmM3MTc0N2Q0M2EuLmNmZTBkYjNjY2EyOTIgMTAwNjQ0Cj4g PiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtcmVzdi5jCj4gPiA+ID4gPiA+ICsr KyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtcmVzdi5jCj4gPiA+ID4gPiA+IEBAIC0zNzYsNyArMzc2 LDkgQEAgaW50IGRtYV9yZXN2X2NvcHlfZmVuY2VzKHN0cnVjdCBkbWFfcmVzdiAqZHN0LCBzdHJ1 Y3QgZG1hX3Jlc3YgKnNyYykKPiA+ID4gPiA+ID4gICAgICAgICAgICAgICBkc3RfbGlzdCA9IE5V TEw7Cj4gPiA+ID4gPiA+ICAgICAgIH0KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gLSAgICAgbmV3 ID0gZG1hX2ZlbmNlX2dldF9yY3Vfc2FmZSgmc3JjLT5mZW5jZV9leGNsKTsKPiA+ID4gPiA+ID4g KyAgICAgbmV3ID0gcmN1X2RlcmVmZXJlbmNlKHNyYy0+ZmVuY2VfZXhjbCk7Cj4gPiA+ID4gPiA+ ICsgICAgIGlmIChuZXcpCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgbmV3ID0gZG1hX2ZlbmNl X2dldF9yY3UobmV3KTsKPiA+ID4gPiA+ID4gICAgICAgcmN1X3JlYWRfdW5sb2NrKCk7Cj4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+ICAgICAgIHNyY19saXN0ID0gZG1hX3Jlc3Zfc2hhcmVkX2xpc3Qo ZHN0KTsKPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2ZlbmNl LmMKPiA+ID4gPiA+ID4gaW5kZXggNzJkOWI5MmIxNzU0Ny4uMGFlYjYxMTdmMzg5MyAxMDA2NDQK PiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2ZlbmNl LmMKPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Zl bmNlLmMKPiA+ID4gPiA+ID4gQEAgLTE2MSw3ICsxNjEsOSBAQCBpbnQgYW1kZ3B1X2ZlbmNlX2Vt aXQoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLCBzdHJ1Y3QgZG1hX2ZlbmNlICoqZiwKPiA+ID4g PiA+ID4gICAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpvbGQ7Cj4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ICAgICAgICAgICAgICAgcmN1X3JlYWRfbG9jaygpOwo+ID4gPiA+ID4gPiAtICAg ICAgICAgICAgIG9sZCA9IGRtYV9mZW5jZV9nZXRfcmN1X3NhZmUocHRyKTsKPiA+ID4gPiA+ID4g KyAgICAgICAgICAgICBvbGQgPSByY3VfZGVyZWZlcmVuY2UoKnB0cik7Cj4gPiA+ID4gPiA+ICsg ICAgICAgICAgICAgaWYgKG9sZCkKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIG9s ZCA9IGRtYV9mZW5jZV9nZXRfcmN1KG9sZCk7Cj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgcmN1 X3JlYWRfdW5sb2NrKCk7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgaWYg KG9sZCkgewo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9hY3RpdmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlLmgKPiA+ID4gPiA+ ID4gaW5kZXggZDBmZWRhNjhiODc0Zi4uYmQ4OWNmYzgwNmNhNSAxMDA2NDQKPiA+ID4gPiA+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuaAo+ID4gPiA+ID4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZS5oCj4gPiA+ID4gPiA+IEBAIC0xMDMs NyArMTAzLDkgQEAgaTkxNV9hY3RpdmVfZmVuY2VfZ2V0KHN0cnVjdCBpOTE1X2FjdGl2ZV9mZW5j ZSAqYWN0aXZlKQo+ID4gPiA+ID4gPiAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gICAgICAgcmN1X3JlYWRfbG9jaygpOwo+ID4gPiA+ID4gPiAt ICAgICBmZW5jZSA9IGRtYV9mZW5jZV9nZXRfcmN1X3NhZmUoJmFjdGl2ZS0+ZmVuY2UpOwo+ID4g PiA+ID4gPiArICAgICBmZW5jZSA9IHJjdV9kZXJlZmVyZW5jZShhY3RpdmUtPmZlbmNlKTsKPiA+ ID4gPiA+ID4gKyAgICAgaWYgKGZlbmNlKQo+ID4gPiA+ID4gPiArICAgICAgICAgICAgIGZlbmNl ID0gZG1hX2ZlbmNlX2dldF9yY3UoZmVuY2UpOwo+ID4gPiA+ID4gPiAgICAgICByY3VfcmVhZF91 bmxvY2soKTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gICAgICAgcmV0dXJuIGZlbmNlOwo+ID4g PiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmMKPiA+ID4gPiA+ID4gaW5kZXggMGYyMjdmMjhi MjgwMi4uZWQwMzg4ZDk5MTk3ZSAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV92bWEuYwo+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3ZtYS5jCj4gPiA+ID4gPiA+IEBAIC0zNTEsNyArMzUxLDkgQEAgaW50IGk5MTVfdm1h X3dhaXRfZm9yX2JpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gPiA+ID4gPiA+ICAgICAgICAg ICAgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAg ICAgICAgICAgICAgcmN1X3JlYWRfbG9jaygpOwo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgIGZl bmNlID0gZG1hX2ZlbmNlX2dldF9yY3Vfc2FmZSgmdm1hLT5hY3RpdmUuZXhjbC5mZW5jZSk7Cj4g PiA+ID4gPiA+ICsgICAgICAgICAgICAgZmVuY2UgPSByY3VfZGVyZWZlcmVuY2Uodm1hLT5hY3Rp dmUuZXhjbC5mZW5jZSk7Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgaWYgKGZlbmNlKQo+ID4g PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgZmVuY2UgPSBkbWFfZmVuY2VfZ2V0X3JjdShm ZW5jZSk7Cj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgcmN1X3JlYWRfdW5sb2NrKCk7Cj4gPiA+ ID4gPiA+ICAgICAgICAgICAgICAgaWYgKGZlbmNlKSB7Cj4gPiA+ID4gPiA+ICAgICAgICAgICAg ICAgICAgICAgICBlcnIgPSBkbWFfZmVuY2Vfd2FpdChmZW5jZSwgTUFYX1NDSEVEVUxFX1RJTUVP VVQpOwo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3N5bmNvYmouaCBi L2luY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmgKPiA+ID4gPiA+ID4gaW5kZXggNmNmNzI0M2ExZGM1 ZS4uNmM0NWQ1Mjk4OGJjYyAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJt X3N5bmNvYmouaAo+ID4gPiA+ID4gPiArKysgYi9pbmNsdWRlL2RybS9kcm1fc3luY29iai5oCj4g PiA+ID4gPiA+IEBAIC0xMDUsNyArMTA1LDkgQEAgZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHN0cnVj dCBkcm1fc3luY29iaiAqc3luY29iaikKPiA+ID4gPiA+ID4gICAgICAgc3RydWN0IGRtYV9mZW5j ZSAqZmVuY2U7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAgICAgIHJjdV9yZWFkX2xvY2soKTsK PiA+ID4gPiA+ID4gLSAgICAgZmVuY2UgPSBkbWFfZmVuY2VfZ2V0X3JjdV9zYWZlKCZzeW5jb2Jq LT5mZW5jZSk7Cj4gPiA+ID4gPiA+ICsgICAgIGZlbmNlID0gcmN1X2RlcmVmZXJlbmNlKHN5bmNv YmotPmZlbmNlKTsKPiA+ID4gPiA+ID4gKyAgICAgaWYgKGZlbmNlKQo+ID4gPiA+ID4gPiArICAg ICAgICAgICAgIGZlbmNlID0gZG1hX2ZlbmNlX2dldF9yY3Uoc3luY29iai0+ZmVuY2UpOwo+ID4g PiA+ID4gPiAgICAgICByY3VfcmVhZF91bmxvY2soKTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4g ICAgICAgcmV0dXJuIGZlbmNlOwo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51 eC9kbWEtZmVuY2UuaCBiL2luY2x1ZGUvbGludXgvZG1hLWZlbmNlLmgKPiA+ID4gPiA+ID4gaW5k ZXggNmZmYjRiMmM2MzcxNS4uZjRhMmFiMmIxYWU0NiAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEv aW5jbHVkZS9saW51eC9kbWEtZmVuY2UuaAo+ID4gPiA+ID4gPiArKysgYi9pbmNsdWRlL2xpbnV4 L2RtYS1mZW5jZS5oCj4gPiA+ID4gPiA+IEBAIC0zMDcsNTYgKzMwNyw2IEBAIHN0YXRpYyBpbmxp bmUgc3RydWN0IGRtYV9mZW5jZSAqZG1hX2ZlbmNlX2dldF9yY3Uoc3RydWN0IGRtYV9mZW5jZSAq ZmVuY2UpCj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gPiA+ID4gPiA+ ICAgfQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAtLyoqCj4gPiA+ID4gPiA+IC0gKiBkbWFfZmVu Y2VfZ2V0X3JjdV9zYWZlICAtIGFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYW4gUkNVIHRyYWNrZWQg ZmVuY2UKPiA+ID4gPiA+ID4gLSAqIEBmZW5jZXA6IHBvaW50ZXIgdG8gZmVuY2UgdG8gaW5jcmVh c2UgcmVmY291bnQgb2YKPiA+ID4gPiA+ID4gLSAqCj4gPiA+ID4gPiA+IC0gKiBGdW5jdGlvbiBy ZXR1cm5zIE5VTEwgaWYgbm8gcmVmY291bnQgY291bGQgYmUgb2J0YWluZWQsIG9yIHRoZSBmZW5j ZS4KPiA+ID4gPiA+ID4gLSAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhY3F1aXJpbmcgYSByZWZl cmVuY2UgdG8gYSBmZW5jZSB0aGF0IG1heSBiZQo+ID4gPiA+ID4gPiAtICogcmVhbGxvY2F0ZWQg d2l0aGluIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIChzdWNoIGFzIHdpdGggU0xBQl9UWVBFU0FGRV9C WV9SQ1UpLAo+ID4gPiA+ID4gPiAtICogc28gbG9uZyBhcyB0aGUgY2FsbGVyIGlzIHVzaW5nIFJD VSBvbiB0aGUgcG9pbnRlciB0byB0aGUgZmVuY2UuCj4gPiA+ID4gPiA+IC0gKgo+ID4gPiA+ID4g PiAtICogQW4gYWx0ZXJuYXRpdmUgbWVjaGFuaXNtIGlzIHRvIGVtcGxveSBhIHNlcWxvY2sgdG8g cHJvdGVjdCBhIGJ1bmNoIG9mCj4gPiA+ID4gPiA+IC0gKiBmZW5jZXMsIHN1Y2ggYXMgdXNlZCBi eSBzdHJ1Y3QgZG1hX3Jlc3YuIFdoZW4gdXNpbmcgYSBzZXFsb2NrLAo+ID4gPiA+ID4gPiAtICog dGhlIHNlcWxvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgYW5kIGNoZWNrZWQgYWZ0ZXIgYSByZWZl cmVuY2UgdG8gdGhlCj4gPiA+ID4gPiA+IC0gKiBmZW5jZSBpcyBhY3F1aXJlZCAoYXMgc2hvd24g aGVyZSkuCj4gPiA+ID4gPiA+IC0gKgo+ID4gPiA+ID4gPiAtICogVGhlIGNhbGxlciBpcyByZXF1 aXJlZCB0byBob2xkIHRoZSBSQ1UgcmVhZCBsb2NrLgo+ID4gPiA+ID4gPiAtICovCj4gPiA+ID4g PiA+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfZmVuY2UgKgo+ID4gPiA+ID4gPiAtZG1hX2Zl bmNlX2dldF9yY3Vfc2FmZShzdHJ1Y3QgZG1hX2ZlbmNlIF9fcmN1ICoqZmVuY2VwKQo+ID4gPiA+ ID4gPiAtewo+ID4gPiA+ID4gPiAtICAgICBkbyB7Cj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAg c3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ID4gLSAgICAg ICAgICAgICBmZW5jZSA9IHJjdV9kZXJlZmVyZW5jZSgqZmVuY2VwKTsKPiA+ID4gPiA+ID4gLSAg ICAgICAgICAgICBpZiAoIWZlbmNlKQo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIE5VTEw7Cj4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICBpZiAo IWRtYV9mZW5jZV9nZXRfcmN1KGZlbmNlKSkKPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwo+ID4gPiA+ID4gPiAtCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgLyog VGhlIGF0b21pY19pbmNfbm90X3plcm8oKSBpbnNpZGUgZG1hX2ZlbmNlX2dldF9yY3UoKQo+ID4g PiA+ID4gPiAtICAgICAgICAgICAgICAqIHByb3ZpZGVzIGEgZnVsbCBtZW1vcnkgYmFycmllciB1 cG9uIHN1Y2Nlc3MgKHN1Y2ggYXMgbm93KS4KPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICAgKiBU aGlzIGlzIHBhaXJlZCB3aXRoIHRoZSB3cml0ZSBiYXJyaWVyIGZyb20gYXNzaWduaW5nCj4gPiA+ ID4gPiA+IC0gICAgICAgICAgICAgICogdG8gdGhlIF9fcmN1IHByb3RlY3RlZCBmZW5jZSBwb2lu dGVyIHNvIHRoYXQgaWYgdGhhdAo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAqIHBvaW50ZXIg c3RpbGwgbWF0Y2hlcyB0aGUgY3VycmVudCBmZW5jZSwgd2Uga25vdyB3ZQo+ID4gPiA+ID4gPiAt ICAgICAgICAgICAgICAqIGhhdmUgc3VjY2Vzc2Z1bGx5IGFjcXVpcmUgYSByZWZlcmVuY2UgdG8g aXQuIElmIGl0IG5vCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICogbG9uZ2VyIG1hdGNoZXMs IHdlIGFyZSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHNvbWUgb3RoZXIKPiA+ID4gPiA+ID4gLSAg ICAgICAgICAgICAgKiByZWFsbG9jYXRlZCBwb2ludGVyLiBUaGlzIGlzIHBvc3NpYmxlIGlmIHRo ZSBhbGxvY2F0b3IKPiA+ID4gPiA+ID4gLSAgICAgICAgICAgICAgKiBpcyB1c2luZyBhIGZyZWVs aXN0IGxpa2UgU0xBQl9UWVBFU0FGRV9CWV9SQ1Ugd2hlcmUgdGhlCj4gPiA+ID4gPiA+IC0gICAg ICAgICAgICAgICogZmVuY2UgcmVtYWlucyB2YWxpZCBmb3IgdGhlIFJDVSBncmFjZSBwZXJpb2Qs IGJ1dCBpdAo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAqIG1heSBiZSByZWFsbG9jYXRlZC4g V2hlbiB1c2luZyBzdWNoIGFsbG9jYXRvcnMsIHdlIGFyZQo+ID4gPiA+ID4gPiAtICAgICAgICAg ICAgICAqIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGUgcmVmZXJlbmNlIHdlIGdldCBpcyB0 bwo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAqIHRoZSByaWdodCBmZW5jZSwgYXMgYmVsb3cu Cj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAgICovCj4gPiA+ID4gPiA+IC0gICAgICAgICAgICAg aWYgKGZlbmNlID09IHJjdV9hY2Nlc3NfcG9pbnRlcigqZmVuY2VwKSkKPiA+ID4gPiA+ID4gLSAg ICAgICAgICAgICAgICAgICAgIHJldHVybiByY3VfcG9pbnRlcl9oYW5kb2ZmKGZlbmNlKTsKPiA+ ID4gPiA+ID4gLQo+ID4gPiA+ID4gPiAtICAgICAgICAgICAgIGRtYV9mZW5jZV9wdXQoZmVuY2Up Owo+ID4gPiA+ID4gPiAtICAgICB9IHdoaWxlICgxKTsKPiA+ID4gPiA+ID4gLX0KPiA+ID4gPiA+ ID4gLQo+ID4gPiA+ID4gPiAgICNpZmRlZiBDT05GSUdfTE9DS0RFUAo+ID4gPiA+ID4gPiAgIGJv b2wgZG1hX2ZlbmNlX2JlZ2luX3NpZ25hbGxpbmcodm9pZCk7Cj4gPiA+ID4gPiA+ICAgdm9pZCBk bWFfZmVuY2VfZW5kX3NpZ25hbGxpbmcoYm9vbCBjb29raWUpOwo+ID4gPiA+ID4gPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS9saW51eC9kbWEtcmVzdi5oIGIvaW5jbHVkZS9saW51eC9kbWEtcmVzdi5o Cj4gPiA+ID4gPiA+IGluZGV4IDU2MmI4ODVjZjljM2QuLmEzOGMwMjFmMzc5YWYgMTAwNjQ0Cj4g PiA+ID4gPiA+IC0tLSBhL2luY2x1ZGUvbGludXgvZG1hLXJlc3YuaAo+ID4gPiA+ID4gPiArKysg Yi9pbmNsdWRlL2xpbnV4L2RtYS1yZXN2LmgKPiA+ID4gPiA+ID4gQEAgLTI0OCw3ICsyNDgsOSBA QCBkbWFfcmVzdl9nZXRfZXhjbF91bmxvY2tlZChzdHJ1Y3QgZG1hX3Jlc3YgKm9iaikKPiA+ID4g PiA+ID4gICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4g ICAgICAgcmN1X3JlYWRfbG9jaygpOwo+ID4gPiA+ID4gPiAtICAgICBmZW5jZSA9IGRtYV9mZW5j ZV9nZXRfcmN1X3NhZmUoJm9iai0+ZmVuY2VfZXhjbCk7Cj4gPiA+ID4gPiA+ICsgICAgIGZlbmNl ID0gcmN1X2RlcmVmZXJlbmNlKG9iai0+ZmVuY2VfZXhjbCk7Cj4gPiA+ID4gPiA+ICsgICAgIGlm IChmZW5jZSkKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICBmZW5jZSA9IGRtYV9mZW5jZV9nZXRf cmN1KGZlbmNlKTsKPiA+ID4gPiA+ID4gICAgICAgcmN1X3JlYWRfdW5sb2NrKCk7Cj4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+ICAgICAgIHJldHVybiBmZW5jZTsKPiA+ID4gPiA+Cj4gPiA+Cj4gPiA+ Cj4gPiA+Cj4gPiA+IC0tCj4gPiA+IERhbmllbCBWZXR0ZXIKPiA+ID4gU29mdHdhcmUgRW5naW5l ZXIsIEludGVsIENvcnBvcmF0aW9uCj4gPiA+IGh0dHA6Ly9ibG9nLmZmd2xsLmNoCj4KPgo+Cj4g LS0KPiBEYW5pZWwgVmV0dGVyCj4gU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9u Cj4gaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg== 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.5 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,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 6B9C9C48BE6 for ; Thu, 10 Jun 2021 16:52:40 +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 248D5613E7 for ; Thu, 10 Jun 2021 16:52:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 248D5613E7 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=jlekstrand.net 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 3675E6EDB5; Thu, 10 Jun 2021 16:52:37 +0000 (UTC) Received: from mail-yb1-xb36.google.com (mail-yb1-xb36.google.com [IPv6:2607:f8b0:4864:20::b36]) by gabe.freedesktop.org (Postfix) with ESMTPS id F01A96EDB4 for ; Thu, 10 Jun 2021 16:52:35 +0000 (UTC) Received: by mail-yb1-xb36.google.com with SMTP id i6so288573ybm.1 for ; Thu, 10 Jun 2021 09:52:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jlekstrand-net.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=yUKjA2CcdOSgHjObJE60yhiBeGUAGUGUG7OgeissM3g=; b=1+4DK9spJG3AXdRsC7UasHfNapz+9TmqMwND6/1zD1Kul+e/KjZECg/3vwpXZ/oKGG UdFkLx3zNRrKLosBRQWUwc4DLQqDap02OxVmLh8D7LsU+lA3lV6IlVJzpQz+aTHjNdp7 cEUHDO0NS5wCUFBJ3y2fJNyHAw1nUIZ0LavTgVThFm2IamUeRsJOayLikeY0oeFFVMOH 1aGFESA6mvq1ZMfFugwLI6OmQQB6at1uoaOa8sJb3ObJValLJa9vhj74ecMHppaxp+Vx 3W6izj3Kqs759u+JU4CIhXlqKtk5r7+9vIQLgG5FViqqYIv5aQaM5xC/GRXQW42LDLOU RjeQ== 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=yUKjA2CcdOSgHjObJE60yhiBeGUAGUGUG7OgeissM3g=; b=Yxm7w8lJ+Gb0HSIzhlUnmMvg5gexgzDQz5UXmlF4lP3QUMc42QiYYzRNK4aYrRdCqY Zalz/mm+2Cvdrok7tqwjYpC6K6EuqOOl4nYOPrulq7EKXbte34B/mnz7EPI5RR0iOcM0 X8zD+WWuCdpnTk9TJ2QFlGu3uAHS49mpPQ/dlcI4/VIl1nejva/tRpcX3F6/xI0dXTVb 46CW4VZXG2f2mVunWf5ZCI/GtjjB7TASGR94zB6W8gpqcejBFx9lD/Oha/fO9S/C9JkU p1cU+3FTSW4CGsV6iw4fW7AbkZ/QC325RN1DNh0PoeGKehJwR5HrIkY6Es1Xis5bjyNy Szgw== X-Gm-Message-State: AOAM532m8FZd4cTEL0yhgMjW07085rQtvDbyP5KbzUd7icwUuuvB2swQ Zjqy9c7rq1buvh6eRqkFZdPekQR6gqs6qQlNc6mCiVSmrkHaAw== X-Google-Smtp-Source: ABdhPJxNDkpGwuUOQvptuJKD8Abz9yPahef26rtQjVruTV/KdMIH02fjSnp1rGu9EHM8LV7A/BRv8OP+rd5FfqT28AI= X-Received: by 2002:a25:208b:: with SMTP id g133mr8186088ybg.211.1623343954985; Thu, 10 Jun 2021 09:52:34 -0700 (PDT) MIME-Version: 1.0 References: <20210609212959.471209-1-jason@jlekstrand.net> <20210609212959.471209-6-jason@jlekstrand.net> In-Reply-To: From: Jason Ekstrand Date: Thu, 10 Jun 2021 11:52:23 -0500 Message-ID: Subject: Re: [PATCH 5/5] DONOTMERGE: dma-buf: Get rid of dma_fence_get_rcu_safe To: Daniel Vetter 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 11:38 AM Daniel Vetter wro= te: > > On Thu, Jun 10, 2021 at 6:24 PM Jason Ekstrand wro= te: > > > > On Thu, Jun 10, 2021 at 10:13 AM Daniel Vetter = wrote: > > > > > > On Thu, Jun 10, 2021 at 3:59 PM Jason Ekstrand = wrote: > > > > > > > > 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 = using > > > > > > SLAB_TYPESAFE_BY_RCU for backing dma_fence. Now that no one is= using > > > > > > that anymore (i915 was the only real user), dma_fence_get_rcu i= s > > > > > > sufficient. The one slightly annoying thing we have to deal wi= th here > > > > > > is that dma_fence_get_rcu_safe did an rcu_dereference as well a= s a > > > > > > SLAB_TYPESAFE_BY_RCU-safe dma_fence_get_rcu. This means each c= all 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 under= lying > > > > > 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 bit= s > > > > 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 = NULL > > 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. How is reporting that the exclusive fence is NULL ok in that scenario? If someone comes along and calls dma_resv_get_excl_fence(), we want them to get either the old fence or the new fence but never NULL. NULL would imply that the object is idle which it probably isn't in any sort of pipelined world. > 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. Yup. 19 times. What I'm trying to understand is how much of that code depends on properly catching a pointer-switch race and how much is ok with a NULL failure mode. This trybot seems to imply that most things are ok with the NULL failure mode: https://patchwork.freedesktop.org/series/91267/ Of course, as we discussed on IRC, I'm not sure how much I trust proof-by-trybot here. :-) > 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. Yeah, that's really concerning. It's possible that many of the uses of get_rcu_safe were added because someone had recycle bugs and others were added because of pointer chase bugs and people weren't entirely clear on which. --Jason > -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. T= hat > > > > > 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-bu= f/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_signalin= g(struct dma_fence *fence); > > > > > > * dma_fence_chain_get_prev - use RCU to get a reference to t= he previous fence > > > > > > * @chain: chain node to get the previous node from > > > > > > * > > > > > > - * Use dma_fence_get_rcu_safe to get a reference to the previo= us fence of the > > > > > > - * chain node. > > > > > > + * Use rcu_dereference and dma_fence_get_rcu to get a referenc= e to the > > > > > > + * previous fence of the chain node. > > > > > > */ > > > > > > static struct dma_fence *dma_fence_chain_get_prev(struct dma_= fence_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-r= esv.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 *d= st, 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/driver= s/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 *r= ing, 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/d= rm/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_fe= nce *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/= i915/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 = *vma) > > > > > > struct dma_fence *fence; > > > > > > > > > > > > rcu_read_lock(); > > > > > > - fence =3D dma_fence_get_rcu_safe(&vma->active.exc= l.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_SCHEDUL= E_TIMEOUT); > > > > > > diff --git a/include/drm/drm_syncobj.h b/include/drm/drm_syncob= j.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 *s= yncobj) > > > > > > 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-fenc= e.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_= get_rcu(struct dma_fence *fence) > > > > > > return NULL; > > > > > > } > > > > > > > > > > > > -/** > > > > > > - * dma_fence_get_rcu_safe - acquire a reference to an RCU tra= cked fence > > > > > > - * @fencep: pointer to fence to increase refcount of > > > > > > - * > > > > > > - * Function returns NULL if no refcount could be obtained, or = the fence. > > > > > > - * This function handles acquiring a reference to a fence that= may be > > > > > > - * reallocated within the RCU grace period (such as with SLAB_= TYPESAFE_BY_RCU), > > > > > > - * so long as the caller is using RCU on the pointer to the fe= nce. > > > > > > - * > > > > > > - * An alternative mechanism is to employ a seqlock to protect = a bunch of > > > > > > - * fences, such as used by struct dma_resv. When using a seqlo= ck, > > > > > > - * the seqlock must be taken before and checked after a refere= nce 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= _rcu() > > > > > > - * provides a full memory barrier upon success (s= uch as now). > > > > > > - * This is paired with the write barrier from ass= igning > > > > > > - * to the __rcu protected fence pointer so that i= f that > > > > > > - * pointer still matches the current fence, we kn= ow we > > > > > > - * have successfully acquire a reference to it. I= f it no > > > > > > - * longer matches, we are holding a reference to = some other > > > > > > - * reallocated pointer. This is possible if the a= llocator > > > > > > - * is using a freelist like SLAB_TYPESAFE_BY_RCU = where the > > > > > > - * fence remains valid for the RCU grace period, = but 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 = *obj) > > > > > > 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 > > > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch