From mboxrd@z Thu Jan 1 00:00:00 1970 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 745743BFADD for ; Mon, 6 Jul 2026 06:13:07 +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=1783318388; cv=none; b=J5cTFfUcN083a3dMNxIMNb2ZlI0o3YHGfBppRL9R8A4g94QmrV9STOM6ZJlVgVH2TU0IqKc+PwENc1nLJ1yvvZmSUWl7gC+Dx65AYj4sa0aMdox4dnCVGUXbsikCwfL7eaMyOZHelJc00bEYS+a/Hi8jCkYJ/MTHpyY9iORUjUk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783318388; c=relaxed/simple; bh=1dbOqwoLq6acjjmcdd/pF19xPGUMpUB+TtDu0bgMe6k=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=siphZ9McoKcP3nGCs/glzsRv7n+tvi48gvIMinh3TNuB3NMFoAYWoc5CXexbVBixkPE7ifRAz/H77Y+Gj7pn2lzbJmHScgNKD1pOavOiEQF4Qu+qU+cWUOhSJE/bEq+N6nlmbOCtDA8sPylZKGcRSDmUVi0ohGRXABkFK6BzzoM= 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=XE7VxoPL; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=DpZ/1RkN; 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="XE7VxoPL"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="DpZ/1RkN" 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 66641ZSq3617472 for ; Mon, 6 Jul 2026 06:13:06 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= bKz4CaC/c7J7lYoZ1j+G1HE7pYhCs1U+Xzm8efUob24=; b=XE7VxoPLvtu0rC7r U8nG3KeyQXspD98WHqNbF2tmUpbK1Q/9PhrSBGHckuRhrneTfrNmw2mY+epRfAVl lOMOFp1a77mhkcWENkSvgaIZXGoggLzj4MGZuTj9j3FRBc6qzjjEBGiwpLGpAPhF NVChyui42K0hCO90aqSMN2R8CZZuT73bF++eJ+UsYuINf21Q+4XcBBT3e2bC2Dw5 Ne0mXYQS0T2K4XUIQUPmDaIG9pW8UHIOaq6vQxZB4PzDchYnz5Qm7m6OH8Xg59vD sfUW9zxZQXKjox4lSjgFakSqBFS5HKEmoJZxFQWd7+ZBtv4G18d8pp2suaqHvMOi uHH0eA== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4f6s64msf4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 06 Jul 2026 06:13:06 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-381ed6616f7so3382283a91.1 for ; Sun, 05 Jul 2026 23:13:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783318385; x=1783923185; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=bKz4CaC/c7J7lYoZ1j+G1HE7pYhCs1U+Xzm8efUob24=; b=DpZ/1RkNqINg/AiP53aWLBN+Qu/dwKH9qC0cmRwIHv32IjqSwJuaSq4rBdsLyDmiLE vcdbVhD9BT3XP7PvIYHWZCFvmj6XXHl3hSGF8I9Fb7mqc17pGpPk6pX7HntJLcAYim0j x5YXRaFXbzjCoWsLEZfqhMTQI6IbgiZo3STuAqyYXpcpbTvZqHmkRdj3Gmm9oAWWWF1s C2Swq26mlbADIaYHBt9pGtkKe6dieT7h2+xZPTbVL7luhOr2bbgSF9yeHXI48Yy0plty +IWfndXPoC0+Z8yy7onmnV8/PN6vnp9ltY2o9WX4IFi5sojTFWmiwx3yCOV5ETWsJWzW cGIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783318385; x=1783923185; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=bKz4CaC/c7J7lYoZ1j+G1HE7pYhCs1U+Xzm8efUob24=; b=NT+dj3sK2WAsiBp3PpZ+6vts+XGcOcpB58xAXn7RZmdOktMnrexrDkHut/Ypf9Gqbs tLn2+yggUL3BLiOJAcm4FvFzv/z8MOIPJvSrlM52R8nYeSVSlAzag9/9/ONtMizVo8ne 1Hfsi+twGVnZNgwoT8ztL/902Zd1EzXiSH70ckDXYMKr3i8UA54NYZyq8O/18Zo9rnMB g4pivOndVZYvjxNqr9NkoYIbxjkIlWQM6oqFpmZYUn5e/RAp++jRhBSw1JWr5caZzEG7 5L+NkQOZ3EP+baDtH3F65BnO/ArMPJSQdK/lThyXSPZ3RJMODhe1dwVgEwz4YBerpCVm 3wdQ== X-Forwarded-Encrypted: i=1; AHgh+RrYDukM1ZifknQHLsyhi+6HNcsjPWblW/ho3hvrdUVX9KE92vEVuHPkuZ1U6nrvPWCpFGnFTxK6mszxiNk=@vger.kernel.org X-Gm-Message-State: AOJu0YyCfsy4CCwnvWkp3izeh4zTDLcVnGDk/1VR73rrB4+JE1KuUKd6 ydlfnvwK7mt/lL+FQJIaOHihae8dJCC5QF0YekCRY4Drt3N8Yw6x8OJOZuaBrdOmB0Q1o0vijGN WV787QDa18vr3bcEM2ML+uipiy1blPsRd+m7BpN+Gi/gVvsWydTSXMe0fyyS3i72KTiM= X-Gm-Gg: AfdE7ckzNWivCx2QPlW4lB0K+MDvgYX1T4ZlJT/f5Jnp2+IbYLn8qgeyNX4+In/oRne zaH2zVMXKfWuFkJa83drFMLcS+fHfJ9NXWCF6lesDjgdUjigp+zTSwh1YG+tGkFpGPKf+q+IRDD eQsiWdFvEuVVBWNyD514A4X9t+42+NUZJKdJ+E3L4RefGy+MpqUG3P87iA1fpew2ObXITZnWJvO wIM94LpN8B5at5kefP7bsAIZlpseZHqifVw5DdfQE2xT5m0z0k2JFB945O1xn//c1fcB9R9Mbko G33UGYC+tdQWfzMVILZPu/j93Y9WiovIxvQJsHDg6lwQGxfidgearomjV8RPhTNU1GGuyJpgjan rMdktZlXRCt8jImqWWd6mM+aUbeXy2JD2ebf6/arSpw== X-Received: by 2002:a17:90b:3805:b0:37e:9e9:6ffc with SMTP id 98e67ed59e1d1-3829f6e3e0emr8352818a91.25.1783318385114; Sun, 05 Jul 2026 23:13:05 -0700 (PDT) X-Received: by 2002:a17:90b:3805:b0:37e:9e9:6ffc with SMTP id 98e67ed59e1d1-3829f6e3e0emr8352798a91.25.1783318384627; Sun, 05 Jul 2026 23:13:04 -0700 (PDT) Received: from [10.204.78.23] ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38127d147a8sm4313752a91.17.2026.07.05.23.13.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 05 Jul 2026 23:13:04 -0700 (PDT) Message-ID: <113f7536-92cf-422c-84ef-cb55a037aa81@oss.qualcomm.com> Date: Mon, 6 Jul 2026 11:42:59 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] misc: fastrpc: create duplicate sessions after all CB probing To: Srinivas Kandagatla , Amol Maheshwari , Arnd Bergmann , Greg Kroah-Hartman Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Bharath Kumar , Chenna Kesava Raju , Ekansh Gupta References: <20260609-dup-sessions-v1-1-26934abb9fa3@oss.qualcomm.com> <6a7e3394-9dc7-4371-9935-47f3be8a59f4@kernel.org> Content-Language: en-US From: Vinayak Katoch In-Reply-To: <6a7e3394-9dc7-4371-9935-47f3be8a59f4@kernel.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA2MDA2MCBTYWx0ZWRfXw9UUY9FG1GjW 4weyp9pFUdvGQeNiCHQDOCV5P+KV0MdEk4TQf91TNCXgJDNWiHbsJXIqppK4wWrLi78cn9T2KpV 7R5xX7zeVqLqymeiC6KAbrFEgKNlkSIdheackSteQSriAn/A3EuPmxqhdOu08TgUov+Q5A74USI KQNStRK3ASrvkI90rEDD/79ah7GLM212LVshxuJGauuxYX7/nIoVKk6rWJDdd/XUgssN4uWGnVI bv2pK32MEElBU8dbRGPWhhdlgpXWNd4T5x9XdR2GJwOz0CThKbDjaOU0WvYV+bHYjUyoYs5MPcV KmgUCh+yFUGowVF88BvQPZKR7ez4e7ddQnGVt0s6vyueBBQT/ivX9+E+DH1OBi9REiByMhXdDq/ tj7F3zCq3BYckMWbkaMXF81T2hbf1mvKTVatkTe477H3EEfqVFWIml6D8fTo5gaQjPzDAnC1g1T rsyHH959uiXjGSFXxRQ== X-Authority-Analysis: v=2.4 cv=VvITxe2n c=1 sm=1 tr=0 ts=6a4b4772 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=jvgINQJEQb2Mk2KRUnwA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-ORIG-GUID: FNGBvP0FbZYjcF_rOPspX1OQU5d_IUBs X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA2MDA2MCBTYWx0ZWRfX3vzGUDWGYUhq 0lX2rYCWvZ53uLa2y+nsV0Ev9te3lU8tkDESTgnsWbs7nM2IupDTRI1bI1nROkMgXauznuRbIgR N8sWadd3ob4rDaWH6rYVkirbqZQ0nDo= X-Proofpoint-GUID: FNGBvP0FbZYjcF_rOPspX1OQU5d_IUBs X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-07-05_02,2026-07-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 suspectscore=0 bulkscore=0 adultscore=0 priorityscore=1501 lowpriorityscore=0 phishscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607060060 On 7/2/2026 1:51 AM, Srinivas Kandagatla wrote: > > > On 6/9/26 11:33 AM, Vinayak Katoch wrote: >> For ADSP, only a limited number of FastRPC context banks (CBs) are >> available. Each CB supports a single session, which means only a few >> processes can run on ADSP simultaneously. If all sessions are consumed >> by fastrpc daemons, no session remains available when a user application >> starts, causing the application to fail. >> >> To address this limitation, a Device Tree change was used till now: >> qcom,nsessions = <5>; >> > You should mark this property as deprecated in dt bindings. > Which should discourage people to use this property. Ack, will update in v2. > > >> However, feedback from the upstream community indicated that this change >> should not be made in the Device Tree. Instead, it was recommended to >> handle this as a driver-level change. > > Changing it in driver will make it applicable for all the SoCs. You are correct, that is the expected behaviour. > >> >> Instead of duplicating sessions inline during fastrpc_cb_probe() using >> the qcom,nsessions DT property, defer duplication until after >> of_platform_populate() returns in fastrpc_rpmsg_probe(), at which point >> all compute-CB child nodes have been probed and the session array is >> fully populated. >> >> For the ADSP domain, append FASTRPC_DUP_SESSIONS (4) copies of the >> last probed session once of_platform_populate() succeeds. This keeps >> the per-CB probe path simple and ensures duplicates are always derived >> from a stable, fully-initialised session state. >> >> The qcom,nsessions DT property is no longer consumed by the driver; the >> binding and DT sources are left unchanged. >> >> Signed-off-by: Vinayak Katoch >> --- >> drivers/misc/fastrpc.c | 31 ++++++++++++++++++------------- >> 1 file changed, 18 insertions(+), 13 deletions(-) >> >> diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c >> index 1080f9acf70a..46afbae9c234 100644 >> --- a/drivers/misc/fastrpc.c >> +++ b/drivers/misc/fastrpc.c >> @@ -30,6 +30,7 @@ >> #define CDSP_DOMAIN_ID (3) >> #define GDSP_DOMAIN_ID (4) >> #define FASTRPC_MAX_SESSIONS 14 >> +#define FASTRPC_DUP_SESSIONS 4 >> #define FASTRPC_MAX_VMIDS 16 >> #define FASTRPC_ALIGN 128 >> #define FASTRPC_MAX_FDLIST 16 >> @@ -2195,7 +2196,6 @@ static int fastrpc_cb_probe(struct platform_device *pdev) >> struct fastrpc_channel_ctx *cctx; >> struct fastrpc_session_ctx *sess; >> struct device *dev = &pdev->dev; >> - int i, sessions = 0; >> unsigned long flags; >> int rc; >> u32 dma_bits; >> @@ -2204,8 +2204,6 @@ static int fastrpc_cb_probe(struct platform_device *pdev) >> if (!cctx) >> return -EINVAL; >> >> - of_property_read_u32(dev->of_node, "qcom,nsessions", &sessions); >> - >> spin_lock_irqsave(&cctx->lock, flags); >> if (cctx->sesscount >= FASTRPC_MAX_SESSIONS) { >> dev_err(&pdev->dev, "too many sessions\n"); >> @@ -2225,16 +2223,6 @@ static int fastrpc_cb_probe(struct platform_device *pdev) >> if (of_property_read_u32(dev->of_node, "reg", &sess->sid)) >> dev_info(dev, "FastRPC Session ID not specified in DT\n"); >> >> - if (sessions > 0) { >> - struct fastrpc_session_ctx *dup_sess; >> - >> - for (i = 1; i < sessions; i++) { >> - if (cctx->sesscount >= FASTRPC_MAX_SESSIONS) >> - break; >> - dup_sess = &cctx->session[cctx->sesscount++]; >> - memcpy(dup_sess, sess, sizeof(*dup_sess)); >> - } >> - } >> spin_unlock_irqrestore(&cctx->lock, flags); >> rc = dma_set_mask(dev, DMA_BIT_MASK(dma_bits)); >> if (rc) { >> @@ -2445,6 +2433,23 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev) >> if (err) >> goto err_deregister_fdev; >> >> + if (data->domain_id == ADSP_DOMAIN_ID && data->sesscount > 0) { >> + struct fastrpc_session_ctx *last_sess; >> + struct fastrpc_session_ctx *dup_sess; >> + unsigned long flags; >> + int i; >> + >> + spin_lock_irqsave(&data->lock, flags); >> + last_sess = &data->session[data->sesscount - 1]; > > Why only for last session? The number of ADSP CBs is small (3–4), and earlier sessions are consumed by fastrpc daemons. The last CB is the one available for user applications, and the previous qcom,nsessions approach also targeted the last CB implicitly. Open to a better approach if you have one in mind. > > This is now un conditionally done for ADSP which changes the whole > behaviour. Until now this duplication was only needed for ADSP since it has fewer CBs compared to CDSP. CDSP has enough CBs that this is not a concern there. The unconditional behaviour for ADSP is intentional as the CB shortage is a hardware constraint common to all ADSP-capable SoCs.> >> + for (i = 0; i < FASTRPC_DUP_SESSIONS; i++) { >> + if (data->sesscount >= FASTRPC_MAX_SESSIONS) >> + break; >> + dup_sess = &data->session[data->sesscount++]; >> + memcpy(dup_sess, last_sess, sizeof(*dup_sess)); >> + } >> + spin_unlock_irqrestore(&data->lock, flags); >> + } >> + >> return 0; >> >> err_deregister_fdev: >> >> --- >> base-commit: 97e797263a5e963da3d1e66e743fd518567dfe37 >> change-id: 20260609-dup-sessions-ea2acaac1994 >> >> Best regards, >