On Tue, Dec 03, 2019 at 11:29:15AM +0800, Jun Nie wrote: > Thanks for the reminder! So I need to parse the segment_boundary from > device tree and use below code to set it, right? > For the max_segments accounting error, I did not see it so far though I > believe it is true in theory. Maybe it is due to segment boundary value is > very large. > > +++ b/drivers/mmc/core/queue.c > @@ -374,6 +374,7 @@ static void mmc_setup_queue(struct mmc_queue *mq, > struct mmc_card *card) > WARN(!blk_queue_can_use_dma_map_merging(mq->queue, > mmc_dev(host)), > "merging was advertised but not possible"); > + blk_queue_segment_boundary(mq->queue, mmc->segment_boundary); > blk_queue_max_segments(mq->queue, mmc_get_max_segments(host)); Yes, I think should do it. Maybe modulo a check if the low-level driver actually sets a segment boundary.