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

Commit ff487fb7 authored by Jeff Garzik's avatar Jeff Garzik Committed by Dan Williams
Browse files

drivers/dma: handle sysfs errors



From: Jeff Garzik <jeff@garzik.org>

Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
Signed-off-by: default avatarChris Leech <christopher.leech@intel.com>
parent 000725d5
Loading
Loading
Loading
Loading
+20 −2
Original line number Diff line number Diff line
@@ -316,7 +316,7 @@ EXPORT_SYMBOL(dma_async_client_chan_request);
int dma_async_device_register(struct dma_device *device)
{
	static int id;
	int chancnt = 0;
	int chancnt = 0, rc;
	struct dma_chan* chan;

	if (!device)
@@ -338,8 +338,15 @@ int dma_async_device_register(struct dma_device *device)
		snprintf(chan->class_dev.class_id, BUS_ID_SIZE, "dma%dchan%d",
		         device->dev_id, chan->chan_id);

		rc = class_device_register(&chan->class_dev);
		if (rc) {
			chancnt--;
			free_percpu(chan->local);
			chan->local = NULL;
			goto err_out;
		}

		kref_get(&device->refcount);
		class_device_register(&chan->class_dev);
	}

	mutex_lock(&dma_list_mutex);
@@ -349,6 +356,17 @@ int dma_async_device_register(struct dma_device *device)
	dma_chans_rebalance();

	return 0;

err_out:
	list_for_each_entry(chan, &device->channels, device_node) {
		if (chan->local == NULL)
			continue;
		kref_put(&device->refcount, dma_async_device_cleanup);
		class_device_unregister(&chan->class_dev);
		chancnt--;
		free_percpu(chan->local);
	}
	return rc;
}
EXPORT_SYMBOL(dma_async_device_register);