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

Commit 09e65ed2 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx:
  drivers/dma: Correct NULL test
  async-tx: fix buffer submission error handling in ipu_idma.c
  dmaengine: correct onstack wait_queue_head declaration
  ioat: fix infinite timeout checking in ioat2_quiesce
  dmaengine: fix memleak in dma_async_device_unregister
parents 9883b83d 734c2992
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -613,8 +613,6 @@ static void dma_tasklet(unsigned long data)
	cohd_fin->pending_irqs--;
	cohc->completed = cohd_fin->desc.cookie;

	BUG_ON(cohc->nbr_active_done && cohd_fin == NULL);

	if (cohc->nbr_active_done == 0)
		return;

+1 −0
Original line number Diff line number Diff line
@@ -826,6 +826,7 @@ void dma_async_device_unregister(struct dma_device *device)
		chan->dev->chan = NULL;
		mutex_unlock(&dma_list_mutex);
		device_unregister(&chan->dev->device);
		free_percpu(chan->local);
	}
}
EXPORT_SYMBOL(dma_async_device_unregister);
+1 −1
Original line number Diff line number Diff line
@@ -467,7 +467,7 @@ static int dmatest_func(void *data)

	if (iterations > 0)
		while (!kthread_should_stop()) {
			DECLARE_WAIT_QUEUE_HEAD(wait_dmatest_exit);
			DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wait_dmatest_exit);
			interruptible_sleep_on(&wait_dmatest_exit);
		}

+1 −1
Original line number Diff line number Diff line
@@ -249,7 +249,7 @@ int ioat2_quiesce(struct ioat_chan_common *chan, unsigned long tmo)
	if (is_ioat_active(status) || is_ioat_idle(status))
		ioat_suspend(chan);
	while (is_ioat_active(status) || is_ioat_idle(status)) {
		if (end && time_after(jiffies, end)) {
		if (tmo && time_after(jiffies, end)) {
			err = -ETIMEDOUT;
			break;
		}
+7 −18
Original line number Diff line number Diff line
@@ -761,11 +761,9 @@ static void ipu_select_buffer(enum ipu_channel channel, int buffer_n)
 * @buffer_n:	buffer number to update.
 *		0 or 1 are the only valid values.
 * @phyaddr:	buffer physical address.
 * @return:	Returns 0 on success or negative error code on failure. This
 *              function will fail if the buffer is set to ready.
 */
/* Called under spin_lock(_irqsave)(&ichan->lock) */
static int ipu_update_channel_buffer(struct idmac_channel *ichan,
static void ipu_update_channel_buffer(struct idmac_channel *ichan,
				      int buffer_n, dma_addr_t phyaddr)
{
	enum ipu_channel channel = ichan->dma_chan.chan_id;
@@ -806,8 +804,6 @@ static int ipu_update_channel_buffer(struct idmac_channel *ichan,
	}

	spin_unlock_irqrestore(&ipu_data.lock, flags);

	return 0;
}

/* Called under spin_lock_irqsave(&ichan->lock) */
@@ -816,7 +812,6 @@ static int ipu_submit_buffer(struct idmac_channel *ichan,
{
	unsigned int chan_id = ichan->dma_chan.chan_id;
	struct device *dev = &ichan->dma_chan.dev->device;
	int ret;

	if (async_tx_test_ack(&desc->txd))
		return -EINTR;
@@ -827,14 +822,7 @@ static int ipu_submit_buffer(struct idmac_channel *ichan,
	 * could make it conditional on status >= IPU_CHANNEL_ENABLED, but
	 * doing it again shouldn't hurt either.
	 */
	ret = ipu_update_channel_buffer(ichan, buf_idx,
					sg_dma_address(sg));

	if (ret < 0) {
		dev_err(dev, "Updating sg %p on channel 0x%x buffer %d failed!\n",
			sg, chan_id, buf_idx);
		return ret;
	}
	ipu_update_channel_buffer(ichan, buf_idx, sg_dma_address(sg));

	ipu_select_buffer(chan_id, buf_idx);
	dev_dbg(dev, "Updated sg %p on channel 0x%x buffer %d\n",
@@ -1379,9 +1367,10 @@ static irqreturn_t idmac_interrupt(int irq, void *dev_id)

	if (likely(sgnew) &&
	    ipu_submit_buffer(ichan, descnew, sgnew, ichan->active_buffer) < 0) {
		callback = desc->txd.callback;
		callback_param = desc->txd.callback_param;
		callback = descnew->txd.callback;
		callback_param = descnew->txd.callback_param;
		spin_unlock(&ichan->lock);
		if (callback)
			callback(callback_param);
		spin_lock(&ichan->lock);
	}