Re: dmaengine/Query: What about scatter/gather for mem to mem transfers.

From: Pratyush Anand
Date: Thu Dec 15 2011 - 01:56:35 EST


On 12/15/2011 10:54 AM, Pratyush Anand wrote:
On 12/15/2011 10:36 AM, Koul, Vinod wrote:

Hello Vinod/Dan,

Please write your opinion.
I am on vacation, but will reply briefly here, more next week

Thanks for your quick reply.


Regards
Pratyush

On 12/14/2011 12:17 PM, Pratyush Anand wrote:
Hello Vinod/Dan,

In continuation to the scatter/gather requirement:
We might need some generic transfer where source and destination
address may be overlapped and also gap between two chunk of source and
destination might not be same.

For examaple,
Transfer size is - -0x4000
Our Src is something like this:
0x1000 -- 0x2000
0x3000 -- 0x5000
0x6000 -- 0x7000

and dst is something like this:
0x6000 -- 0x8000
0x9000 -- 0xB000
So why can't it be split like:
0x1000--0x2000 => 0x6000 --0x7000
0x3000 -- 0x4000 => 0x7000 - 0x8000
0x4000 -- 0x5000 => 0x9000 - 0xA000
0x6000 -- 0x7000 => 0xA000 - 0xB000

That way existing mechanism would work well for you.
You need to split the chunks properly, which is what dma would do anyway


Yes, they can be split like this, but then splitting onus will go on dma
user driver, and so there would be replication of similar logic at
several places. Therefore, I was thinking to make device_prep_dma_sg as
generic by adding these flags.

I see one more issue in using device_prep_interleaved_dma.

Src and Dst address has been allocated in user space.
Now a kernel module extracts physical addresses from these pages and
prepares a sg list, which it submits to DMA.
These addresses would be virtually contiguous and incrementing. But, I am not sure if they are always physically incrementing too. If they are not guaranteed to be incrementing, then I see issue.

Otherwise also, a situation can arise when scattered memory is not always incrementing or decrementing in the same sg list.


Regards
Pratyush

--
~Vinod


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/