From mboxrd@z Thu Jan 1 00:00:00 1970
Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2055.outbound.protection.outlook.com [40.107.95.55])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by smtp.subspace.kernel.org (Postfix) with ESMTPS id 02091183CC8;
Thu, 1 Aug 2024 10:56:38 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.95.55
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1722509800; cv=fail; b=tFC/NVIcJ/10F6duE8AikXQas/nQ6nJ5GX02miAiJJMB/VqiT32CJTsIbnDOZo+FO1N757s1I8xQ+gLcbQ85sOVZHpB+0JGOnJVWStDN2ZaSVWpDVZsNpZnEZkhDDQkBm6noPeSn3Lb+yjt+vKshiG51nhuLbZc6+Ms+JtpCa/w=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1722509800; c=relaxed/simple;
bh=f4RKI3cvDbs+siB2EQlVx28Z8P7bx6HzMOjK4uaQhS8=;
h=Message-ID:Date:Subject:To:Cc:References:From:In-Reply-To:
Content-Type:MIME-Version; b=bOQYNZwYdSePVA3h1i8io6Z0WByBTOb1YqTg5Ln48cwhwAgOe7FHUUKiPgFy9nRD1ZAqrXrK3LMeaFu5JQ7m1hj5U7sxPKHsJOFv7qP31XNCCn4dy3T0djN7+t4mrs8ywj8qAsicue+43xK6K5x/Z28hMqd3u0JTgaaMkXdF8js=
ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=gLXunA1U; arc=fail smtp.client-ip=40.107.95.55
Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com
Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com
Authentication-Results: smtp.subspace.kernel.org;
dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="gLXunA1U"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=CUmYD2KD2114ATCgwEZz7iwA9vD8c3s/8UVQc/mxeEP1/l2VBMT/YKA6EbyB7t+1ruzsazkFgfmeu8OxjWpWrLNUDZfAz3SnA+ekYV9WeuNNOpmSzf7Z4WgWtBy7f3VFnAwBxRAFD7IK1MqgI4YIBdzSX3Kbe4OmRhRXPX2JICn+b1CG1rgtTPJw696DN8kiJLHA3inrk3gtDZ4PXGmnnuM2YV/zsa/i8aGURpPhrDGaYAhG55dKBCyK/C5cTmPadlibQjZa3TjIjUsUqbUmsDwJI7e7ceZGteMLCS5t7dKPqzByP4So31+nhpFp9X2ih+C/JIdd+SuFRr4Eei4fBA==
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=lOWd3ffQOtezgxWdZWQebReRxDCzVCwiPLeEJx/ReQI=;
b=R4s45cvCGcFjhlrc8sh9tnNKWs3jQ/eyqL2kLoW70X0RO48T2Qx8WWegzKf2ciS8NKzEgakLXXBUNvjE9B9MX48x4HWMm1dKrXw2MMT2OtxB5Z1GgVHUj1716Tv7EPKYitKhPZ9UOdAjsWFWDJ70NXcGPEdwYgHYLyfEnX/CsiKelhci0tl+UArevxionxrfDIP0WiYuTd6JvMleV8B6AgbymRXk0MGoGjhhlFZ63q1EfQ/H4JIIraLuwVe9kbz7QWpPmZfR7iBdxxD2K2PNxCDrlltYlBk20cGTL2F0jSFI/hZEl5LdGYhTVJAmYAuMsooWfMMtjDJq+Y92zFUn6g==
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=lOWd3ffQOtezgxWdZWQebReRxDCzVCwiPLeEJx/ReQI=;
b=gLXunA1Ul4FG8E9++osxvRhVFiiypldBq2Z9eANdLwuiefqIOP5F4qaQyZT1jeyCw5cuGgiR6vxv6ghyVwH23jE0PaOS6hrnlQo9NB4Et20sD2+iBNMLwWOJLnG1IcmMvTYL5gE6RA6vcGut7H5gghupQGBfKA6LLORGzjGsV8A=
Authentication-Results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=amd.com;
Received: from PH7PR12MB5685.namprd12.prod.outlook.com (2603:10b6:510:13c::22)
by PH8PR12MB7028.namprd12.prod.outlook.com (2603:10b6:510:1bf::15) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7807.27; Thu, 1 Aug
2024 10:56:36 +0000
Received: from PH7PR12MB5685.namprd12.prod.outlook.com
([fe80::46fb:96f2:7667:7ca5]) by PH7PR12MB5685.namprd12.prod.outlook.com
([fe80::46fb:96f2:7667:7ca5%4]) with mapi id 15.20.7828.016; Thu, 1 Aug 2024
10:56:36 +0000
Message-ID: <98122315-37d4-457a-9c71-14e4d2c70062@amd.com>
Date: Thu, 1 Aug 2024 12:56:30 +0200
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 4/5] udmabuf: add get_sg_table helper function
To: Huan Yang , Gerd Hoffmann ,
Sumit Semwal , dri-devel@lists.freedesktop.org,
linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org,
linux-kernel@vger.kernel.org
Cc: opensource.kernel@vivo.com
References: <20240801104512.4056860-1-link@vivo.com>
<20240801104512.4056860-5-link@vivo.com>
Content-Language: en-US
From: =?UTF-8?Q?Christian_K=C3=B6nig?=
In-Reply-To: <20240801104512.4056860-5-link@vivo.com>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR4P281CA0249.DEUP281.PROD.OUTLOOK.COM
(2603:10a6:d10:f5::19) To PH7PR12MB5685.namprd12.prod.outlook.com
(2603:10b6:510:13c::22)
Precedence: bulk
X-Mailing-List: linux-media@vger.kernel.org
List-Id:
List-Subscribe:
List-Unsubscribe:
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PH7PR12MB5685:EE_|PH8PR12MB7028:EE_
X-MS-Office365-Filtering-Correlation-Id: 3dcae1c6-699e-44a5-fe30-08dcb2189cd1
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014;
X-Microsoft-Antispam-Message-Info:
=?utf-8?B?WnNHa2UwRUdhZ3JPTkNyWmZHVHQ0VzRxWGJRR0RGc25Cd2dnK0hqMyt1c1kz?=
=?utf-8?B?Sy94cEUzYi9jVTd5SFhsK1NPU1V0ejROTUhtc2d3TUtrUzQzc1FXeFFvUEhl?=
=?utf-8?B?MUpXenpNa0pUK05ieVhGN2FBT24yOVFrTTlkVkM0dXN3d2dCZGd0V0pIZjRy?=
=?utf-8?B?OFBNZnd5RVl0bXBiT0tURStabWFFcVJqQ1Q1dW9nZExEYUgzd09WR2dxeXpi?=
=?utf-8?B?NUFhb3lEcDVVVEF1V3BCTGJyY29QM21aT2FlekljWFlXSHFqKzBMaWdKTzJH?=
=?utf-8?B?MUlZczBWVFpPWWhxRlFqWHg4QytWWFFTejFzKzRBRXJjZE90SXE3SW81eVEr?=
=?utf-8?B?L3J0Y25udHNEZC95cG0wS0IvQ242cEY2L0FHZ290NmVaR2VaMHE3QTk2by9w?=
=?utf-8?B?Y3ZDc3ordGg0Q3B3TE5HaUYvMkxlWm9JaTRaL2x4eXhENE0zUlJHZjNHOExa?=
=?utf-8?B?dUV5KzVzZ1BVamJUeUIzdm8yS0hydVVwZXh2TnBuMjEvRWF2WU9rd3BpcE8z?=
=?utf-8?B?RStEWi95akJLUmNXdXdzQ1o4YWswVGhxUGs4Rjd6d0tTM21CdDFub2xKVElV?=
=?utf-8?B?MEliMFFJTGN6dnZkdHRhaUZ6ZEZBNVFlUUdJUjBNZUhpaFY0QWU0aVRNTm15?=
=?utf-8?B?M05zVmVtR1NybWtIUlBPNnJyYUd0MjFlSVg5cFpiV3JMNStuQjJyUUVBZWJ2?=
=?utf-8?B?NlE5TXJFL2IyMmM1QXRidm1rVkRBSWhLV3BuK1lOdWZYdXJiUXRvY0M2ZVZa?=
=?utf-8?B?bFFLZHo0VU5UV3VIcmZWN2tBYWI2b29tcGpuSFgzcS9rRWdnS1ZsanVqcHZU?=
=?utf-8?B?VEdwNFNOSXRWQ1BSM3hKcDJIUDU4UHVROW1rUGtaaWdhNUsvTEZFQzhobC8r?=
=?utf-8?B?WkdyZXZzRDBDS3lyUjR2R25FdWprQXp1U3ozN0NkNkxFVHNXNWdITCsxRGls?=
=?utf-8?B?MWZ3M1VqZ1RBNU9Eb3dQTnJZblZxWjR0U1kvUzlxaDVoVkZjMTJWZ25senRk?=
=?utf-8?B?Z2JGd2FEUzgvWHhGd3JsOXNGdzVPejZmMWd2di9JYzRqMWVHZDFVZm9VYzR6?=
=?utf-8?B?My9sVHNHV254Wi92NHcvODJSV3ZVQ2JmT21tUUlqbWYxUkpnck5jZExucHM2?=
=?utf-8?B?ME81S1FDK1RrTnhxNXJIZDduSENvRjZONFN6UmUvbzVBRlZtdlByTSs1ei9O?=
=?utf-8?B?VEZ3ZS9XMHZTc2J4ZFI4UjBwTTlyN2FPZlYxOFBoZWtnejBHUlFSOWZLSVFu?=
=?utf-8?B?Q2hzVlc4bzBURU40QVk1UXFNTjhIUTZBYXI3RVZuWm1tczB1T1hueEtqdllx?=
=?utf-8?B?RDNTMElEL0FlZkR3MWdpTWlCL0c1VDJIQzg4RG1SVlJXM05NblpBZmJMQUJB?=
=?utf-8?B?UU4xS2h6Syt1L3E5T3R4anEyY3RweExrYnRiTWhJSlUzTTYyc1N1cjQ1cEVD?=
=?utf-8?B?anBwQ0lWcmh5eVBvZzM4dFFhVklUenlRaWZodFhNTDlodS9qRmFMQUNwdm0y?=
=?utf-8?B?Ry9IdFN0ejVQVGxIeEFnSDVQMU1YYUpsUnRwZEJtYkdvQlI5bUtqbDVaZkZi?=
=?utf-8?B?WktoTEFvYzh4R0c2VDJNd1locC9MdS9HYlB3WjZCckdVN2djYlNic254eHQ5?=
=?utf-8?B?aTZ0dnVVV2lNa0hCcnB6WmZlMTYwbXJJbGxLMGdDOHkvTU16VE1Ibmg5Y20w?=
=?utf-8?B?UzdKcDdrWjYxVWxLVnoyZEhSK0YwNnphb2t4QjJXenN3aC9qbkEvZlhCR3pU?=
=?utf-8?B?YWlxSmtWQmNyVXNDUVpGRXV0WkFMQlFFRXFRSkhOYTRTYSs1MUp0bW55eTZB?=
=?utf-8?B?Tmo5R2FTSGM0a1lvWU1jZz09?=
X-Forefront-Antispam-Report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB5685.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?utf-8?B?ZFcrY0hCNG9zamVQUW5WSVY4cmM1S0llTkY5bnNRSWhRdVBpUXRPWFByUUZZ?=
=?utf-8?B?R1JwdjZOd0tiK29IYTI1Y3NudUNpTUdYN3VnVlVZaHZxaEtmblFJTnhpMnFL?=
=?utf-8?B?SVNHSFE4YUNLM3NtRCtlazlQTkM4bVErcGdLOW5GU1hVZndWZFBRbUVIbURT?=
=?utf-8?B?bW9jTlMvblMwZ0hsbVArdXRUUWtqUGp3ZlNQOTJtcFV1SnB3S3NzcDdPVXdl?=
=?utf-8?B?V2hLWXJhUzdxbkV3dEJldkNINHFITEo2RlloTTJ2WEFJemd2RmprMzB2UWEw?=
=?utf-8?B?WDNsRk9nSitZcjFwVGJJdWppajRaZUpSaWh5d3hXckVyY216dmRoRlZOQ1Vo?=
=?utf-8?B?b20xUFRIbHF2NUFualhPWHFPRGlSUGhORXMrd0xMV3JJMFFzZjB1aHNHbXhq?=
=?utf-8?B?Ny9NNWxqaVd1M1hEakJDaGlIaVQ4dFlMb3ozL1VGeVIyYmp5cmVGOXVMMGhZ?=
=?utf-8?B?cjU1SGZSclFOLyt1eENvOVVoVnBJUzRVeGR5MTFSVDdVdjZPSmU3RkkvUW9Y?=
=?utf-8?B?NTBnNTNjczVFZjhSY1cvWG5hN3hRNVg5Q0p4Z3A0WDF0bnFIeUxmNE9kMUI3?=
=?utf-8?B?enVDamlLQjAxaWxueWFPTGptWlNXT29TMVgzSzhKVURDcFhKaVpzbWJSSXJG?=
=?utf-8?B?bG1PTXVqMEhMTFBCbG5aN0dSTEdiYmROVlJvcDRvU25UMGFzdkNYRUVaektQ?=
=?utf-8?B?ZkRSUFRDRkR5U1dNT25DOFUySVdNZWdTZ1FqQmhxOU9wZjJGaHRiQkpOOWxP?=
=?utf-8?B?bnJKOTNoSmsxMzR3NnhaQi91ZVF2bldjYUYxUndkckgrWnkwK3NkMkNrdkd3?=
=?utf-8?B?UmFGSUQvNDN1ZDNiVzhtWmxabjNMQ0d4WHlhMmJ2YzUxTkFWYTl2Mi80QnN2?=
=?utf-8?B?N251QVhCNHEvbEwvUGtKK2JLL1NGRjVmQzZpbFlLRi85YldDS2JzVFlXWlRs?=
=?utf-8?B?OTE0NXBBZGlTMlUxclRKNDF0VzRNdFZjMlpQZjREbytGdkxMbmRCZVpuQjIz?=
=?utf-8?B?eW9wdmZkVmt1MG1EbHpiUzlveVZHSlFYZ0lVYVpyN0hnR0xvWE1NRTFqSExZ?=
=?utf-8?B?T2h6NWNwTDNubzBNZXhvT09lRmFLSmRTc0M1YVpXR0dWMHQyemI2WGhLL2lT?=
=?utf-8?B?alJLK3licjBkOWtZRm1GcEVUMHlIVlhaWWY2bW1SYmY1YWlJbUN0UkNoK05V?=
=?utf-8?B?eGxlVFROL1VTV3ZBUS8xNDN0cWRPM3hWckVucjRXVEJXUWlLMGxsSzRROHN5?=
=?utf-8?B?d2xoUmJ6MEZ1UElRNnJNMWluM2YwTDlPeXpmbU43Q3NLWjZ4LzJ6b3RUMkZJ?=
=?utf-8?B?WFk1YU5PbmppaDdnUlJOWmpMUWZMTTNIaUxJdmVXT0o3VTJvRExTNGoxSTll?=
=?utf-8?B?VFZCSi9CMVF5ZzUwei9CcWxhWVIzWUtOdHVDZG9YUFRQdFlOWEFTaFRYc21G?=
=?utf-8?B?bVdjNnlGZmk3NzhneHpaelJadmh1SHRhTGtsdkVvL3BEekx2dW9qZGZBUWN0?=
=?utf-8?B?MjBCT1lESERmT2U2QURDcEpFMVR4aThSZE9EQjNmdzhKNXlSeHdaOTdObVp4?=
=?utf-8?B?RUhtVDc4enJ1WS90OTBQclRFWkNpeGU2bUxVMjFCb3Uvci9IeEJUQWZlVjBK?=
=?utf-8?B?R1FvbGFFaFNpR0o4cjNBakFFU0h6Mk05YjFFQWQ0NHVONGZBZ25aR2V3UUhV?=
=?utf-8?B?UG85dkZZdjMzWkFsTDlIQnVmckw5Z1BVS20yWGZZWjBiYkpsVjFsM2ZlR3Vx?=
=?utf-8?B?NjdIa0lDb21McWgydlJsdkRnaUdGazBwRk5XVFE0Yml0a3E1dG01aCtmeUVx?=
=?utf-8?B?SFVBR1A0bmdTWTJqdUtZc0xXekM3dE9EZHZiNnlzT3ByejNtRDY1WlVTN2tX?=
=?utf-8?B?L1BLZnZ5aFdMNUxGNm5hbG44c3FCY2IvQ2dqNWZnWnF4aVczTjhnVDB6SHg5?=
=?utf-8?B?NnVlN2dWdTM4WFVwV1NZcXhFNXI2UUgxTVB3cjIwd1JKL0lDS1hDVDkxeC8z?=
=?utf-8?B?M01rVG1zbTF5ZGMzRGFOREw1RnRpKzcxY0pvWVR6a0RSWjRUUGdlYjhTaFRh?=
=?utf-8?B?OGltaW1oOFJpZVg0YWhjL3BSd2VWOVp1WXNQSDJDeWJjeE5vTmw1blJmRHlH?=
=?utf-8?Q?/aREUacQKrw2YZGsGb4L4gsUG?=
X-OriginatorOrg: amd.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3dcae1c6-699e-44a5-fe30-08dcb2189cd1
X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB5685.namprd12.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Aug 2024 10:56:36.0470
(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: OkEMqsxziFUoPY9ak7T8jHh48WCmqZpVCTYtlPmWRiIsJb/ZakBzmPNE1HrWRwZH
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB7028
Am 01.08.24 um 12:45 schrieb Huan Yang:
> Currently, there are three duplicate pieces of code that retrieve
> sg_table and update uduf->sg.
>
> Since the sgt is used to populate the page in both mmap and vmap.It is
> necessary to ensure that ubuf->sg is set correctly.
That is a really bad idea. Why are sg tables used to populated the page
tables?
Regards,
Christian.
>
> This patch add a helper function, if ubuf->sg exist, just return it.
> Or else, try alloc a new sgt, and cmpxchg to set it.
>
> When the swap fails, it means that another process has set sg correctly.
> Therefore, we reuse the new sg. If trigger by device, need invoke map to
> sync it.
>
> Signed-off-by: Huan Yang
> ---
> drivers/dma-buf/udmabuf.c | 60 ++++++++++++++++++++++++++++-----------
> 1 file changed, 43 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c
> index 7ed532342d7f..677ebb2d462f 100644
> --- a/drivers/dma-buf/udmabuf.c
> +++ b/drivers/dma-buf/udmabuf.c
> @@ -38,8 +38,9 @@ struct udmabuf_folio {
> struct list_head list;
> };
>
> -static struct sg_table *get_sg_table(struct device *dev, struct dma_buf *buf,
> - enum dma_data_direction direction);
> +static struct sg_table *udmabuf_get_sg_table(struct device *dev,
> + struct dma_buf *buf,
> + enum dma_data_direction direction);
>
> static int mmap_udmabuf(struct dma_buf *buf, struct vm_area_struct *vma)
> {
> @@ -52,12 +53,9 @@ static int mmap_udmabuf(struct dma_buf *buf, struct vm_area_struct *vma)
> if ((vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) == 0)
> return -EINVAL;
>
> - if (!table) {
> - table = get_sg_table(NULL, buf, 0);
> - if (IS_ERR(table))
> - return PTR_ERR(table);
> - ubuf->sg = table;
> - }
> + table = udmabuf_get_sg_table(NULL, buf, 0);
> + if (IS_ERR(table))
> + return PTR_ERR(table);
>
> for_each_sgtable_page(table, &piter, vma->vm_pgoff) {
> struct page *page = sg_page_iter_page(&piter);
> @@ -84,12 +82,9 @@ static int vmap_udmabuf(struct dma_buf *buf, struct iosys_map *map)
>
> dma_resv_assert_held(buf->resv);
>
> - if (!sg) {
> - sg = get_sg_table(NULL, buf, 0);
> - if (IS_ERR(sg))
> - return PTR_ERR(sg);
> - ubuf->sg = sg;
> - }
> + sg = udmabuf_get_sg_table(NULL, buf, 0);
> + if (IS_ERR(sg))
> + return PTR_ERR(sg);
>
> pages = kvmalloc_array(ubuf->pagecount, sizeof(*pages), GFP_KERNEL);
> if (!pages)
> @@ -154,6 +149,39 @@ static struct sg_table *get_sg_table(struct device *dev, struct dma_buf *buf,
> return ERR_PTR(ret);
> }
>
> +static struct sg_table *udmabuf_get_sg_table(struct device *dev,
> + struct dma_buf *buf,
> + enum dma_data_direction direction)
> +{
> + struct udmabuf *ubuf = buf->priv;
> + struct sg_table *sg = READ_ONCE(ubuf->sg);
> + int ret = 0;
> +
> + if (sg)
> + return sg;
> +
> + sg = get_sg_table(dev, buf, direction);
> + if (IS_ERR(sg))
> + return sg;
> +
> + // Success update ubuf's sg, just return.
> + if (!cmpxchg(&ubuf->sg, NULL, sg))
> + return sg;
> +
> + // use the new sg table.
> + sg_free_table(sg);
> + kfree(sg);
> + sg = READ_ONCE(ubuf->sg);
> +
> + if (dev)
> + ret = dma_map_sgtable(dev, sg, direction, 0);
> +
> + if (ret < 0)
> + return ERR_PTR(ret);
> +
> + return sg;
> +}
> +
> static void put_sg_table(struct device *dev, struct sg_table *sg,
> enum dma_data_direction direction)
> {
> @@ -230,12 +258,10 @@ static int begin_cpu_udmabuf(struct dma_buf *buf,
> return 0;
> }
>
> - sg = get_sg_table(dev, buf, direction);
> + sg = udmabuf_get_sg_table(dev, buf, direction);
> if (IS_ERR(sg))
> return PTR_ERR(sg);
>
> - ubuf->sg = sg;
> -
> return 0;
> }
>