struct kernel_queue *kernel_queue_init(struct kfd_dev *dev, enum kfd_queue_type type) { struct kernel_queue *kq; BUG_ON(!dev); kq = kzalloc(sizeof(struct kernel_queue), GFP_KERNEL); if (!kq) return NULL; kq->ops.initialize = initialize; kq->ops.uninitialize = uninitialize; kq->ops.acquire_packet_buffer = acquire_packet_buffer; kq->ops.submit_packet = submit_packet; kq->ops.rollback_packet = rollback_packet; switch (dev->device_info->asic_family) { case CHIP_CARRIZO: kernel_queue_init_vi(&kq->ops_asic_specific); break; case CHIP_KAVERI: kernel_queue_init_cik(&kq->ops_asic_specific); break; } if (kq->ops.initialize(kq, dev, type, KFD_KERNEL_QUEUE_SIZE) == false) { pr_err("amdkfd: failed to init kernel queue\n"); kfree(kq); return NULL; } return kq; }
struct kernel_queue *kernel_queue_init(struct kfd_dev *dev, enum kfd_queue_type type) { struct kernel_queue *kq; kq = kzalloc(sizeof(*kq), GFP_KERNEL); if (!kq) return NULL; kq->ops.initialize = initialize; kq->ops.uninitialize = uninitialize; kq->ops.acquire_packet_buffer = acquire_packet_buffer; kq->ops.submit_packet = submit_packet; kq->ops.rollback_packet = rollback_packet; switch (dev->device_info->asic_family) { case CHIP_CARRIZO: case CHIP_TONGA: case CHIP_FIJI: case CHIP_POLARIS10: case CHIP_POLARIS11: kernel_queue_init_vi(&kq->ops_asic_specific); break; case CHIP_KAVERI: case CHIP_HAWAII: 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)) return kq; pr_err("Failed to init kernel queue\n"); out_free: kfree(kq); return NULL; }