From nobody Sat Jul 25 22:32:24 2026 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 4ACB03612E7 for ; Mon, 13 Jul 2026 05:22:47 +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=1783920168; cv=none; b=kpyrPhsDgRA5gaw//lB4SSzR4Q/BnBqX80XisWdd1Qy8MAjKhK8KBIEUDlYXIJo17ZAHk0ZD3kXhD7Me0bFIf03Yb2iDr8ejDPZ7Oq1Gn6SUuyu/xhiHPXH0qbBrM/Wkf24lthzOcfzW+FlAnxbVLQMuqA20BxpFZ06ofTwFZIM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783920168; c=relaxed/simple; bh=NaqRQKJ7xNt3Dy53XIaBrvccMA4Qf4aTZxSLLGeu80o=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=qOp3czfDgmc5LZyZeI5kbbK7PNAbC/x302CGcnWDbnS+miSxNO9hbyacruGsy9u5B7FVd9p5XWmMaK9AMHkgfUKMTi0Jtt5bFunhM+lVoGAacUYff9fw9WwVykRYuF452enpsocIhQjVbJ9d+O2pa++tXkthgf+Xdfj2HiAoB2k= 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=FsyCIB7K; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=gDVDFnrU; 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="FsyCIB7K"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="gDVDFnrU" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66D3A7pW216986 for ; Mon, 13 Jul 2026 05:22:46 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=TPodwT/8PmT IoV2zpAVITKv1J5JC+XSCVdQXBOcAIqc=; b=FsyCIB7KbwJydq6Ptp1qA7tL5xr rIuxXM+cplWdKwJGGH0HKO+XIIkG3AEeiPF/mn+3VGZc2TnnrGXFG2EPl7138ECH Qk9Gx0sPKhmhBW+4EswZaWK8C31mnFDNVTDNW7l6WkXfiRC+NKuAYJ6fk6TfscRs IrGE6dcttmGvxKI4rL6QxF85xxnXkEb01M1Kh0hnY2/x88c2ApDrImwb6GhO94r7 wOTUvU74rxF/BRouC4M+0nnlu7mLpiUU4/eIhEma/PjwZnIiMPUilp9V1G0v4OGs qMbvGkCKgxh26l5yQDrpx7pp5G1gplaXZakcQkZUxrstoIyLqRsyBYD4mfA== Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbebr4cbp-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 13 Jul 2026 05:22:46 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-c88da04b719so2528868a12.2 for ; Sun, 12 Jul 2026 22:22:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783920166; x=1784524966; 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:content-type; bh=TPodwT/8PmTIoV2zpAVITKv1J5JC+XSCVdQXBOcAIqc=; b=gDVDFnrUPYbcRQ3VPzZdqwub+dVF0tiC6LuKBbQ20uX39ovqpHW1gCBdY28cnrG6Ys qtZFBCwECK+yWVbcCbZ/uNjLRhdx50oueMV9A3aCIwuKLeyVo1qzCq1vmP4ayOBV5kyH QGwfyLmf1c1Mb7VuQ5ZVS5+fwiQEGoyemIbU2TB18/lBI7ZvtoiXQ2K7/EFdvd8SSrlx JP0uIUgWrN4VYDKqNNRvwaEcDkbQI1ZXiA7tes1TBnMQddvD8DkUjLETXzCndDwlIs5u xeaF5IXeqg6XI498RLIeHju/X9ve9rfOW+N2QeQjyNspwPyt3QS1LvHp+kMDZaeZYdJ8 cJbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783920166; x=1784524966; 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:content-type; bh=TPodwT/8PmTIoV2zpAVITKv1J5JC+XSCVdQXBOcAIqc=; b=VYnIvqKqJSRHupjcHObMV18nkO9PP3xmO1E3OLNmd160rvAb5LBpchIvjq9pdI6JD7 lXDeCAADiwwg5HowkfeoSkYrAE6omER3pPn/+gjj3snfWUs0hT0cg0Ta/GcUMnDWDOYQ OuyvvACh7wU2pETcAmt3k9OweuCdpPqqMvTktKM99RdqBvOLpllpLxUZ+JqbRomHQKqK dX8F5gRlNAXsg5y6o3vLDwTYPdGKhrClE2GFEag5Y4yJyAz4SzVF2NRRwcnuZr+SyPaW GP86WIMVk1UsJMzplXJmayqPmUjEcDvJl+NkzpNIt9ovmfHJez86tfJIMntVssnZ+Y9G zdIQ== X-Forwarded-Encrypted: i=1; AHgh+RqHJm8fjVv+eSKrIW7kneG8rhdJvJY9NoGD81yvcHdBfCEHfRc0XPCSEqoqHTKEPRQjjSf6Uc7ZQgsL6w8=@vger.kernel.org X-Gm-Message-State: AOJu0Yz0w4YoqbXBpRKcym0CSSOkBPGG8Rbunjtq18j5Beq7Y1m0Lm2P jt/k43KB3ycgJ+7m9BBc+RsoSzZ4Toy2egEbacj5AozgAcBPU18cPIrLeLpH63QNuDjssKe14FT Tsl+ZNOmGpzImmHOuWUE8aBI9GI02zvG5rIEOHUZmpMkpA2Fwxe+g/HWpkVQS9hOKgX0= X-Gm-Gg: AfdE7cklda2jS2okoF6/PA2LQrPvDtceroonrA1vHC/FD26B4tz0uc8uq4rLxHiAE82 oaRkFrilhuxAaOM+/rFrC8Q3LS3XjPUumzD0BF5XpulLXnXsGzSwojGt0yDt+VnP2fwJP1Vyr3g WztjXtXJNZO8J34jNbVz0mfiHbVjXPRa1wS9PBz1QaE2FheiZRAoKpz2tTIWOShXUVb8iNM60yk momRKa7xiPb+JF05Pbh3WGIo7QUyYO2aEGESPV1X2A0pWP+9OB8F5diHOBzQWzeUBthE3Q7i4U8 BUEKjbUo9JpleU4XreC8xVQv0LXhcv/W6sj60ZiDPupClpjCDFboV0yGmA4/hPigqIzc0N3hw9h KXVVJdqmqgFWqjyG80RB9l6+2R20X3fZz7vs4YUBZYhU= X-Received: by 2002:a05:6a21:4a98:b0:3c1:657:4c95 with SMTP id adf61e73a8af0-3c11077660fmr7861510637.15.1783920165918; Sun, 12 Jul 2026 22:22:45 -0700 (PDT) X-Received: by 2002:a05:6a21:4a98:b0:3c1:657:4c95 with SMTP id adf61e73a8af0-3c11077660fmr7861490637.15.1783920165393; Sun, 12 Jul 2026 22:22:45 -0700 (PDT) Received: from hu-ekangupt-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ca75ef0c30dsm6245605a12.17.2026.07.12.22.22.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 22:22:44 -0700 (PDT) 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 v13 1/4] misc: fastrpc: Move fdlist to invoke context structure Date: Mon, 13 Jul 2026 10:52:33 +0530 Message-Id: <20260713052236.3033744-2-ekansh.gupta@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260713052236.3033744-1-ekansh.gupta@oss.qualcomm.com> References: <20260713052236.3033744-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-Spam-Info: AW1haW4tMjYwNzEzMDA1MyBTYWx0ZWRfX33SM6t9/yY27 Jtk+MER4aOSQGy9PWiyqnIDWIMlJ8IR/YX2433BRaPT+kKqr6GmYY7GTUFBKA7EZJDdGhqazlfi nQRzZnXY/Kp2M9tDqCc2xSdbviWofS8= X-Authority-Analysis: v=2.4 cv=OK8XGyaB c=1 sm=1 tr=0 ts=6a547626 cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=HL6mAI18knL3XnPGOeUA:9 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-GUID: 4q0kab6QsWjupAdpCjWdUzUaV_WQnj2P X-Proofpoint-ORIG-GUID: 4q0kab6QsWjupAdpCjWdUzUaV_WQnj2P X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzEzMDA1MyBTYWx0ZWRfX3K8pg6XA4fzi h/vvRSn/mSbRWP0V7TJK0yAI2MxDA/a91JJ476I+aalaxfu92ahkVuFaMP9m3g9qgLzWRO2RLsI zMAAl3+PEKahimx04+nrVp5Fx2JZ1ELChYgh+CpuUlzSOwNL400YD5m4LSVHjf638xgtWIoL2Qa jNIaYVedB+HIroeGR4/ZiyArRgzxj98rh5Tv/72NL1L7VAg7Xo5AoDJ2VoRPNcEUM2O2hlUYQ2b vzvhaCMMW+EZU/oSi/CdMp0PJI6NdeuKiDh5CN1wHxkkET2VmqYhQKrc3up5C+VfXjkGjAPm6u7 0mxaNGqs3hKb2rjD8zIxD4r17lraPywDU01DESsYFaHq5uVH2WQbZ64sKwsygHGMhGY7IxgJU06 RszzSkbr0pOoFa2pCbt5x1XhV3CBhfQcj4l6E3zbhjDWlg5+4scN/7pFjPX8wwe287GR/i3WpKo BS3hhbXaFKbqMgnjT/Q== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-13_01,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 phishscore=0 spamscore=0 adultscore=0 clxscore=1015 impostorscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607130053 Content-Type: text/plain; charset="utf-8" The fdlist is currently part of the meta buffer which is set during fastrpc_get_args(), this fdlist is getting recalculated during fastrpc_put_args(). Move fdlist to the invoke context structure to improve maintainability and reduce redundancy. This centralizes its handling and simplifies meta buffer preparation and reading logic. Reviewed-by: Dmitry Baryshkov Signed-off-by: Ekansh Gupta --- drivers/misc/fastrpc.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index d86e79134c68..02c2765e1188 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -233,6 +233,7 @@ struct fastrpc_invoke_ctx { int pid; int client_id; u32 sc; + u64 *fdlist; u32 *crc; u64 ctxid; u64 msg_sz; @@ -1063,6 +1064,7 @@ static int fastrpc_get_args(u32 kernel, struct fastrp= c_invoke_ctx *ctx) rpra =3D ctx->buf->virt; list =3D fastrpc_invoke_buf_start(rpra, ctx->nscalars); pages =3D fastrpc_phy_page_start(list, ctx->nscalars); + ctx->fdlist =3D (u64 *)(pages + ctx->nscalars); args =3D (uintptr_t)ctx->buf->virt + metalen; rlen =3D pkt_size - metalen; ctx->rpra =3D rpra; @@ -1165,18 +1167,11 @@ static int fastrpc_put_args(struct fastrpc_invoke_c= tx *ctx, union fastrpc_remote_arg *rpra =3D ctx->rpra; struct fastrpc_user *fl =3D ctx->fl; struct fastrpc_map *mmap =3D NULL; - struct fastrpc_invoke_buf *list; - struct fastrpc_phy_page *pages; - u64 *fdlist; - int i, inbufs, outbufs, handles; + u64 *fdlist =3D ctx->fdlist; + int i, inbufs; int ret =3D 0; =20 inbufs =3D REMOTE_SCALARS_INBUFS(ctx->sc); - outbufs =3D REMOTE_SCALARS_OUTBUFS(ctx->sc); - handles =3D REMOTE_SCALARS_INHANDLES(ctx->sc) + REMOTE_SCALARS_OUTHANDLES= (ctx->sc); - list =3D fastrpc_invoke_buf_start(rpra, ctx->nscalars); - pages =3D fastrpc_phy_page_start(list, ctx->nscalars); - fdlist =3D (uint64_t *)(pages + inbufs + outbufs + handles); =20 for (i =3D inbufs; i < ctx->nbufs; ++i) { if (!ctx->maps[i]) { --=20 2.34.1 From nobody Sat Jul 25 22:32:24 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 EC28E3612E7 for ; Mon, 13 Jul 2026 05:22:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783920173; cv=none; b=and7vkUpnbchA692z0ggI3hw2hSANls7UAZF6dchBHM0s6MhSJjWk3bnGbrkQq5ptvpOLVDlTHYqXhVuaVFZKj8hvHoiAJ+JdMsbn+NituxDJz4nmyD3U7o4hqN1bkH9+QMsfJgXY12Nvj+vST8iAf6lhsVbQElWgllwBVqQmEA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783920173; c=relaxed/simple; bh=VmXHhCMfLZLd1XdifWXdK5hh9acIDGbTOS14Y8L4MD0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=M0a/xgMvU6HmwqZze77Klr5qyQnVKazHymS55OM/GuGLwke0YbNjdif/F+bwdSmdqL1leg8jiD5T0R6NohpV4KecM/E84g0jAqQELRZKPTqn6Q2P2Ff7G+NR4AK6zNopWhz/K7w1GwiZsLLYIIjPY0jKhPd+6hVuMOl9KQGTC50= 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=cEFQol0W; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=b+UZdN1C; arc=none smtp.client-ip=205.220.180.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="cEFQol0W"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="b+UZdN1C" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66D3A3Jn169735 for ; Mon, 13 Jul 2026 05:22:51 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=rX2n8/wl/aZ 5m0mAvSyZH/8f/EcwdRtpFwxFW/vqR7A=; b=cEFQol0WXB/xTarzSmKHeJ9Fcf4 DcOs4JPBkm6j/bzteyJ036g4nZIh4g1Rq+moFWD1v1nzDq2GfPrhgm7wwmwobaBz MLlUTwV0g6xH6mP6iui2XCNibGyswNimG/wLwMHDILUGCNYBFFbXFXJtBBmWoDC2 N2dIfAkrA1OhxcxvlRZuDsFo7qpuywlKPVWM5xm5taZyZAiR8AszmNf3xO/mfIVP HC1ONrGez4+TT5RjqtwzsEhI14lSFyR50PGwCAu1WqVUoSn50xzfBCDnyqr3wMoZ ytCmKWxinkJKB8J2pFUwkHFDp7Q8tk+3JiK5mkW373X0wOSQiUZ0QX4lJkg== Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbeehmfp1-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 13 Jul 2026 05:22:51 +0000 (GMT) Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-84877b362f6so4433493b3a.2 for ; Sun, 12 Jul 2026 22:22:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783920170; x=1784524970; 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:content-type; bh=rX2n8/wl/aZ5m0mAvSyZH/8f/EcwdRtpFwxFW/vqR7A=; b=b+UZdN1CbRe2aQSgRQeQ9nCPjwuv83UuLAdMuWUCFUou2+9TOQF/maoxig2KIlbDqD xc6iIE96Zj/ywoynPkzzq4kApPdv+v/UT0ASC5SqHnuZPaaM1l8EGxF/OnTvLZ7isU1Z qZalKQ50ShAE0enimLQWk8mFIu6BcC1OO4aCrB152LAP5bwhF+pXwI8tbOQWv8O9lZ4E 2WsXTCRLuw7GhY4S+I/8nt2nZqJZKlB2z+U3VbVfjnunA4L0lFMP2HdThL5kekS0h3g5 EiZNN+WbSwggdjKY2QKRvizNhupKPLiCAKS/UZ5czUlAXhI0ts7/z2uYCQ7qGGR1SAkC ZuMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783920170; x=1784524970; 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:content-type; bh=rX2n8/wl/aZ5m0mAvSyZH/8f/EcwdRtpFwxFW/vqR7A=; b=aH0MrgvFox8UsVHxe3/ZYj7vywReX0IhVu9lwLLtUrCANj4Zkn19JQ6PYXEZJhOTqN LFlYCNm1oCNAs1Ju7UgFJAXynmu6qy03PkfTbiJLNB4DwTs671VrgYJ6wGoQnjcR5f/f GRN6iX4VclgexHg+kFgjtZ2NOxXUjiLflqXWRE17+vczNWMsxMZfWBky8KPNdrAXQ05+ qWKtzFU3U4O4mYcHNZEKoA0nBt+QW5lx6zT52iyPD3z9QESL6tNATcMPnu1m2SvRtlJT vZtkYQNeMl+I07UWJyETPLkGXy2be+DGtvjVhf0B/IDYP5Us21ZCryBg2hJJhUB9GdkM r9AA== X-Forwarded-Encrypted: i=1; AHgh+RqUSB+aAKdXqkz79GQOjfvznSC3lMh82zrQOaxi3JQPQ8FFcHZ0bB3L5dKgnCjYOvl33Zw3aOqPWAWIrTc=@vger.kernel.org X-Gm-Message-State: AOJu0YwsLagSbJf4SzkAmf4cWqfDMDfLdK/xwTiP2wG85KHf0paowqeY U5nYEJ1rQuXaxtVBHgmqLXsKAVzbfugOWkuZ+Cg0oeMTSM/yniU298LUEcHNHdWvt4gZxpmNEC7 a3rpU/Kfrl2foEhCFOPyGtRr/Y3qsaDj4InlPoDBismwNCvQ9qqOZGTZsUMp99mKJ2to= X-Gm-Gg: AfdE7cktIw9r+yaeFBsDa2QfbCCOUDQsbkLuDQx55MafY0J8WsLTp8O14XEEWYRsNxn 4y4pet92/GAk2Pi5LDJczSnjRlQbGg96+FjLferYmj2u2q54x7y0hMqrNINSB6JOqrHAbWpqh10 8uYLzvB2pFlDuqXDAkbwE4sP84pI2xQ696uH3kK/M6wbpVjrsSz8UhkZU8X+R8F7rb0N9dvjGH1 SoyJqKmjubhuBsZfrMDfxzlhRrDipYnf/ihWrn/jbM/9GtIukX25SzFWETFC8jqi6kt7RDwscjW hMpsrzadJ1kT+nmBE+wWtspmzJOg66m4xAf19Sr9CtYhP2FVaAoruNVBamWrma/Cd66GiepGhnv 94wS+KePH9+M40u1ZqKZiKQ4e5k+fTGssDf9OOEerE60= X-Received: by 2002:a05:6a00:139c:b0:848:4c3d:659f with SMTP id d2e1a72fcca58-8488990d0b4mr7089166b3a.75.1783920169875; Sun, 12 Jul 2026 22:22:49 -0700 (PDT) X-Received: by 2002:a05:6a00:139c:b0:848:4c3d:659f with SMTP id d2e1a72fcca58-8488990d0b4mr7089134b3a.75.1783920169350; Sun, 12 Jul 2026 22:22:49 -0700 (PDT) Received: from hu-ekangupt-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ca75ef0c30dsm6245605a12.17.2026.07.12.22.22.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 22:22:48 -0700 (PDT) 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, Konrad Dybcio Subject: [PATCH v13 2/4] misc: fastrpc: Replace hardcoded ctxid mask with GENMASK Date: Mon, 13 Jul 2026 10:52:34 +0530 Message-Id: <20260713052236.3033744-3-ekansh.gupta@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260713052236.3033744-1-ekansh.gupta@oss.qualcomm.com> References: <20260713052236.3033744-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-Spam-Info: AW1haW4tMjYwNzEzMDA1MiBTYWx0ZWRfX8UQA4jZQY3qJ PbL8xWGJYKmKm763jl5UND6n7zVUd6baik6eVzBAF7a625WVpOPHt+lNXoE7j/RRj1iVSqZ/54V 8kHXY6XdFgApJTfwt2NMXoSBpWw2O3I= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzEzMDA1MiBTYWx0ZWRfX8vqfKi9W6rau w8fw46HE4NoGqSXL1Aq50aNAJZA9nJ6/onOSwRq9+Zq4PmnVRhTZlWoNYmXmjFnxCQtEhsZatdM OkhEXYusV8XICcOKuXzEL17zg6AsJggFF4hD5vHeyvclqF0SyFVcmA/yWhvTSe8gqOvnqdD59GX MXP3CJqwUHkQ5DOhwF7d/R9EoRDgSVfHpKqlJyh0pAPf0DK6X6G7SzokUZVQphOL12b6qnuNiUK iKSigj8TC9OB/BhDraOflh/06gH/y73n0XtZ+RyXa6Io0/jnG9UnSyzOeFAu1cRlG1DFBxIabXD 55JEbU0UFUM3OYE/7o9rDQswZoIihhN7BsJ7RyICFxK7Ivzfe6afS4GL7SazYccuTqoYiRrTCjg p5qeZDiLFX1KoTWSY19Dbgt74N9x3N1tkEp5leE8z+8XPWdOUD9g59CUPOu3AafaUwF9s3SOReX NBFATHZjrgfv0A2jliA== X-Proofpoint-GUID: Rov3sGgt6yo04aZETn-_YHZ5kMKrdaQY X-Proofpoint-ORIG-GUID: Rov3sGgt6yo04aZETn-_YHZ5kMKrdaQY X-Authority-Analysis: v=2.4 cv=aPvAb79m c=1 sm=1 tr=0 ts=6a54762b cx=c_pps a=WW5sKcV1LcKqjgzy2JUPuA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=HL6mAI18knL3XnPGOeUA:9 a=OpyuDcXvxspvyRM73sMx:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-13_01,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 malwarescore=0 adultscore=0 suspectscore=0 bulkscore=0 clxscore=1015 priorityscore=1501 spamscore=0 lowpriorityscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607130052 Content-Type: text/plain; charset="utf-8" Replace the hardcoded context ID mask (0xFF0) with GENMASK(11, 4) to improve readability and follow kernel bitfield conventions. Use FIELD_PREP and FIELD_GET instead of manual shifts for setting and extracting ctxid values. Reviewed-by: Konrad Dybcio Reviewed-by: Dmitry Baryshkov Signed-off-by: Ekansh Gupta --- drivers/misc/fastrpc.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 02c2765e1188..41c2ec0bc628 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -23,6 +23,7 @@ #include #include #include +#include =20 #define ADSP_DOMAIN_ID (0) #define MDSP_DOMAIN_ID (1) @@ -37,7 +38,7 @@ #define FASTRPC_CTX_MAX (256) #define FASTRPC_INIT_HANDLE 1 #define FASTRPC_DSP_UTILITIES_HANDLE 2 -#define FASTRPC_CTXID_MASK (0xFF0) +#define FASTRPC_CTXID_MASK GENMASK(11, 4) #define INIT_FILELEN_MAX (2 * 1024 * 1024) #define INIT_FILE_NAMELEN_MAX (128) #define FASTRPC_DEVICE_NAME "fastrpc" @@ -566,7 +567,7 @@ static void fastrpc_context_free(struct kref *ref) fastrpc_buf_free(ctx->buf); =20 spin_lock_irqsave(&cctx->lock, flags); - idr_remove(&cctx->ctx_idr, ctx->ctxid >> 4); + idr_remove(&cctx->ctx_idr, FIELD_GET(FASTRPC_CTXID_MASK, ctx->ctxid)); spin_unlock_irqrestore(&cctx->lock, flags); =20 kfree(ctx->maps); @@ -704,7 +705,7 @@ static struct fastrpc_invoke_ctx *fastrpc_context_alloc( spin_unlock_irqrestore(&cctx->lock, flags); goto err_idr; } - ctx->ctxid =3D ret << 4; + ctx->ctxid =3D FIELD_PREP(FASTRPC_CTXID_MASK, ret); spin_unlock_irqrestore(&cctx->lock, flags); =20 kref_init(&ctx->refcount); @@ -2547,7 +2548,7 @@ static int fastrpc_rpmsg_callback(struct rpmsg_device= *rpdev, void *data, if (!cctx) return -ENODEV; =20 - ctxid =3D ((rsp->ctx & FASTRPC_CTXID_MASK) >> 4); + ctxid =3D FIELD_GET(FASTRPC_CTXID_MASK, rsp->ctx); =20 spin_lock_irqsave(&cctx->lock, flags); ctx =3D idr_find(&cctx->ctx_idr, ctxid); --=20 2.34.1 From nobody Sat Jul 25 22:32:24 2026 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 C04DD362120 for ; Mon, 13 Jul 2026 05:22:54 +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=1783920176; cv=none; b=W6ANBJ/LlhHsilI46f/5Qg/6AX1yUk8B6MHpBtq7rJ+uC8QUaz3OVZ0Itt1mbzLotV78ViwP0rZ64OJL4hUIpavKWv4zQR6mUrdRyYclG4KJlq84rSCmbgduXNBriSHVgP3mkcbejp868Z+P8cbsoZen3ZTpb6HUH+pNSefNoCQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783920176; c=relaxed/simple; bh=LeQEjDiT2ofBAkfryB+RRA3bVq9xl/j2VD2vUlHSTBc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=raMjT3P1SrcjCxCTLUzidqgfKoSOeNAFk420Fqgzppvxcq6xP6wql3bVLX9wjA+vV0ItE7zwDBp6vMciS/rYW23ti+JU87nlDAPNPSNWriP74tOVhRvb12mwIReWb51KqCRdfiP3DNw5QasqwgNGl9v6XqAPhBWLJlj3j5+LCSo= 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=nCZdYU3f; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ewP/442V; 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="nCZdYU3f"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ewP/442V" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66D39r81039586 for ; Mon, 13 Jul 2026 05:22:54 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=/MjSPuTi5VX dbi0rrWASgpaoUJZb5OphbbYvcj7YXs0=; b=nCZdYU3fuA0XZ6xQSk9gyhP5ylt hhjW1/sGkOpbqKJ2B21Mc64vfIXSsK7Z9cC77SiTaSKxwiaLRcES7haEVb/8qkca R6rq0F2icglKlVw6oUxLSL+s2/NAWX78Hfxu2xOkElqqxiFDMoDE3kRujci588Lz JOTvNATdATUZb2SuesbU/eFez/PtNa+LDyng5wpZAp3trJwlhgvMFqwSTrMvR5Ix eJs5HWNbcaGWCPe2a55rofsJb6Sak01eMwCeOBVh5jSxyFT9i32EWzt9OZr6Ou+L JJDPM0pBrVH3zmjfA3n5HRj1AwWdIDymScLiKCP7gvO01skd7QCeVmnT+eg== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbf484bh7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 13 Jul 2026 05:22:54 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-3811ae55313so2609211a91.3 for ; Sun, 12 Jul 2026 22:22:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783920173; x=1784524973; 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:content-type; bh=/MjSPuTi5VXdbi0rrWASgpaoUJZb5OphbbYvcj7YXs0=; b=ewP/442VV2g2xW0vR8MyDfS02728oPOqu/2ZnAkmNzsQPMTjYeAoknUSN21S+3s9/H UNqUOioxCPs38SZnXr2Hqa/URkYFH67kzRESobIooLXvDt+WdPMIb+Gby8nbYE1qYL7m QpGVFmRNHNd+MIzATlatWbCQY/l3/oMFeyPX4Vj9gBG4tZ04htALExXa/8WvqmeARHYf 8rglIVk9gLEgFSg56WdZi0joCuahStkZj6nzWtI3prfniNxYIEeRd/mO+YTas0/mAvKR 3RrmoKeCu5h3cdE/E0ZGOkx9gB6HRbuu5g08vZ47IFc/6rFJKU/82A98uQ3795Mqmh3s cu3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783920173; x=1784524973; 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:content-type; bh=/MjSPuTi5VXdbi0rrWASgpaoUJZb5OphbbYvcj7YXs0=; b=qyQRhX4it0QQ2T+GOelEZ8vR/IFrO0LjKnCsmJg2HG7KUJ1hkmpVLhbnCf37EsTM9V hOaFQN/QWS7avHGSBjFQelavSl+IeEvZNkdM1GIH3S0Q3sSQvq9p7+iVJBUNDrOW3wSD 7ma/E5yrgklcrdPbBjMlubGnjG4WtRkWHzSNQeM2LCeHKZm+zASIslUqeFK5fsjJOnDS VR4CuWVc1vQnCvPiyMuI5BsLDn2sFf1YOmSbIp5WN9jEHQSQ9Rq2mpQL/Ue9tBSJtLUj H62bNBY/xhw232nEDfi6I70FOgfpVCgmBldSV5qEm6BdlZwwzHbzzIle8W6oxh2lzv4F izkw== X-Forwarded-Encrypted: i=1; AHgh+Rr2jNyF3cjy21QRBQAwlq8h+uYhRBHIR+FbP6dZqPvi5YfjOlJq719zWhvCcXHPxXvU0IKH5n2l5C9xxew=@vger.kernel.org X-Gm-Message-State: AOJu0Yyx67ATise2lsYnPCkYWU1weS0n1rrB5HSbKWcwCrZQVDFTGdOC /ePMOPjXjT9jnzMx73t6wIdD4xcvrNw5s2nr6Vbr7w0TCZN6v8euQ0t0XkDufWyfEWu4Hm9CZOv mMn6VH2IdAmUsB2DQljqBt1SIZIVbgGGYZyIDd24RUS8izEJ+TS1B6p/kd0uskKypovg= X-Gm-Gg: AfdE7clO9CEx8lu+jNu/e4O32ZaTX14jWTqFJ3iLTRmacNTZZ0Spyvck25QngV5WMV0 nV+dikkE9wZNwR45ORtPxWlFrEb36VUbd5rcQuQYIrbk/Q4hr8CvUhcelUwq7CdVqvG7k6LnKdC U1qDrpAuwUX5gU/WZQksscCX8Nt4Z5n0sTuyb+ORJO8NaKHwyTtlAJ2sUkVAMV7wm3cbXTz0Ne0 SRLBvOHPL6/4PwP36fTa/FkcWA3j0TLQdUSTaN5GYeDCXapZs/Tz+Km0k3bEtmtfPkDHkupExmh hKe3eRJ5tiL8cJji+xRnx3bkAA7TSgUgx7BiHA4x/fD7M46ItsNXSjC3eV3myD/Mn9mFgIWyTgs /R4IGnBLYJ5D/1AfYMMGA1KQT8gkgbQ6SfOulnRPSjCI= X-Received: by 2002:a05:6a21:3393:b0:3bf:7994:ddc6 with SMTP id adf61e73a8af0-3c11063c3bamr10103099637.25.1783920173343; Sun, 12 Jul 2026 22:22:53 -0700 (PDT) X-Received: by 2002:a05:6a21:3393:b0:3bf:7994:ddc6 with SMTP id adf61e73a8af0-3c11063c3bamr10103065637.25.1783920172795; Sun, 12 Jul 2026 22:22:52 -0700 (PDT) Received: from hu-ekangupt-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ca75ef0c30dsm6245605a12.17.2026.07.12.22.22.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 22:22:52 -0700 (PDT) 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 v13 3/4] misc: fastrpc: Expand context ID mask for DSP polling mode support Date: Mon, 13 Jul 2026 10:52:35 +0530 Message-Id: <20260713052236.3033744-4-ekansh.gupta@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260713052236.3033744-1-ekansh.gupta@oss.qualcomm.com> References: <20260713052236.3033744-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-Spam-Info: AW1haW4tMjYwNzEzMDA1MiBTYWx0ZWRfX5X5CWpAL4l3v dIQv3kKAkPXECEvaJ2A5WnPodqySaz/tYt26BynVjeVKuZ9mZtIYsZXLg1EbgklimP82OkZGcIa deoqVdgH5wsa4QnaPkzjI2Qur/U1RK0= X-Authority-Analysis: v=2.4 cv=OsJ/DS/t c=1 sm=1 tr=0 ts=6a54762e cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=JTa3dIKMUYn8LlmgGFYA:9 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzEzMDA1MiBTYWx0ZWRfX36fhIlKpHkJn 9xdW4j2dhTFgJ5LyedRYLf3ll0qlwLysxd8LEeKyiwpkUcr40LoxFl85i5b1WUbfGJP4aS4im8U lzCbuWseCfbPV3a4Gifj3FzC7RVlu43d4+uk+55WyIJFGcwdzUDfR5vTTSvCtp9iGaQG9zbAp7U p2mSlAPqnZxtul296rVxSnDw6NyG5u8o3ujCNOCU0EZa49Xxcwx1TiVRbTBd40G05atDCjEoy0s M+jnxLkqXv8KmGPVi/lTP9WbhClUpUt/oZmnwnMCYg/vZD+toDDgzzA+2YYk40gtj5H9csF3pLh 6MSOhMKMtEZNan2br4gddk1ZmwymiNjmVjqRkLdF9sijUSnhzzCtboQpH+RwbJoEojWztrBPNDF Rs+pJN/mukKBNw2IIpJwyr+0NnVCFEt1KiWCNxDLJPvtkJoPmOOCHi0xY+bSzHHf6iHyHCf1VIK 8IREfKW9fOxwIvuOg0w== X-Proofpoint-GUID: lMVK1IuBzf6GAYsAFgjy4QJ7vGUWWFm1 X-Proofpoint-ORIG-GUID: lMVK1IuBzf6GAYsAFgjy4QJ7vGUWWFm1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-13_01,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 clxscore=1015 impostorscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607130052 Content-Type: text/plain; charset="utf-8" Current FastRPC context uses a 12-bit mask: [ID(8 bits)][PD type(4 bits)] =3D GENMASK(11, 4) This works for normal calls but fails for DSP polling mode. Polling mode expects a 16-bit layout: [15:8] =3D context ID (8 bits) [7:5] =3D reserved [4] =3D async mode bit [3:0] =3D PD type (4 bits) If async bit (bit 4) is set, DSP disables polling. With current mask, odd IDs can set this bit, causing DSP to skip poll updates. Update FASTRPC_CTXID_MASK to GENMASK(15, 8) so IDs occupy upper byte and lower byte is left for DSP flags and PD type. Reserved bits remain unused. This change is compatible with polling mode and does not break non-polling behavior. Bit layout: [15:8] =3D CCCCCCCC (context ID) [7:5] =3D xxx (reserved) [4] =3D A (async mode) [3:0] =3D PPPP (PD type) Reviewed-by: Dmitry Baryshkov Signed-off-by: Ekansh Gupta --- drivers/misc/fastrpc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 41c2ec0bc628..78bd5b8f67f8 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -38,7 +38,7 @@ #define FASTRPC_CTX_MAX (256) #define FASTRPC_INIT_HANDLE 1 #define FASTRPC_DSP_UTILITIES_HANDLE 2 -#define FASTRPC_CTXID_MASK GENMASK(11, 4) +#define FASTRPC_CTXID_MASK GENMASK(15, 8) #define INIT_FILELEN_MAX (2 * 1024 * 1024) #define INIT_FILE_NAMELEN_MAX (128) #define FASTRPC_DEVICE_NAME "fastrpc" --=20 2.34.1 From nobody Sat Jul 25 22:32:24 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 5E7053612EF for ; Mon, 13 Jul 2026 05:22:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783920181; cv=none; b=JlmS9XzpzpkapkO+HYOS98f/InNxtgfdTE8PLcjVggk8yiEtfLkhDGQBhXcpvtubUXwRuxlW1e7ps9agVXVtb0HNcQ0p8SZqSt6vA7UIpG56/Yq3+o+EQwjyki+UxQwKumMtZrc3mlZ+BvQhuECzFr7tU33L7ruNYoaBCKht1MA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783920181; c=relaxed/simple; bh=1p8eyVYqvTUCtkHLOSOqiEdeo0artqSRI8eZZupixSU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=BePB0CTVhRCTfGLS0SoxGSNwIBVoqzTzcXFhtPPkW3Uje563XNKuRqL1KoMgIEy/Vo3jwVxUihKeYx4j3xdy8MAxkeGnTZA8GskNjfSZgwF8MuRiX0EkQGyTTAtwSEqyn1OQP+CeTpV69SgvPKVIJCWYjcZLRsB7woii51DjFwM= 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=b7yh6r22; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=PuoqASef; arc=none smtp.client-ip=205.220.180.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="b7yh6r22"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="PuoqASef" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66D3AG1a258208 for ; Mon, 13 Jul 2026 05:22:58 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=c9d7CVJRmBs yOeoXw/bOJwQIhib+0vGWqjM++PBSIfw=; b=b7yh6r22H73ACuW99iyBMt5S8k5 jXvCMLGOf8TIuepMPttdj+llatHOzybtE0vIVSStc54uqqGTefnYVv4mLRXU71N4 3xINTeEK0MboRg/Cu3T2Bbb9Y6kS7kRN50/xnI8xQCeUmthYs1ol+QVqozwg1U1O Q2vRHni8lASHBGslytHMbdFX6DIbcDfRCRGfV+rwGfT+D+I5RtK69tRzK/yCG8Dz ++Y58jbbjxf1sbBCeZZpnWZzxr5wrxQB6eoCCLyoEx/89CkQPduEh5pbR/MyOnX1 /Ft5ZeRudvZYTueKE/Zh4n0F0mNorEfkMS1lZ9nFo8CVgaByyX2QLaL3P5w== Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fbe9hmfbp-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 13 Jul 2026 05:22:58 +0000 (GMT) Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-84865f326efso2904155b3a.0 for ; Sun, 12 Jul 2026 22:22:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783920177; x=1784524977; 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:content-type; bh=c9d7CVJRmBsyOeoXw/bOJwQIhib+0vGWqjM++PBSIfw=; b=PuoqASefCA3mjUSgcGxcxklGBIQfdQt/qk4jVG7ZTVBjvQooUcnerlQD+V8wGbiRhB 0C30oig6ILhgG5/ZXdDxwza/gIvZcyC2uaBIhDxXqDqr7mcmyORawsnVfGAVuccaIoEF IUe5x/H1hagf/QUD07u1OFyjH04XxziXNQmoCd+tG8cP5Kpmwf+BXSmq/OexHaRTr4M1 KLHfw7oMzLbFKhbUfNdLIWuvVpsQ9DJyv5y/noCfroPNhnD2hXRJzr5CUauNXxqC5Xsr Aev6zrBDqSIqDVzRosIhBciVVn/Lmqpy0WAkhi6RlcHNumz8TZrUawm0MSMwbiKSIKVk k85A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783920177; x=1784524977; 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:content-type; bh=c9d7CVJRmBsyOeoXw/bOJwQIhib+0vGWqjM++PBSIfw=; b=YEuAxmTj+VxfXxR7aJqqCkmk4SHKBWXi5/Dwye8OKktx9o7zWBtD+irmg/ldcDBCk7 XhREQ1JzxJL/xfb/aIydbNg5T0hb8Ie/pHhoO7m3bsXnTNn/aN74mTAX2yeUAESo+unl tbnwAWJXmcSsrrJVdsObhhNoaGxYa3TnSXXdTueTwilYqmeiCEdRu9FiGpf7QmK729G1 hyAHddnkxIK0Hunx1hcA9gnAJuFBcjWmZd33DyOeJ9Soe+iSu1V7Q0Z8xjieiMXZF80b YQu3jPU0azXUVWL7oJSMtUrDiUOLdJOXPdCX5I8WXJYL9pon8joEZxSMJu8X+G1wmV2a QbkA== X-Forwarded-Encrypted: i=1; AHgh+RqAvk1YpoCC3pa2I/+fJFeHQVtsft27AF3nb57q8GXd0gwFMwsi7WrfnwtxR3NrVOZ0Q+GVh9M5VRLvccA=@vger.kernel.org X-Gm-Message-State: AOJu0YzEzGk5r8rVlTE0LpH1j2lIq35pQ9tfzia0v4+orzEaOfMkAS4c RHSquXJROPlYbNyisynm7fPjD9ifpz/WezfWUt4u/PNKzZ6pM5Vct60PKJcAE2fCa/mvWA1aHs1 D7qSuKOc34FsdV0y+E84zwTKb/NKsNV3pBszCiYms/CmaIOePG5a7nnUFL6RS7/+aHLs= X-Gm-Gg: AfdE7clobQOMTrwjJtUlR0jb+SVIB6FIW/rO6f5z4RQrQhlQFgQoO1+10WZCB6r5mc2 MuPg+eK95jsLhE5F5WSoxzACVs/NHCky0eibG0khIYbIsmqipTuTHT0NhTrD0Dk3qEReX4ZWNFI 4JAglxCMojYNGnNT06xpO/y/4CdBqvbqQgu2m2mgZO2aYxTSH7S3YSMBscIVNRqZUhbclGPZ4RB w5JKyf7Q4OsReYrOzR6kevoyxgLWYJhBGXBkepqDqkLtX97/vrUVtRpL0qWxrAICY0SG48P47Bn bYYEJskZoGxn17RRFc3zK4aIfosa5Qfsg7l8pK1bf+o8dgGRkWafa7An0/FrilrKXyYVWa7VTtZ dzMu57BlMEX2QvRruEtMGhEVVFs6me1sCVrMvPhUNRak= X-Received: by 2002:a05:6a00:1402:b0:848:2f71:b654 with SMTP id d2e1a72fcca58-848897ac794mr6489235b3a.63.1783920176925; Sun, 12 Jul 2026 22:22:56 -0700 (PDT) X-Received: by 2002:a05:6a00:1402:b0:848:2f71:b654 with SMTP id d2e1a72fcca58-848897ac794mr6489216b3a.63.1783920176400; Sun, 12 Jul 2026 22:22:56 -0700 (PDT) Received: from hu-ekangupt-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ca75ef0c30dsm6245605a12.17.2026.07.12.22.22.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 22:22:55 -0700 (PDT) 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 v13 4/4] misc: fastrpc: Add polling mode support for fastRPC driver Date: Mon, 13 Jul 2026 10:52:36 +0530 Message-Id: <20260713052236.3033744-5-ekansh.gupta@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260713052236.3033744-1-ekansh.gupta@oss.qualcomm.com> References: <20260713052236.3033744-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-GUID: 9z9Vph1p56HjbG5G3g2HPJtRaCa5L61P X-Authority-Analysis: v=2.4 cv=SajHsPRu c=1 sm=1 tr=0 ts=6a547632 cx=c_pps a=m5Vt/hrsBiPMCU0y4gIsQw==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=6cPVkdQNTzjcPQfNhwcA:9 a=IoOABgeZipijB_acs4fv:22 X-Proofpoint-ORIG-GUID: 9z9Vph1p56HjbG5G3g2HPJtRaCa5L61P X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzEzMDA1MSBTYWx0ZWRfXxIXGhTUj1adk 6HRPiKASkfiWPs56rXCRAIZbybOvD3vcNdZchLpl+SZFbSbMr6yn3ASm9mp86/4nUMAIB32cYqH aRZsKvMTruPcWF7+c8/YWqbArDn+OMi2UnrMfsHjqmOSTSYMiuwwTEpPd0LvYF6YnUl7GLPN/4X PJzZMTYmp1fdsL64Ulbp9MU2ZW8X8G3XANQFlbJLbQcHgtz/O171HbEHOblbRpX9VujqiAcUELH y8LR+ZrceilOim8GGakX6xUez4Ce4NJuJnoM5SEWYAet/KPTlrSGhYN4XW5KdBA727+AqteWVJX Lui2ndcWWd8H2PfhJAcc/Etx1Aoee8Yjl11PYlH2KGycmeWoKieIT/tISHOaAQR2Qwtp83xsfgP h+qYJswbc1LftzkEPrxzI2Z1VlRnbGUQ47QADx88bKGQVJjrqcrJ7v3efL9jPjOgTGF2PPmopo1 lwU5CXHSeKT7n/nrDWw== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzEzMDA1MSBTYWx0ZWRfX+mhY2ocMOlNA mjD/NgOMdJb1S/9rXXyQR4HOAmbtV1FKLT1jvLMst04/rUBUsADxmCHJF3jho/dnHC9P78pUgkj gAm//XzH4hkUjRDtbRHn1bH1Hrm4DFg= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-13_01,2026-07-10_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 priorityscore=1501 bulkscore=0 phishscore=0 clxscore=1015 suspectscore=0 malwarescore=0 impostorscore=0 lowpriorityscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607130051 Content-Type: text/plain; charset="utf-8" For any remote call to DSP, after sending an invocation message, the fastRPC driver waits for a glink response, during which the CPU can enter low power modes. This adds latency to the fastRPC call due to CPU wakeup and scheduling overhead. Add polling mode support where the fastRPC driver polls a shared memory location for completion after sending the invocation, avoiding CPU wakeup and scheduling latency and reducing fastRPC overhead. If the poll times out, the call falls back to the normal interrupt/glink-based completion path. Poll mode is only applied to dynamic modules running in a user PD (handle > FASTRPC_MAX_STATIC_HANDLE), since static/root-PD handles are not expected to benefit from, or require, this optimization. Support is advertised per SoC via fastrpc_soc_data, with a closed exception list for older platforms whose DSP firmware is known to support polling but which otherwise use the default soc_data. Poll mode can be enabled by userspace via the FASTRPC_IOCTL_SET_OPTION ioctl with the FASTRPC_POLL_MODE request id. Since context IDs (ctxid) are allocated from a fixed-size, per-channel cyclic IDR shared by all processes on a DSP, a context ID can be recycled for a new request soon after it is freed. In poll mode the context can be considered complete (and released) as soon as the poll memory is updated, while the corresponding glink COMPLETE response from the DSP may still be in flight. If that response arrives after the ctxid has been reused, it would otherwise match the new context and incorrectly signal completion for it while the DSP may still be operating on the new context's buffers. To prevent this, embed a monotonically increasing per-channel sequence number in the unused upper bits of the ctxid/message context and validate it in the rpmsg callback, dropping any response whose sequence number does not match the current owner of that ctxid slot. Signed-off-by: Ekansh Gupta --- drivers/misc/fastrpc.c | 194 ++++++++++++++++++++++++++++++++++-- include/uapi/misc/fastrpc.h | 29 ++++++ 2 files changed, 215 insertions(+), 8 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 78bd5b8f67f8..94681394c1a0 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -24,6 +24,8 @@ #include #include #include +#include +#include =20 #define ADSP_DOMAIN_ID (0) #define MDSP_DOMAIN_ID (1) @@ -38,7 +40,16 @@ #define FASTRPC_CTX_MAX (256) #define FASTRPC_INIT_HANDLE 1 #define FASTRPC_DSP_UTILITIES_HANDLE 2 +/* + * Maximum handle value for static handles. + * Static handles are pre-defined, fixed numeric values statically assigned + * in the IDL file or FastRPC framework. + */ +#define FASTRPC_MAX_STATIC_HANDLE (20) #define FASTRPC_CTXID_MASK GENMASK(15, 8) +/* Sequence number occupies bits 63:16 of the ctxid / message context */ +#define FASTRPC_CTXID_SEQ_SHIFT 16 +#define FASTRPC_CTXID_SEQ_MASK GENMASK_ULL(63, 16) #define INIT_FILELEN_MAX (2 * 1024 * 1024) #define INIT_FILE_NAMELEN_MAX (128) #define FASTRPC_DEVICE_NAME "fastrpc" @@ -106,6 +117,12 @@ =20 #define miscdev_to_fdevice(d) container_of(d, struct fastrpc_device, miscd= ev) =20 +/* Poll response number from remote processor for call completion */ +#define FASTRPC_POLL_RESPONSE (0xdecaf) + +/* Polling mode timeout limit */ +#define FASTRPC_POLL_MAX_TIMEOUT_US (10000) + struct fastrpc_phy_page { dma_addr_t addr; /* dma address */ u64 size; /* size of contiguous region */ @@ -236,8 +253,14 @@ struct fastrpc_invoke_ctx { u32 sc; u64 *fdlist; u32 *crc; + /* Poll memory that DSP updates */ + u32 *poll_addr; u64 ctxid; u64 msg_sz; + /* work done status flag */ + bool is_work_done; + /* process updates poll memory instead of glink response */ + bool is_polled; struct kref refcount; struct list_head node; /* list of ctxs */ struct completion work; @@ -263,6 +286,7 @@ struct fastrpc_soc_data { u32 sid_pos; u32 dma_addr_bits_cdsp; u32 dma_addr_bits_default; + bool poll_mode_supported; }; =20 struct fastrpc_channel_ctx { @@ -285,6 +309,9 @@ struct fastrpc_channel_ctx { struct list_head invoke_interrupted_mmaps; bool secure; bool unsigned_support; + bool poll_mode_supported; + /* Per-channel sequence counter; incremented on every context allocation = */ + atomic_t ctx_seq; u64 dma_mask; const struct fastrpc_soc_data *soc_data; }; @@ -308,6 +335,8 @@ struct fastrpc_user { int client_id; int pd; bool is_secure_dev; + /* Flags poll mode state */ + bool poll_mode; /* Lock for lists */ spinlock_t lock; /* lock for allocations */ @@ -705,7 +734,9 @@ static struct fastrpc_invoke_ctx *fastrpc_context_alloc( spin_unlock_irqrestore(&cctx->lock, flags); goto err_idr; } - ctx->ctxid =3D FIELD_PREP(FASTRPC_CTXID_MASK, ret); + ctx->ctxid =3D FIELD_PREP(FASTRPC_CTXID_MASK, ret) | + FIELD_PREP(FASTRPC_CTXID_SEQ_MASK, + (u64)atomic_inc_return(&cctx->ctx_seq)); spin_unlock_irqrestore(&cctx->lock, flags); =20 kref_init(&ctx->refcount); @@ -970,7 +1001,8 @@ static int fastrpc_get_meta_size(struct fastrpc_invoke= _ctx *ctx) sizeof(struct fastrpc_invoke_buf) + sizeof(struct fastrpc_phy_page)) * ctx->nscalars + sizeof(u64) * FASTRPC_MAX_FDLIST + - sizeof(u32) * FASTRPC_MAX_CRCLIST; + sizeof(u32) * FASTRPC_MAX_CRCLIST + + sizeof(u32); =20 return size; } @@ -1066,6 +1098,9 @@ static int fastrpc_get_args(u32 kernel, struct fastrp= c_invoke_ctx *ctx) list =3D fastrpc_invoke_buf_start(rpra, ctx->nscalars); pages =3D fastrpc_phy_page_start(list, ctx->nscalars); ctx->fdlist =3D (u64 *)(pages + ctx->nscalars); + ctx->poll_addr =3D (u32 *)((uintptr_t)ctx->fdlist + sizeof(u64) * FASTRPC= _MAX_FDLIST + + sizeof(u32) * FASTRPC_MAX_CRCLIST); + args =3D (uintptr_t)ctx->buf->virt + metalen; rlen =3D pkt_size - metalen; ctx->rpra =3D rpra; @@ -1235,6 +1270,71 @@ static int fastrpc_invoke_send(struct fastrpc_sessio= n_ctx *sctx, =20 } =20 +static u32 fastrpc_read_poll_addr(struct fastrpc_invoke_ctx *ctx) +{ + dma_rmb(); + return READ_ONCE(*ctx->poll_addr); +} + +static int poll_for_remote_response(struct fastrpc_invoke_ctx *ctx) +{ + u32 val; + int ret; + + /* + * Poll until DSP writes FASTRPC_POLL_RESPONSE into *ctx->poll_addr + * or until another path marks the work done. + */ + ret =3D read_poll_timeout_atomic(fastrpc_read_poll_addr, val, + (val =3D=3D FASTRPC_POLL_RESPONSE) || ctx->is_work_done, 1, + FASTRPC_POLL_MAX_TIMEOUT_US, false, ctx); + + if (!ret && val =3D=3D FASTRPC_POLL_RESPONSE) { + /* + * DSP writes FASTRPC_POLL_RESPONSE to signal successful + * completion via the poll path. + */ + ctx->is_work_done =3D true; + ctx->retval =3D 0; + } + + if (ret =3D=3D -ETIMEDOUT) + ret =3D -EIO; + + return ret; +} + +static inline int fastrpc_wait_for_response(struct fastrpc_invoke_ctx *ctx, + u32 kernel) +{ + int err =3D 0; + + if (kernel) { + if (!wait_for_completion_timeout(&ctx->work, 10 * HZ)) + err =3D -ETIMEDOUT; + } else { + err =3D wait_for_completion_interruptible(&ctx->work); + } + + return err; +} + +static int fastrpc_wait_for_completion(struct fastrpc_invoke_ctx *ctx, + u32 kernel) +{ + int err; + + if (ctx->is_polled) { + err =3D poll_for_remote_response(ctx); + if (!err) + return 0; + /* If polling timed out or failed, move to normal response mode */ + ctx->is_polled =3D false; + } + + return fastrpc_wait_for_response(ctx, kernel); +} + static int fastrpc_internal_invoke(struct fastrpc_user *fl, u32 kernel, u32 handle, u32 sc, struct fastrpc_invoke_args *args) @@ -1270,13 +1370,14 @@ static int fastrpc_internal_invoke(struct fastrpc_u= ser *fl, u32 kernel, if (err) goto bail; =20 - if (kernel) { - if (!wait_for_completion_timeout(&ctx->work, 10 * HZ)) - err =3D -ETIMEDOUT; - } else { - err =3D wait_for_completion_interruptible(&ctx->work); - } + /* + * Set message context as polled if the call is for a user PD + * dynamic module and user has enabled poll mode. + */ + if (handle > FASTRPC_MAX_STATIC_HANDLE && fl->pd =3D=3D USER_PD && fl->po= ll_mode) + ctx->is_polled =3D true; =20 + err =3D fastrpc_wait_for_completion(ctx, kernel); if (err) goto bail; =20 @@ -1842,6 +1943,35 @@ static int fastrpc_get_info_from_kernel(struct fastr= pc_ioctl_capability *cap, return 0; } =20 +static int fastrpc_set_option(struct fastrpc_user *fl, char __user *argp) +{ + struct fastrpc_ioctl_set_option opt =3D {0}; + int i; + + if (copy_from_user(&opt, argp, sizeof(opt))) + return -EFAULT; + + for (i =3D 0; i < ARRAY_SIZE(opt.reserved); i++) { + if (opt.reserved[i] !=3D 0) + return -EINVAL; + } + + if (opt.request_id !=3D FASTRPC_POLL_MODE) + return -EINVAL; + + if (!fl->cctx->poll_mode_supported) + return -EOPNOTSUPP; + + if (opt.value =3D=3D FASTRPC_POLL_MODE_ENABLE) + fl->poll_mode =3D true; + else if (opt.value =3D=3D FASTRPC_POLL_MODE_DISABLE) + fl->poll_mode =3D false; + else + return -EINVAL; + + return 0; +} + static int fastrpc_get_dsp_info(struct fastrpc_user *fl, char __user *argp) { struct fastrpc_ioctl_capability cap =3D {0}; @@ -2203,6 +2333,9 @@ static long fastrpc_device_ioctl(struct file *file, u= nsigned int cmd, case FASTRPC_IOCTL_MEM_UNMAP: err =3D fastrpc_req_mem_unmap(fl, argp); break; + case FASTRPC_IOCTL_SET_OPTION: + err =3D fastrpc_set_option(fl, argp); + break; case FASTRPC_IOCTL_GET_DSP_INFO: err =3D fastrpc_get_dsp_info(fl, argp); break; @@ -2359,6 +2492,7 @@ static const struct fastrpc_soc_data kaanapali_soc_da= ta =3D { .sid_pos =3D 56, .dma_addr_bits_cdsp =3D 34, .dma_addr_bits_default =3D 32, + .poll_mode_supported =3D true, }; =20 static const struct fastrpc_soc_data default_soc_data =3D { @@ -2367,6 +2501,29 @@ static const struct fastrpc_soc_data default_soc_dat= a =3D { .dma_addr_bits_default =3D 32, }; =20 +/* + * Exception list for older platforms that use default_soc_data but whose + * DSP firmware supports FastRPC polling mode. + * + * NOTE: This list is intentionally closed. + * Do NOT add new platforms here. New SoCs must advertise polling mode + * support via their soc_data. + */ + +static const struct of_device_id fastrpc_poll_supported_machines[] __maybe= _unused =3D { + { .compatible =3D "qcom,milos" }, + { .compatible =3D "qcom,qcs8300" }, + { .compatible =3D "qcom,sa8775p" }, + { .compatible =3D "qcom,sar2130p" }, + { .compatible =3D "qcom,sm8450" }, + { .compatible =3D "qcom,sm8550" }, + { .compatible =3D "qcom,sm8650" }, + { .compatible =3D "qcom,sm8750" }, + { .compatible =3D "qcom,x1e80100" }, + { .compatible =3D "qcom,x1p42100" }, + {}, +}; + static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev) { struct device *rdev =3D &rpdev->dev; @@ -2433,6 +2590,8 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *r= pdev) secure_dsp =3D !(of_property_read_bool(rdev->of_node, "qcom,non-secure-do= main")); data->secure =3D secure_dsp; data->soc_data =3D soc_data; + data->poll_mode_supported =3D soc_data->poll_mode_supported || + of_machine_get_match(fastrpc_poll_supported_machines); =20 switch (domain_id) { case ADSP_DOMAIN_ID: @@ -2462,6 +2621,7 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *r= pdev) } =20 kref_init(&data->refcount); + atomic_set(&data->ctx_seq, 0); =20 rdev->dma_mask =3D &data->dma_mask; dma_set_mask_and_coherent(rdev, DMA_BIT_MASK(32)); @@ -2559,7 +2719,25 @@ static int fastrpc_rpmsg_callback(struct rpmsg_devic= e *rpdev, void *data, return -ENOENT; } =20 + /* + * Validate the sequence number embedded in the upper bits of the + * context ID. Under high concurrency the IDR slot can be recycled + * for a new request before a late (or duplicate) glink COMPLETE + * response for the previous request arrives. Without this check the + * driver would call complete() on the wrong context, waking a thread + * whose buffers are still being accessed by the DSP. + */ + if (FIELD_GET(FASTRPC_CTXID_SEQ_MASK, rsp->ctx) !=3D + FIELD_GET(FASTRPC_CTXID_SEQ_MASK, ctx->ctxid)) { + dev_dbg(&rpdev->dev, + "Stale glink response ctx 0x%llx (expected seq 0x%llx), dropping\n", + rsp->ctx, + FIELD_GET(FASTRPC_CTXID_SEQ_MASK, ctx->ctxid)); + return 0; + } + ctx->retval =3D rsp->retval; + ctx->is_work_done =3D true; complete(&ctx->work); =20 /* diff --git a/include/uapi/misc/fastrpc.h b/include/uapi/misc/fastrpc.h index c6e2925f47e6..ba1ea5ed426c 100644 --- a/include/uapi/misc/fastrpc.h +++ b/include/uapi/misc/fastrpc.h @@ -16,6 +16,7 @@ #define FASTRPC_IOCTL_INIT_CREATE_STATIC _IOWR('R', 9, struct fastrpc_init= _create_static) #define FASTRPC_IOCTL_MEM_MAP _IOWR('R', 10, struct fastrpc_mem_map) #define FASTRPC_IOCTL_MEM_UNMAP _IOWR('R', 11, struct fastrpc_mem_unmap) +#define FASTRPC_IOCTL_SET_OPTION _IOWR('R', 12, struct fastrpc_ioctl_set_o= ption) #define FASTRPC_IOCTL_GET_DSP_INFO _IOWR('R', 13, struct fastrpc_ioctl_cap= ability) =20 /** @@ -67,6 +68,28 @@ enum fastrpc_proc_attr { /* Fastrpc attribute for memory protection of buffers */ #define FASTRPC_ATTR_SECUREMAP (1) =20 +/** + * FASTRPC_POLL_MODE - Enable/disable poll mode for FastRPC invocations + * + * Poll mode is an optimization that allows the CPU to poll shared memory + * for completion instead of waiting for an interrupt-based response. + * This reduces latency for fast-completing operations. + * + * Restrictions: + * - Only supported for USER_PD (User Protection Domain) + * - Only applies to dynamic modules (handle > 20) + * - Static modules always use interrupt-based completion + * + * Values: + * - 0: Disable poll mode (use interrupt-based completion) + * - 1: Enable poll mode (poll shared memory for completion) + */ +#define FASTRPC_POLL_MODE (1) + +/* Values for FASTRPC_POLL_MODE request */ +#define FASTRPC_POLL_MODE_DISABLE 0 +#define FASTRPC_POLL_MODE_ENABLE 1 + struct fastrpc_invoke_args { __u64 ptr; __u64 length; @@ -133,6 +156,12 @@ struct fastrpc_mem_unmap { __s32 reserved[5]; }; =20 +struct fastrpc_ioctl_set_option { + __u32 request_id; /* Request type (e.g., FASTRPC_POLL_MODE) */ + __u32 value; /* Request-specific value */ + __s32 reserved[6]; +}; + struct fastrpc_ioctl_capability { __u32 unused; /* deprecated, ignored by the kernel */ __u32 attribute_id; --=20 2.34.1