• Kevin Hao's avatar
    mmc: cavium: Set the correct dma max segment size for mmc_host · fa25eba6
    Kevin Hao authored
    We have set the mmc_host.max_seg_size to 8M, but the dma max segment
    size of PCI device is set to 64K by default in function pci_device_add().
    The mmc_host.max_seg_size is used to set the max segment size of
    the blk queue. Then this mismatch will trigger a calltrace like below
    when a bigger than 64K segment request arrives at mmc dev. So we should
    consider the limitation of the cvm_mmc_host when setting the
    mmc_host.max_seg_size.
      DMA-API: thunderx_mmc 0000:01:01.4: mapping sg segment longer than device claims to support [len=131072] [max=65536]
      WARNING: CPU: 6 PID: 238 at kernel/dma/debug.c:1221 debug_dma_map_sg+0x2b8/0x350
      Modules linked in:
      CPU: 6 PID: 238 Comm: kworker/6:1H Not tainted 5.3.0-rc1-next-20190724-yocto-standard+ #62
      Hardware name: Marvell OcteonTX CN96XX board (DT)
      Workqueue: kblockd blk_mq_run_work_fn
      pstate: 80c00009 (Nzcv daif +PAN +UAO)
      pc : debug_dma_map_sg+0x2b8/0x350
      lr : debug_dma_map_sg+0x2b8/0x350
      sp : ffff00001770f9e0
      x29: ffff00001770f9e0 x28: ffffffff00000000
      x27: 00000000ffffffff x26: ffff800bc2c73180
      x25: ffff000010e83700 x24: 0000000000000002
      x23: 0000000000000001 x22: 0000000000000001
      x21: 0000000000000000 x20: ffff800bc48ba0b0
      x19: ffff800bc97e8c00 x18: ffffffffffffffff
      x17: 0000000000000000 x16: 0000000000000000
      x15: ffff000010e835c8 x14: 6874207265676e6f
      x13: 6c20746e656d6765 x12: 7320677320676e69
      x11: 7070616d203a342e x10: 31303a31303a3030
      x9 : 303020636d6d5f78 x8 : 35363d78616d5b20
      x7 : 00000000000002fd x6 : ffff000010fd57dc
      x5 : 0000000000000000 x4 : ffff0000106c61f0
      x3 : 00000000ffffffff x2 : 0000800bee060000
      x1 : 7010678df3041a00 x0 : 0000000000000000
      Call trace:
       debug_dma_map_sg+0x2b8/0x350
       cvm_mmc_request+0x3c4/0x988
       __mmc_start_request+0x9c/0x1f8
       mmc_start_request+0x7c/0xb0
       mmc_blk_mq_issue_rq+0x5c4/0x7b8
       mmc_mq_queue_rq+0x11c/0x278
       blk_mq_dispatch_rq_list+0xb0/0x568
       blk_mq_do_dispatch_sched+0x6c/0x108
       blk_mq_sched_dispatch_requests+0x110/0x1b8
       __blk_mq_run_hw_queue+0xb0/0x118
       blk_mq_run_work_fn+0x28/0x38
       process_one_work+0x210/0x490
       worker_thread+0x48/0x458
       kthread+0x130/0x138
       ret_from_fork+0x10/0x1c
    Signed-off-by: default avatarKevin Hao <haokexin@gmail.com>
    Fixes: ba3869ff ("mmc: cavium: Add core MMC driver for Cavium SOCs")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    fa25eba6
cavium.c 27.9 KB