gpu: nvgpu: allocate object context for specific GR instance

Add new API nvgpu_get_gpu_instance_id_from_cdev() that returns GPU
instance id from nvgpu_cdev pointer.

Store cdev pointer in channel private data channel_priv and ctrl node
private data gk20a_ctrl_priv.

Update below functions to pass cdev pointer :
__gk20a_channel_open()
gk20a_channel_open_ioctl()

In gk20a_channel_ioctl(), extract gpu instance id using cdev pointer
stored in channel_priv and new API nvgpu_get_gpu_instance_id_from_cdev().
Extract GR instance id using nvgpu_grmgr_get_gr_instance_id()

Invoke context creation API inside nvgpu_gr_exec_with_err_for_instance()
so that context is created with correct GR instance id.

Jira NVGPU-5648

Change-Id: I5a4e79165e021b56181d08105b2185306a19703b
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2435465
Reviewed-by: automaticguardword <automaticguardword@nvidia.com>
Reviewed-by: Lakshmanan M <lm@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
GVS: Gerrit_Virtual_Submit
This commit is contained in:
Deepak Nibade
2020-10-22 12:13:00 +05:30
committed by Alex Waterman
parent 69948919b7
commit d0a1f30e66
5 changed files with 41 additions and 9 deletions

View File

@@ -22,6 +22,7 @@ struct file;
struct gk20a;
struct nvgpu_channel_open_args;
struct nvgpu_channel;
struct nvgpu_cdev;
struct gk20a_cs_snapshot_client_linux {
struct gk20a_cs_snapshot_client cs_client;
@@ -36,7 +37,7 @@ int gk20a_channel_open(struct inode *inode, struct file *filp);
int gk20a_channel_release(struct inode *inode, struct file *filp);
long gk20a_channel_ioctl(struct file *filp,
unsigned int cmd, unsigned long arg);
int gk20a_channel_open_ioctl(struct gk20a *g,
int gk20a_channel_open_ioctl(struct gk20a *g, struct nvgpu_cdev *cdev,
struct nvgpu_channel_open_args *args);
int gk20a_channel_cycle_stats(struct nvgpu_channel *ch, int dmabuf_fd);