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=-12.1 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 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 6D492C48BE5 for ; Fri, 11 Jun 2021 10:07:05 +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 2D214613DE for ; Fri, 11 Jun 2021 10:07:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2D214613DE Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BD4C86EE6E; Fri, 11 Jun 2021 10:07:04 +0000 (UTC) Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) by gabe.freedesktop.org (Postfix) with ESMTPS id D9E686EE72; Fri, 11 Jun 2021 10:07:03 +0000 (UTC) Received: by mail-wr1-x429.google.com with SMTP id i94so5437991wri.4; Fri, 11 Jun 2021 03:07:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=n8g7ZnkckiCgaYJXyB5B/9AcD1eNFrx+Hqhw/CS/rHk=; b=k3oydvUypepGjTT1OkKfLLbKukr+w4yNuphIJoAx7dfF2Ee6qZpjUkmBzaKjLDLYWS HqgI/wWvQ9dfC5aU+zsNTmyP3bDVmvBMP+CpFPQFkdj1yc/ca82lJVVwKXg8CbyuU+tg 1aAIo20WkFvFt47q3udIl4n8P7Za2mi+fHLthh+sVyVya6jhwOI13wOtJygkcTH6n3NN K+SRmeUYwB5xJXJSkO3oRBOEtA5JR4rmpRxhWfCZNyjqqqnHOcxvW7QzgiEcELVUHAyL MhnE4U/0rNAQC7xJH1F2i4Rs6oETbhrYZJX2ItDdp3wxl2hn95h80Yc6xUVrFdbW3DNC cx4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=n8g7ZnkckiCgaYJXyB5B/9AcD1eNFrx+Hqhw/CS/rHk=; b=Ya7xCXgt/g4dIX42+heMI4cSPzGIe6c8B0JrKjysndJtvo9dr7os3DybvEmnxQOdBF eqa6/pwxN8h6UyCk3hKQjQK4PFsQxgS4Mam2i0N9DxtcQrNf45C0y6bb6rfBnS2+0wlq q/ilIjLSoTPC1hJTCwqgy3p1Owargo4MmazTAuTQXVzMG5gJBo+TkrqR8xFPFyOFJp6b M4HaWdDcgdGOYikxm7HdNccMpYrU01Ge/h+hAOkWB2/3TREk2VuytxfoCn8GIQksOfiu eYhbeYtcE9992+95Q+qhwikTwjhMbsy3e2KG5V33YIFGuGN8jdlvL3AAWrRb1+wzod3z jk7g== X-Gm-Message-State: AOAM532oTyN0wPZHLjYqs+VwvsJr77MVvOjFhV1FIQAwAFo4CDJ6sG68 +AXB6iJd8XbZ8QlVUd0lV8DPtxwuync= X-Google-Smtp-Source: ABdhPJxbl+NFqmXYbsIiIfZ1gjrs0Pw25LH1Q0zuNWZpUHW0ZsQ9iMb5vdPpX0hWR6LNkK7lSc6whg== X-Received: by 2002:adf:eac3:: with SMTP id o3mr3117739wrn.157.1623406022501; Fri, 11 Jun 2021 03:07:02 -0700 (PDT) Received: from ?IPv6:2a02:908:1252:fb60:108e:ba37:cb49:9c3? ([2a02:908:1252:fb60:108e:ba37:cb49:9c3]) by smtp.gmail.com with ESMTPSA id 89sm6732939wri.94.2021.06.11.03.07.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 11 Jun 2021 03:07:02 -0700 (PDT) Subject: Re: [PATCH 4/7] dma-buf: add dma_fence_chain_garbage_collect To: Daniel Vetter References: <20210610091800.1833-1-christian.koenig@amd.com> <20210610091800.1833-5-christian.koenig@amd.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: Date: Fri, 11 Jun 2021 12:07:00 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" QW0gMTEuMDYuMjEgdW0gMTA6NTggc2NocmllYiBEYW5pZWwgVmV0dGVyOgo+IE9uIFRodSwgSnVu IDEwLCAyMDIxIGF0IDExOjE3OjU3QU0gKzAyMDAsIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6Cj4+ IEFkZCBzb21lIHJhdGhlciBzb3BoaXN0aWNhdGVkIGxvY2tsZXNzIGdhcmJhZ2UgY29sbGVjdGlv bgo+PiBmb3IgZG1hX2ZlbmNlX2NoYWluIG9iamVjdHMuCj4+Cj4+IEZvciB0aGlzIGtlZXAgYWxs IGluaXRpYWxpemVkIGRtYV9mZW5jZV9jaGFpbiBub2RlcyBhbiBhCj4+IHF1ZXVlIGFuZCB0cmln Z2VyIGdhcmJhZ2UgY29sbGVjdGlvbiBiZWZvcmUgYSBuZXcgb25lIGlzCj4+IGFsbG9jYXRlZC4K Pj4KPj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0Bh bWQuY29tPgo+IFVoIGhhbmQtcm9sbGVkIGxvY2tsZXNzIGxpc3QsIEknbSBub3QgYSBmYW4uCj4K PiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24gaGVyZSBpcyB3aHk/IFRoaXMgaXMgYSBnbG9iYWwgbGlz dCwgc28gaXQncyBnb2luZyB0bwo+IGxvb2sgZ3JlYXQgb24geW91ciBkZXNrdG9wLCBidXQgZ3B1 cyBhcmUgZm9yIHNlcnZlcnMgbm93IGFuZCB0aG9zZSBhcmUKPiBOVU1BLiBTbyBqdXN0IGZyb20g dGhhdCBwb3YgZG9pbmcgZ2FyYmFnZS1jb2xsZWN0aW9uIGluZGl2aWR1YWxseSBzdGlsbAo+IGZl ZWxzIGxpa2UgYSBtdWNoIGJldHRlciBpZGVhLgoKWWVhaCwgSSB3YXMgcG9uZGVyaW5nIG9uIHRo YXQgcXVpdGUgYSBiaXQgYXMgd2VsbC4gVGhhdCB3aHkgSSBhZGRlZCB0aGUgCm11bHRpIHRocmVh ZGVkIGFsbG9jL2ZyZWUgdGVzdC4KCj4gU28gd2hhdCdzIHRoZSBwcm9ibGVtIHlvdXIgdHJ5aW5n IHRvIHNvbHZlIGhlcmU/CgpJIHdhcyBub3Qgc3VyZSBpZiB0aGUgY2hhaW4gaXMgZ2FyYmFnZSBj b2xsZWN0ZWQgZW5vdWdoIHdoZW4gdXNlZCBmb3IgCnRoZSBkbWFfcmVzdiBleGNsdXNpdmUgb2Jq ZWN0LgoKQnV0IEkgdGhpbmsgd2UgY291bGQganVzdCBkcm9wIHRoaXMgZm9yIG5vdyBhbmQganVz dCBzZWUgaG93IGl0IGdvZXMuCgpDaHJpc3RpYW4uCgo+IC1EYW5pZWwKPgo+PiAtLS0KPj4gICBk cml2ZXJzL2RtYS1idWYvZG1hLWZlbmNlLWNoYWluLmMgfCAxNjAgKysrKysrKysrKysrKysrKysr KysrKysrKy0tLS0tCj4+ICAgaW5jbHVkZS9saW51eC9kbWEtZmVuY2UtY2hhaW4uaCAgIHwgICA1 ICsKPj4gICAyIGZpbGVzIGNoYW5nZWQsIDE0MiBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMo LSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UtY2hhaW4uYyBi L2RyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UtY2hhaW4uYwo+PiBpbmRleCAxYjRjYjNlNWNlYzku LmMyZjBiNjllYWJiNyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS1j aGFpbi5jCj4+ICsrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UtY2hhaW4uYwo+PiBAQCAt OSw4ICs5LDUzIEBACj4+ICAgCj4+ICAgI2luY2x1ZGUgPGxpbnV4L2RtYS1mZW5jZS1jaGFpbi5o Pgo+PiAgIAo+PiArc3RhdGljIHN0cnVjdCBkbWFfZmVuY2VfY2hhaW4gX19yY3UgKmZpZm9fZnJv bnQ7Cj4+ICtzdGF0aWMgc3RydWN0IGRtYV9mZW5jZV9jaGFpbiBfX3JjdSAqKmZpZm9fYmFjayA9 ICZmaWZvX2Zyb250Owo+PiArCj4+ICAgc3RhdGljIGJvb2wgZG1hX2ZlbmNlX2NoYWluX2VuYWJs ZV9zaWduYWxpbmcoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpOwo+PiAgIAo+PiArLyoqCj4+ICsg KiBkbWFfZmVuY2VfY2hhaW5fZW5xdWV1ZSAtIGVucWV1ZSBhIGNoYWluIG5vZGUgZm9yIGdhcmJh Z2UgY29sbGVjdGlvbgo+PiArICogQGNoYWluOiB0aGUgY2hhaW4gbm9kZSB0byBlbnF1ZXVlCj4+ ICsgKgo+PiArICogQWRkIHRoZSBjaGFpbiBub2RlIHRvIHRoZSBlbmQgb2YgdGhlIGdjIGZpZm8u Cj4+ICsgKi8KPj4gK3N0YXRpYyB2b2lkIGRtYV9mZW5jZV9jaGFpbl9lbnF1ZXVlKHN0cnVjdCBk bWFfZmVuY2VfY2hhaW4gKmNoYWluKQo+PiArewo+PiArCXN0cnVjdCBkbWFfZmVuY2VfY2hhaW4g X19yY3UgKip0bXA7Cj4+ICsKPj4gKwlSQ1VfSU5JVF9QT0lOVEVSKGNoYWluLT5uZXh0LCBOVUxM KTsKPj4gKwl0bXAgPSB4Y2hnKChzdHJ1Y3QgZG1hX2ZlbmNlX2NoYWluIF9fZm9yY2UgKioqKSZm aWZvX2JhY2ssCj4+ICsJCSAgICZjaGFpbi0+bmV4dCk7Cj4+ICsKPj4gKwkvKiBUaGlzIGlzIGlu dGVudGlvbmFsbHkgdW5vcmRlcmVkIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGUgZmlmbyBmb3IgZ2Mg Ki8KPj4gKwlyY3VfYXNzaWduX3BvaW50ZXIoKnRtcCwgY2hhaW4pOwo+PiArfQo+PiArCj4+ICsv KioKPj4gKyAqIGRtYV9mZW5jZV9jaGFpbl9kZXF1ZXVlIC0gZGVxZXVldWUgYSBjaGFpbiBub2Rl IGZvciBnYXJiYWdlIGNvbGxlY3Rpb24KPj4gKyAqCj4+ICsgKiBSZW1vdmUgdGhlIGZpcnN0IGNo YWluIG5vZGUgZnJvbSB0aGUgZ2MgZmlmbyB3aGlsZSBtYWtpbmcgc3VyZSB0aGF0IGFsd2F5cwo+ PiArICoga2VlcCBhdCBsZWFzdCBvbmUgbm9kZSBvbiB0aGUgZmlmbyBmb3IgbG9ja2xlc3MgZmlm byBpbXBsZW1lbnRhdGlvbi4KPj4gKyAqIFJldHVybnMgdGhlIGRlcXVldWVkIGNoYWluIG5vZGUg b3IgTlVMTC4KPj4gKyAqLwo+PiArc3RhdGljIHN0cnVjdCBkbWFfZmVuY2VfY2hhaW4gKmRtYV9m ZW5jZV9jaGFpbl9kZXF1ZXVlKHZvaWQpCj4+ICt7Cj4+ICsJc3RydWN0IGRtYV9mZW5jZV9jaGFp biAqY2hhaW4sICp0bXA7Cj4+ICsKPj4gKwlyY3VfcmVhZF9sb2NrKCk7Cj4+ICsJY2hhaW4gPSBy Y3VfZGVyZWZlcmVuY2UoZmlmb19mcm9udCk7Cj4+ICsJLyogTmV2ZXIgZGVxdWV1ZSB0aGUgbGFz dCBjaGFpbiBub2RlIGZvciBsb2NrbGVzcyBmaWZvICovCj4+ICsJaWYgKHVubGlrZWx5KCFjaGFp biB8fCAhcmN1X2FjY2Vzc19wb2ludGVyKGNoYWluLT5uZXh0KSkpIHsKPj4gKwkJcmN1X3JlYWRf dW5sb2NrKCk7Cj4+ICsJCXJldHVybiBOVUxMOwo+PiArCX0KPj4gKwl0bXAgPSBjbXB4Y2hnKChz dHJ1Y3QgZG1hX2ZlbmNlX2NoYWluIF9fZm9yY2UgKiopJmZpZm9fZnJvbnQsCj4+ICsJCSAgICAg IGNoYWluLCByY3VfYWNjZXNzX3BvaW50ZXIoY2hhaW4tPm5leHQpKTsKPj4gKwlyY3VfcmVhZF91 bmxvY2soKTsKPj4gKwlyZXR1cm4gdG1wID09IGNoYWluID8gY2hhaW4gOiBOVUxMOwo+PiArfQo+ PiArCj4+ICAgLyoqCj4+ICAgICogZG1hX2ZlbmNlX2NoYWluX2dldF9wcmV2IC0gdXNlIFJDVSB0 byBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzIGZlbmNlCj4+ICAgICogQGNoYWluOiBj aGFpbiBub2RlIHRvIGdldCB0aGUgcHJldmlvdXMgbm9kZSBmcm9tCj4+IEBAIC0yOCw2ICs3Myw0 MyBAQCBzdGF0aWMgc3RydWN0IGRtYV9mZW5jZSAqZG1hX2ZlbmNlX2NoYWluX2dldF9wcmV2KHN0 cnVjdCBkbWFfZmVuY2VfY2hhaW4gKmNoYWluKQo+PiAgIAlyZXR1cm4gcHJldjsKPj4gICB9Cj4+ ICAgCj4+ICsvKioKPj4gKyAqIGRtYV9mZW5jZV9jaGFpbl90cnlfcmVwbGFjZSAtIHRyeSB0byBy ZXBsYWNlIHRoZSBwcmV2IG5vZGUKPj4gKyAqIEBjaGFpbjogQ2hhaW4gbm9kZSB3ZSB0cnkgdG8g cmVwbGFjZSBwcmV2Lgo+PiArICogQHByZXY6IHRoZSBvbGQgcHJldiBub2RlCj4+ICsgKgo+PiAr ICogVHJ5IHRvIHJlcGxhY2UgdGhlIHByZXZpb3VzIGNoYWluIG5vZGUgd2hlbiBpdCBvciBpdHMg Y29udGFpbmluZyBmZW5jZSBpcwo+PiArICogc2lnbmFsZWQuIFJldHVybnMgdHJ1ZSBpZiB3ZSB0 cmllZCwgZmFsc2UgaWYgd2UgbmVlZCB0byB3YWl0Lgo+PiArICovCj4+ICtzdGF0aWMgYm9vbCBk bWFfZmVuY2VfY2hhaW5fdHJ5X3JlcGxhY2Uoc3RydWN0IGRtYV9mZW5jZV9jaGFpbiAqY2hhaW4s Cj4+ICsJCQkJCXN0cnVjdCBkbWFfZmVuY2UgKnByZXYpCj4+ICt7Cj4+ICsJc3RydWN0IGRtYV9m ZW5jZSAqcmVwbGFjZW1lbnQsICp0bXA7Cj4+ICsJc3RydWN0IGRtYV9mZW5jZV9jaGFpbiAqcHJl dl9jaGFpbjsKPj4gKwo+PiArCXByZXZfY2hhaW4gPSB0b19kbWFfZmVuY2VfY2hhaW4ocHJldik7 Cj4+ICsJaWYgKHByZXZfY2hhaW4pIHsKPj4gKwkJaWYgKCFkbWFfZmVuY2VfaXNfc2lnbmFsZWQo cHJldl9jaGFpbi0+ZmVuY2UpKQo+PiArCQkJcmV0dXJuIGZhbHNlOwo+PiArCj4+ICsJCXJlcGxh Y2VtZW50ID0gZG1hX2ZlbmNlX2NoYWluX2dldF9wcmV2KHByZXZfY2hhaW4pOwo+PiArCX0gZWxz ZSB7Cj4+ICsJCWlmICghZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKHByZXYpKQo+PiArCQkJcmV0dXJu IGZhbHNlOwo+PiArCj4+ICsJCXJlcGxhY2VtZW50ID0gTlVMTDsKPj4gKwl9Cj4+ICsKPj4gKwl0 bXAgPSBjbXB4Y2hnKChzdHJ1Y3QgZG1hX2ZlbmNlIF9fZm9yY2UgKiopJmNoYWluLT5wcmV2LCBw cmV2LAo+PiArCQkgICAgICByZXBsYWNlbWVudCk7Cj4+ICsJaWYgKHRtcCA9PSBwcmV2KQo+PiAr CQlkbWFfZmVuY2VfcHV0KHRtcCk7Cj4+ICsJZWxzZQo+PiArCQlkbWFfZmVuY2VfcHV0KHJlcGxh Y2VtZW50KTsKPj4gKwo+PiArCXJldHVybiB0cnVlOwo+PiArfQo+PiArCj4+ICAgLyoqCj4+ICAg ICogZG1hX2ZlbmNlX2NoYWluX3dhbGsgLSBjaGFpbiB3YWxraW5nIGZ1bmN0aW9uCj4+ICAgICog QGZlbmNlOiBjdXJyZW50IGNoYWluIG5vZGUKPj4gQEAgLTM4LDggKzEyMCw4IEBAIHN0YXRpYyBz dHJ1Y3QgZG1hX2ZlbmNlICpkbWFfZmVuY2VfY2hhaW5fZ2V0X3ByZXYoc3RydWN0IGRtYV9mZW5j ZV9jaGFpbiAqY2hhaW4pCj4+ICAgICovCj4+ICAgc3RydWN0IGRtYV9mZW5jZSAqZG1hX2ZlbmNl X2NoYWluX3dhbGsoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCj4+ICAgewo+PiAtCXN0cnVjdCBk bWFfZmVuY2VfY2hhaW4gKmNoYWluLCAqcHJldl9jaGFpbjsKPj4gLQlzdHJ1Y3QgZG1hX2ZlbmNl ICpwcmV2LCAqcmVwbGFjZW1lbnQsICp0bXA7Cj4+ICsJc3RydWN0IGRtYV9mZW5jZV9jaGFpbiAq Y2hhaW47Cj4+ICsJc3RydWN0IGRtYV9mZW5jZSAqcHJldjsKPj4gICAKPj4gICAJY2hhaW4gPSB0 b19kbWFfZmVuY2VfY2hhaW4oZmVuY2UpOwo+PiAgIAlpZiAoIWNoYWluKSB7Cj4+IEBAIC00OCwy NiArMTMwLDggQEAgc3RydWN0IGRtYV9mZW5jZSAqZG1hX2ZlbmNlX2NoYWluX3dhbGsoc3RydWN0 IGRtYV9mZW5jZSAqZmVuY2UpCj4+ICAgCX0KPj4gICAKPj4gICAJd2hpbGUgKChwcmV2ID0gZG1h X2ZlbmNlX2NoYWluX2dldF9wcmV2KGNoYWluKSkpIHsKPj4gLQo+PiAtCQlwcmV2X2NoYWluID0g dG9fZG1hX2ZlbmNlX2NoYWluKHByZXYpOwo+PiAtCQlpZiAocHJldl9jaGFpbikgewo+PiAtCQkJ aWYgKCFkbWFfZmVuY2VfaXNfc2lnbmFsZWQocHJldl9jaGFpbi0+ZmVuY2UpKQo+PiAtCQkJCWJy ZWFrOwo+PiAtCj4+IC0JCQlyZXBsYWNlbWVudCA9IGRtYV9mZW5jZV9jaGFpbl9nZXRfcHJldihw cmV2X2NoYWluKTsKPj4gLQkJfSBlbHNlIHsKPj4gLQkJCWlmICghZG1hX2ZlbmNlX2lzX3NpZ25h bGVkKHByZXYpKQo+PiAtCQkJCWJyZWFrOwo+PiAtCj4+IC0JCQlyZXBsYWNlbWVudCA9IE5VTEw7 Cj4+IC0JCX0KPj4gLQo+PiAtCQl0bXAgPSBjbXB4Y2hnKChzdHJ1Y3QgZG1hX2ZlbmNlIF9fZm9y Y2UgKiopJmNoYWluLT5wcmV2LAo+PiAtCQkJICAgICAgcHJldiwgcmVwbGFjZW1lbnQpOwo+PiAt CQlpZiAodG1wID09IHByZXYpCj4+IC0JCQlkbWFfZmVuY2VfcHV0KHRtcCk7Cj4+IC0JCWVsc2UK Pj4gLQkJCWRtYV9mZW5jZV9wdXQocmVwbGFjZW1lbnQpOwo+PiArCQlpZiAoIWRtYV9mZW5jZV9j aGFpbl90cnlfcmVwbGFjZShjaGFpbiwgcHJldikpCj4+ICsJCQlicmVhazsKPj4gICAJCWRtYV9m ZW5jZV9wdXQocHJldik7Cj4+ICAgCX0KPj4gICAKPj4gQEAgLTIwNSw3ICsyNjksMjEgQEAgc3Rh dGljIHZvaWQgZG1hX2ZlbmNlX2NoYWluX3JlbGVhc2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2Up Cj4+ICAgCWRtYV9mZW5jZV9wdXQocHJldik7Cj4+ICAgCj4+ICAgCWRtYV9mZW5jZV9wdXQoY2hh aW4tPmZlbmNlKTsKPj4gLQlkbWFfZmVuY2VfZnJlZShmZW5jZSk7Cj4+ICsJV1JJVEVfT05DRShj aGFpbi0+ZmVuY2UsIE5VTEwpOwo+PiArCj4+ICsJLyoKPj4gKwkgKiBEb24ndCBnYXJiYWdlIGNv bGxlY3QgaGVyZSB0byBhdm9pZCByZWN1cnNpb24gYW5kIHBvdGVudGlhbCBzdGFjawo+PiArCSAq IG92ZXJmbG93Lgo+PiArCSAqLwo+PiArCWNoYWluID0gZG1hX2ZlbmNlX2NoYWluX2RlcXVldWUo KTsKPj4gKwlpZiAoIWNoYWluKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlpZiAoa3JlZl9yZWFk KCZjaGFpbi0+YmFzZS5yZWZjb3VudCkgfHwKPj4gKwkgICAgUkVBRF9PTkNFKGNoYWluLT5mZW5j ZSkpCj4+ICsJCWRtYV9mZW5jZV9jaGFpbl9lbnF1ZXVlKGNoYWluKTsKPj4gKwllbHNlCj4+ICsJ CWRtYV9mZW5jZV9mcmVlKCZjaGFpbi0+YmFzZSk7Cj4+ICAgfQo+PiAgIAo+PiAgIGNvbnN0IHN0 cnVjdCBkbWFfZmVuY2Vfb3BzIGRtYV9mZW5jZV9jaGFpbl9vcHMgPSB7Cj4+IEBAIC0yMTgsNiAr Mjk2LDQwIEBAIGNvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIGRtYV9mZW5jZV9jaGFpbl9vcHMg PSB7Cj4+ICAgfTsKPj4gICBFWFBPUlRfU1lNQk9MKGRtYV9mZW5jZV9jaGFpbl9vcHMpOwo+PiAg IAo+PiArLyoqCj4+ICsgKiBkbWFfZmVuY2VfY2hhaW5fZ2FyYmFnZV9jb2xsZWN0IC0gY2xlYW51 cCBjaGFpbiBub2Rlcwo+PiArICoKPj4gKyAqIERvIHNvbWUgZ2FyYmFnZSBjb2xsZWN0aW9uIGFu ZCB0cnkgdG8gcmVsZWFzZSBjaGFpbiBub2Rlcy4KPj4gKyAqLwo+PiArdm9pZCBkbWFfZmVuY2Vf Y2hhaW5fZ2FyYmFnZV9jb2xsZWN0KHZvaWQpCj4+ICt7Cj4+ICsJc3RydWN0IGRtYV9mZW5jZV9j aGFpbiAqY2hhaW4gPSBkbWFfZmVuY2VfY2hhaW5fZGVxdWV1ZSgpOwo+PiArCj4+ICsJaWYgKCFj aGFpbikKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJaWYgKCFkbWFfZmVuY2VfZ2V0X3JjdSgmY2hh aW4tPmJhc2UpKSB7Cj4+ICsJCS8qIFVudXNlZCwgY2hlY2sgaWYgaXQncyBhbHNvIGNsZWFuICov Cj4+ICsJCWlmIChsaWtlbHkoIVJFQURfT05DRShjaGFpbi0+ZmVuY2UpKSkgewo+PiArCQkJZG1h X2ZlbmNlX2ZyZWUoJmNoYWluLT5iYXNlKTsKPj4gKwkJCXJldHVybjsKPj4gKwkJfQo+PiArCj4+ ICsJfSBlbHNlIHsKPj4gKwkJc3RydWN0IGRtYV9mZW5jZSAqcHJldjsKPj4gKwo+PiArCQkvKiBV c2VkLCBkbyBzb21lIGNoYWluIHdhbGsgKi8KPj4gKwkJcHJldiA9IGRtYV9mZW5jZV9jaGFpbl9n ZXRfcHJldihjaGFpbik7Cj4+ICsJCWlmIChwcmV2KSB7Cj4+ICsJCQlkbWFfZmVuY2VfY2hhaW5f dHJ5X3JlcGxhY2UoY2hhaW4sIHByZXYpOwo+PiArCQkJZG1hX2ZlbmNlX3B1dChwcmV2KTsKPj4g KwkJfQo+PiArCQlkbWFfZmVuY2VfcHV0KCZjaGFpbi0+YmFzZSk7Cj4+ICsJfQo+PiArCWRtYV9m ZW5jZV9jaGFpbl9lbnF1ZXVlKGNoYWluKTsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0woZG1hX2Zl bmNlX2NoYWluX2dhcmJhZ2VfY29sbGVjdCk7Cj4+ICsKPj4gICAvKioKPj4gICAgKiBkbWFfZmVu Y2VfY2hhaW5faW5pdCAtIGluaXRpYWxpemUgYSBmZW5jZSBjaGFpbgo+PiAgICAqIEBjaGFpbjog dGhlIGNoYWluIG5vZGUgdG8gaW5pdGlhbGl6ZQo+PiBAQCAtMjU0LDUgKzM2Niw3IEBAIHZvaWQg ZG1hX2ZlbmNlX2NoYWluX2luaXQoc3RydWN0IGRtYV9mZW5jZV9jaGFpbiAqY2hhaW4sCj4+ICAg Cj4+ICAgCWRtYV9mZW5jZV9pbml0KCZjaGFpbi0+YmFzZSwgJmRtYV9mZW5jZV9jaGFpbl9vcHMs Cj4+ICAgCQkgICAgICAgJmNoYWluLT5sb2NrLCBjb250ZXh0LCBzZXFubyk7Cj4+ICsJZG1hX2Zl bmNlX2NoYWluX2VucXVldWUoY2hhaW4pOwo+PiAgIH0KPj4gKwo+PiAgIEVYUE9SVF9TWU1CT0wo ZG1hX2ZlbmNlX2NoYWluX2luaXQpOwo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEt ZmVuY2UtY2hhaW4uaCBiL2luY2x1ZGUvbGludXgvZG1hLWZlbmNlLWNoYWluLmgKPj4gaW5kZXgg NWY0NTY4OWE2ZDJlLi5iNDEyYjUzOTY0MzQgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvbGludXgv ZG1hLWZlbmNlLWNoYWluLmgKPj4gKysrIGIvaW5jbHVkZS9saW51eC9kbWEtZmVuY2UtY2hhaW4u aAo+PiBAQCAtMTksNiArMTksNyBAQAo+PiAgICAqIEBiYXNlOiBmZW5jZSBiYXNlIGNsYXNzCj4+ ICAgICogQGxvY2s6IHNwaW5sb2NrIGZvciBmZW5jZSBoYW5kbGluZwo+PiAgICAqIEBwcmV2OiBw cmV2aW91cyBmZW5jZSBvZiB0aGUgY2hhaW4KPj4gKyAqIEBuZXh0OiBuZXh0IGNoYWluIG5vZGUg Zm9yIGdhcmJhZ2UgY29sbGVjdGlvbgo+PiAgICAqIEBwcmV2X3NlcW5vOiBvcmlnaW5hbCBwcmV2 aW91cyBzZXFubyBiZWZvcmUgZ2FyYmFnZSBjb2xsZWN0aW9uCj4+ICAgICogQGZlbmNlOiBlbmNh cHN1bGF0ZWQgZmVuY2UKPj4gICAgKiBAY2I6IGNhbGxiYWNrIHN0cnVjdHVyZSBmb3Igc2lnbmFs aW5nCj4+IEBAIC0yNyw2ICsyOCw3IEBACj4+ICAgc3RydWN0IGRtYV9mZW5jZV9jaGFpbiB7Cj4+ ICAgCXN0cnVjdCBkbWFfZmVuY2UgYmFzZTsKPj4gICAJc3RydWN0IGRtYV9mZW5jZSBfX3JjdSAq cHJldjsKPj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlX2NoYWluIF9fcmN1ICpuZXh0Owo+PiAgIAl1NjQg cHJldl9zZXFubzsKPj4gICAJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4+ICAgCXVuaW9uIHsK Pj4gQEAgLTM4LDYgKzQwLDggQEAgc3RydWN0IGRtYV9mZW5jZV9jaGFpbiB7Cj4+ICAgCj4+ICAg ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIGRtYV9mZW5jZV9jaGFpbl9vcHM7Cj4+ ICAgCj4+ICt2b2lkIGRtYV9mZW5jZV9jaGFpbl9nYXJiYWdlX2NvbGxlY3Qodm9pZCk7Cj4+ICsK Pj4gICAvKioKPj4gICAgKiB0b19kbWFfZmVuY2VfY2hhaW4gLSBjYXN0IGEgZmVuY2UgdG8gYSBk bWFfZmVuY2VfY2hhaW4KPj4gICAgKiBAZmVuY2U6IGZlbmNlIHRvIGNhc3QgdG8gYSBkbWFfZmVu Y2VfYXJyYXkKPj4gQEAgLTYxLDYgKzY1LDcgQEAgdG9fZG1hX2ZlbmNlX2NoYWluKHN0cnVjdCBk bWFfZmVuY2UgKmZlbmNlKQo+PiAgICAqLwo+PiAgIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9m ZW5jZV9jaGFpbiAqZG1hX2ZlbmNlX2NoYWluX2FsbG9jKHZvaWQpCj4+ICAgewo+PiArCWRtYV9m ZW5jZV9jaGFpbl9nYXJiYWdlX2NvbGxlY3QoKTsKPj4gICAJcmV0dXJuIGttYWxsb2Moc2l6ZW9m KHN0cnVjdCBkbWFfZmVuY2VfY2hhaW4pLCBHRlBfS0VSTkVMKTsKPj4gICB9Owo+PiAgIAo+PiAt LSAKPj4gMi4yNS4xCj4+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK 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=-12.1 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 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 C550BC48BE0 for ; Fri, 11 Jun 2021 10:07:06 +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 931D4611CD for ; Fri, 11 Jun 2021 10:07:06 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 931D4611CD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B04A16EE6C; Fri, 11 Jun 2021 10:07:04 +0000 (UTC) Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) by gabe.freedesktop.org (Postfix) with ESMTPS id D9E686EE72; Fri, 11 Jun 2021 10:07:03 +0000 (UTC) Received: by mail-wr1-x429.google.com with SMTP id i94so5437991wri.4; Fri, 11 Jun 2021 03:07:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=n8g7ZnkckiCgaYJXyB5B/9AcD1eNFrx+Hqhw/CS/rHk=; b=k3oydvUypepGjTT1OkKfLLbKukr+w4yNuphIJoAx7dfF2Ee6qZpjUkmBzaKjLDLYWS HqgI/wWvQ9dfC5aU+zsNTmyP3bDVmvBMP+CpFPQFkdj1yc/ca82lJVVwKXg8CbyuU+tg 1aAIo20WkFvFt47q3udIl4n8P7Za2mi+fHLthh+sVyVya6jhwOI13wOtJygkcTH6n3NN K+SRmeUYwB5xJXJSkO3oRBOEtA5JR4rmpRxhWfCZNyjqqqnHOcxvW7QzgiEcELVUHAyL MhnE4U/0rNAQC7xJH1F2i4Rs6oETbhrYZJX2ItDdp3wxl2hn95h80Yc6xUVrFdbW3DNC cx4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=n8g7ZnkckiCgaYJXyB5B/9AcD1eNFrx+Hqhw/CS/rHk=; b=Ya7xCXgt/g4dIX42+heMI4cSPzGIe6c8B0JrKjysndJtvo9dr7os3DybvEmnxQOdBF eqa6/pwxN8h6UyCk3hKQjQK4PFsQxgS4Mam2i0N9DxtcQrNf45C0y6bb6rfBnS2+0wlq q/ilIjLSoTPC1hJTCwqgy3p1Owargo4MmazTAuTQXVzMG5gJBo+TkrqR8xFPFyOFJp6b M4HaWdDcgdGOYikxm7HdNccMpYrU01Ge/h+hAOkWB2/3TREk2VuytxfoCn8GIQksOfiu eYhbeYtcE9992+95Q+qhwikTwjhMbsy3e2KG5V33YIFGuGN8jdlvL3AAWrRb1+wzod3z jk7g== X-Gm-Message-State: AOAM532oTyN0wPZHLjYqs+VwvsJr77MVvOjFhV1FIQAwAFo4CDJ6sG68 +AXB6iJd8XbZ8QlVUd0lV8DPtxwuync= X-Google-Smtp-Source: ABdhPJxbl+NFqmXYbsIiIfZ1gjrs0Pw25LH1Q0zuNWZpUHW0ZsQ9iMb5vdPpX0hWR6LNkK7lSc6whg== X-Received: by 2002:adf:eac3:: with SMTP id o3mr3117739wrn.157.1623406022501; Fri, 11 Jun 2021 03:07:02 -0700 (PDT) Received: from ?IPv6:2a02:908:1252:fb60:108e:ba37:cb49:9c3? ([2a02:908:1252:fb60:108e:ba37:cb49:9c3]) by smtp.gmail.com with ESMTPSA id 89sm6732939wri.94.2021.06.11.03.07.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 11 Jun 2021 03:07:02 -0700 (PDT) Subject: Re: [PATCH 4/7] dma-buf: add dma_fence_chain_garbage_collect To: Daniel Vetter References: <20210610091800.1833-1-christian.koenig@amd.com> <20210610091800.1833-5-christian.koenig@amd.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: Date: Fri, 11 Jun 2021 12:07:00 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US 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: amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Am 11.06.21 um 10:58 schrieb Daniel Vetter: > On Thu, Jun 10, 2021 at 11:17:57AM +0200, Christian König wrote: >> Add some rather sophisticated lockless garbage collection >> for dma_fence_chain objects. >> >> For this keep all initialized dma_fence_chain nodes an a >> queue and trigger garbage collection before a new one is >> allocated. >> >> Signed-off-by: Christian König > Uh hand-rolled lockless list, I'm not a fan. > > But the real question here is why? This is a global list, so it's going to > look great on your desktop, but gpus are for servers now and those are > NUMA. So just from that pov doing garbage-collection individually still > feels like a much better idea. Yeah, I was pondering on that quite a bit as well. That why I added the multi threaded alloc/free test. > So what's the problem your trying to solve here? I was not sure if the chain is garbage collected enough when used for the dma_resv exclusive object. But I think we could just drop this for now and just see how it goes. Christian. > -Daniel > >> --- >> drivers/dma-buf/dma-fence-chain.c | 160 +++++++++++++++++++++++++----- >> include/linux/dma-fence-chain.h | 5 + >> 2 files changed, 142 insertions(+), 23 deletions(-) >> >> diff --git a/drivers/dma-buf/dma-fence-chain.c b/drivers/dma-buf/dma-fence-chain.c >> index 1b4cb3e5cec9..c2f0b69eabb7 100644 >> --- a/drivers/dma-buf/dma-fence-chain.c >> +++ b/drivers/dma-buf/dma-fence-chain.c >> @@ -9,8 +9,53 @@ >> >> #include >> >> +static struct dma_fence_chain __rcu *fifo_front; >> +static struct dma_fence_chain __rcu **fifo_back = &fifo_front; >> + >> static bool dma_fence_chain_enable_signaling(struct dma_fence *fence); >> >> +/** >> + * dma_fence_chain_enqueue - enqeue a chain node for garbage collection >> + * @chain: the chain node to enqueue >> + * >> + * Add the chain node to the end of the gc fifo. >> + */ >> +static void dma_fence_chain_enqueue(struct dma_fence_chain *chain) >> +{ >> + struct dma_fence_chain __rcu **tmp; >> + >> + RCU_INIT_POINTER(chain->next, NULL); >> + tmp = xchg((struct dma_fence_chain __force ***)&fifo_back, >> + &chain->next); >> + >> + /* This is intentionally unordered since we only need the fifo for gc */ >> + rcu_assign_pointer(*tmp, chain); >> +} >> + >> +/** >> + * dma_fence_chain_dequeue - deqeueue a chain node for garbage collection >> + * >> + * Remove the first chain node from the gc fifo while making sure that always >> + * keep at least one node on the fifo for lockless fifo implementation. >> + * Returns the dequeued chain node or NULL. >> + */ >> +static struct dma_fence_chain *dma_fence_chain_dequeue(void) >> +{ >> + struct dma_fence_chain *chain, *tmp; >> + >> + rcu_read_lock(); >> + chain = rcu_dereference(fifo_front); >> + /* Never dequeue the last chain node for lockless fifo */ >> + if (unlikely(!chain || !rcu_access_pointer(chain->next))) { >> + rcu_read_unlock(); >> + return NULL; >> + } >> + tmp = cmpxchg((struct dma_fence_chain __force **)&fifo_front, >> + chain, rcu_access_pointer(chain->next)); >> + rcu_read_unlock(); >> + return tmp == chain ? chain : NULL; >> +} >> + >> /** >> * dma_fence_chain_get_prev - use RCU to get a reference to the previous fence >> * @chain: chain node to get the previous node from >> @@ -28,6 +73,43 @@ static struct dma_fence *dma_fence_chain_get_prev(struct dma_fence_chain *chain) >> return prev; >> } >> >> +/** >> + * dma_fence_chain_try_replace - try to replace the prev node >> + * @chain: Chain node we try to replace prev. >> + * @prev: the old prev node >> + * >> + * Try to replace the previous chain node when it or its containing fence is >> + * signaled. Returns true if we tried, false if we need to wait. >> + */ >> +static bool dma_fence_chain_try_replace(struct dma_fence_chain *chain, >> + struct dma_fence *prev) >> +{ >> + struct dma_fence *replacement, *tmp; >> + struct dma_fence_chain *prev_chain; >> + >> + prev_chain = to_dma_fence_chain(prev); >> + if (prev_chain) { >> + if (!dma_fence_is_signaled(prev_chain->fence)) >> + return false; >> + >> + replacement = dma_fence_chain_get_prev(prev_chain); >> + } else { >> + if (!dma_fence_is_signaled(prev)) >> + return false; >> + >> + replacement = NULL; >> + } >> + >> + tmp = cmpxchg((struct dma_fence __force **)&chain->prev, prev, >> + replacement); >> + if (tmp == prev) >> + dma_fence_put(tmp); >> + else >> + dma_fence_put(replacement); >> + >> + return true; >> +} >> + >> /** >> * dma_fence_chain_walk - chain walking function >> * @fence: current chain node >> @@ -38,8 +120,8 @@ static struct dma_fence *dma_fence_chain_get_prev(struct dma_fence_chain *chain) >> */ >> struct dma_fence *dma_fence_chain_walk(struct dma_fence *fence) >> { >> - struct dma_fence_chain *chain, *prev_chain; >> - struct dma_fence *prev, *replacement, *tmp; >> + struct dma_fence_chain *chain; >> + struct dma_fence *prev; >> >> chain = to_dma_fence_chain(fence); >> if (!chain) { >> @@ -48,26 +130,8 @@ struct dma_fence *dma_fence_chain_walk(struct dma_fence *fence) >> } >> >> while ((prev = dma_fence_chain_get_prev(chain))) { >> - >> - prev_chain = to_dma_fence_chain(prev); >> - if (prev_chain) { >> - if (!dma_fence_is_signaled(prev_chain->fence)) >> - break; >> - >> - replacement = dma_fence_chain_get_prev(prev_chain); >> - } else { >> - if (!dma_fence_is_signaled(prev)) >> - break; >> - >> - replacement = NULL; >> - } >> - >> - tmp = cmpxchg((struct dma_fence __force **)&chain->prev, >> - prev, replacement); >> - if (tmp == prev) >> - dma_fence_put(tmp); >> - else >> - dma_fence_put(replacement); >> + if (!dma_fence_chain_try_replace(chain, prev)) >> + break; >> dma_fence_put(prev); >> } >> >> @@ -205,7 +269,21 @@ static void dma_fence_chain_release(struct dma_fence *fence) >> dma_fence_put(prev); >> >> dma_fence_put(chain->fence); >> - dma_fence_free(fence); >> + WRITE_ONCE(chain->fence, NULL); >> + >> + /* >> + * Don't garbage collect here to avoid recursion and potential stack >> + * overflow. >> + */ >> + chain = dma_fence_chain_dequeue(); >> + if (!chain) >> + return; >> + >> + if (kref_read(&chain->base.refcount) || >> + READ_ONCE(chain->fence)) >> + dma_fence_chain_enqueue(chain); >> + else >> + dma_fence_free(&chain->base); >> } >> >> const struct dma_fence_ops dma_fence_chain_ops = { >> @@ -218,6 +296,40 @@ const struct dma_fence_ops dma_fence_chain_ops = { >> }; >> EXPORT_SYMBOL(dma_fence_chain_ops); >> >> +/** >> + * dma_fence_chain_garbage_collect - cleanup chain nodes >> + * >> + * Do some garbage collection and try to release chain nodes. >> + */ >> +void dma_fence_chain_garbage_collect(void) >> +{ >> + struct dma_fence_chain *chain = dma_fence_chain_dequeue(); >> + >> + if (!chain) >> + return; >> + >> + if (!dma_fence_get_rcu(&chain->base)) { >> + /* Unused, check if it's also clean */ >> + if (likely(!READ_ONCE(chain->fence))) { >> + dma_fence_free(&chain->base); >> + return; >> + } >> + >> + } else { >> + struct dma_fence *prev; >> + >> + /* Used, do some chain walk */ >> + prev = dma_fence_chain_get_prev(chain); >> + if (prev) { >> + dma_fence_chain_try_replace(chain, prev); >> + dma_fence_put(prev); >> + } >> + dma_fence_put(&chain->base); >> + } >> + dma_fence_chain_enqueue(chain); >> +} >> +EXPORT_SYMBOL(dma_fence_chain_garbage_collect); >> + >> /** >> * dma_fence_chain_init - initialize a fence chain >> * @chain: the chain node to initialize >> @@ -254,5 +366,7 @@ void dma_fence_chain_init(struct dma_fence_chain *chain, >> >> dma_fence_init(&chain->base, &dma_fence_chain_ops, >> &chain->lock, context, seqno); >> + dma_fence_chain_enqueue(chain); >> } >> + >> EXPORT_SYMBOL(dma_fence_chain_init); >> diff --git a/include/linux/dma-fence-chain.h b/include/linux/dma-fence-chain.h >> index 5f45689a6d2e..b412b5396434 100644 >> --- a/include/linux/dma-fence-chain.h >> +++ b/include/linux/dma-fence-chain.h >> @@ -19,6 +19,7 @@ >> * @base: fence base class >> * @lock: spinlock for fence handling >> * @prev: previous fence of the chain >> + * @next: next chain node for garbage collection >> * @prev_seqno: original previous seqno before garbage collection >> * @fence: encapsulated fence >> * @cb: callback structure for signaling >> @@ -27,6 +28,7 @@ >> struct dma_fence_chain { >> struct dma_fence base; >> struct dma_fence __rcu *prev; >> + struct dma_fence_chain __rcu *next; >> u64 prev_seqno; >> struct dma_fence *fence; >> union { >> @@ -38,6 +40,8 @@ struct dma_fence_chain { >> >> extern const struct dma_fence_ops dma_fence_chain_ops; >> >> +void dma_fence_chain_garbage_collect(void); >> + >> /** >> * to_dma_fence_chain - cast a fence to a dma_fence_chain >> * @fence: fence to cast to a dma_fence_array >> @@ -61,6 +65,7 @@ to_dma_fence_chain(struct dma_fence *fence) >> */ >> static inline struct dma_fence_chain *dma_fence_chain_alloc(void) >> { >> + dma_fence_chain_garbage_collect(); >> return kmalloc(sizeof(struct dma_fence_chain), GFP_KERNEL); >> }; >> >> -- >> 2.25.1 >>