From nobody Mon Dec 1 22:36:51 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