gpu: nvgpu: add struct nvgpu_sched_ctrl to gk20a

Add struct nvgpu_sched_ctrl to struct gk20a
Delete struct gk20a_sched_ctrl from struct nvgpu_os_linux
Update sched_ctrl functions to use the nvgpu_sched_ctrl struct

Bug 200576520

Change-Id: I35b13219e5ef0a8a03333dfd7d46e1d308aec541
Signed-off-by: Peter Daifuku <pdaifuku@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2279152
(cherry picked from commit 9e9046f03c)
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2288466
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Peter Daifuku
2020-01-14 11:14:38 -08:00
committed by Alex Waterman
parent b811a0b755
commit 86e030a18a
8 changed files with 108 additions and 89 deletions

View File

@@ -35,8 +35,8 @@
ssize_t gk20a_sched_dev_read(struct file *filp, char __user *buf,
size_t size, loff_t *off)
{
struct gk20a_sched_ctrl *sched = filp->private_data;
struct gk20a *g = sched->g;
struct gk20a *g = filp->private_data;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
struct nvgpu_sched_event_arg event = { 0 };
int err;
@@ -76,8 +76,8 @@ ssize_t gk20a_sched_dev_read(struct file *filp, char __user *buf,
unsigned int gk20a_sched_dev_poll(struct file *filp, poll_table *wait)
{
struct gk20a_sched_ctrl *sched = filp->private_data;
struct gk20a *g = sched->g;
struct gk20a *g = filp->private_data;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
unsigned int mask = 0;
nvgpu_log(g, gpu_dbg_fn | gpu_dbg_sched, " ");
@@ -91,10 +91,10 @@ unsigned int gk20a_sched_dev_poll(struct file *filp, poll_table *wait)
return mask;
}
static int gk20a_sched_dev_ioctl_get_tsgs(struct gk20a_sched_ctrl *sched,
static int gk20a_sched_dev_ioctl_get_tsgs(struct gk20a *g,
struct nvgpu_sched_get_tsgs_args *arg)
{
struct gk20a *g = sched->g;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
nvgpu_log(g, gpu_dbg_fn | gpu_dbg_sched, "size=%u buffer=%llx",
arg->size, arg->buffer);
@@ -115,10 +115,10 @@ static int gk20a_sched_dev_ioctl_get_tsgs(struct gk20a_sched_ctrl *sched,
return 0;
}
static int gk20a_sched_dev_ioctl_get_recent_tsgs(struct gk20a_sched_ctrl *sched,
static int gk20a_sched_dev_ioctl_get_recent_tsgs(struct gk20a *g,
struct nvgpu_sched_get_tsgs_args *arg)
{
struct gk20a *g = sched->g;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
nvgpu_log(g, gpu_dbg_fn | gpu_dbg_sched, "size=%u buffer=%llx",
arg->size, arg->buffer);
@@ -141,10 +141,10 @@ static int gk20a_sched_dev_ioctl_get_recent_tsgs(struct gk20a_sched_ctrl *sched,
return 0;
}
static int gk20a_sched_dev_ioctl_get_tsgs_by_pid(struct gk20a_sched_ctrl *sched,
static int gk20a_sched_dev_ioctl_get_tsgs_by_pid(struct gk20a *g,
struct nvgpu_sched_get_tsgs_by_pid_args *arg)
{
struct gk20a *g = sched->g;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
struct nvgpu_fifo *f = &g->fifo;
struct nvgpu_tsg *tsg;
u64 *bitmap;
@@ -161,7 +161,7 @@ static int gk20a_sched_dev_ioctl_get_tsgs_by_pid(struct gk20a_sched_ctrl *sched,
return -ENOSPC;
}
bitmap = nvgpu_kzalloc(sched->g, sched->bitmap_size);
bitmap = nvgpu_kzalloc(g, sched->bitmap_size);
if (!bitmap)
return -ENOMEM;
@@ -180,15 +180,14 @@ static int gk20a_sched_dev_ioctl_get_tsgs_by_pid(struct gk20a_sched_ctrl *sched,
bitmap, sched->bitmap_size))
err = -EFAULT;
nvgpu_kfree(sched->g, bitmap);
nvgpu_kfree(g, bitmap);
return err;
}
static int gk20a_sched_dev_ioctl_get_params(struct gk20a_sched_ctrl *sched,
static int gk20a_sched_dev_ioctl_get_params(struct gk20a *g,
struct nvgpu_sched_tsg_get_params_args *arg)
{
struct gk20a *g = sched->g;
struct nvgpu_fifo *f = &g->fifo;
struct nvgpu_tsg *tsg;
u32 tsgid = arg->tsgid;
@@ -219,10 +218,9 @@ static int gk20a_sched_dev_ioctl_get_params(struct gk20a_sched_ctrl *sched,
}
static int gk20a_sched_dev_ioctl_tsg_set_timeslice(
struct gk20a_sched_ctrl *sched,
struct gk20a *g,
struct nvgpu_sched_tsg_timeslice_args *arg)
{
struct gk20a *g = sched->g;
struct nvgpu_fifo *f = &g->fifo;
struct nvgpu_tsg *tsg;
u32 tsgid = arg->tsgid;
@@ -254,10 +252,9 @@ done:
}
static int gk20a_sched_dev_ioctl_tsg_set_runlist_interleave(
struct gk20a_sched_ctrl *sched,
struct gk20a *g,
struct nvgpu_sched_tsg_runlist_interleave_args *arg)
{
struct gk20a *g = sched->g;
struct nvgpu_fifo *f = &g->fifo;
struct nvgpu_tsg *tsg;
u32 tsgid = arg->tsgid;
@@ -288,9 +285,9 @@ done:
return err;
}
static int gk20a_sched_dev_ioctl_lock_control(struct gk20a_sched_ctrl *sched)
static int gk20a_sched_dev_ioctl_lock_control(struct gk20a *g)
{
struct gk20a *g = sched->g;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
nvgpu_log(g, gpu_dbg_fn | gpu_dbg_sched, " ");
@@ -300,9 +297,9 @@ static int gk20a_sched_dev_ioctl_lock_control(struct gk20a_sched_ctrl *sched)
return 0;
}
static int gk20a_sched_dev_ioctl_unlock_control(struct gk20a_sched_ctrl *sched)
static int gk20a_sched_dev_ioctl_unlock_control(struct gk20a *g)
{
struct gk20a *g = sched->g;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
nvgpu_log(g, gpu_dbg_fn | gpu_dbg_sched, " ");
@@ -312,21 +309,19 @@ static int gk20a_sched_dev_ioctl_unlock_control(struct gk20a_sched_ctrl *sched)
return 0;
}
static int gk20a_sched_dev_ioctl_get_api_version(struct gk20a_sched_ctrl *sched,
static int gk20a_sched_dev_ioctl_get_api_version(struct gk20a *g,
struct nvgpu_sched_api_version_args *args)
{
struct gk20a *g = sched->g;
nvgpu_log(g, gpu_dbg_fn | gpu_dbg_sched, " ");
args->version = NVGPU_SCHED_API_VERSION;
return 0;
}
static int gk20a_sched_dev_ioctl_get_tsg(struct gk20a_sched_ctrl *sched,
static int gk20a_sched_dev_ioctl_get_tsg(struct gk20a *g,
struct nvgpu_sched_tsg_refcount_args *arg)
{
struct gk20a *g = sched->g;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
struct nvgpu_fifo *f = &g->fifo;
struct nvgpu_tsg *tsg;
u32 tsgid = arg->tsgid;
@@ -360,10 +355,10 @@ static int gk20a_sched_dev_ioctl_get_tsg(struct gk20a_sched_ctrl *sched,
return 0;
}
static int gk20a_sched_dev_ioctl_put_tsg(struct gk20a_sched_ctrl *sched,
static int gk20a_sched_dev_ioctl_put_tsg(struct gk20a *g,
struct nvgpu_sched_tsg_refcount_args *arg)
{
struct gk20a *g = sched->g;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
struct nvgpu_fifo *f = &g->fifo;
struct nvgpu_tsg *tsg;
u32 tsgid = arg->tsgid;
@@ -395,13 +390,13 @@ int gk20a_sched_dev_open(struct inode *inode, struct file *filp)
struct nvgpu_os_linux *l = container_of(inode->i_cdev,
struct nvgpu_os_linux, sched.cdev);
struct gk20a *g;
struct gk20a_sched_ctrl *sched;
struct nvgpu_sched_ctrl *sched;
int err = 0;
g = nvgpu_get(&l->g);
if (!g)
return -ENODEV;
sched = &l->sched_ctrl;
sched = &g->sched_ctrl;
nvgpu_log(g, gpu_dbg_fn | gpu_dbg_sched, "g=%p", g);
@@ -423,7 +418,7 @@ int gk20a_sched_dev_open(struct inode *inode, struct file *filp)
sched->bitmap_size);
(void) memset(sched->ref_tsg_bitmap, 0, sched->bitmap_size);
filp->private_data = sched;
filp->private_data = g;
nvgpu_log(g, gpu_dbg_sched, "filp=%p sched=%p", filp, sched);
free_ref:
@@ -435,8 +430,7 @@ free_ref:
long gk20a_sched_dev_ioctl(struct file *filp, unsigned int cmd,
unsigned long arg)
{
struct gk20a_sched_ctrl *sched = filp->private_data;
struct gk20a *g = sched->g;
struct gk20a *g = filp->private_data;
u8 buf[NVGPU_CTXSW_IOCTL_MAX_ARG_SIZE];
int err = 0;
@@ -457,45 +451,45 @@ long gk20a_sched_dev_ioctl(struct file *filp, unsigned int cmd,
nvgpu_speculation_barrier();
switch (cmd) {
case NVGPU_SCHED_IOCTL_GET_TSGS:
err = gk20a_sched_dev_ioctl_get_tsgs(sched,
err = gk20a_sched_dev_ioctl_get_tsgs(g,
(struct nvgpu_sched_get_tsgs_args *)buf);
break;
case NVGPU_SCHED_IOCTL_GET_RECENT_TSGS:
err = gk20a_sched_dev_ioctl_get_recent_tsgs(sched,
err = gk20a_sched_dev_ioctl_get_recent_tsgs(g,
(struct nvgpu_sched_get_tsgs_args *)buf);
break;
case NVGPU_SCHED_IOCTL_GET_TSGS_BY_PID:
err = gk20a_sched_dev_ioctl_get_tsgs_by_pid(sched,
err = gk20a_sched_dev_ioctl_get_tsgs_by_pid(g,
(struct nvgpu_sched_get_tsgs_by_pid_args *)buf);
break;
case NVGPU_SCHED_IOCTL_TSG_GET_PARAMS:
err = gk20a_sched_dev_ioctl_get_params(sched,
err = gk20a_sched_dev_ioctl_get_params(g,
(struct nvgpu_sched_tsg_get_params_args *)buf);
break;
case NVGPU_SCHED_IOCTL_TSG_SET_TIMESLICE:
err = gk20a_sched_dev_ioctl_tsg_set_timeslice(sched,
err = gk20a_sched_dev_ioctl_tsg_set_timeslice(g,
(struct nvgpu_sched_tsg_timeslice_args *)buf);
break;
case NVGPU_SCHED_IOCTL_TSG_SET_RUNLIST_INTERLEAVE:
err = gk20a_sched_dev_ioctl_tsg_set_runlist_interleave(sched,
err = gk20a_sched_dev_ioctl_tsg_set_runlist_interleave(g,
(struct nvgpu_sched_tsg_runlist_interleave_args *)buf);
break;
case NVGPU_SCHED_IOCTL_LOCK_CONTROL:
err = gk20a_sched_dev_ioctl_lock_control(sched);
err = gk20a_sched_dev_ioctl_lock_control(g);
break;
case NVGPU_SCHED_IOCTL_UNLOCK_CONTROL:
err = gk20a_sched_dev_ioctl_unlock_control(sched);
err = gk20a_sched_dev_ioctl_unlock_control(g);
break;
case NVGPU_SCHED_IOCTL_GET_API_VERSION:
err = gk20a_sched_dev_ioctl_get_api_version(sched,
err = gk20a_sched_dev_ioctl_get_api_version(g,
(struct nvgpu_sched_api_version_args *)buf);
break;
case NVGPU_SCHED_IOCTL_GET_TSG:
err = gk20a_sched_dev_ioctl_get_tsg(sched,
err = gk20a_sched_dev_ioctl_get_tsg(g,
(struct nvgpu_sched_tsg_refcount_args *)buf);
break;
case NVGPU_SCHED_IOCTL_PUT_TSG:
err = gk20a_sched_dev_ioctl_put_tsg(sched,
err = gk20a_sched_dev_ioctl_put_tsg(g,
(struct nvgpu_sched_tsg_refcount_args *)buf);
break;
default:
@@ -518,8 +512,8 @@ long gk20a_sched_dev_ioctl(struct file *filp, unsigned int cmd,
int gk20a_sched_dev_release(struct inode *inode, struct file *filp)
{
struct gk20a_sched_ctrl *sched = filp->private_data;
struct gk20a *g = sched->g;
struct gk20a *g = filp->private_data;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
struct nvgpu_fifo *f = &g->fifo;
struct nvgpu_tsg *tsg;
unsigned int tsgid;
@@ -546,8 +540,7 @@ int gk20a_sched_dev_release(struct inode *inode, struct file *filp)
void gk20a_sched_ctrl_tsg_added(struct gk20a *g, struct nvgpu_tsg *tsg)
{
struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
struct gk20a_sched_ctrl *sched = &l->sched_ctrl;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
int err;
nvgpu_log(g, gpu_dbg_fn | gpu_dbg_sched, "tsgid=%u", tsg->tsgid);
@@ -572,8 +565,7 @@ void gk20a_sched_ctrl_tsg_added(struct gk20a *g, struct nvgpu_tsg *tsg)
void gk20a_sched_ctrl_tsg_removed(struct gk20a *g, struct nvgpu_tsg *tsg)
{
struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
struct gk20a_sched_ctrl *sched = &l->sched_ctrl;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
nvgpu_log(g, gpu_dbg_fn | gpu_dbg_sched, "tsgid=%u", tsg->tsgid);
@@ -595,15 +587,13 @@ void gk20a_sched_ctrl_tsg_removed(struct gk20a *g, struct nvgpu_tsg *tsg)
int gk20a_sched_ctrl_init(struct gk20a *g)
{
struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
struct gk20a_sched_ctrl *sched = &l->sched_ctrl;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
struct nvgpu_fifo *f = &g->fifo;
int err;
if (sched->sw_ready)
return 0;
sched->g = g;
sched->bitmap_size = round_up(f->num_channels, 64) / 8;
sched->status = 0;
@@ -646,8 +636,7 @@ free_active:
void gk20a_sched_ctrl_cleanup(struct gk20a *g)
{
struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
struct gk20a_sched_ctrl *sched = &l->sched_ctrl;
struct nvgpu_sched_ctrl *sched = &g->sched_ctrl;
nvgpu_kfree(g, sched->active_tsg_bitmap);
nvgpu_kfree(g, sched->recent_tsg_bitmap);