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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id D4DAAC982FA for ; Tue, 22 Sep 2026 11:30:34 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D3A2310E6B9; Tue, 22 Sep 2026 11:30:33 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=amd.com header.i=@amd.com header.b="ZQoM4CmV"; dkim-atps=neutral Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012022.outbound.protection.outlook.com [40.107.209.22]) by gabe.freedesktop.org (Postfix) with ESMTPS id 77D8610E6B9; Tue, 22 Sep 2026 11:30:32 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NXkRIlmJGpslygCd3SNiwYA0CAZNj7NJLj08JzPBOlMiWgjmOm11q3j7uAjiF4RrnwcOj7lK2cjhXQnk9gU0PwS4uQsMgIJv8wcba0sp9S7Ju7l/3kozBvDRqKoDwuI3xIJQQtVFY2JuwbjA0wJ1/NzZwo+ebJOnB2hdpfiR/Fs8tdRLQvninHR+o79sjxbMA9y6izAPfME7LQLWmXmD3OL+ceVYTCoHr7y97UIO/qh0heYvgPo6BiEaQzbKcXIAJOY70jnLQV3i1nGZ/ki7D+L/Gs2tmXIG0mZ/sUkIHWiLDCKRVQkVw3EgtWOxfKJHmkBmrQlnoYCK5O/C4y2Vzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Zz1jG3sHEh6av/qBmYmCi349+lDoI/zKj2XJKpAR6AI=; b=KAk5hUKCA9KF3HeJgEDrdqzjX5mBge6PxB74M0nsGupB3+K6Hjr8VXhcutwiJ8U75Ttby1XhVzz9i+Z6vhigYGpvN48qK3wbLzzwRTrQAD5Rkj2AGUzKGQk0il0KLCyXWN0Rq7Zgw/PrMwvoqT1b0Y6DFRHknwKCOPQSlIPW9QmE8IRmxRbMOTy+iH2rfcsxTUoCpnjprkMVeq3WxkcpmEy03Bpf5f8Z3qkWfjZFqZghgP/6eM8O+WPhPj2pmJT227S1zoxVURshzBXZ9IuWflXXeSWAfgG2Kioc6WF7BxJkYVlpmwH2EjMSiCo1n1vhG4FV/o+zIxYh8y8NTKjOxA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Zz1jG3sHEh6av/qBmYmCi349+lDoI/zKj2XJKpAR6AI=; b=ZQoM4CmVJ+GzJCUPPXqaZPnL6hQExjGBTg5oOoLzlkKaPPXymiY6yBpTg/wwodZGwL19+jVcdOjrTLJwPm/7NTh8S1/RGQCOzuMGltemXyBrm4Q7iG6NGEbQuNBhNjPzBMQiV4/fJ/fZDooP9XLfowkaAB8ml2FnSejgo9SIK6M= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from IA0PR12MB8208.namprd12.prod.outlook.com (2603:10b6:208:409::17) by CH1PR12MB9623.namprd12.prod.outlook.com (2603:10b6:610:2b3::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.16; Tue, 22 Sep 2026 11:30:25 +0000 Received: from IA0PR12MB8208.namprd12.prod.outlook.com ([fe80::dbd3:cc22:a850:dc1e]) by IA0PR12MB8208.namprd12.prod.outlook.com ([fe80::dbd3:cc22:a850:dc1e%4]) with mapi id 15.21.0428.015; Tue, 22 Sep 2026 11:30:25 +0000 Content-Type: multipart/alternative; boundary="------------j0BbIAOcPeDN2RXitraUf0Rz" Message-ID: <6c4f5c4b-8866-49e9-b693-678236233e8e@amd.com> Date: Tue, 22 Sep 2026 17:00:19 +0530 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v9 0/3] drm: Extract dma-fence-to-workqueue pattern into common helpers To: matthew.brost@intel.com Cc: dri-devel@lists.freedesktop.org, intel-xe@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, =?UTF-8?Q?Christian_K=C3=B6nig?= , Alex Deucher , =?UTF-8?Q?Thomas_Hellstr=C3=B6m?= References: <20260909044454.399340-1-srinivasan.shanmugam@amd.com> Content-Language: en-US From: SRINIVASAN SHANMUGAM In-Reply-To: <20260909044454.399340-1-srinivasan.shanmugam@amd.com> X-ClientProxiedBy: MA5P287CA0344.INDP287.PROD.OUTLOOK.COM (2603:1096:a01:21f::10) To IA0PR12MB8208.namprd12.prod.outlook.com (2603:10b6:208:409::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: IA0PR12MB8208:EE_|CH1PR12MB9623:EE_ X-MS-Office365-Filtering-Correlation-Id: 730cddc6-92f1-4569-953f-08df189ce4f6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|376014|1800799024|23010399003|13003099007|10067099003|11063799006|56012099006|8096899003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: RSiW+hiI73dIFIWGaqBUOZfarV5OiMFT7CHa+mdSjo1iW3F/kDYIAUmXTzfTmCJ26frsRAJOEGQwLNBtgjlL4KcZxEVa+8tamgzygPw6bcCy0WxH9TYdwewWHlzdN05onkoQ5srr2EFHEj2p8v0dis9/oh341HC695cNwcNh7aPTm3nEWeDLmBDAyRxtGTAW0EMMabtlb8GXpCsmoRHR1sICSGtQgHJqqfpNKqx125WYb8sOpd+qiznNynGheS1R+xa5thjzCr/TJJ0WelG/lmRdvVFUb9T6mggUgnl/AJyI+vvzhIPCVhZPu64+DTP4oDJOeVjZaBsdoafcHVjnfUwpovcPIYbCnFQrjMTzVzuzq3watgcLREu4D9joMU1KrM7UVk/drPdqmh/00uNHytQTBVucJvnLWDHW/LSSZ1cCrW3o4kMrW0QITlOaisSAIyDEceHvH1cVc3+fMv/MiFhg+V9cUuJTAzB50QSDm9AFO3mpzGlUK6DJlodLeq5m5K8bmWSy3tNW5tfT67uJsmLus+7qTdLbySUv8TmENx1oj12sn6VfKRS269Fd+oIsQL8LA5cO3CYDHvz0AfWiXLem3YmjXaE63kbpQEQILzI= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:IA0PR12MB8208.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(23010399003)(13003099007)(10067099003)(11063799006)(56012099006)(8096899003)(18002099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?U1JQRFJQdEZwNFNCQXVTdEI0VW93dENybVY2bi9hSFZIWHlrWkkzbnp5bFNF?= =?utf-8?B?WVJjWElTWUJyQ1FFZCtJajJKZmpQM0ZsSmpLdERNS2I2Y08vK0d3Rk9FMUNh?= =?utf-8?B?ME4xL2JRT0VEZGdWdGg4OUEzaTZVSmxCbW55ZXE3SzE4eGpsWS92Z3BhNGNo?= =?utf-8?B?RVdmVllPTDJybDZtRXVNemhmbDRmSlBZQ2NiVFZHMDlQYysxT2VkekhmUTds?= =?utf-8?B?UWxDOHhhbk9aODZGbE53TU1kRlNNdmhsOWtFbzZQUVJQaS8xWkhnWnREcWhC?= =?utf-8?B?UFplVnBhMkUweGpGZ0h6di9IYm1sUHpDNXRlQ25lZmxFSElTclo0dHJ5eWFG?= =?utf-8?B?VDY3ZGppUTVXSVlFQnFPcWVVYnluOXh2Y0xNTTBoS1I3T3dqakpKZFNXc0c1?= =?utf-8?B?T2hHRlpnaXNidlhOUWFBVlpBM2xNd2o4a1hDRlYzOWhBU3R0RkYrNWloTE95?= =?utf-8?B?MHlzVFZPbkpJbVBtNWNZcjc3dlM0Z3ZwV0VxNFh5dlB4dVVGRFJjSm80U05p?= =?utf-8?B?MFRRL21zTzY1OUtwc0RrdUZpQTRnTmllN09KdGUzYW1kTURrMzVlSVR5RFFF?= =?utf-8?B?dVRCMWFiQ1RmVFJEejUvaXY2cUN6R1pxeU5qUjkrWEVFS1hpdjJKa2lsRGQ2?= =?utf-8?B?dnZ0bXRDT2pRRiswNHZEekg1STRDNU1hY0F6Ymx1RG9XL0g1eFBJOUJ4Mjg2?= =?utf-8?B?MmxCNnBXRy9IV0FHb0RFdXdlaVBReW1VQVIydy9KWVVDcGo4aGV5UFFiWHJo?= =?utf-8?B?Q2ZVS2JTM0VwY2dMSUR2VzBDNzZkYTRrV2E3YVpYU0k5OG9RMSt2Z3ppUUFH?= =?utf-8?B?N3RpdlY5ci9rRFBJa2V1WkcxZWdTa3E5alVvZGtPK25SV2huOHhld1dCMlJL?= =?utf-8?B?WGtpMUh6L1VkSlpYT3FBeTlERzRybVhuSUpWNHAwYzZNckphOGFwUGs0ZTBs?= =?utf-8?B?UUJoWXhpcEhNUVdJWlpiR3RLTGV2bXl3eGQ3ZUFOL015dG9aMHhBZkxVVGRN?= =?utf-8?B?YXI0VFFIc1d3dWd2ZUI5N3VZdWg1TFd4VkYzRHVDN3lVVE11THN5dWxyQnlL?= =?utf-8?B?dm9TNjNVVndLRkM5TXdlWCtKdkZWYkpDS3dndExjQWZ5L1UzSnF5NWhCOFAw?= =?utf-8?B?RWRYSVNmWUxOLzAwSnlVTVZSRnBmVHVrS1ViN0NTelQ2dU96MVdtV0tzT3Nw?= =?utf-8?B?c3V6Q01KM3Z2THBLY0lpN0hoUzhsbDQ3RnQzb0sybUxtRGpkeFJTRjdoUkxu?= =?utf-8?B?cU1XY01Jc21FY0dYYVltN3pFdks0bjBXR2lsTTRyeHMydzVsYUhMbEZ6UWE0?= =?utf-8?B?L1h6R1B5WVk5SkJDbXcyNk9aVDVxRXE2QmI2NVZ6OWF1Q04vN2J6SDU5Q3d2?= =?utf-8?B?OFNydENLZ0VuRlVVeWEydUlJSWFvMHlpUnpKOUY5Y0xRaUw3WTU1dUg3a2dV?= =?utf-8?B?b2lTWnhPZzZRNzRSUC9XUlBwWUZla1Nqc0ZnMUJtUHlSbnlaVys1Z2hEbzA4?= =?utf-8?B?bmhmM1hBOUY5dThNQTFtWmNDRy9heUNCTmtrYXFqYmc3dnZMZ2VSMnY2ZEZG?= =?utf-8?B?TmVPcEUxZTJlTkJFWVJDN1VXWlF0dUswbHVQM2N2RVpPc1FlL0ZSNjZwL3pr?= =?utf-8?B?elBWTG5IY0dISGtDdHk4RDFKQWpTUU42V1RYQTZIMDJadVQ0dGRXbGhDWml3?= =?utf-8?B?S1hIUTdLUjA0MzdGTXBKdEIvYmpmSFB6UjBoSEZqSzVLZllicXB3enl1TXhs?= =?utf-8?B?VllGSWRzMjVCcHF4aXJOK1RweWl5YUhmTS9FUGp3R3lDM0M2L1BYWUxYM1hT?= =?utf-8?B?TlRsUkJXV1B2QW1QbW1kSk5MS2pHL1JyTW5YanVTYUFadFFaUnk3R01GeUcv?= =?utf-8?B?T201YzBOSE9WR0YzaVBxTmhqSEJEcDh0cGVQck9vY1hYbmYzUzhVNEZQR0Ri?= =?utf-8?B?d1kxb29RbmU5andDZGhlWGZuTUUyUnp1RVFPOFlRRzZmWUVPNmdtZ1lQMDQz?= =?utf-8?B?djZvbjBhZy85YWJ1VWRvNFhuN1RhbS9PZG9hUkhENjlLbWRWRFRObHlnK2Jk?= =?utf-8?B?dXQ5OXhzYjBGMTZpL2hHM0NLaEtQSW1FSjltOTBsSS9wODA5dkNEVFFuMDhR?= =?utf-8?B?aGlyR1dNUytOMUZGN05qa3JSVzNxa1JNZ25OQUcxNHA1Y0JsZFQ5ZVpOOHNj?= =?utf-8?B?cnFTK29hVnE2Q1FTV25VbHNHamtMUTZIZWVsaGt3K3R0all3Zk9WYWxzKzkv?= =?utf-8?B?Mzdlc0RZY3V2cStZZFVTSlRCV3lrTGU3VFRGSkZjcWRObm1EK0MrVXIyUGVp?= =?utf-8?Q?r/l75uiCRs7uSP1cVh?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 730cddc6-92f1-4569-953f-08df189ce4f6 X-MS-Exchange-CrossTenant-AuthSource: IA0PR12MB8208.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 11:30:24.9924 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: xjkjp8vpLiMB6W+vdRABitcu5l8ja+NAWwfKxCLAYBeHbN11zVMAgb/H6UATYBoe86wz+rR2q5cnyCEW1fGjHw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PR12MB9623 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: , Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" --------------j0BbIAOcPeDN2RXitraUf0Rz Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Matt, Good morning! Just a gentle follow-up on the remaining race issues in the |drm: Add drm_work_fence helper| patch. After applying the previous fixes in v9 [1], Sashiko found two remaining race cases [2]. We are considering |schedule_work()| for the IRQ-context issue and an atomic flag for the timing gap around |disable_work_sync()|. Could you please let us know if these approaches look reasonable before we prepare v10? [1] v9 patch: https://patchwork.freedesktop.org/patch/751979/?series=173582&rev=2 [2] Sashiko v9 review: https://sashiko.dev/#/patchset/20260909044454.399340-1-srinivasan.shanmugam%40amd.com We really appreciate all the time and effort you have put into reviewing this serie. Thanks again, Srini On 9/9/2026 10:14 AM, Srinivasan Shanmugam wrote: > This series extracts the dma-fence-callback-to-workqueue pattern shared > between XE and AMDGPU into common DRM helpers. > > Patch 1 introduces drm_work_fence — a generic helper that queues a work > item when a dma-fence signals, for work that cannot run in IRQ context. > > Patch 2 introduces drm_user_fence — extends drm_work_fence with > kthread_use_mm() support for drivers that need to write completion > status to userspace memory. > > Patch 3 converts XE's open-coded xe_user_fence to use drm_user_fence. > > Note: Patch 4 (per-signal compare functionality for AMDGPU's EOP > eventfd path) is deferred pending resolution of the compare address > read method (get_user() vs page-pinning), raised by Matthew Brost. > > v9: > - Fix drm_work_fence_queue: drop ref if queue_work returns false, > closing the race between callback firing and queue_work() (Matt) > - Fix drm_work_fence_cancel_sync: use disable_work_sync() to close > the UAF race window between callback and queue_work() (Matt) > - Remove xe_sync_ufence_cancel_sync — no caller in this patch (Matt) > - Remove xe_sync_ufence_cancel from xe_vma_destroy_late — unnecessary > behaviour change; xe_ufence_worker only accesses device-level > resources, safe to run after VMA teardown (Matt) > > v8: > - Fix copyright: The Linux Foundation → Advanced Micro Devices, Inc. > - Switch EXPORT_SYMBOL_GPL → EXPORT_SYMBOL for MIT-licensed code (Matt) > - Rename drm_work_fence_ops callback: writeback → worker (Matt) > - Rename drm_user_fence_ops callback: worker → writeback (Matt) > - Fix xe_ufence_worker ordering: WRITE_ONCE before copy_to_user, > add smp_wmb() before wake_up_all (Matt, confirmed via 8ae04fe9ffc93) > - Rename .worker → .writeback in xe_ufence_ops (Matt) > - Drop Patch 4 pending design decision on compare address read method > > Suggested-by: Matthew Brost > Suggested-by: Christian König > > Srinivasan Shanmugam (3): > drm: Add drm_work_fence helper > drm: Add drm_user_fence helper > drm/xe: Convert xe_user_fence to drm_user_fence > > drivers/gpu/drm/Makefile | 2 + > drivers/gpu/drm/drm_user_fence.c | 70 +++++++++++ > drivers/gpu/drm/drm_work_fence.c | 186 +++++++++++++++++++++++++++++ > drivers/gpu/drm/xe/xe_sync.c | 141 +++++++++++----------- > drivers/gpu/drm/xe/xe_sync.h | 1 + > drivers/gpu/drm/xe/xe_sync_types.h | 1 - > include/drm/drm_user_fence.h | 123 +++++++++++++++++++ > include/drm/drm_work_fence.h | 69 +++++++++++ > 8 files changed, 524 insertions(+), 69 deletions(-) > create mode 100644 drivers/gpu/drm/drm_user_fence.c > create mode 100644 drivers/gpu/drm/drm_work_fence.c > create mode 100644 include/drm/drm_user_fence.h > create mode 100644 include/drm/drm_work_fence.h > --------------j0BbIAOcPeDN2RXitraUf0Rz Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Hi Matt,

Good morning!

Just a gentle follow-up on the remaining race issues in the drm: Add drm_work_fence helper patch.

After applying the previous fixes in v9 [1], Sashiko found two remaining race cases [2].

We are considering schedule_work() for the IRQ-context issue and an atomic flag for the timing gap around disable_work_sync().

Could you please let us know if these approaches look reasonable before we prepare v10?

[1] v9 patch:
https://patchwork.freedesktop.org/patch/751979/?series=173582&rev=2

[2] Sashiko v9 review:
https://sashiko.dev/#/patchset/20260909044454.399340-1-srinivasan.shanmugam%40amd.com

We really appreciate all the time and effort you have put into reviewing this serie.

Thanks again,
Srini

On 9/9/2026 10:14 AM, Srinivasan Shanmugam wrote:

This series extracts the dma-fence-callback-to-workqueue pattern shared
between XE and AMDGPU into common DRM helpers.

Patch 1 introduces drm_work_fence — a generic helper that queues a work
item when a dma-fence signals, for work that cannot run in IRQ context.

Patch 2 introduces drm_user_fence — extends drm_work_fence with
kthread_use_mm() support for drivers that need to write completion
status to userspace memory.

Patch 3 converts XE's open-coded xe_user_fence to use drm_user_fence.

Note: Patch 4 (per-signal compare functionality for AMDGPU's EOP
eventfd path) is deferred pending resolution of the compare address
read method (get_user() vs page-pinning), raised by Matthew Brost.

v9:
- Fix drm_work_fence_queue: drop ref if queue_work returns false,
  closing the race between callback firing and queue_work() (Matt)
- Fix drm_work_fence_cancel_sync: use disable_work_sync() to close
  the UAF race window between callback and queue_work() (Matt)
- Remove xe_sync_ufence_cancel_sync — no caller in this patch (Matt)
- Remove xe_sync_ufence_cancel from xe_vma_destroy_late — unnecessary
  behaviour change; xe_ufence_worker only accesses device-level
  resources, safe to run after VMA teardown (Matt)

v8:
- Fix copyright: The Linux Foundation → Advanced Micro Devices, Inc.
- Switch EXPORT_SYMBOL_GPL → EXPORT_SYMBOL for MIT-licensed code (Matt)
- Rename drm_work_fence_ops callback: writeback → worker (Matt)
- Rename drm_user_fence_ops callback: worker → writeback (Matt)
- Fix xe_ufence_worker ordering: WRITE_ONCE before copy_to_user,
  add smp_wmb() before wake_up_all (Matt, confirmed via 8ae04fe9ffc93)
- Rename .worker → .writeback in xe_ufence_ops (Matt)
- Drop Patch 4 pending design decision on compare address read method

Suggested-by: Matthew Brost <matthew.brost@intel.com>
Suggested-by: Christian König <christian.koenig@amd.com>

Srinivasan Shanmugam (3):
  drm: Add drm_work_fence helper
  drm: Add drm_user_fence helper
  drm/xe: Convert xe_user_fence to drm_user_fence

 drivers/gpu/drm/Makefile           |   2 +
 drivers/gpu/drm/drm_user_fence.c   |  70 +++++++++++
 drivers/gpu/drm/drm_work_fence.c   | 186 +++++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_sync.c       | 141 +++++++++++-----------
 drivers/gpu/drm/xe/xe_sync.h       |   1 +
 drivers/gpu/drm/xe/xe_sync_types.h |   1 -
 include/drm/drm_user_fence.h       | 123 +++++++++++++++++++
 include/drm/drm_work_fence.h       |  69 +++++++++++
 8 files changed, 524 insertions(+), 69 deletions(-)
 create mode 100644 drivers/gpu/drm/drm_user_fence.c
 create mode 100644 drivers/gpu/drm/drm_work_fence.c
 create mode 100644 include/drm/drm_user_fence.h
 create mode 100644 include/drm/drm_work_fence.h

--------------j0BbIAOcPeDN2RXitraUf0Rz--