Two fixes for -stable:

1/ async_mult() sometimes maps less buffers than initially requested.
   We end up freeing dmaengine_unmap_data on an invalid pool.

2/ mv_xor: register write ordering fix
dmaengine: fix dmaengine_unmap failure

The count which is used to get_unmap_data maybe not the same as the
count computed in dmaengine_unmap which causes to free data in a
wrong pool.

This patch fixes this issue by keeping the map count with unmap_data
structure and use this count to get the pool.

Cc: <>
Signed-off-by: Xuelin Shi <>
Signed-off-by: Dan Williams <>
2 files changed