From mboxrd@z Thu Jan 1 00:00:00 1970
Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2082.outbound.protection.outlook.com [40.107.220.82])
(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 16C37187FE5;
Thu, 1 Aug 2024 10:51:01 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.82
ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
t=1722509465; cv=fail; b=HpBA04Sx80HCnmKZcbBByUYnF20jWU7XRZ5lKsFFCiC2kFpzPPg2EARprJctLtK2j7YYG1O2d1uIcXqzop9cYOygMvWqmD8qBL98dBCHe5po5do9Ce0tYnMUUEssrXGrt35GCiOW5SCNG6SP8Yi/1cKJdbvyTiRgbkAJpXMRAh8=
ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org;
s=arc-20240116; t=1722509465; c=relaxed/simple;
bh=/kk6gkBcwp8N6/dGvxtir2uy7464KoepkUpTsRWzdGg=;
h=Message-ID:Date:Subject:To:Cc:References:From:In-Reply-To:
Content-Type:MIME-Version; b=W5F+ymgmPtIsHNt7GG9qNLM4FsZIh36sYS6H2A5q1oSbGVz0dZpNOMy7InyRajuhG7zBk8yqDx3CEKYjPibEkdIVY5OwLBIrLcj+uT4g4VYRlMA3xqax/juU1FHDXTxr/dqqqo9ktWp3Qe13P0deZQX1jw8zXZMAZHat/wyziw8=
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=Jg4z1PRL; arc=fail smtp.client-ip=40.107.220.82
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="Jg4z1PRL"
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
b=KcIOefE0O6jMLmGziVvtCaDuSv3P7j5T+0XWVyuJ+mJNtHk901QfEO8CZNEJbxB0u+zMIpJbcv9iKursh2ApwSFhTKWx/Z65ivftEFirnEqkXbphVVNrUVGjWwiVSr0+R7mttAAClpGRf1Fe/O/a6NbX7H1Wu4WtyxSn69mDvVHEPUetgpRfEEvVeai1vaSg0qIDvKadGNY3Z1P831nISoT2yg6HCRO+LvgTdCb2iIuMZ+6BpyU7grownzuyXplOUNAz+h/qvvRY7UwyhVt3yoWYA76ilxQ+AEaWqEugeoUgdgQi74KT78f8SPVw+BfepWmg6q4NuwpFB7gz9E7sJQ==
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=4UVdl8316DUMxjeYz8jc40IPWKonFFiQC98ROgbGQNI=;
b=magrQE8+Pv85sSDUhhw+wY+eRFaejihJ+VYd4umtLvEvlECzQnpyFjPY7XD7rYx/2cu+6djWNi8rK4Mfyj4cOlHt/Cssifo3GHgf8UAioxIrClXmWL9w5Nks1rD2xRGrz5iJi9U+cF5dEhNcoFM8p2qF3iQ2k9WSq9eU1pzyn7cKysLUkYNB2/83y9nLRl3erGpJz2DyaJ46ynrMLCIX1gmyaavKsqWHq+oWYznMRrbQMgMc0pMZx2LyTrAujnhXddRL5EbPFq5EjBc0O+brrZorRThlUk22fIgeG8X4kekmyNwaURN7wlJqZ4DHq4gdMVEUhVBLzLP1fogrbdGBsQ==
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=4UVdl8316DUMxjeYz8jc40IPWKonFFiQC98ROgbGQNI=;
b=Jg4z1PRL1YGWd3meCwW//iSiXNVYzaNr9WDYLc2ft2puXAQxnODxiBrfD+lh9LstTEFisWV445GY+XwZmLREUhcq1rQMapKdLEzBXsLbDnaREWMA8vKjgTTl/ZP6703qXgzWQIFAuD/xND+pvQ/DcrrMpw6g8QAXydqiDC6eKRU=
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 MW6PR12MB8758.namprd12.prod.outlook.com (2603:10b6:303:23d::18) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7807.33; Thu, 1 Aug
2024 10:50:59 +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:50:59 +0000
Message-ID: <46d00d9a-b86b-4e4d-863f-48d71060ef2a@amd.com>
Date: Thu, 1 Aug 2024 12:50:53 +0200
User-Agent: Mozilla Thunderbird
Subject: Re: [PATCH 1/5] udmabuf: cancel mmap page fault, direct map it
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-2-link@vivo.com>
Content-Language: en-US
From: =?UTF-8?Q?Christian_K=C3=B6nig?=
In-Reply-To: <20240801104512.4056860-2-link@vivo.com>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-ClientProxiedBy: FR4P281CA0434.DEUP281.PROD.OUTLOOK.COM
(2603:10a6:d10:d1::7) To PH7PR12MB5685.namprd12.prod.outlook.com
(2603:10b6:510:13c::22)
Precedence: bulk
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id:
List-Subscribe:
List-Unsubscribe:
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic: PH7PR12MB5685:EE_|MW6PR12MB8758:EE_
X-MS-Office365-Filtering-Correlation-Id: 5cbc1d0b-038c-442a-9c50-08dcb217d442
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016;
X-Microsoft-Antispam-Message-Info:
=?utf-8?B?bUMrV3c1K29QdHBTRVdETjFpc1hkbGE1cXlvU3V2QnhrRnAyRkhSOTJsaFdU?=
=?utf-8?B?STBZQkxYRmdUeC9RTG90eGpYVWFRS2JJV3AvcXd2anQxSW1CaFRqT005bHFz?=
=?utf-8?B?cjZnMEZaaXlvZjNlTzlDcnB6VE0yMThGR3czYXlMUGcreHA3dG5JNHA0YzdW?=
=?utf-8?B?R1RDT055bmtmcTlwaU5RY0ViLzNuTmxEKzFrWERiVThISGlyNnRHQ1prREMx?=
=?utf-8?B?OWZadENpMTZnQ3J4Qi8wT2VkSXdBWFNiQk01Q1R1U0tJY1l2SGd6RVpqQ2NS?=
=?utf-8?B?b295SkFSblViRVlXTGIwazhrUVRoM3Y3aUlDcXprUDhCckZTQ3p1ZmxpWlV3?=
=?utf-8?B?K0pZUkxPd2lqVnhLUnAwam56QzU0bHBUTWtVcHdNelNJQ2taVUlQekJWNFdL?=
=?utf-8?B?RkY0ZjNIcTZDNHB3ZmlENDdLNldiSERkejArcG1xVWtiL1lpcWNJam5LVjFj?=
=?utf-8?B?V0d0aFpmNnphaURTYmJqeVVRT3FYL3JnckJ2OEd4TVZtL1pSN2J1OVZlblZX?=
=?utf-8?B?Q1hkUjV1T3lHQy9RU2I0VnhSN2NEcHZ0YzkwOHBwTjhBT3UwOCtRYXVqZTZo?=
=?utf-8?B?RDZhWGZDdEVjazl4WlFnNVI2Qm85T2M5WFBXTCs5S24vclcxYnNnanNwem9S?=
=?utf-8?B?cmJJVldRbmYrN0xKNy9QTFR6VlU3aW0zdE1Qc1ZmNysxZ3ZpNURSUVU0Mng3?=
=?utf-8?B?MWtDODRObWhsUEk5MFN1MnZrMCtmMnhOelNpRmNOcDh4am5rNWE0d3d1dVg3?=
=?utf-8?B?VTJqK3AvbUdDcUxtSEE3OVlZeTFpQmQ0MU1GTXRGN2JaY0R6RVZpMXZwK2xh?=
=?utf-8?B?bWxZV0tpVHczVnRNeEc3UlF1eExFYWZJWlpYSHg5d2pPNkk0VGp2MFI4ZWtR?=
=?utf-8?B?empyclQ2SHBnVDIwcW81aEJkV3YwdlBGU3JBWjFXTGF6cmZ2ZnBGTlB4dXd1?=
=?utf-8?B?Y3hOOXJzT1YrV3RWU1lOTVFQOThvZzcxWGxKV0Z1aTYwWk9MZWx3NlJQZHB1?=
=?utf-8?B?YVY5cFlmc2Rzb1pvN2hTTmVXRUo4UVFkRWZKVGgveUU3TzZsN0lFWU5oczg4?=
=?utf-8?B?emxrUTZpbE8vYWNlcmpTVXgvaSt6Y1JXa0pKNG5MaWJHQzF4ckt4YU0wdTNZ?=
=?utf-8?B?TkYvMUh3OEY3NngwWHZna0tvV2FWZFBRdUFieXN2SXZRNlprRitXTXM4YnUz?=
=?utf-8?B?U1g4ZmQxTmlmTU1YNHduaVNGSk5YbVJkdEE1cXEwYWJDaC9nNE9lQU45c2xN?=
=?utf-8?B?UlkzTzVtTytlRzE2elJUaXJRUWpFbGpaSTdGTS9QV3J0Q2FYQmxvTUVxQmNO?=
=?utf-8?B?ZEQwa25DN09JYU41bW9vQkIzay9EajAwdDJyemtqb2xrenpFeUJSOU8rS2tq?=
=?utf-8?B?VmVlN3djRVQ5akxtQk83OVM2V1hkd3hrQ0F4VUFyOXBGbWdKZ2tRSTd4VWJo?=
=?utf-8?B?VlJiU0VCUFhOZWlhN0RFU2dSSE8wQ0dTK0V5M0JIRDBnSHIzZlAzZE80YTE0?=
=?utf-8?B?bGNPWGdIZVBmTDJZM0lhUG5NVUNLWERhMHdIRmd5ZUEwWU1RVnorMHEwNGdG?=
=?utf-8?B?bVFqNXV1RitLUXVlYUQvSkROazdkUGV3MHlNNk5sb2YwNFZtRWFpNnFWT3lR?=
=?utf-8?B?ZmozSVlPczFrbzgyZUhWa3VnSktYNHpHNHp1cThFc09uano0Kzk2alc2c3cr?=
=?utf-8?B?ajJ2d3Z5SDNicktCcTJyeThwRkNVYnVXeEtJRXhIWDIxK1VkcGo1cFFRQ2py?=
=?utf-8?B?bXdsYkJQUWo3V1FrRkFuRzM1UmJSSk5hL3FxLzMyWDgzcU1WQm5BVGo4SWRV?=
=?utf-8?B?MVBWRU5wMmorTkJ2MmxHdz09?=
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)(1800799024)(376014)(366016);DIR:OUT;SFP:1101;
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0:
=?utf-8?B?SWtCKzZaaFNOcExnZ2pKWEI0clNXNXBsdXl0OFI0MVl0bFBKanU2RDVpbWdp?=
=?utf-8?B?YlErdy9wWEw3TjRIandVVEo3Qytodk8vdHViMzFVTFpPSlFLbHhlM1JyQnFQ?=
=?utf-8?B?blZvbWVvcG5hcXU3QzhQSEgyU29GUDZ4SjNhS1F5U2RhTHdrRmNPd3djOUN4?=
=?utf-8?B?SllzUm9EaTRySEs0dHZ1dThvWVhxYXdSWVVsMFF1UnJReU04b0p4WktJSnJZ?=
=?utf-8?B?TmZxWTJ2akNocm9tWlY0WEZEN0ZWK016Q3NHam1pRDZ2UHhsbHhJZDJ1NUlv?=
=?utf-8?B?Q1d0SmdUaHVmcDZ0aUx1azY1VVBJRWc5ZGxTeGNybXRZbHZjYmQxcWdxci81?=
=?utf-8?B?L2d0Z2lnUzlzZ0Q5TXMvRUVGKyt4Y1lxMnRQeFJIOFJsYVNrNXBPaXFDZlN1?=
=?utf-8?B?aHFuKzFsUWtPaTRuNnh1cmpLZVFId3FFUlJtRGdydDZjaCthRGM0NWcycVFv?=
=?utf-8?B?VzVuMW9sUXNQVldBVjcrVGQrMWdMbUM2WVl6QUErbUZlZHBVYzRBVWR6bzRR?=
=?utf-8?B?QmxHTmRMSVVaZmx5WTJGcXFBOHMrR25JaDA0N0NvMXNEOXloN016QnUxZ3Bz?=
=?utf-8?B?N3pTYWd0U0F4OWVYQVY5UHJsUzFBNHo1V2hQYUp6Rmtudmh1Y0FSRjU5clhV?=
=?utf-8?B?V21lYVdOSVJZeUhNQWEvT2YraWxDY2NnSHdqWnZBYVNzU2Y0QnQzTjJWRUZB?=
=?utf-8?B?U1cxYVp0VnFMTHpXUTdXQk83OVVuditQTlRoU3d1K3E4UzRJcE8yR0lmMmZq?=
=?utf-8?B?MjlXcHkzb3dLTDJtMjBsZFZKcTlpUDFWQ25pM2ZpY1g1MGNaUzQ1WFNIZXNR?=
=?utf-8?B?YjUyYUx6czd1WitIQUswampBajE0SEV0WEZoODhraFBCKzNORDlrWThsZzhR?=
=?utf-8?B?Z0ZMdGJMaTlvd2JXOGFwM21NSGI2b3BIMFltQmdSTU8xRWFUOEpaSEFPNG13?=
=?utf-8?B?QVBUTXJvWWRjSThTdEdkb0pWSkc0VWErTW5wM2hmdUFWK2NtT0xtU20xaHJM?=
=?utf-8?B?RElWWGpFaGNrUll6UjllUlltbFdrV1pwMGkvMytpZVdYb1ZTeUNrcWliZTU3?=
=?utf-8?B?MGtNczBraGJtOU54TEtXZTVqZXNDNTNIWi9RaXRFNHkyaUJkR0tYQXBzV3Zk?=
=?utf-8?B?ek54eEU2MlR0ejB2dGJ2S1p6MXEvcGdjNGN4OXhHb0ZZamYvVW15S2xReVND?=
=?utf-8?B?MXpBMVlaMUhIaGpBcmM3UGVvM0FyL1ZaTFlwTUo5OFpKb085a3MvV1hiR2RJ?=
=?utf-8?B?bFJ1SGRLb0VjZENCZm5hMml3YkRUUjVMVmhCYm5vcXFPZFF1RzZoWTJ1UkZm?=
=?utf-8?B?b3VhMmZ4ZzREdGtqZ0crOE1GZ0ZTVXlCQitYRDk4a3RJMUkyclUrQTJvbE5F?=
=?utf-8?B?OWlhR3o5OThxL1g3VWUvcks5SFJrRld1Y3VpVjRWMTY0SkwxL0NQdjBwaU5J?=
=?utf-8?B?WnphOGZqRkZ2SGxGaVkxalpLYkZ5cFVEQ0FxdGsxdk12T3puVEtKbEF0cHA2?=
=?utf-8?B?NkxwSk5GSis5ZFdkNU4zcDVaSnhBcWUxUElhTGFweEJpeVVwbUlzNFRwbWFY?=
=?utf-8?B?a1ZwalpJM3A3R1hJWUZqOWZBY1h6V2xWNnVJTWxMU05zWFkwaFZScWR4ZVJs?=
=?utf-8?B?WFJ1bnp5STY5bWYzcHJ3RzRrdk5veThiWFFzNFM1VnhTdytPa1UxaEVGN2w4?=
=?utf-8?B?MlNnYTZ0WkJGWVlEMFJ1U3VERGE2RW1Vd05oUVRDWlN2Z3AweVZ3L1RyVzhh?=
=?utf-8?B?YzFBMmVvOHNmMUswcWNlV3Q4RTVqZXF0d284aUhBbjE3b04rWEVGQUJ5N3Fl?=
=?utf-8?B?MnVFMWJPK0lodkt4YlFDOEVLV0Vaa2cxVUcxa082K2gyckZkUHNEbjNreWFo?=
=?utf-8?B?azdEWFBXTDVmOWhOSmhTbzBrWU16eWNXd0U4amZvVVFCYzVvSHhsa0ZsQmZC?=
=?utf-8?B?NEF4SzMwL016WWFhdTYxTTRaVjdyK1R0bDJZR1dtdlh5Nkt2em1tTkh4SVhT?=
=?utf-8?B?NFBLZ0R0djNPRU1ST2Q5T1E4VjZOQ3FQbXkvMm1JOHZqYVpZbzZEbHl5aTBM?=
=?utf-8?B?ZGh0Y1RhMnZNMHJNZHRjeDRWTTIzNC92emQ5dnE2czEzMjQ3bG1lOVl6RWFB?=
=?utf-8?Q?yLi1+s8SogqkItOzvn/gvm9eb?=
X-OriginatorOrg: amd.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5cbc1d0b-038c-442a-9c50-08dcb217d442
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:50:59.7393
(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: nUFdcgJf/qbiPqNOJd/+dSFz2577fL2xF/GnP/WY37p0TsklKLvHQkkMh1KRibT3
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR12MB8758
Am 01.08.24 um 12:45 schrieb Huan Yang:
> The current udmabuf mmap uses a page fault mechanism to populate the vma.
>
> However, the current udmabuf has already obtained and pinned the folio
> upon completion of the creation.This means that the physical memory has
> already been acquired, rather than being accessed dynamically. The
> current page fault method only saves some page table memory.
>
> As a result, the page fault mechanism has lost its purpose as a demanding
> page. Due to the fact that page fault requires trapping into kernel mode
> and filling in when accessing the corresponding virtual address in mmap,
> this means that user mode access to virtual addresses needs to trap into
> kernel mode.
>
> Therefore, when creating a large size udmabuf, this represents a
> considerable overhead.
>
> Therefore, the current patch removes the page fault method of mmap and
> instead fills it directly when mmap is triggered.
>
> Signed-off-by: Huan Yang
> ---
> drivers/dma-buf/udmabuf.c | 70 ++++++++++++++++++++++-----------------
> 1 file changed, 39 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c
> index 047c3cd2ceff..d69aeada7367 100644
> --- a/drivers/dma-buf/udmabuf.c
> +++ b/drivers/dma-buf/udmabuf.c
> @@ -38,36 +38,39 @@ struct udmabuf_folio {
> struct list_head list;
> };
>
> -static vm_fault_t udmabuf_vm_fault(struct vm_fault *vmf)
> -{
> - struct vm_area_struct *vma = vmf->vma;
> - struct udmabuf *ubuf = vma->vm_private_data;
> - pgoff_t pgoff = vmf->pgoff;
> - unsigned long pfn;
> -
> - if (pgoff >= ubuf->pagecount)
> - return VM_FAULT_SIGBUS;
> -
> - pfn = folio_pfn(ubuf->folios[pgoff]);
> - pfn += ubuf->offsets[pgoff] >> PAGE_SHIFT;
> -
> - return vmf_insert_pfn(vma, vmf->address, pfn);
> -}
> -
> -static const struct vm_operations_struct udmabuf_vm_ops = {
> - .fault = udmabuf_vm_fault,
> -};
> +static struct sg_table *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)
> {
> struct udmabuf *ubuf = buf->priv;
> + struct sg_table *table = ubuf->sg;
> + unsigned long addr = vma->vm_start;
> + struct sg_page_iter piter;
> + int ret;
>
> if ((vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) == 0)
> return -EINVAL;
>
> - vma->vm_ops = &udmabuf_vm_ops;
> - vma->vm_private_data = ubuf;
> - vm_flags_set(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP);
> + if (!table) {
> + table = get_sg_table(NULL, buf, 0);
> + if (IS_ERR(table))
> + return PTR_ERR(table);
> + ubuf->sg = table;
> + }
> +
> + for_each_sgtable_page(table, &piter, vma->vm_pgoff) {
That might not work correctly. We intentionally remove the pages from
the sgtable when it is shared between devices.
Additional to that the sgtable is *not* a page container, but rather a
DMA address container. So that here is also a rather bad idea from the
design side.
Regards,
Christian.
> + struct page *page = sg_page_iter_page(&piter);
> +
> + ret = remap_pfn_range(vma, addr, page_to_pfn(page), PAGE_SIZE,
> + vma->vm_page_prot);
> + if (ret)
> + return ret;
> + addr += PAGE_SIZE;
> + if (addr >= vma->vm_end)
> + return 0;
> + }
> +
> return 0;
> }
>
> @@ -126,6 +129,10 @@ static struct sg_table *get_sg_table(struct device *dev, struct dma_buf *buf,
> sg_set_folio(sgl, ubuf->folios[i], PAGE_SIZE,
> ubuf->offsets[i]);
>
> + // if dev is NULL, no need to sync.
> + if (!dev)
> + return sg;
> +
> ret = dma_map_sgtable(dev, sg, direction, 0);
> if (ret < 0)
> goto err_map;
> @@ -206,20 +213,21 @@ static int begin_cpu_udmabuf(struct dma_buf *buf,
> {
> struct udmabuf *ubuf = buf->priv;
> struct device *dev = ubuf->device->this_device;
> - int ret = 0;
> + struct sg_table *sg;
>
> - if (!ubuf->sg) {
> - ubuf->sg = get_sg_table(dev, buf, direction);
> - if (IS_ERR(ubuf->sg)) {
> - ret = PTR_ERR(ubuf->sg);
> - ubuf->sg = NULL;
> - }
> - } else {
> + if (ubuf->sg) {
> dma_sync_sg_for_cpu(dev, ubuf->sg->sgl, ubuf->sg->nents,
> direction);
> + return 0;
> }
>
> - return ret;
> + sg = get_sg_table(dev, buf, direction);
> + if (IS_ERR(sg))
> + return PTR_ERR(sg);
> +
> + ubuf->sg = sg;
> +
> + return 0;
> }
>
> static int end_cpu_udmabuf(struct dma_buf *buf,