On 2019-05-23 6:41 p.m., Zeng, Oak wrote: > Add a new kfd ioctl to allocate queue GWS. Queue > GWS is released on queue destroy. > > Change-Id: I60153c26a577992ad873e4292e759e5c3d5bbd15 > Signed-off-by: Oak Zeng <Oak.Zeng@xxxxxxx> Reviewed-by: Felix Kuehling <Felix.Kuehling@xxxxxxx> > --- > drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 27 +++++++++++++++++++++++++++ > include/uapi/linux/kfd_ioctl.h | 20 +++++++++++++++++++- > 2 files changed, 46 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c > index 38ae53f..455a3db 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c > @@ -1559,6 +1559,31 @@ static int kfd_ioctl_unmap_memory_from_gpu(struct file *filep, > return err; > } > > +static int kfd_ioctl_alloc_queue_gws(struct file *filep, > + struct kfd_process *p, void *data) > +{ > + int retval; > + struct kfd_ioctl_alloc_queue_gws_args *args = data; > + struct kfd_dev *dev = NULL; > + > + if (!hws_gws_support || > + dev->dqm->sched_policy == KFD_SCHED_POLICY_NO_HWS) > + return -EINVAL; > + > + dev = kfd_device_by_id(args->gpu_id); > + if (!dev) { > + pr_debug("Could not find gpu id 0x%x\n", args->gpu_id); > + return -EINVAL; > + } > + > + mutex_lock(&p->mutex); > + retval = pqm_set_gws(&p->pqm, args->queue_id, args->num_gws ? dev->gws : NULL); > + mutex_unlock(&p->mutex); > + > + args->first_gws = 0; > + return retval; > +} > + > static int kfd_ioctl_get_dmabuf_info(struct file *filep, > struct kfd_process *p, void *data) > { > @@ -1761,6 +1786,8 @@ static const struct amdkfd_ioctl_desc amdkfd_ioctls[] = { > AMDKFD_IOCTL_DEF(AMDKFD_IOC_IMPORT_DMABUF, > kfd_ioctl_import_dmabuf, 0), > > + AMDKFD_IOCTL_DEF(AMDKFD_IOC_ALLOC_QUEUE_GWS, > + kfd_ioctl_alloc_queue_gws, 0), > }; > > #define AMDKFD_CORE_IOCTL_COUNT ARRAY_SIZE(amdkfd_ioctls) > diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h > index 20917c5..070d1bc 100644 > --- a/include/uapi/linux/kfd_ioctl.h > +++ b/include/uapi/linux/kfd_ioctl.h > @@ -410,6 +410,21 @@ struct kfd_ioctl_unmap_memory_from_gpu_args { > __u32 n_success; /* to/from KFD */ > }; > > +/* Allocate GWS for specific queue > + * > + * @gpu_id: device identifier > + * @queue_id: queue's id that GWS is allocated for > + * @num_gws: how many GWS to allocate > + * @first_gws: index of the first GWS allocated. > + * only support contiguous GWS allocation > + */ > +struct kfd_ioctl_alloc_queue_gws_args { > + __u32 gpu_id; /* to KFD */ > + __u32 queue_id; /* to KFD */ > + __u32 num_gws; /* to KFD */ > + __u32 first_gws; /* from KFD */ > +}; > + > struct kfd_ioctl_get_dmabuf_info_args { > __u64 size; /* from KFD */ > __u64 metadata_ptr; /* to KFD */ > @@ -529,7 +544,10 @@ enum kfd_mmio_remap { > #define AMDKFD_IOC_IMPORT_DMABUF \ > AMDKFD_IOWR(0x1D, struct kfd_ioctl_import_dmabuf_args) > > +#define AMDKFD_IOC_ALLOC_QUEUE_GWS \ > + AMDKFD_IOWR(0x1E, struct kfd_ioctl_alloc_queue_gws_args) > + > #define AMDKFD_COMMAND_START 0x01 > -#define AMDKFD_COMMAND_END 0x1E > +#define AMDKFD_COMMAND_END 0x1F > > #endif _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx