On Thu, Sep 21, 2017 at 1:10 AM, Felix Kuehling <Felix.Kuehling at amd.com> wrote: > From: Yong Zhao <Yong.Zhao at amd.com> > > There are already CHIP_* definitions under amd_shared.h file on amdgpu > side, so KFD should reuse them rather than defining new ones. > > Using enum for asic type requires default cases on switch statements > to prevent compiler warnings. WARN on unsupported ASICs. It should never > get there because KFD should not be initialized on unsupported devices. > > v2: Replace BUG() with WARN and error return > > Signed-off-by: Yong Zhao <Yong.Zhao at amd.com> > Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com> > --- > drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 4 ++++ > drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c | 18 ++++++++++++------ > drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c | 3 +++ > drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 9 +++------ > 4 files changed, 22 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c > index 87f8742..fe0f0de 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c > @@ -1130,6 +1130,10 @@ struct device_queue_manager *device_queue_manager_init(struct kfd_dev *dev) > case CHIP_KAVERI: > device_queue_manager_init_cik(&dqm->ops_asic_specific); > break; > + default: > + WARN(1, "Unexpected ASIC family %u", > + dev->device_info->asic_family); > + goto out_free; > } > > if (!dqm->ops.initialize(dqm)) > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c > index a47ca3c..d7ed10e 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c > @@ -291,14 +291,20 @@ struct kernel_queue *kernel_queue_init(struct kfd_dev *dev, > case CHIP_KAVERI: > kernel_queue_init_cik(&kq->ops_asic_specific); > break; > + default: > + WARN(1, "Unexpected ASIC family %u", > + dev->device_info->asic_family); > + goto out_free; > } > > - if (!kq->ops.initialize(kq, dev, type, KFD_KERNEL_QUEUE_SIZE)) { > - pr_err("Failed to init kernel queue\n"); > - kfree(kq); > - return NULL; > - } > - return kq; > + if (kq->ops.initialize(kq, dev, type, KFD_KERNEL_QUEUE_SIZE)) > + return kq; > + > + pr_err("Failed to init kernel queue\n"); > + > +out_free: > + kfree(kq); > + return NULL; > } > > void kernel_queue_uninit(struct kernel_queue *kq) > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c > index b1ef136..dfd260e 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c > @@ -31,6 +31,9 @@ struct mqd_manager *mqd_manager_init(enum KFD_MQD_TYPE type, > return mqd_manager_init_cik(type, dev); > case CHIP_CARRIZO: > return mqd_manager_init_vi(type, dev); > + default: > + WARN(1, "Unexpected ASIC family %u", > + dev->device_info->asic_family); > } > > return NULL; > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h > index 4d989b9..47eee77 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h > @@ -33,6 +33,8 @@ > #include <linux/kfd_ioctl.h> > #include <kgd_kfd_interface.h> > > +#include "amd_shared.h" > + > #define KFD_SYSFS_FILE_MODE 0444 > > #define KFD_MMAP_DOORBELL_MASK 0x8000000000000 > @@ -112,11 +114,6 @@ enum cache_policy { > cache_policy_noncoherent > }; > > -enum asic_family_type { > - CHIP_KAVERI = 0, > - CHIP_CARRIZO > -}; > - > struct kfd_event_interrupt_class { > bool (*interrupt_isr)(struct kfd_dev *dev, > const uint32_t *ih_ring_entry); > @@ -125,7 +122,7 @@ struct kfd_event_interrupt_class { > }; > > struct kfd_device_info { > - unsigned int asic_family; > + enum amd_asic_type asic_family; > const struct kfd_event_interrupt_class *event_interrupt_class; > unsigned int max_pasid_bits; > unsigned int max_no_of_hqd; > -- > 2.7.4 > This patch is: Reviewed-by: Oded Gabbay <oded.gabbay at gmail.com>