From https://gitlab.postmarketos.org/soc/qualcomm-sm8250/linux/-/commits/6.17.0?ref_type=HEADS Made some modifications to be compatible with the latest kernel. Signed-off-by: CodeChenL <2540735020@qq.com>
153 lines
4.5 KiB
Diff
153 lines
4.5 KiB
Diff
From 79bc1c929aad75319b197309d3119f3cd1cbe5c8 Mon Sep 17 00:00:00 2001
|
|
From: Jianhua Lu <lujianhua000@gmail.com>
|
|
Date: Tue, 11 Nov 2025 21:47:04 +0800
|
|
Subject: [PATCH 62/62] Revert "misc: fastrpc: Add support for multiple PD from
|
|
one process"
|
|
|
|
This reverts commit 37d56e0fb08e1f806de638b7dc8edff329cb683d.
|
|
|
|
Signed-off-by: Jiali Chen <chenjiali@radxa.com>
|
|
---
|
|
drivers/misc/fastrpc.c | 30 ++++++++++++++----------------
|
|
1 file changed, 14 insertions(+), 16 deletions(-)
|
|
|
|
diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c
|
|
index cf00fd704086..3d6fcadc66b8 100644
|
|
--- a/drivers/misc/fastrpc.c
|
|
+++ b/drivers/misc/fastrpc.c
|
|
@@ -299,7 +299,7 @@ struct fastrpc_user {
|
|
struct fastrpc_session_ctx *sctx;
|
|
struct fastrpc_buf *init_mem;
|
|
|
|
- int client_id;
|
|
+ int tgid;
|
|
int pd;
|
|
bool is_secure_dev;
|
|
/* Lock for lists */
|
|
@@ -614,7 +614,7 @@ static struct fastrpc_invoke_ctx *fastrpc_context_alloc(
|
|
ctx->sc = sc;
|
|
ctx->retval = -1;
|
|
ctx->pid = current->pid;
|
|
- ctx->tgid = user->client_id;
|
|
+ ctx->tgid = user->tgid;
|
|
ctx->cctx = cctx;
|
|
init_completion(&ctx->work);
|
|
INIT_WORK(&ctx->put_work, fastrpc_context_put_wq);
|
|
@@ -1115,7 +1115,7 @@ static int fastrpc_invoke_send(struct fastrpc_session_ctx *sctx,
|
|
int ret;
|
|
|
|
cctx = fl->cctx;
|
|
- msg->pid = fl->client_id;
|
|
+ msg->pid = fl->tgid;
|
|
msg->tid = current->pid;
|
|
|
|
if (kernel)
|
|
@@ -1293,7 +1293,7 @@ static int fastrpc_init_create_static_process(struct fastrpc_user *fl,
|
|
}
|
|
}
|
|
|
|
- inbuf.pgid = fl->client_id;
|
|
+ inbuf.pgid = fl->tgid;
|
|
inbuf.namelen = init.namelen;
|
|
inbuf.pageslen = 0;
|
|
fl->pd = USER_PD;
|
|
@@ -1395,7 +1395,7 @@ static int fastrpc_init_create_process(struct fastrpc_user *fl,
|
|
goto err;
|
|
}
|
|
|
|
- inbuf.pgid = fl->client_id;
|
|
+ inbuf.pgid = fl->tgid;
|
|
inbuf.namelen = strlen(current->comm) + 1;
|
|
inbuf.filelen = init.filelen;
|
|
inbuf.pageslen = 1;
|
|
@@ -1469,9 +1469,8 @@ static int fastrpc_init_create_process(struct fastrpc_user *fl,
|
|
}
|
|
|
|
static struct fastrpc_session_ctx *fastrpc_session_alloc(
|
|
- struct fastrpc_user *fl)
|
|
+ struct fastrpc_channel_ctx *cctx)
|
|
{
|
|
- struct fastrpc_channel_ctx *cctx = fl->cctx;
|
|
struct fastrpc_session_ctx *session = NULL;
|
|
unsigned long flags;
|
|
int i;
|
|
@@ -1481,8 +1480,6 @@ static struct fastrpc_session_ctx *fastrpc_session_alloc(
|
|
if (!cctx->session[i].used && cctx->session[i].valid) {
|
|
cctx->session[i].used = true;
|
|
session = &cctx->session[i];
|
|
- /* any non-zero ID will work, session_idx + 1 is the simplest one */
|
|
- fl->client_id = i + 1;
|
|
break;
|
|
}
|
|
}
|
|
@@ -1507,7 +1504,7 @@ static int fastrpc_release_current_dsp_process(struct fastrpc_user *fl)
|
|
int tgid = 0;
|
|
u32 sc;
|
|
|
|
- tgid = fl->client_id;
|
|
+ tgid = fl->tgid;
|
|
args[0].ptr = (u64)(uintptr_t) &tgid;
|
|
args[0].length = sizeof(tgid);
|
|
args[0].fd = -1;
|
|
@@ -1582,10 +1579,11 @@ static int fastrpc_device_open(struct inode *inode, struct file *filp)
|
|
INIT_LIST_HEAD(&fl->maps);
|
|
INIT_LIST_HEAD(&fl->mmaps);
|
|
INIT_LIST_HEAD(&fl->user);
|
|
+ fl->tgid = current->tgid;
|
|
fl->cctx = cctx;
|
|
fl->is_secure_dev = fdevice->secure;
|
|
|
|
- fl->sctx = fastrpc_session_alloc(fl);
|
|
+ fl->sctx = fastrpc_session_alloc(cctx);
|
|
if (!fl->sctx) {
|
|
dev_err(&cctx->rpdev->dev, "No session available\n");
|
|
mutex_destroy(&fl->mutex);
|
|
@@ -1649,7 +1647,7 @@ static int fastrpc_dmabuf_alloc(struct fastrpc_user *fl, char __user *argp)
|
|
static int fastrpc_init_attach(struct fastrpc_user *fl, int pd)
|
|
{
|
|
struct fastrpc_invoke_args args[1];
|
|
- int tgid = fl->client_id;
|
|
+ int tgid = fl->tgid;
|
|
u32 sc;
|
|
|
|
args[0].ptr = (u64)(uintptr_t) &tgid;
|
|
@@ -1805,7 +1803,7 @@ static int fastrpc_req_munmap_impl(struct fastrpc_user *fl, struct fastrpc_buf *
|
|
int err;
|
|
u32 sc;
|
|
|
|
- req_msg.pgid = fl->client_id;
|
|
+ req_msg.pgid = fl->tgid;
|
|
req_msg.size = buf->size;
|
|
req_msg.vaddr = buf->raddr;
|
|
|
|
@@ -1891,7 +1889,7 @@ static int fastrpc_req_mmap(struct fastrpc_user *fl, char __user *argp)
|
|
return err;
|
|
}
|
|
|
|
- req_msg.pgid = fl->client_id;
|
|
+ req_msg.pgid = fl->tgid;
|
|
req_msg.flags = req.flags;
|
|
req_msg.vaddr = req.vaddrin;
|
|
req_msg.num = sizeof(pages);
|
|
@@ -1980,7 +1978,7 @@ static int fastrpc_req_mem_unmap_impl(struct fastrpc_user *fl, struct fastrpc_me
|
|
return -EINVAL;
|
|
}
|
|
|
|
- req_msg.pgid = fl->client_id;
|
|
+ req_msg.pgid = fl->tgid;
|
|
req_msg.len = map->len;
|
|
req_msg.vaddrin = map->raddr;
|
|
req_msg.fd = map->fd;
|
|
@@ -2033,7 +2031,7 @@ static int fastrpc_req_mem_map(struct fastrpc_user *fl, char __user *argp)
|
|
return err;
|
|
}
|
|
|
|
- req_msg.pgid = fl->client_id;
|
|
+ req_msg.pgid = fl->tgid;
|
|
req_msg.fd = req.fd;
|
|
req_msg.offset = req.offset;
|
|
req_msg.vaddrin = req.vaddrin;
|
|
--
|
|
2.47.3
|
|
|