From nobody Mon Dec 1 22:36:52 2025 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (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 4795430BBB9 for ; Fri, 28 Nov 2025 10:34:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764326079; cv=none; b=aIPMx7mvxuGR49s9T1rnZ4TkL1gRVguT0tnwHkR8rbwipOc0sRA6cAwzJs57fWm3AdaM8h+LoBpokDacXjHH0UMKoRXqQKomi+w1OvcGV37U1XNFxkuuL4Lvx46UgPYQ3VobPm2e//TIyX9HmMCvb12CwNQxwFsY2vufl3Zp6QY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764326079; c=relaxed/simple; bh=uLyifP7SKlrjfFdP++Nmqu+b1mlkdPkRPtf6vWlcRfs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=l35W3D7ai+yCCoZQ025weCjffqZ58qCODIa8IBAyX93vsE3Oe2eX/BJH0HbdMtoDdkW+WekrFImG2DX3zg+TRQLUPJslzjiCMZkAP+/zFN2Ez9esAbvX6hAt/MN6PPTDVMpp6kReihHYLaIt9/EaZzTPifa+QeFhf6G7zBfV7P0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Prb0uims; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=erpIEWMC; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Prb0uims"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="erpIEWMC" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5AS8OjeZ3627571 for ; Fri, 28 Nov 2025 10:34:37 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=IPnOVWqwyE7 dmRiwVJlZo4xKYGYq4wHZIwKE6VXPwFs=; b=Prb0uimsG+A1BXpszr8vssiKGrk YEwYJVORVs50v4Px51eC5HCZAomwIvvZOqX3rBkHgy33f/WzY99lL0rgJ8XG8nWf A6a5BJ8IDcsBfyf1Xvzbu+4k1wGbCmP9g7GHbLtJRp/Q6rJrB5eEDsPFq28qg78V 5BptPcWI6Pw/0/Zq7+wQyMsB4hcS7jkwQWRZyW77ufJhisWeRH2G/nn0LCF3DoDt XRAJZmXClN31cTjpPI2qgpz9eFsxecoUZ2P4NzYqWUSJDgRlmqL5uLU+hX/VjXis 6Rpko5gWYGt1TxNr4Qe0fpavGnaVDniRBAHLSc/aprWslzZf8E6LBQ/wMFw== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4apmynu0yt-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 28 Nov 2025 10:34:37 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-29b760316a8so19940985ad.2 for ; Fri, 28 Nov 2025 02:34:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1764326077; x=1764930877; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IPnOVWqwyE7dmRiwVJlZo4xKYGYq4wHZIwKE6VXPwFs=; b=erpIEWMCcj5HHHYol2dv2fEHVkoTADGwcbmm5nSPDd9cF7oYYpl4zUkn8/NUTKdeAL adCb0kqxA3zQmcjTD8q2LgKr+LgHAPaJVfZDpoQ7fKAw69Y72IbdzKge9w7uzOTRPcJV URMHZO3FnakbeV1yw2Apne8gy/xA9FkIHtYD2ftX0D1vb4eehWQm3j6BbCyU3rKvqHEC sZP7Ch5QojdcTY0xXulG5PuZS8kdf8IUz12ykFxFHDm/NYYUEZOW8lwQx8jZTXPDq8nb 0FZE9QiINj7ml6gEDVCMX8HZYPVRqna6tPpqRPRK3oP85YddJdByJVbpikedMv3jEK5Z NORg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764326077; x=1764930877; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=IPnOVWqwyE7dmRiwVJlZo4xKYGYq4wHZIwKE6VXPwFs=; b=m2o8gU7PEO9OLRLhSLWcCMPZtlQ+7gSwszA8P8W8bIAITu//vPW/z0QqpoZP1rA2Uj GlG+dXGkz4HK+oHfp9WZx7nEewORpFhwjlDxZ83erMHtcZBoxuWK/jcLux2o5TKoYxS1 o068o7DoVAMZpD5pMJR5Y6mJDraxLjqr0K8yZwpzljxoReh6JtJr8YaYx+3uyydAZ5Lr vP7dnqip+hXjfj32V1sjdru4LgpCk4YhOkwy8px+XGJcHiHpud3c//eazminHwpIlzGG +pBTIOM6NR5KA/Mjs55I62RQNc2/cwTMJMyerxfCYvsb1hn4FI4Of3houRCRFCwKqYPH 1M/g== X-Forwarded-Encrypted: i=1; AJvYcCX6+KLm3WuWJs+CoiSllWA4xAoWp+vT3WJlAeiyC68QzHRXFzhMLU6r/OhzOdOoNBsqbWw5tf+3YKGm6VQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwTMHUOzVvvHbKLs/uppSvLrDPV/n7e987BrJSCT2lKFL86lHVa i+E8FLQ5/xXEped+1oersiF7SkHPvp4sErt0rexHz2y2hLrAkB9I9OmJlg4aSRN9pv4YJEzl8Fr ZygREp7W/+lF3kd8C4bKI2NwU8Ou2KSMB4TMcoYHT+sJ74orfFGu+EC9OQjTaJaaxQqI= X-Gm-Gg: ASbGncsZQXkY1p+k5cYg1Phu2ADn6Tm3SuZbvRNRxZmYJkAKXrLrM8QemJ8a7v5uBBk x7Yq9qS1/BMakmec79+v/7nEiFBP+LDXHLoXqi9Dh4caO6LNkLR+ZZ+d4ymv9wlHHx9B7QNA3pL RzMcZADmptCTeboMHZzbeaATc3SRDGTEWbfuBba78kQBz8c3g3a/JIKyXy7WePGwN2g87nXRmzq h6lczqOBauQY85orXe04sGTBlQsotvAsvi2hP8qyFo9lRPmuN5gkThy9mwDS+YZfYjRWk2c0XNv jk/HqP+So67pXdbgANZ9qEg5h/881EBGKIULuJ3/exoHY5zq59CwtSFIIuCwxglM8/ze+x9/jzq UCBKjUXblUNwXqqdyVWQyntfnpY6qMM4pGfXUBzG6Ww== X-Received: by 2002:a17:902:ebd2:b0:295:57f6:768 with SMTP id d9443c01a7336-29b6c575687mr281002095ad.33.1764326076495; Fri, 28 Nov 2025 02:34:36 -0800 (PST) X-Google-Smtp-Source: AGHT+IEJ95n2o/SW33n4j5YjSWDtSMjNHUljAZYogDtIPZGtzVCHAvGey5m8vbtw1/igS5b/hrMCtA== X-Received: by 2002:a17:902:ebd2:b0:295:57f6:768 with SMTP id d9443c01a7336-29b6c575687mr281001705ad.33.1764326075878; Fri, 28 Nov 2025 02:34:35 -0800 (PST) Received: from hu-ekangupt-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29bce40b993sm43098195ad.14.2025.11.28.02.34.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Nov 2025 02:34:35 -0800 (PST) From: Ekansh Gupta To: srini@kernel.org, linux-arm-msm@vger.kernel.org Cc: gregkh@linuxfoundation.org, quic_bkumar@quicinc.com, linux-kernel@vger.kernel.org, quic_chennak@quicinc.com, dri-devel@lists.freedesktop.org, arnd@arndb.de, dmitry.baryshkov@oss.qualcomm.com Subject: [PATCH v2 1/2] misc: fastrpc: Refactor mmap and munmap logic into helper functions Date: Fri, 28 Nov 2025 16:04:27 +0530 Message-Id: <20251128103428.1119696-2-ekansh.gupta@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251128103428.1119696-1-ekansh.gupta@oss.qualcomm.com> References: <20251128103428.1119696-1-ekansh.gupta@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: rmm0uP1bod-I6MuCcqKlaX5RhHNhyf36 X-Authority-Analysis: v=2.4 cv=QOplhwLL c=1 sm=1 tr=0 ts=69297abd cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=6UeiqGixMTsA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=04dbU8GgqVRi9gjLVHMA:9 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTI4MDA3NiBTYWx0ZWRfXxIq5ULzM9Dqh U/dXBpvfotAcZ7yE+mW4Kvdv4m7FyXPUILhVMUkLLDUvr9wsg1PHTvnruGMCqSRoxMhxGkDudzk Eud+E/VCB2H1L3k3qMoaeDeEA1tnjUGAARTFCNhQFT3LSnm4oqiyVmmIKb1+DEjLSnOl2GHpgLX Kxp4Lva4ITX+MU/3TgtaoDnVpJg2NFwHtpBkAstRlrAfFQfxNqqlZOtoKNYnnrEOqniZMrX6BCD 9I3PsE/7gc3NISnmxHCJliUuS6KOxI9dRz2f6a3zWStU230WeGj8RMbbSZpvzYVaQPQjiGGv1Yp hbmxOU/1MSTDn6Q0+RTmDakwdcFMvJYjR+JKCvQQSWSlK8MPAQcWIV5oo/S5pKUeckD/yi8zpAV fAZnyIwSnANr5iCA5zf7ykiF2naEoQ== X-Proofpoint-GUID: rmm0uP1bod-I6MuCcqKlaX5RhHNhyf36 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-28_03,2025-11-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 malwarescore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511280076 Content-Type: text/plain; charset="utf-8" Refactor FastRPC mmap and munmap handling by introducing dedicated helper functions for DSP-side operations. This change improves code readability and separates DSP invocation logic from buffer allocation and cleanup. Signed-off-by: Ekansh Gupta --- drivers/misc/fastrpc.c | 110 +++++++++++++++++++++++++++-------------- 1 file changed, 74 insertions(+), 36 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index ee652ef01534..9bf76e224852 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -1811,24 +1811,33 @@ static int fastrpc_get_dsp_info(struct fastrpc_user= *fl, char __user *argp) return 0; } =20 -static int fastrpc_req_munmap_impl(struct fastrpc_user *fl, struct fastrpc= _buf *buf) +static int fastrpc_req_munmap_dsp(struct fastrpc_user *fl, u64 raddr, u64 = size) { struct fastrpc_invoke_args args[1] =3D { [0] =3D { 0 } }; struct fastrpc_munmap_req_msg req_msg; - struct device *dev =3D fl->sctx->dev; int err; u32 sc; =20 req_msg.client_id =3D fl->client_id; - req_msg.size =3D buf->size; - req_msg.vaddr =3D buf->raddr; + req_msg.size =3D size; + req_msg.vaddr =3D raddr; =20 - args[0].ptr =3D (u64) (uintptr_t) &req_msg; + args[0].ptr =3D (u64) &req_msg; args[0].length =3D sizeof(req_msg); =20 sc =3D FASTRPC_SCALARS(FASTRPC_RMID_INIT_MUNMAP, 1, 0); err =3D fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, sc, &args[0]); + + return err; +} + +static int fastrpc_req_munmap_impl(struct fastrpc_user *fl, struct fastrpc= _buf *buf) +{ + struct device *dev =3D fl->sctx->dev; + int err; + + err =3D fastrpc_req_munmap_dsp(fl, buf->raddr, buf->size); if (!err) { dev_dbg(dev, "unmmap\tpt 0x%09lx OK\n", buf->raddr); spin_lock(&fl->lock); @@ -1869,26 +1878,54 @@ static int fastrpc_req_munmap(struct fastrpc_user *= fl, char __user *argp) return fastrpc_req_munmap_impl(fl, buf); } =20 -static int fastrpc_req_mmap(struct fastrpc_user *fl, char __user *argp) +static int fastrpc_req_map_dsp(struct fastrpc_user *fl, u64 phys, + u64 size, u32 flag, u64 vaddrin, + u64 *raddr) { struct fastrpc_invoke_args args[3] =3D { [0 ... 2] =3D { 0 } }; - struct fastrpc_buf *buf =3D NULL; struct fastrpc_mmap_req_msg req_msg; struct fastrpc_mmap_rsp_msg rsp_msg; struct fastrpc_phy_page pages; - struct fastrpc_req_mmap req; - struct device *dev =3D fl->sctx->dev; int err; u32 sc; =20 - if (copy_from_user(&req, argp, sizeof(req))) - return -EFAULT; + req_msg.client_id =3D fl->client_id; + req_msg.flags =3D flag; + req_msg.vaddr =3D vaddrin; + req_msg.num =3D sizeof(pages); =20 - if (req.flags !=3D ADSP_MMAP_ADD_PAGES && req.flags !=3D ADSP_MMAP_REMOTE= _HEAP_ADDR) { - dev_err(dev, "flag not supported 0x%x\n", req.flags); + args[0].ptr =3D (u64)&req_msg; + args[0].length =3D sizeof(req_msg); =20 - return -EINVAL; + pages.addr =3D phys; + pages.size =3D size; + + args[1].ptr =3D (u64)&pages; + args[1].length =3D sizeof(pages); + + args[2].ptr =3D (u64)&rsp_msg; + args[2].length =3D sizeof(rsp_msg); + sc =3D FASTRPC_SCALARS(FASTRPC_RMID_INIT_MMAP, 2, 1); + err =3D fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, sc, + &args[0]); + + if (err) { + dev_err(fl->sctx->dev, "mmap error (len 0x%08llx)\n", size); + return err; } + *raddr =3D rsp_msg.vaddr; + + return 0; +} + +static int fastrpc_req_buf_alloc(struct fastrpc_user *fl, + struct fastrpc_req_mmap req, + char __user *argp) +{ + struct device *dev =3D fl->sctx->dev; + struct fastrpc_buf *buf =3D NULL; + u64 raddr =3D 0; + int err; =20 if (req.vaddrin) { dev_err(dev, "adding user allocated pages is not supported\n"); @@ -1905,26 +1942,8 @@ static int fastrpc_req_mmap(struct fastrpc_user *fl,= char __user *argp) return err; } =20 - req_msg.client_id =3D fl->client_id; - req_msg.flags =3D req.flags; - req_msg.vaddr =3D req.vaddrin; - req_msg.num =3D sizeof(pages); - - args[0].ptr =3D (u64) (uintptr_t) &req_msg; - args[0].length =3D sizeof(req_msg); - - pages.addr =3D buf->phys; - pages.size =3D buf->size; - - args[1].ptr =3D (u64) (uintptr_t) &pages; - args[1].length =3D sizeof(pages); - - args[2].ptr =3D (u64) (uintptr_t) &rsp_msg; - args[2].length =3D sizeof(rsp_msg); - - sc =3D FASTRPC_SCALARS(FASTRPC_RMID_INIT_MMAP, 2, 1); - err =3D fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, sc, - &args[0]); + err =3D fastrpc_req_map_dsp(fl, buf->phys, buf->size, req.flags, + req.vaddrin, &raddr); if (err) { dev_err(dev, "mmap error (len 0x%08llx)\n", buf->size); fastrpc_buf_free(buf); @@ -1932,10 +1951,10 @@ static int fastrpc_req_mmap(struct fastrpc_user *fl= , char __user *argp) } =20 /* update the buffer to be able to deallocate the memory on the DSP */ - buf->raddr =3D (uintptr_t) rsp_msg.vaddr; + buf->raddr =3D (uintptr_t)raddr; =20 /* let the client know the address to use */ - req.vaddrout =3D rsp_msg.vaddr; + req.vaddrout =3D raddr; =20 /* Add memory to static PD pool, protection thru hypervisor */ if (req.flags =3D=3D ADSP_MMAP_REMOTE_HEAP_ADDR && fl->cctx->vmcount) { @@ -1970,6 +1989,25 @@ static int fastrpc_req_mmap(struct fastrpc_user *fl,= char __user *argp) return err; } =20 +static int fastrpc_req_mmap(struct fastrpc_user *fl, char __user *argp) +{ + struct fastrpc_req_mmap req; + int err; + + if (copy_from_user(&req, argp, sizeof(req))) + return -EFAULT; + + if (req.flags !=3D ADSP_MMAP_ADD_PAGES && req.flags !=3D ADSP_MMAP_REMOTE= _HEAP_ADDR) { + dev_err(fl->sctx->dev, "flag not supported 0x%x\n", req.flags); + + return -EINVAL; + } + + err =3D fastrpc_req_buf_alloc(fl, req, argp); + + return err; +} + static int fastrpc_req_mem_unmap_impl(struct fastrpc_user *fl, struct fast= rpc_mem_unmap *req) { struct fastrpc_invoke_args args[1] =3D { [0] =3D { 0 } }; --=20 2.34.1 From nobody Mon Dec 1 22:36:52 2025 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (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 3890130CD94 for ; Fri, 28 Nov 2025 10:34:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764326082; cv=none; b=pwOD3GVOEwdGcnUAV5GJxfBwFUE4B9qjIHzEkzLkiMIY/3gnlfTU+TEIyQ2aDgOqIsFVie7VMpDwxWP9GlWfR1Ry4BxRAfxCuiwgBkLNtbwByMiU5O6i+3MXi6kB2rI1TVDSngb7eF3lCOV+ejFkhx5e1PvTezNTa0RuEnfrtSo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764326082; c=relaxed/simple; bh=3McFV9+MNY0DtMFk+39XUHIIYjw72LprTYXBqI4SwGA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Y89R6KT1U9jml816pySvSajnMIK9xtySrcuuLoE5IDkZPjcw0W1Z8W3j3a/C+ahxXQHcp88ucNm61zXPVDVBeconZvEG8xTDgK4OZ1AQgZcg7cWsCsBbIQbwAydhgcDiJP/aAD0RO7WfnOBlYlx/QRb46V9kZyLrJdK+2RKIii0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=BDpDz5xh; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Dp6GO3IB; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="BDpDz5xh"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Dp6GO3IB" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5AS8Oh6o3627427 for ; Fri, 28 Nov 2025 10:34:40 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=tksOsG49Dg9 nA4MxpHKa0diwA7zCt+Mdk9sP8H6UiFQ=; b=BDpDz5xhdBTByVRlPHItsGkAxya X5Up2sJiSn77996IJYwNJOFnTSAv624Z6EnKTnPhrEeC7dy1Bg73qBAiXE0IsNTW sKJ06ZwNEAjN8/J7ibOtWLZ27poS7DdBWLNTONO3WOb8/6hSUNJM2dpPNFk0RqPa F17FGpgd98IecvYO67KXyjJ+mPjYZe0zXRjBhXe8pe29XRosnlotmLPRDFTErWAa LQMD2gI+jvlIePISdQJXYKJ26A6Wgq5ZUS1MThIt4oy7D8klodB1fhoQQdFN1UMl PkNCLvOxkG80Jor60OF+zmbZSwOjTLD1Nh6VzKnwO0hmtCbx0I1WyXAapjQ== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4apmynu101-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 28 Nov 2025 10:34:40 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-297dde580c8so54838745ad.1 for ; Fri, 28 Nov 2025 02:34:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1764326080; x=1764930880; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tksOsG49Dg9nA4MxpHKa0diwA7zCt+Mdk9sP8H6UiFQ=; b=Dp6GO3IB6XIOfk3Vbh5TtQXpdI7fZeUniYgjiGwpvy4x8t7nc56ZaX2u1ox9Ew95GB FOmJ1FAgIkubO82kuA4gD/Mjvxu88DepuAuNp+l4e4ifq8oFLK8dTHKw1T2ZbkSS7Mfb fezd1ew0vnY1KQRx4NvvU4lVKOFK7pt6ZkHDJS6vqgEXjgas7ZnqhZHLwoz2gZH61+ma MhpHR/5vNlIeiapKsAsQzJZ941wcZbAqm1Dvr8GlUQ+hxlcWnAUz0tRq7h9/xz5wlJYP 5rh1Tx/xacGY57Zvqbj7e1jZIDJGvtD2aZbCBjWBfnoMET7TaQ4tVO9fIPBol0ksO8WE Ip9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764326080; x=1764930880; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=tksOsG49Dg9nA4MxpHKa0diwA7zCt+Mdk9sP8H6UiFQ=; b=Gf9FsAEYHquagWWQQubZYBPulPJa32gme+tAMefYDrlRBSi5XAX+bawiPD6vYDrIa2 2YmaFIB9ZBowPqHRkZhet5HgqX8LOxCse7iFLBi8IlaTAdM6f5L593kMg9qnQZ3e74Du NtF1R777bT/BKYQyhrZ8EH3lV43YG/xms/NaWA3DnJ49a9G2LNM3bLbv+ydsaEWTHkh3 h1M6OduVg0YzqnjsQYzXde5qts6wtwpGgd9qJ0FVIuabynaEyFqkt06yJVWK/qrLvgDv chEF6WS9KoVLP/wpis5r6iiJS2SI/i1WlEScM08rcv37tAUGkGvIPjAHAUmIVWjzjQd1 ktSw== X-Forwarded-Encrypted: i=1; AJvYcCUUUbKJL9OuI5sVRCw/uBEvJCL5kcm/MWf3+7PIYvbG0PNdXhzgCeZXEFue7xS0s9nbtJ3wXzCIc9rMziQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwwVfpWn78sf6Uf7XMo1Ii5MSgUwT87BDcm/ls3Ro/wCUWZcF6w sWy5FkNksA0rvwPsQwPukUfMbed71rq9judflP6Y5dJDE74ydxZfbdv9LMr53hn3pc1Ng4Jx2Lp KP4w1Wvj0vgPIqNGzw1/idRcXrUNjze7oUYtUqFKMrDo3gyUmuKieM0Woi4RT5JlEE1I= X-Gm-Gg: ASbGncvxSLV/HUJGs/EYuT/yKcIH54NBbS4oFNiepV1Ue8iNSlKjhH8bu76iBUZujly fSOZ2XIdOoysh21JV7v4QytZtitqdAxYoBMIyN2+FjekDViVLzR/GOP40BPx/YiB1YHpCQiJ23f 5+wEea+wTjJRi8rKvb/wQVcMlXCNaEm8d3FtS5kuCp0meQjfl3KICN2v1dSM0Neu68sHtaLgBPQ kAWM1J46NgRn+6FFDO3a+o1SeEm4iMWsJOKeQEQRqOIVt+zmsMfXexxE/70UUezcFxjdY3ft1qK SEZyWzyw1RUWnkPs+llTGAKHtSDaHplkogH7toGRXggupgI+Abydnep3fWm1zgn/Kr1ayZvv6Yx fq+VFdX4JnCYMuN8UAsiCAwAso/+bmwrdhA2X8foSwA== X-Received: by 2002:a17:903:3b87:b0:295:565b:c691 with SMTP id d9443c01a7336-29baaf75d56mr164237035ad.17.1764326079668; Fri, 28 Nov 2025 02:34:39 -0800 (PST) X-Google-Smtp-Source: AGHT+IFQsu550Gf8bRhwbobshsjKneIYUQA5FyjtpAtmmp+z1D8G7bxKdB2r9mHvhM84fy3g652XSw== X-Received: by 2002:a17:903:3b87:b0:295:565b:c691 with SMTP id d9443c01a7336-29baaf75d56mr164236655ad.17.1764326079120; Fri, 28 Nov 2025 02:34:39 -0800 (PST) Received: from hu-ekangupt-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29bce40b993sm43098195ad.14.2025.11.28.02.34.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Nov 2025 02:34:38 -0800 (PST) From: Ekansh Gupta To: srini@kernel.org, linux-arm-msm@vger.kernel.org Cc: gregkh@linuxfoundation.org, quic_bkumar@quicinc.com, linux-kernel@vger.kernel.org, quic_chennak@quicinc.com, dri-devel@lists.freedesktop.org, arnd@arndb.de, dmitry.baryshkov@oss.qualcomm.com Subject: [PATCH v2 2/2] misc: fastrpc: Support mapping userspace-allocated buffers Date: Fri, 28 Nov 2025 16:04:28 +0530 Message-Id: <20251128103428.1119696-3-ekansh.gupta@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251128103428.1119696-1-ekansh.gupta@oss.qualcomm.com> References: <20251128103428.1119696-1-ekansh.gupta@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: _wvIUfBCAup8Q3vJUJaQ8lw1xjXkHJgG X-Authority-Analysis: v=2.4 cv=QOplhwLL c=1 sm=1 tr=0 ts=69297ac0 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=6UeiqGixMTsA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=9b90K331daA_tkPLntcA:9 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTI4MDA3NiBTYWx0ZWRfXzdl3oD0mSX4p 2ByzqZJX7JqVCpHqqCQ1d5iIMT6UxOQB4V8QjSa+fyXsBmFyjrLOkWLUP7mzehHFvNDnk0FjfqN TpN+Fyz52ncki86eztAY1xxJJWp5Qtm3w5ypf7bQV7a0FsP0cnT2UX7EesLSzWLRZYvSF6O08Ue c1INRFJiwOT3I/Fvp/KqjA0xG81LgnsH/kd4lfR3ncFZ1l3jLxc9CqP0WWMfKkfiCuzJ03eI763 7Vj2fvs27QMJaT2nuaiDzT0bbAf/eu8ffF7gcq7JdsfowOEXlXjgbTtVXP7+hdXHQd320doaivX Vsf2qNIR8ZDUKJ2SbifpKQvFgQS0wEvaNni+isBb3MH8OBiqWM/m9Q4gw1b1gsudmejjZHD5nTE JIEgoCBsBLSdZTvoWQQQsrifwAWwCg== X-Proofpoint-GUID: _wvIUfBCAup8Q3vJUJaQ8lw1xjXkHJgG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-28_03,2025-11-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 malwarescore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511280076 Content-Type: text/plain; charset="utf-8" Currently, FastRPC only supports mapping buffers allocated by the kernel. This limits flexibility for applications that allocate memory in userspace using rpcmem or DMABUF and need to share it with the DSP. Add support for mapping and unmapping userspace-allocated buffers to the DSP through SMMU. This includes handling map requests for rpcmem and DMABUF-backed memory and providing corresponding unmap functionality. Signed-off-by: Ekansh Gupta --- drivers/misc/fastrpc.c | 96 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 85 insertions(+), 11 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 9bf76e224852..feba79913763 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -1854,8 +1854,10 @@ static int fastrpc_req_munmap_impl(struct fastrpc_us= er *fl, struct fastrpc_buf * static int fastrpc_req_munmap(struct fastrpc_user *fl, char __user *argp) { struct fastrpc_buf *buf =3D NULL, *iter, *b; + struct fastrpc_map *map =3D NULL, *iterm, *m; struct fastrpc_req_munmap req; struct device *dev =3D fl->sctx->dev; + int err; =20 if (copy_from_user(&req, argp, sizeof(req))) return -EFAULT; @@ -1869,13 +1871,41 @@ static int fastrpc_req_munmap(struct fastrpc_user *= fl, char __user *argp) } spin_unlock(&fl->lock); =20 - if (!buf) { - dev_err(dev, "mmap\t\tpt 0x%09llx [len 0x%08llx] not in list\n", + if (buf) { + err =3D fastrpc_req_munmap_impl(fl, buf); + if (err) { + spin_lock(&fl->lock); + list_add_tail(&buf->node, &fl->mmaps); + spin_unlock(&fl->lock); + } + return err; + } + + spin_lock(&fl->lock); + list_for_each_entry_safe(iterm, m, &fl->maps, node) { + if (iterm->raddr =3D=3D req.vaddrout) { + map =3D iterm; + list_del(&iterm->node); + break; + } + } + spin_unlock(&fl->lock); + if (!map) { + dev_dbg(dev, "buffer/map not found addr 0x%09llx, len 0x%08llx\n", req.vaddrout, req.size); return -EINVAL; } =20 - return fastrpc_req_munmap_impl(fl, buf); + err =3D fastrpc_req_munmap_dsp(fl, map->raddr, map->size); + if (err) { + dev_dbg(dev, "unmmap\tpt fd =3D %d, 0x%09llx error\n", map->fd, map->ra= ddr); + spin_lock(&fl->lock); + list_add_tail(&map->node, &fl->maps); + spin_unlock(&fl->lock); + } else { + fastrpc_map_put(map); + } + return err; } =20 static int fastrpc_req_map_dsp(struct fastrpc_user *fl, u64 phys, @@ -1989,25 +2019,69 @@ static int fastrpc_req_buf_alloc(struct fastrpc_use= r *fl, return err; } =20 -static int fastrpc_req_mmap(struct fastrpc_user *fl, char __user *argp) +static int fastrpc_req_map_create(struct fastrpc_user *fl, + struct fastrpc_req_mmap req, + char __user *argp) { - struct fastrpc_req_mmap req; + struct fastrpc_map *map =3D NULL; + struct device *dev =3D fl->sctx->dev; + u64 raddr =3D 0; int err; =20 - if (copy_from_user(&req, argp, sizeof(req))) - return -EFAULT; + err =3D fastrpc_map_create(fl, req.fd, req.size, 0, &map); + if (err) { + dev_err(dev, "failed to map buffer, fd =3D %d\n", req.fd); + return err; + } =20 - if (req.flags !=3D ADSP_MMAP_ADD_PAGES && req.flags !=3D ADSP_MMAP_REMOTE= _HEAP_ADDR) { - dev_err(fl->sctx->dev, "flag not supported 0x%x\n", req.flags); + err =3D fastrpc_req_map_dsp(fl, map->phys, map->size, req.flags, + req.vaddrin, &raddr); + if (err) + goto err_invoke; =20 - return -EINVAL; + /* update the buffer to be able to deallocate the memory on the DSP */ + map->raddr =3D (u64)raddr; + + /* let the client know the address to use */ + req.vaddrout =3D raddr; + dev_dbg(dev, "mmap\t\tpt 0x%09llx OK [len 0x%08llx]\n", + map->raddr, map->size); + + if (copy_to_user((void __user *)argp, &req, sizeof(req))) { + err =3D -EFAULT; + goto err_copy; } =20 - err =3D fastrpc_req_buf_alloc(fl, req, argp); + return 0; +err_copy: + fastrpc_req_munmap_dsp(fl, map->raddr, map->size); +err_invoke: + fastrpc_map_put(map); =20 return err; } =20 +static int fastrpc_req_mmap(struct fastrpc_user *fl, char __user *argp) +{ + struct fastrpc_req_mmap req; + int err; + + if (copy_from_user(&req, argp, sizeof(req))) + return -EFAULT; + + if ((req.flags =3D=3D ADSP_MMAP_ADD_PAGES || + req.flags =3D=3D ADSP_MMAP_REMOTE_HEAP_ADDR)) { + err =3D fastrpc_req_buf_alloc(fl, req, argp); + if (err) + return err; + } else { + err =3D fastrpc_req_map_create(fl, req, argp); + if (err) + return err; + } + return 0; +} + static int fastrpc_req_mem_unmap_impl(struct fastrpc_user *fl, struct fast= rpc_mem_unmap *req) { struct fastrpc_invoke_args args[1] =3D { [0] =3D { 0 } }; --=20 2.34.1