The driver calls dma_map_single() with either 'dev->buf_len' or
'dev->buf_len - 2' as length argument, but always uses 'dev->buf_len'
in dma_unmap_single(). This produces the warning:
at91_i2c
f8014000.i2c: DMA-API: device driver frees DMA memory with different size [device address=0x000000002fbf9240] [map size=20 bytes] [unmap size=22 bytes]
with CONFIG_DMA_API_DEBUG enabled.
Use dma_sg_len() as argument for dma_unmap_single() which is always
set to the correct length.
}
if (dma->buf_mapped) {
dma_unmap_single(dev->dev, sg_dma_address(&dma->sg),
}
if (dma->buf_mapped) {
dma_unmap_single(dev->dev, sg_dma_address(&dma->sg),
- dev->buf_len, dma->direction);
+ sg_dma_len(&dma->sg), dma->direction);
dma->buf_mapped = false;
}
dma->buf_mapped = false;
}
struct at91_twi_dev *dev = (struct at91_twi_dev *)data;
dma_unmap_single(dev->dev, sg_dma_address(&dev->dma.sg),
struct at91_twi_dev *dev = (struct at91_twi_dev *)data;
dma_unmap_single(dev->dev, sg_dma_address(&dev->dma.sg),
- dev->buf_len, DMA_TO_DEVICE);
+ sg_dma_len(&dev->dma.sg), DMA_TO_DEVICE);
at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP);
}
at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP);
}
struct at91_twi_dev *dev = (struct at91_twi_dev *)data;
dma_unmap_single(dev->dev, sg_dma_address(&dev->dma.sg),
struct at91_twi_dev *dev = (struct at91_twi_dev *)data;
dma_unmap_single(dev->dev, sg_dma_address(&dev->dma.sg),
- dev->buf_len, DMA_FROM_DEVICE);
+ sg_dma_len(&dev->dma.sg), DMA_FROM_DEVICE);
/* The last two bytes have to be read without using dma */
dev->buf += dev->buf_len - 2;
/* The last two bytes have to be read without using dma */
dev->buf += dev->buf_len - 2;