From patchwork Thu Oct 24 12:41:57 2024 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: 13848910 Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7232A1D5AAC for ; Thu, 24 Oct 2024 12:42:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729773729; cv=none; b=ep3sLZ7FA1YE5uWHdqz8gP2jfLsEMcSKXQe9KEzl+MunnX7SY0fW9Pal1T1vlIay9JDZvdDsSIFWCtAew2vgKKMpTI7yI8JD6HEGb5Vwbn6jvzF2whaF5JARM8gbgp1J0kk1TH5RpYFbCf+v/aR/TpdjsqPYJ8XcELH/BU1J0wU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729773729; c=relaxed/simple; bh=ZppK6OBnnboywFKdyzV4Lf2enYvk6U069pwJMsdvCU0=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=YVezH2d6S8z9S6O20Om+EXrmLuPlA9kvFKgYJ7kEs1YBRtPsNByHnThVN0uQFVS0Tkv8nEGpoRLAC9T7Oeu/r+GBDQKjs9jzC08zsDS6T/Uc4fsoXW76L4eRi0GveBuPqULYtzmA7hlEn6jFNpyey+B5DoLYMbDTqe/UFZQ1aZw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=j2shf3VQ; arc=none smtp.client-ip=209.85.208.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="j2shf3VQ" Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-5c9552d02e6so1112461a12.2 for ; Thu, 24 Oct 2024 05:42:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729773726; x=1730378526; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=c6lgZ2s7gZvIQeVKB3cBzOcMl3XHl1CU+KIuW+CzuIA=; b=j2shf3VQwJM1QkXDRy/bbuospCB7j7lIeRCQQFp0fmeDioVYWukIP7nUSQEkz6c8CR S39d02QOsMj2hZu8JrVzpYfQPnhhyEZfkD9Je9UjFBsyj2ycEWJVYNrSsD6fKLdf9iuR rqgQfFY/DoWED2TprYoWDQiPGKDs/zjXQ8Nlko1JXndbUTZbzoh8a2jK0CgWAETH92e9 5KEMhwSCAEs90dGfSgHFaOJfsPi2y64UusCTO6zpdeOl+0gFFi6pFdfoEOPWMNAGeH7J 38kmPTqyWKypMbz1vus45dgFse2/+vIHDduOlSGKmO3DjHDAxjvAe3JGWY509GxSr+B5 FHaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729773726; x=1730378526; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=c6lgZ2s7gZvIQeVKB3cBzOcMl3XHl1CU+KIuW+CzuIA=; b=UJRllVFi1KSLEbi6EJHQUAF3Lsb+3nBFNXcwNvt36EB73hpmSeQrEpfay/uf2dZ1UB aNG3kWMVsQ/5zpK31DTz5sdTAfq+5hauGevo7AcEdns6xFXM9zSEzTTpcMsm9H1Yz06W RJY1g1+u+un4Xsbhme2KUdeA+BQOaIF80W1cm3iqcV3nQKti1x6D9cNoj3EvtKAYFl98 /q1IcrRDEh3OULyTmuMDFepmI8IiKErlhlp2nVqgbpb4rtzSQhnQSv8HY+Gg38MQVthl Mv8tcqh3FsE9u1M4vbEjD9akV9LZftm958htgpGoylQmXwGUKpWkFba+bgKdPAUS9D80 RLyw== X-Forwarded-Encrypted: i=1; AJvYcCVxSLuW+AcVr3LxuoM0+M3frVyKkPxGm5SgWeGLrS5yol6wGkmU71gU/ZzxA1j4iOrXTQGvBLQEZmtwSw==@vger.kernel.org X-Gm-Message-State: AOJu0YxtBdgq6ZfaW4ulgH18Q0bZoKk62l4THEPfLv7uVN6ENs15d6s6 4JZhdxeeqewnLtryWyXwAOp1rLFKY9NrF0nXEc9ZiYrirQafB8DfPa/PVOAPtEBYPQ== X-Google-Smtp-Source: AGHT+IEUBGWWQn+Dk6Xzmic0E/nCMs656ZBtST4vy2Vu3op4POs8oDMCCCvVt/vWJpaFM6t/9QMhog== X-Received: by 2002:a05:6402:13c9:b0:5c9:709c:24ab with SMTP id 4fb4d7f45d1cf-5cba242831cmr1565779a12.6.1729773725326; Thu, 24 Oct 2024 05:42:05 -0700 (PDT) Received: from able.fritz.box ([2a00:e180:1550:4200:da3c:7fbc:c60c:ca4b]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5cb66a65419sm5623026a12.25.2024.10.24.05.42.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Oct 2024 05:42:04 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: friedrich.vock@gmx.de, Richardqi.Liang@amd.com, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org Subject: [PATCH 1/3] dma-buf/dma-fence_array: use kvzalloc Date: Thu, 24 Oct 2024 14:41:57 +0200 Message-Id: <20241024124159.4519-2-christian.koenig@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241024124159.4519-1-christian.koenig@amd.com> References: <20241024124159.4519-1-christian.koenig@amd.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Reports indicates that some userspace applications try to merge more than 80k of fences into a single dma_fence_array leading to a warning from kzalloc() that the requested size becomes to big. While that is clearly an userspace bug we should probably handle that case gracefully in the kernel. So we can either reject requests to merge more than a reasonable amount of fences (64k maybe?) or we can start to use kvzalloc() instead of kzalloc(). This patch here does the later. Signed-off-by: Christian König CC: stable@vger.kernel.org Reviewed-by: Matthew Brost --- drivers/dma-buf/dma-fence-array.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/dma-buf/dma-fence-array.c b/drivers/dma-buf/dma-fence-array.c index 8a08ffde31e7..46ac42bcfac0 100644 --- a/drivers/dma-buf/dma-fence-array.c +++ b/drivers/dma-buf/dma-fence-array.c @@ -119,8 +119,8 @@ static void dma_fence_array_release(struct dma_fence *fence) for (i = 0; i < array->num_fences; ++i) dma_fence_put(array->fences[i]); - kfree(array->fences); - dma_fence_free(fence); + kvfree(array->fences); + kvfree_rcu(fence, rcu); } static void dma_fence_array_set_deadline(struct dma_fence *fence, @@ -153,7 +153,7 @@ struct dma_fence_array *dma_fence_array_alloc(int num_fences) { struct dma_fence_array *array; - return kzalloc(struct_size(array, callbacks, num_fences), GFP_KERNEL); + return kvzalloc(struct_size(array, callbacks, num_fences), GFP_KERNEL); } EXPORT_SYMBOL(dma_fence_array_alloc); From patchwork Thu Oct 24 12:41:58 2024 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: 13848911 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 99BAC1D514A for ; Thu, 24 Oct 2024 12:42:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729773731; cv=none; b=YRxMWDMbEOKa7jhq/vUdEA+T9KbMsXz0oiAvA1SQXlpdel4oM01LAwOxHCIpvZhUTgAmRlReP/ES9ma0Vs9/XZp4Poky2w5Xl8kh492Ezb3CSVgVGdLv5k+yEoRf3n0aa2qVfBx8c95ATeCxTVej6rdi+A/6C09ymBe723SVy0Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729773731; c=relaxed/simple; bh=kA1Is1tzvMMt5XF5yOp6RSEO+0aIBAH68Rx0bo4ACYw=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=uE3OEPQYIK90AwqfNV3Udk2azpgaSb38GxMNlNytTTeNDzB9ZmL3zXaCcZT6w5uqhECCYaIyqDVTBWMaWhfcA3b8ahyOtLP3M/IkhvipnMW3vojSD1BSgzFE9vhxM2xDuC8ALI/CItnHCnjefE2jv3OqVE5xtKkGrjPXxZ3ld64= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=L7s3A6lx; arc=none smtp.client-ip=209.85.218.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="L7s3A6lx" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-a9a5f555cfbso53257866b.1 for ; Thu, 24 Oct 2024 05:42:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729773728; x=1730378528; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=sj6gTNhuF8KQ+mC8FcVavaAooc7DkgFZVC/sO2AOejw=; b=L7s3A6lxleKcJBKtpIw6KKV001Bj0pzvT0I8ph+VNAzUodw241CejsTCNi+3Hk5n34 ZNY+jqkL/iXRf8TFfaQDpbA6SReUSyrL2G+E0NdS+V/gdlpHxX23jzNCFN8AGd38mJxF NxwrBV1IBk8NDScfE34TaKwOojQ2Int8XtwYq2xW7ltKWpPdAdE8+FiqQnXLy5tVcIls WOXSrRS4o5ANjJBULQqpRXM8aNFV45ZDhAW5tVI9/QxVSqlTlLoJ5esL/+TaGqdqIYK8 9Kti9TiqW1Ir8zDDFZFO4QAM0CYofHCizZ0x8AxJiMRuF14NrRTldAqr6wctYzIf8wpU nFUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729773728; x=1730378528; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sj6gTNhuF8KQ+mC8FcVavaAooc7DkgFZVC/sO2AOejw=; b=FPNsegtNZRAjxfNYhQecGQxiSPkO/M0rJYV5VdbvqhF+w5QHJD+5i/7mkeuWDNC+kS uBB0OZ9qzHLcEjUcwsta0ty6k0By9XnbqndJAk9wgOLpOUoL0pYk3t1bEYOdV263MCTi OFwyI3XxK8FlFlHYYHZAPHz0MW0Ceaz2J4ylo/b2L8X1SymAtAxGj34v7CEAxLqecYm5 ovq4DiacoZ0vw0gHe69xbjV/z063O/hNuuIQciX4CSiDtCssPzc/9lZwV3xzNff8uD5O T9utbGTe991L4SCtKjjpn0tAqalyhxNS4qb0WNYF2+8L2sDGz67/7VZHCU5yf93Xchwv hPlQ== X-Forwarded-Encrypted: i=1; AJvYcCXCeqXvav7K5NcJs+5+esHyT+4lifC7ruVkbFrY1zWGhqnw2bLRlgayeOgGA2yf8/aeZcG22BhRKEKCDg==@vger.kernel.org X-Gm-Message-State: AOJu0Yyz6ckcCSV/5SuTj4/+jIyMwRKdvLIq7LBMvQHxrn6wFYNin4HL YzEzT3VX4pO8pFPpIKaAGBo2NSt7JBsXHjrRXazlegYIvhRMxr0L X-Google-Smtp-Source: AGHT+IEEuTA8PMmVuhARSpT0IT9Dw6qAIi5njqx7dcLq/evV3H2wVxDBE4GcYae26HsdPCERft1Agg== X-Received: by 2002:a05:6402:5d3:b0:5c8:9529:1b59 with SMTP id 4fb4d7f45d1cf-5cb8b1e9c71mr5459788a12.20.1729773727785; Thu, 24 Oct 2024 05:42:07 -0700 (PDT) Received: from able.fritz.box ([2a00:e180:1550:4200:da3c:7fbc:c60c:ca4b]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5cb66a65419sm5623026a12.25.2024.10.24.05.42.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Oct 2024 05:42:06 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: friedrich.vock@gmx.de, Richardqi.Liang@amd.com, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org Subject: [PATCH 2/3] dma-buf: sort fences in dma_fence_unwrap_merge Date: Thu, 24 Oct 2024 14:41:58 +0200 Message-Id: <20241024124159.4519-3-christian.koenig@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241024124159.4519-1-christian.koenig@amd.com> References: <20241024124159.4519-1-christian.koenig@amd.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The merge function initially handled only individual fences and arrays which in turn were created by the merge function. This allowed to create the new array by a simple merge sort based on the fence context number. The problem is now that since the addition of timeline sync objects userspace can create chain containers in basically any fence context order. If those are merged together it can happen that we create really large arrays since the merge sort algorithm doesn't work any more. So put an insert sort behind the merge sort which kicks in when the input fences are not in the expected order. This isn't as efficient as a heap sort, but has better properties for the most common use case. Signed-off-by: Christian König --- drivers/dma-buf/dma-fence-unwrap.c | 39 ++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/drivers/dma-buf/dma-fence-unwrap.c b/drivers/dma-buf/dma-fence-unwrap.c index 628af51c81af..d9aa280d9ff6 100644 --- a/drivers/dma-buf/dma-fence-unwrap.c +++ b/drivers/dma-buf/dma-fence-unwrap.c @@ -106,7 +106,7 @@ struct dma_fence *__dma_fence_unwrap_merge(unsigned int num_fences, fences[i] = dma_fence_unwrap_first(fences[i], &iter[i]); count = 0; - do { + while (true) { unsigned int sel; restart: @@ -144,11 +144,40 @@ struct dma_fence *__dma_fence_unwrap_merge(unsigned int num_fences, } } - if (tmp) { - array[count++] = dma_fence_get(tmp); - fences[sel] = dma_fence_unwrap_next(&iter[sel]); + if (!tmp) + break; + + /* + * We could use a binary search here, but since the assumption + * is that the main input are already sorted dma_fence_arrays + * just looking from end has a higher chance of finding the + * right location on the first try + */ + + for (i = count; i--;) { + if (likely(array[i]->context < tmp->context)) + break; + + if (array[i]->context == tmp->context) { + if (dma_fence_is_later(tmp, array[i])) { + dma_fence_put(array[i]); + array[i] = dma_fence_get(tmp); + } + fences[sel] = dma_fence_unwrap_next(&iter[sel]); + goto restart; + } } - } while (tmp); + + ++i; + /* + * Make room for the fence, this should be a nop most of the + * time. + */ + memcpy(&array[i + 1], &array[i], (count - i) * sizeof(*array)); + array[i] = dma_fence_get(tmp); + fences[sel] = dma_fence_unwrap_next(&iter[sel]); + count++; + }; if (count == 0) { tmp = dma_fence_allocate_private_stub(ktime_get()); From patchwork Thu Oct 24 12:41:59 2024 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: 13848912 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4ABE31D9684 for ; Thu, 24 Oct 2024 12:42:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729773733; cv=none; b=koHzXVVbHVKSFoY6z0ZKXs99tFy1ilFYPDLsF3/cE1wNmCx1cdkAdXV/CnfEtAMR9UUWdfOcin6JsEVk5vwgQYcAjVXGpolGN/CTFiyKqMYoCkpDZ+byECoRfpaiRcE+JMHKiUnLeKeVUgQuZ8fe7d4LfJyFgvoP4gQEEFa2+58= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729773733; c=relaxed/simple; bh=glrOjwJPU+FD0qrlK5cGD5YxLlMMrm1v5pt+32xp/b8=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=CyXkTaOFe7dF53ClbPeUKrc0hCUm6hX3ECAWJ6h3gJxsq7xxTpPDIafwvtgyeCs9mbXeTFp0qr2phaTVxEMcvNkGWQskdbx7E58ePwqmfa57bOG6ikyDULzXXj1XfTcvQ3ck8UWfDgS8M1HFJuDai8ZehML6AHQqbuREIqQrM5Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OzRjQATX; arc=none smtp.client-ip=209.85.218.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OzRjQATX" Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-a9a5f555cfbso53259666b.1 for ; Thu, 24 Oct 2024 05:42:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729773729; x=1730378529; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=LYQP74pAccaxp/bWVaRuhS0QTdY30Bf36SGERpSHwKs=; b=OzRjQATXwBhV4gE1DuonLAVnHOWX3+52umhDOD+Wkusdj5McExSYnUK642RmN2cUjm SGts7pyw14AKeqtJjucUrBVND1mmXfu1DYRgJ1qjyh7kTRVFE1mfXJTsdaSe0XdM+Bhd fFxFaN2NQUZvGo46QYyB/Dab5dfQMtsmnGpqDItB7aWDB0A+pOpQvTDsHJf4T1pKh9Gq yDuR1CZRzckpc3cKIljCU76OArxDO7MQKbNneAPj19vkS+0JVxysuNHM+ITd7KS/9M25 GRIay8hFZGKRH2V28pHBJp1k3wrf41z7eewBBQTxRK5nUO5oQq2smsi+27imNUGuOnU5 zg+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729773729; x=1730378529; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LYQP74pAccaxp/bWVaRuhS0QTdY30Bf36SGERpSHwKs=; b=vL7ezo5z3tnGm88ePHSX9soTIeNmtWzhDHXm/6aTd2Rq63Jcn7CrTDPCQFWQCqlgcw BEeqQPaGIO2OrERaPfADhvI+uvDwFB2PyGvPtNoUnaj5nixes2+KTAGxhkeMEx4NYgP2 wjVVKE2GWvTfDeNAlwWFRMmKLdDMyHCBj4Nd90VgNiAkKBXLqrMG4JKtkup11Ap2T4WC VYpts1/V5uonM96iuhAQP7L9NkbDKD7KXxorvm1+Z7N/NFBLV57hxUD4Zk6XFC+BpOfu XZruB4vrmCpUqAFfJ3ouFW8fInpG552Ml5/kGQ8ACYU5UIQqIDPSO4eH/QHogfAnvTvB U+KA== X-Forwarded-Encrypted: i=1; AJvYcCX5tvqYAukUlzrJBuDXJywMLER0I/gu1S9oaJhK1yqsRphSMF88O2ygrzzHgrdCn0i7e64PIjLIFgeynw==@vger.kernel.org X-Gm-Message-State: AOJu0YyG7NI/W7NT1XK/irJeV8V17gcG05WiR0dr2q9noflwd+8+/l6a R2atZYPEBHpTQZhq53j3hXR/oHDi9A1AB0cuy/xWG8MulD7d/5UMYmSDd4TunAWR0A== X-Google-Smtp-Source: AGHT+IEilgT2WydO1IHCnafNNt39ENQJ3H3MKCDUHgc+VjYTRmF5GAqFBuV0eTODjlNsewSKNthecg== X-Received: by 2002:a05:6402:43c9:b0:5c9:5928:970 with SMTP id 4fb4d7f45d1cf-5cb8b1c2410mr6786177a12.19.1729773729421; Thu, 24 Oct 2024 05:42:09 -0700 (PDT) Received: from able.fritz.box ([2a00:e180:1550:4200:da3c:7fbc:c60c:ca4b]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5cb66a65419sm5623026a12.25.2024.10.24.05.42.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Oct 2024 05:42:09 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: friedrich.vock@gmx.de, Richardqi.Liang@amd.com, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org Subject: [PATCH 3/3] dma-buf: add selftest for fence order after merge Date: Thu, 24 Oct 2024 14:41:59 +0200 Message-Id: <20241024124159.4519-4-christian.koenig@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241024124159.4519-1-christian.koenig@amd.com> References: <20241024124159.4519-1-christian.koenig@amd.com> Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Add a test which double checks that fences are in the expected order after a merge. While at it also switch to using a mock array for the complex test instead of a merge. Signed-off-by: Christian König --- drivers/dma-buf/st-dma-fence-unwrap.c | 69 ++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/drivers/dma-buf/st-dma-fence-unwrap.c b/drivers/dma-buf/st-dma-fence-unwrap.c index f0cee984b6c7..876eabddb08f 100644 --- a/drivers/dma-buf/st-dma-fence-unwrap.c +++ b/drivers/dma-buf/st-dma-fence-unwrap.c @@ -304,6 +304,72 @@ static int unwrap_merge(void *arg) return err; } +static int unwrap_merge_order(void *arg) +{ + struct dma_fence *fence, *f1, *f2, *a1, *a2, *c1, *c2; + struct dma_fence_unwrap iter; + int err = 0; + + f1 = mock_fence(); + if (!f1) + return -ENOMEM; + + dma_fence_enable_sw_signaling(f1); + + f2 = mock_fence(); + if (!f2) { + dma_fence_put(f1); + return -ENOMEM; + } + + dma_fence_enable_sw_signaling(f2); + + a1 = mock_array(2, f1, f2); + if (!a1) + return -ENOMEM; + + c1 = mock_chain(NULL, dma_fence_get(f1)); + if (!c1) + goto error_put_a1; + + c2 = mock_chain(c1, dma_fence_get(f2)); + if (!c2) + goto error_put_a1; + + /* + * The fences in the chain are the same as in a1 but in oposite order, + * the dma_fence_merge() function should be able to handle that. + */ + a2 = dma_fence_unwrap_merge(a1, c2); + + dma_fence_unwrap_for_each(fence, &iter, a2) { + if (fence == f1) { + f1 = NULL; + if (!f2) + pr_err("Unexpected order!\n"); + } else if (fence == f2) { + f2 = NULL; + if (f1) + pr_err("Unexpected order!\n"); + } else { + pr_err("Unexpected fence!\n"); + err = -EINVAL; + } + } + + if (f1 || f2) { + pr_err("Not all fences seen!\n"); + err = -EINVAL; + } + + dma_fence_put(a2); + return err; + +error_put_a1: + dma_fence_put(a1); + return -ENOMEM; +} + static int unwrap_merge_complex(void *arg) { struct dma_fence *fence, *f1, *f2, *f3, *f4, *f5; @@ -327,7 +393,7 @@ static int unwrap_merge_complex(void *arg) goto error_put_f2; /* The resulting array has the fences in reverse */ - f4 = dma_fence_unwrap_merge(f2, f1); + f4 = mock_array(2, dma_fence_get(f2), dma_fence_get(f1)); if (!f4) goto error_put_f3; @@ -375,6 +441,7 @@ int dma_fence_unwrap(void) SUBTEST(unwrap_chain), SUBTEST(unwrap_chain_array), SUBTEST(unwrap_merge), + SUBTEST(unwrap_merge_order), SUBTEST(unwrap_merge_complex), };