question about block layer and dma alignment issue.
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
Am 04.10.2014 um 19:00 schrieb Jens Axboe:
Quoted 14 lines · Oleksij Rempel
Quoted 12 lines
Hello Jens,
i hope it is OK to ask you directly, i didn't found better way to do this.
I'm writing MMC driver based on reverse engineering for au6601 mmc controller. This driver uses MMC API, and last one trying to use BLK API as directly as possible. So far so gut, but i have a problem by using SG requests with DMA without conversation. This controller accepts only addresses with this mask 0xffff.f000 - also page aligned. Till now i tried differentQUEUE_FLAG_flags andblk_queuesettings, but i never had absolute aligned quarantine.
Please tell me if i do some thing wrong or go in the wrong direction.
Quoted 4 lines
Unless you can accept a 4kb hardware block size (and I'm assuming you cannot, since you need to support 512b file systems?), then you'd have to bounce the requests that don't align properly. You can fix some of them by setting
blk_queue_dma_alignment(q, 4095).
I needed to include MMC list with Ulf Hansson at the beginning, so here we are.
Hi Ulf,
here is the list of drivers which do care about dma alignment . Some of them use bounce_buffer, some will use PIO instead of DMA, for not aligned requests:
dw_mmc.c: dw_mci_pre_dma_transferwbsd.cusdhi6rol0.ctmio_mmc_dma.csunxi-mmc.csdhci.cpxamci.cmvsdio.cau6601.c(not upstream jet)
The problem of all this driver is that each of them use own solution. I think this code can be moved to some common place. For example, it can be done in drivers/mmc/card/queue.c and enabled by mmc_host_dma_alignment variable. Or provide a mmc_sg_align() function, which should be called explicatively by driver.
Which option is preferable?
Signature · 2 lines
Regards, Oleksij
Quoted 39 lines · Oleksij Rempel
Am 04.10.2014 um 19:00 schrieb Jens Axboe:
Quoted 14 lines · Oleksij Rempel
Quoted 12 lines
Hello Jens,
i hope it is OK to ask you directly, i didn't found better way to do this.
I'm writing MMC driver based on reverse engineering for au6601 mmc controller. This driver uses MMC API, and last one trying to use BLK API as directly as possible. So far so gut, but i have a problem by using SG requests with DMA without conversation. This controller accepts only addresses with this mask 0xffff.f000 - also page aligned. Till now i tried differentQUEUE_FLAG_flags andblk_queuesettings, but i never had absolute aligned quarantine.
Please tell me if i do some thing wrong or go in the wrong direction.Quoted 4 lines
Unless you can accept a 4kb hardware block size (and I'm assuming you cannot, since you need to support 512b file systems?), then you'd have to bounce the requests that don't align properly. You can fix some of them by setting
blk_queue_dma_alignment(q, 4095).I needed to include MMC list with Ulf Hansson at the beginning, so here we are.
Hi Ulf,
here is the list of drivers which do care about dma alignment . Some of them use
bounce_buffer, some will use PIO instead of DMA, for not aligned requests:
dw_mmc.c:dw_mci_pre_dma_transferwbsd.cusdhi6rol0.ctmio_mmc_dma.csunxi-mmc.csdhci.cpxamci.cmvsdio.cau6601.c(not upstream jet)
Quoted 7 lines
The problem of all this driver is that each of them use own solution. I think this code can be moved to some common place. For example, it can be done in
drivers/mmc/card/queue.cand enabled bymmc_host_dma_alignmentvariable. Or provide ammc_sg_align()function, which should be called explicatively by driver.Which option is preferable?
I would roll a block version that they all can use, you can look at block/bounce.c for inspiration. That file deals with bouncing higher pages to lower memory, so it's not exactly what you want. But the metod of allocating a new bio that meets criteria and copying data over, that is the same that you need.
Signature · 1 line
Jens Axboe
Am 07.10.2014 um 17:25 schrieb Jens Axboe:
Quoted 46 lines · Oleksij Rempel
Quoted 45 lines
Am 04.10.2014 um 19:00 schrieb Jens Axboe:
Quoted 14 lines · Oleksij Rempel
Quoted 12 lines
Hello Jens,
i hope it is OK to ask you directly, i didn't found better way to do this.
I'm writing MMC driver based on reverse engineering for au6601 mmc controller. This driver uses MMC API, and last one trying to use BLK API as directly as possible. So far so gut, but i have a problem by using SG requests with DMA without conversation. This controller accepts only addresses with this mask 0xffff.f000 - also page aligned. Till now i tried differentQUEUE_FLAG_flags andblk_queuesettings, but i never had absolute aligned quarantine.
Please tell me if i do some thing wrong or go in the wrong direction.Quoted 4 lines
Unless you can accept a 4kb hardware block size (and I'm assuming you cannot, since you need to support 512b file systems?), then you'd have to bounce the requests that don't align properly. You can fix some of them by setting
blk_queue_dma_alignment(q, 4095).I needed to include MMC list with Ulf Hansson at the beginning, so here we are.
Hi Ulf,
here is the list of drivers which do care about dma alignment . Some of them use
bounce_buffer, some will use PIO instead of DMA, for not aligned requests:
dw_mmc.c:dw_mci_pre_dma_transferwbsd.cusdhi6rol0.ctmio_mmc_dma.csunxi-mmc.csdhci.cpxamci.cmvsdio.cau6601.c(not upstream jet)The problem of all this driver is that each of them use own solution. I think this code can be moved to some common place. For example, it can be done in
drivers/mmc/card/queue.cand enabled bymmc_host_dma_alignmentvariable. Or provide ammc_sg_align()function, which should be called explicatively by driver.
Quoted 7 lines
Quoted 1 line
Which option is preferable?
I would roll a block version that they all can use, you can look at
block/bounce.cfor inspiration. That file deals with bouncing higher pages to lower memory, so it's not exactly what you want. But the metod of allocating a new bio that meets criteria and copying data over, that is the same that you need.
Ok,
i will need to setup testing board for this kind of work. It will take some time.
Signature · 2 lines
Regards, Oleksij
Quoted 51 lines · Oleksij Rempel
Am 07.10.2014 um 17:25 schrieb Jens Axboe:
Quoted 50 lines · Oleksij Rempel
Quoted 37 lines
Am 04.10.2014 um 19:00 schrieb Jens Axboe:
Quoted 13 lines · Oleksij Rempel
Quoted 12 lines
Hello Jens,
i hope it is OK to ask you directly, i didn't found better way to do this.
I'm writing MMC driver based on reverse engineering for au6601 mmc controller. This driver uses MMC API, and last one trying to use BLK API as directly as possible. So far so gut, but i have a problem by using SG requests with DMA without conversation. This controller accepts only addresses with this mask 0xffff.f000 - also page aligned. Till now i tried differentQUEUE_FLAG_flags andblk_queuesettings, but i never had absolute aligned quarantine.
Please tell me if i do some thing wrong or go in the wrong direction.Quoted 4 lines
Unless you can accept a 4kb hardware block size (and I'm assuming you cannot, since you need to support 512b file systems?), then you'd have to bounce the requests that don't align properly. You can fix some of them by setting
blk_queue_dma_alignment(q, 4095).I needed to include MMC list with Ulf Hansson at the beginning, so here we are.
Hi Ulf,
here is the list of drivers which do care about dma alignment . Some of them use
bounce_buffer, some will use PIO instead of DMA, for not aligned requests:
dw_mmc.c:dw_mci_pre_dma_transferwbsd.cusdhi6rol0.ctmio_mmc_dma.csunxi-mmc.csdhci.cpxamci.cmvsdio.cau6601.c(not upstream jet)Quoted 7 lines
The problem of all this driver is that each of them use own solution. I think this code can be moved to some common place. For example, it can be done in
drivers/mmc/card/queue.cand enabled bymmc_host_dma_alignmentvariable. Or provide ammc_sg_align()function, which should be called explicatively by driver.Which option is preferable?
I would roll a block version that they all can use, you can look at
block/bounce.cfor inspiration. That file deals with bouncing higher pages to lower memory, so it's not exactly what you want. But the metod of allocating a new bio that meets criteria and copying data over, that is the same that you need.
Not all cards are block devices e.g. SDIO wifi. And there is also mmc_test.
Quoted 5 lines
Ok,
i will need to setup testing board for this kind of work. It will take some time.