misc: fastrpc: copy to user only for non-DMA-BUF heap buffers
fastrpc_put_args is copying all the output buffers to user. For large number of output context buffers, this might cause performance degradation. Copying is not needed for DMA-BUF heap buffers. Signed-off-by: Jeya R <jeyr@codeaurora.org> Link: https://lore.kernel.org/r/1632386272-18139-1-git-send-email-jeyr@codeaurora.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
304b0ba0a2
commit
847afd7bd5
|
@ -890,15 +890,17 @@ static int fastrpc_put_args(struct fastrpc_invoke_ctx *ctx,
|
|||
inbufs = REMOTE_SCALARS_INBUFS(ctx->sc);
|
||||
|
||||
for (i = inbufs; i < ctx->nbufs; ++i) {
|
||||
void *src = (void *)(uintptr_t)rpra[i].pv;
|
||||
void *dst = (void *)(uintptr_t)ctx->args[i].ptr;
|
||||
u64 len = rpra[i].len;
|
||||
if (!ctx->maps[i]) {
|
||||
void *src = (void *)(uintptr_t)rpra[i].pv;
|
||||
void *dst = (void *)(uintptr_t)ctx->args[i].ptr;
|
||||
u64 len = rpra[i].len;
|
||||
|
||||
if (!kernel) {
|
||||
if (copy_to_user((void __user *)dst, src, len))
|
||||
return -EFAULT;
|
||||
} else {
|
||||
memcpy(dst, src, len);
|
||||
if (!kernel) {
|
||||
if (copy_to_user((void __user *)dst, src, len))
|
||||
return -EFAULT;
|
||||
} else {
|
||||
memcpy(dst, src, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue