Commit e922bbf3 authored by Aman Kumar's avatar Aman Kumar Committed by Vinod Koul
Browse files

dmaengine: idma64: Update bytes_transferred field



Currently when 8250 data transfer is done, bytes_tranferred always returns
0 at /sys/devices/pci0000\:\:**.*/dma/dma*chan*/bytes_transferred.
In many cases it gives false impression that data is not being
trasferred via DMA.

So, updating the bytes_transferred field to count the bytes
whenever there is data transfer using idma64.

Co-developed-by: default avatarSrikanth Thokala <srikanth.thokala@intel.com>
Signed-off-by: default avatarSrikanth Thokala <srikanth.thokala@intel.com>
Signed-off-by: default avatarAman Kumar <aman.kumar@intel.com>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20230203121702.15725-1-aman.kumar@intel.com


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent 8d1b7bd5
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -137,8 +137,11 @@ static void idma64_chan_irq(struct idma64 *idma64, unsigned short c,
		u32 status_err, u32 status_xfer)
{
	struct idma64_chan *idma64c = &idma64->chan[c];
	struct dma_chan_percpu *stat;
	struct idma64_desc *desc;

	stat = this_cpu_ptr(idma64c->vchan.chan.local);

	spin_lock(&idma64c->vchan.lock);
	desc = idma64c->desc;
	if (desc) {
@@ -149,6 +152,7 @@ static void idma64_chan_irq(struct idma64 *idma64, unsigned short c,
			dma_writel(idma64, CLEAR(XFER), idma64c->mask);
			desc->status = DMA_COMPLETE;
			vchan_cookie_complete(&desc->vdesc);
			stat->bytes_transferred += desc->length;
			idma64_start_transfer(idma64c);
		}