Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32fa8219 authored by Felix Kuehling's avatar Felix Kuehling Committed by Oded Gabbay
Browse files

drm/amdkfd: Handle remaining BUG_ONs more gracefully v2



In most cases, BUG_ONs can be replaced with WARN_ON with an error
return. In some void functions just turn them into a WARN_ON and
possibly an early exit.

v2:
* Cleaned up error handling in pm_send_unmap_queue
* Removed redundant WARN_ON in kfd_process_destroy_delayed

Signed-off-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
parent 8625ff9c
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -60,7 +60,8 @@ static int dbgdev_diq_submit_ib(struct kfd_dbgdev *dbgdev,
	unsigned int *ib_packet_buff;
	int status;

	BUG_ON(!size_in_bytes);
	if (WARN_ON(!size_in_bytes))
		return -EINVAL;

	kq = dbgdev->kq;

+2 −1
Original line number Diff line number Diff line
@@ -64,7 +64,8 @@ bool kfd_dbgmgr_create(struct kfd_dbgmgr **ppmgr, struct kfd_dev *pdev)
	enum DBGDEV_TYPE type = DBGDEV_TYPE_DIQ;
	struct kfd_dbgmgr *new_buff;

	BUG_ON(!pdev->init_complete);
	if (WARN_ON(!pdev->init_complete))
		return false;

	new_buff = kfd_alloc_struct(new_buff);
	if (!new_buff) {
+9 −7
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ static const struct kfd_device_info *lookup_device_info(unsigned short did)

	for (i = 0; i < ARRAY_SIZE(supported_devices); i++) {
		if (supported_devices[i].did == did) {
			BUG_ON(!supported_devices[i].device_info);
			WARN_ON(!supported_devices[i].device_info);
			return supported_devices[i].device_info;
		}
	}
@@ -212,8 +212,7 @@ static int iommu_invalid_ppr_cb(struct pci_dev *pdev, int pasid,
			flags);

	dev = kfd_device_by_pci_dev(pdev);
	BUG_ON(!dev);

	if (!WARN_ON(!dev))
		kfd_signal_iommu_event(dev, pasid, address,
			flags & PPR_FAULT_WRITE, flags & PPR_FAULT_EXEC);

@@ -397,9 +396,12 @@ static int kfd_gtt_sa_init(struct kfd_dev *kfd, unsigned int buf_size,
{
	unsigned int num_of_longs;

	BUG_ON(buf_size < chunk_size);
	BUG_ON(buf_size == 0);
	BUG_ON(chunk_size == 0);
	if (WARN_ON(buf_size < chunk_size))
		return -EINVAL;
	if (WARN_ON(buf_size == 0))
		return -EINVAL;
	if (WARN_ON(chunk_size == 0))
		return -EINVAL;

	kfd->gtt_sa_chunk_size = chunk_size;
	kfd->gtt_sa_num_of_chunks = buf_size / chunk_size;
+10 −9
Original line number Diff line number Diff line
@@ -388,7 +388,8 @@ static struct mqd_manager *get_mqd_manager_nocpsch(
{
	struct mqd_manager *mqd;

	BUG_ON(type >= KFD_MQD_TYPE_MAX);
	if (WARN_ON(type >= KFD_MQD_TYPE_MAX))
		return NULL;

	pr_debug("mqd type %d\n", type);

@@ -513,7 +514,7 @@ static void uninitialize_nocpsch(struct device_queue_manager *dqm)
{
	int i;

	BUG_ON(dqm->queue_count > 0 || dqm->processes_count > 0);
	WARN_ON(dqm->queue_count > 0 || dqm->processes_count > 0);

	kfree(dqm->allocated_queues);
	for (i = 0 ; i < KFD_MQD_TYPE_MAX ; i++)
@@ -1129,8 +1130,8 @@ struct device_queue_manager *device_queue_manager_init(struct kfd_dev *dev)
		dqm->ops.set_cache_memory_policy = set_cache_memory_policy;
		break;
	default:
		BUG();
		break;
		pr_err("Invalid scheduling policy %d\n", sched_policy);
		goto out_free;
	}

	switch (dev->device_info->asic_family) {
@@ -1143,14 +1144,14 @@ struct device_queue_manager *device_queue_manager_init(struct kfd_dev *dev)
		break;
	}

	if (dqm->ops.initialize(dqm)) {
	if (!dqm->ops.initialize(dqm))
		return dqm;

out_free:
	kfree(dqm);
	return NULL;
}

	return dqm;
}

void device_queue_manager_uninit(struct device_queue_manager *dqm)
{
	dqm->ops.uninitialize(dqm);
+1 −1
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ static uint32_t compute_sh_mem_bases_64bit(unsigned int top_address_nybble)
	 * for LDS/Scratch and GPUVM.
	 */

	BUG_ON((top_address_nybble & 1) || top_address_nybble > 0xE ||
	WARN_ON((top_address_nybble & 1) || top_address_nybble > 0xE ||
		top_address_nybble == 0);

	return PRIVATE_BASE(top_address_nybble << 12) |
Loading