dma.c (0ea8a56de21be24cb79abb03dee79aabcd60a316) dma.c (3b8040de1282c58ca6915b3311f6cbe54fb5c629)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Intel I/OAT DMA Linux driver
4 * Copyright(c) 2004 - 2015 Intel Corporation.
5 */
6
7/*
8 * This driver supports an Intel I/OAT DMA engine, which does asynchronous

--- 151 unchanged lines hidden (view full) ---

160
161 /* flush inflight timers */
162 del_timer_sync(&ioat_chan->timer);
163
164 /* flush inflight tasklet runs */
165 tasklet_kill(&ioat_chan->cleanup_task);
166
167 /* final cleanup now that everything is quiesced and can't re-arm */
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Intel I/OAT DMA Linux driver
4 * Copyright(c) 2004 - 2015 Intel Corporation.
5 */
6
7/*
8 * This driver supports an Intel I/OAT DMA engine, which does asynchronous

--- 151 unchanged lines hidden (view full) ---

160
161 /* flush inflight timers */
162 del_timer_sync(&ioat_chan->timer);
163
164 /* flush inflight tasklet runs */
165 tasklet_kill(&ioat_chan->cleanup_task);
166
167 /* final cleanup now that everything is quiesced and can't re-arm */
168 ioat_cleanup_event((unsigned long)&ioat_chan->dma_chan);
168 ioat_cleanup_event(&ioat_chan->cleanup_task);
169}
170
171static void __ioat_issue_pending(struct ioatdma_chan *ioat_chan)
172{
173 ioat_chan->dmacount += ioat_ring_pending(ioat_chan);
174 ioat_chan->issued = ioat_chan->head;
175 writew(ioat_chan->dmacount,
176 ioat_chan->reg_base + IOAT_CHAN_DMACOUNT_OFFSET);

--- 508 unchanged lines hidden (view full) ---

685 mod_timer(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
686 ioat_eh(ioat_chan);
687 }
688 }
689
690 spin_unlock_bh(&ioat_chan->cleanup_lock);
691}
692
169}
170
171static void __ioat_issue_pending(struct ioatdma_chan *ioat_chan)
172{
173 ioat_chan->dmacount += ioat_ring_pending(ioat_chan);
174 ioat_chan->issued = ioat_chan->head;
175 writew(ioat_chan->dmacount,
176 ioat_chan->reg_base + IOAT_CHAN_DMACOUNT_OFFSET);

--- 508 unchanged lines hidden (view full) ---

685 mod_timer(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
686 ioat_eh(ioat_chan);
687 }
688 }
689
690 spin_unlock_bh(&ioat_chan->cleanup_lock);
691}
692
693void ioat_cleanup_event(unsigned long data)
693void ioat_cleanup_event(struct tasklet_struct *t)
694{
694{
695 struct ioatdma_chan *ioat_chan = to_ioat_chan((void *)data);
695 struct ioatdma_chan *ioat_chan = from_tasklet(ioat_chan, t, cleanup_task);
696
697 ioat_cleanup(ioat_chan);
698 if (!test_bit(IOAT_RUN, &ioat_chan->state))
699 return;
700 writew(IOAT_CHANCTRL_RUN, ioat_chan->reg_base + IOAT_CHANCTRL_OFFSET);
701}
702
703static void ioat_restart_channel(struct ioatdma_chan *ioat_chan)

--- 358 unchanged lines hidden ---
696
697 ioat_cleanup(ioat_chan);
698 if (!test_bit(IOAT_RUN, &ioat_chan->state))
699 return;
700 writew(IOAT_CHANCTRL_RUN, ioat_chan->reg_base + IOAT_CHANCTRL_OFFSET);
701}
702
703static void ioat_restart_channel(struct ioatdma_chan *ioat_chan)

--- 358 unchanged lines hidden ---