From 0ca69a482d15ccf22bacccc4964606969df144f6 Mon Sep 17 00:00:00 2001 From: Konsta Holtta Date: Thu, 17 May 2018 13:30:11 +0300 Subject: gpu: nvgpu: add submit entry points for kernel and ioctl gk20a_submit_channel_gpfifo() supports reading the gpfifo entries from either a kernel buffer or an userspace buffer in an ioctl. Add two separate entry points: one for the ioctl and another for any other kernel use. This shortens the function prototypes and simplifies and clarifies the call sites slightly. Jira NVGPU-705 Change-Id: If5141a459261a451f78cc50972f4c94d95ba44d1 Signed-off-by: Konsta Holtta Reviewed-on: https://git-master.nvidia.com/r/1730479 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/os/linux/cde.c | 5 ++--- drivers/gpu/nvgpu/os/linux/ce2.c | 5 ++--- drivers/gpu/nvgpu/os/linux/channel.c | 24 +++++++++++++++++++++++- drivers/gpu/nvgpu/os/linux/channel.h | 10 ++++++++-- drivers/gpu/nvgpu/os/linux/ioctl_channel.c | 5 ++--- 5 files changed, 37 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/nvgpu/os/linux/cde.c b/drivers/gpu/nvgpu/os/linux/cde.c index 32b333f1..66a80403 100644 --- a/drivers/gpu/nvgpu/os/linux/cde.c +++ b/drivers/gpu/nvgpu/os/linux/cde.c @@ -783,9 +783,8 @@ static int gk20a_cde_execute_buffer(struct gk20a_cde_ctx *cde_ctx, return -ENOSYS; } - return gk20a_submit_channel_gpfifo(cde_ctx->ch, gpfifo, NULL, - num_entries, flags, fence, fence_out, - NULL); + return gk20a_submit_channel_gpfifo_kernel(cde_ctx->ch, gpfifo, + num_entries, flags, fence, fence_out); } static void gk20a_cde_ctx_release(struct gk20a_cde_ctx *cde_ctx) diff --git a/drivers/gpu/nvgpu/os/linux/ce2.c b/drivers/gpu/nvgpu/os/linux/ce2.c index 165f33db..8f20091b 100644 --- a/drivers/gpu/nvgpu/os/linux/ce2.c +++ b/drivers/gpu/nvgpu/os/linux/ce2.c @@ -130,9 +130,8 @@ int gk20a_ce_execute_ops(struct gk20a *g, nvgpu_smp_wmb(); - ret = gk20a_submit_channel_gpfifo(ce_ctx->ch, &gpfifo, NULL, - 1, submit_flags, &fence, - &ce_cmd_buf_fence_out, NULL); + ret = gk20a_submit_channel_gpfifo_kernel(ce_ctx->ch, &gpfifo, + 1, submit_flags, &fence, &ce_cmd_buf_fence_out); if (!ret) { ce_ctx->postfences[ce_ctx->cmd_buf_read_queue_offset] = diff --git a/drivers/gpu/nvgpu/os/linux/channel.c b/drivers/gpu/nvgpu/os/linux/channel.c index cc2d525d..a84c5a1c 100644 --- a/drivers/gpu/nvgpu/os/linux/channel.c +++ b/drivers/gpu/nvgpu/os/linux/channel.c @@ -752,7 +752,7 @@ out: return 0; } -int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, +static int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, struct nvgpu_gpfifo_entry *gpfifo, struct nvgpu_submit_gpfifo_args *args, u32 num_entries, @@ -1019,3 +1019,25 @@ clean_up: return err; } +int gk20a_submit_channel_gpfifo_user(struct channel_gk20a *c, + struct nvgpu_submit_gpfifo_args *args, + u32 num_entries, + u32 flags, + struct nvgpu_channel_fence *fence, + struct gk20a_fence **fence_out, + struct fifo_profile_gk20a *profile) +{ + return gk20a_submit_channel_gpfifo(c, NULL, args, num_entries, + flags, fence, fence_out, profile); +} + +int gk20a_submit_channel_gpfifo_kernel(struct channel_gk20a *c, + struct nvgpu_gpfifo_entry *gpfifo, + u32 num_entries, + u32 flags, + struct nvgpu_channel_fence *fence, + struct gk20a_fence **fence_out) +{ + return gk20a_submit_channel_gpfifo(c, gpfifo, NULL, num_entries, flags, + fence, fence_out, NULL); +} diff --git a/drivers/gpu/nvgpu/os/linux/channel.h b/drivers/gpu/nvgpu/os/linux/channel.h index 4a58b10c..689ad8bf 100644 --- a/drivers/gpu/nvgpu/os/linux/channel.h +++ b/drivers/gpu/nvgpu/os/linux/channel.h @@ -84,8 +84,7 @@ struct channel_gk20a *gk20a_open_new_channel_with_cb(struct gk20a *g, int runlist_id, bool is_privileged_channel); -int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, - struct nvgpu_gpfifo_entry *gpfifo, +int gk20a_submit_channel_gpfifo_user(struct channel_gk20a *c, struct nvgpu_submit_gpfifo_args *args, u32 num_entries, u32 flags, @@ -93,4 +92,11 @@ int gk20a_submit_channel_gpfifo(struct channel_gk20a *c, struct gk20a_fence **fence_out, struct fifo_profile_gk20a *profile); +int gk20a_submit_channel_gpfifo_kernel(struct channel_gk20a *c, + struct nvgpu_gpfifo_entry *gpfifo, + u32 num_entries, + u32 flags, + struct nvgpu_channel_fence *fence, + struct gk20a_fence **fence_out); + #endif /* __NVGPU_CHANNEL_H__ */ diff --git a/drivers/gpu/nvgpu/os/linux/ioctl_channel.c b/drivers/gpu/nvgpu/os/linux/ioctl_channel.c index b04bb9de..ee4ef237 100644 --- a/drivers/gpu/nvgpu/os/linux/ioctl_channel.c +++ b/drivers/gpu/nvgpu/os/linux/ioctl_channel.c @@ -798,9 +798,8 @@ static int gk20a_ioctl_channel_submit_gpfifo( return fd; } - ret = gk20a_submit_channel_gpfifo(ch, NULL, args, args->num_entries, - submit_flags, &fence, - &fence_out, profile); + ret = gk20a_submit_channel_gpfifo_user(ch, args, args->num_entries, + submit_flags, &fence, &fence_out, profile); if (ret) { if (fd != -1) -- cgit v1.2.2