1. 03 Jul, 2020 18 commits
  2. 02 Jul, 2020 2 commits
  3. 01 Jul, 2020 9 commits
  4. 30 Jun, 2020 2 commits
  5. 27 Jun, 2020 5 commits
  6. 24 Jun, 2020 2 commits
  7. 20 Jun, 2020 2 commits
    • Bodo Stroesser's avatar
      scsi: target: tcmu: Fix crash in tcmu_flush_dcache_range on ARM · 3145550a
      Bodo Stroesser authored
      This patch fixes the following crash (see
      https://bugzilla.kernel.org/show_bug.cgi?id=208045)
      
       Process iscsi_trx (pid: 7496, stack limit = 0x0000000010dd111a)
       CPU: 0 PID: 7496 Comm: iscsi_trx Not tainted 4.19.118-0419118-generic
              #202004230533
       Hardware name: Greatwall QingTian DF720/F601, BIOS 601FBE20 Sep 26 2019
       pstate: 80400005 (Nzcv daif +PAN -UAO)
       pc : flush_dcache_page+0x18/0x40
       lr : is_ring_space_avail+0x68/0x2f8 [target_core_user]
       sp : ffff000015123a80
       x29: ffff000015123a80 x28: 0000000000000000
       x27: 0000000000001000 x26: ffff000023ea5000
       x25: ffffcfa25bbe08b8 x24: 0000000000000078
       x23: ffff7e0000000000 x22: ffff000023ea5001
       x21: ffffcfa24b79c000 x20: 0000000000000fff
       x19: ffff7e00008fa940 x18: 0000000000000000
       x17: 0000000000000000 x16: ffff2d047e709138
       x15: 0000000000000000 x14: 0000000000000000
       x13: 0000000000000000 x12: ffff2d047fbd0a40
       x11: 0000000000000000 x10: 0000000000000030
       x9 : 0000000000000000 x8 : ffffc9a254820a00
       x7 : 00000000000013b0 x6 : 000000000000003f
       x5 : 0000000000000040 x4 : ffffcfa25bbe08e8
       x3 : 0000000000001000 x2 : 0000000000000078
       x1 : ffffcfa25bbe08b8 x0 : ffff2d040bc88a18
       Call trace:
        flush_dcache_page+0x18/0x40
        is_ring_space_avail+0x68/0x2f8 [target_core_user]
        queue_cmd_ring+0x1f8/0x680 [target_core_user]
        tcmu_queue_cmd+0xe4/0x158 [target_core_user]
        __target_execute_cmd+0x30/0xf0 [target_core_mod]
        target_execute_cmd+0x294/0x390 [target_core_mod]
        transport_generic_new_cmd+0x1e8/0x358 [target_core_mod]
        transport_handle_cdb_direct+0x50/0xb0 [target_core_mod]
        iscsit_execute_cmd+0x2b4/0x350 [iscsi_target_mod]
        iscsit_sequence_cmd+0xd8/0x1d8 [iscsi_target_mod]
        iscsit_process_scsi_cmd+0xac/0xf8 [iscsi_target_mod]
        iscsit_get_rx_pdu+0x404/0xd00 [iscsi_target_mod]
        iscsi_target_rx_thread+0xb8/0x130 [iscsi_target_mod]
        kthread+0x130/0x138
        ret_from_fork+0x10/0x18
       Code: f9000bf3 aa0003f3 aa1e03e0 d503201f (f9400260)
       ---[ end trace 1e451c73f4266776 ]---
      
      The solution is based on patch:
      
        "scsi: target: tcmu: Optimize use of flush_dcache_page"
      
      which restricts the use of tcmu_flush_dcache_range() to addresses from
      vmalloc'ed areas only.
      
      This patch now replaces the virt_to_page() call in
      tcmu_flush_dcache_range() - which is wrong for vmalloced addrs - by
      vmalloc_to_page().
      
      The patch was tested on ARM with kernel 4.19.118 and 5.7.2
      
      Link: https://lore.kernel.org/r/20200618131632.32748-3-bstroesser@ts.fujitsu.comTested-by: default avatarJiangYu <lnsyyj@hotmail.com>
      Tested-by: default avatarDaniel Meyerholt <dxm523@gmail.com>
      Acked-by: default avatarMike Christie <michael.christie@oracle.com>
      Signed-off-by: default avatarBodo Stroesser <bstroesser@ts.fujitsu.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      3145550a
    • Bodo Stroesser's avatar
      scsi: target: tcmu: Optimize use of flush_dcache_page · 3c58f737
      Bodo Stroesser authored
      (scatter|gather)_data_area() need to flush dcache after writing data to or
      before reading data from a page in uio data area.  The two routines are
      able to handle data transfer to/from such a page in fragments and flush the
      cache after each fragment was copied by calling the wrapper
      tcmu_flush_dcache_range().
      
      That means:
      
      1) flush_dcache_page() can be called multiple times for the same page.
      
      2) Calling flush_dcache_page() indirectly using the wrapper does not make
         sense, because each call of the wrapper is for one single page only and
         the calling routine already has the correct page pointer.
      
      Change (scatter|gather)_data_area() such that, instead of calling
      tcmu_flush_dcache_range() before/after each memcpy, it now calls
      flush_dcache_page() before unmapping a page (when writing is complete for
      that page) or after mapping a page (when starting to read the page).
      
      After this change only calls to tcmu_flush_dcache_range() for addresses in
      vmalloc'ed command ring are left over.
      
      The patch was tested on ARM with kernel 4.19.118 and 5.7.2
      
      Link: https://lore.kernel.org/r/20200618131632.32748-2-bstroesser@ts.fujitsu.comTested-by: default avatarJiangYu <lnsyyj@hotmail.com>
      Tested-by: default avatarDaniel Meyerholt <dxm523@gmail.com>
      Acked-by: default avatarMike Christie <michael.christie@oracle.com>
      Signed-off-by: default avatarBodo Stroesser <bstroesser@ts.fujitsu.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      3c58f737