From patchwork Tue Oct 24 13:55:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10024637 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EDCFE60245 for ; Tue, 24 Oct 2017 13:55:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E46552862B for ; Tue, 24 Oct 2017 13:55:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D8DBE28A06; Tue, 24 Oct 2017 13:55:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 76DC72862B for ; Tue, 24 Oct 2017 13:55:59 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6E95E6E09D; Tue, 24 Oct 2017 13:55:58 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr0-x242.google.com (mail-wr0-x242.google.com [IPv6:2a00:1450:400c:c0c::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3E9B86E11F; Tue, 24 Oct 2017 13:55:57 +0000 (UTC) Received: by mail-wr0-x242.google.com with SMTP id z55so14715458wrz.1; Tue, 24 Oct 2017 06:55:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=i5N6BJigjPnqlFyfCHyHX5Mjn2wBnhd7H9n5sm6uBB8=; b=btlNgjlK6A0wI6UluaUkcwCpi95EUaOafD9J3mMf8v7aPX8vO5a5A0MOMLZJNx77RB KF98gMuJL5DX3vvhFAjBm1VaUMcLHJP0csERrYRb9SOFgMs4BCp9+Oxem/GiQpsMaqNJ vIHrDHk5WVYRk3IC/c1vQQRRUZEnxMYuhrKyg/8HiQwu/yhckA1xnLpSmMZ5bBB9bn0O NpI8DGPvjJIU44/PMrSm1UtgWBE7wdrlaTv5Ju0bXq9k/izcsTMTD7nkkc2Oqe8w9/u6 BzD02jjRhqCzUF8qM8ZsgCn5lXgxGLzHmp8MbuhRQRRdh+6GNauTKvXP58nMF7ySgP9g jh3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=i5N6BJigjPnqlFyfCHyHX5Mjn2wBnhd7H9n5sm6uBB8=; b=eTPGXlAXm3kysoWuNzcuekKrkt6zOhqMlPRxL/mNuNbGI2oHpKG65sHnP+doHVCoVu zpKEppcbX9XaCiFQIn6rTPValgzAnp3vMqdbs7S8ktnEQ84xJWT6KGGDKIsAqDFVL6jH gaYZ/5aMyL1tw4U+RbXr7e6OdsZIeDZSVsUvJZtuz0SpX0FJCCclDydMHO7o7BaZ8ciM MxanoRqp5+FuTZVY/104288ABzM6DKxpOZ9wjzXk+IbZmU9E0M9Ca+WTFu1hG5HHahgW RGnlzBhHIEGedgJOY3tbIXh78tRxnkqsgAM0B1BepktcR30logVz9VFiV6gLD0OsSsTI lM3A== X-Gm-Message-State: AMCzsaUsdMNIbzaTwzoWV1oNyPfHxTY/QdJeWCQOo+cRwHgtiPuF3kIy Su7y/5NJAKxXhQMxBJsZ8jM= X-Google-Smtp-Source: ABhQp+QAjWCAheMoO64GJmYjc1zeJVDrPOJFlCBWuPUe0r4akm4Ty+dfDy9m2ZoyEiy7iV2JLVHZvA== X-Received: by 10.223.187.65 with SMTP id x1mr8076558wrg.26.1508853355793; Tue, 24 Oct 2017 06:55:55 -0700 (PDT) Received: from localhost.localdomain ([2a02:908:1251:7981:a1d5:b1:d8b4:31e2]) by smtp.gmail.com with ESMTPSA id p23sm432951wrb.76.2017.10.24.06.55.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Oct 2017 06:55:55 -0700 (PDT) From: "=?UTF-8?q?Christian=20K=C3=B6nig?=" X-Google-Original-From: =?UTF-8?q?Christian=20K=C3=B6nig?= To: sumit.semwal@linaro.org, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, zhoucm1@amd.com Subject: [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace Date: Tue, 24 Oct 2017 15:55:51 +0200 Message-Id: <20171024135552.2139-1-deathsimple@vodafone.de> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Christian König The amdgpu issue to also need signaled fences in the reservation objects should be fixed by now. Optimize the list by keeping only the not signaled yet fences around. Signed-off-by: Christian König --- drivers/dma-buf/reservation.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/drivers/dma-buf/reservation.c b/drivers/dma-buf/reservation.c index b44d9d7db347..4ede77d1bb31 100644 --- a/drivers/dma-buf/reservation.c +++ b/drivers/dma-buf/reservation.c @@ -145,8 +145,8 @@ reservation_object_add_shared_replace(struct reservation_object *obj, struct reservation_object_list *fobj, struct dma_fence *fence) { - unsigned i; struct dma_fence *old_fence = NULL; + unsigned i, j, k; dma_fence_get(fence); @@ -162,9 +162,7 @@ reservation_object_add_shared_replace(struct reservation_object *obj, * references from the old struct are carried over to * the new. */ - fobj->shared_count = old->shared_count; - - for (i = 0; i < old->shared_count; ++i) { + for (i = 0, j = 0, k = old->shared_count; i < old->shared_count; ++i) { struct dma_fence *check; check = rcu_dereference_protected(old->shared[i], @@ -172,10 +170,14 @@ reservation_object_add_shared_replace(struct reservation_object *obj, if (!old_fence && check->context == fence->context) { old_fence = check; - RCU_INIT_POINTER(fobj->shared[i], fence); - } else - RCU_INIT_POINTER(fobj->shared[i], check); + RCU_INIT_POINTER(fobj->shared[j++], fence); + } else if (!dma_fence_is_signaled(check)) { + RCU_INIT_POINTER(fobj->shared[j++], check); + } else { + RCU_INIT_POINTER(fobj->shared[--k], check); + } } + fobj->shared_count = j; if (!old_fence) { RCU_INIT_POINTER(fobj->shared[fobj->shared_count], fence); fobj->shared_count++; @@ -192,10 +194,19 @@ reservation_object_add_shared_replace(struct reservation_object *obj, write_seqcount_end(&obj->seq); preempt_enable(); - if (old) - kfree_rcu(old, rcu); - dma_fence_put(old_fence); + + if (!old) + return; + + for (i = fobj->shared_count; i < old->shared_count; ++i) { + struct dma_fence *f; + + f = rcu_dereference_protected(fobj->shared[i], + reservation_object_held(obj)); + dma_fence_put(f); + } + kfree_rcu(old, rcu); } /**