mbox series

[v6,00/31] libsas and pm8001 fixes

Message ID 20220220031810.738362-1-damien.lemoal@opensource.wdc.com
Headers show
Series libsas and pm8001 fixes | expand

Message

Damien Le Moal Feb. 20, 2022, 3:17 a.m. UTC
This first part of this series (patches 1 to 24) fixes handling of NCQ
NON DATA commands in libsas and many bugs in the pm8001 driver.

The fixes for the pm8001 driver include:
* Suppression of all sparse warnings, fixing along the way many le32
  handling bugs for big-endian architectures
* Fix handling of NCQ NON DATA commands
* Fix of tag values handling (0 *is* a valid tag value)
* Fix many tag iand memory leaks in error path
* Fix NCQ error recovery (abort all task execution) that was causing a
  crash

The second part of the series (patches 24 to 31) add a small cleanup of
libsas code and many simplifications and iomprovements of the pm8001
driver code.

With these fixes, libzbc test suite passes all test case. This test
suite was used with an SMR drive for testing because it generates many
NCQ NON DATA commands (for zone management commands) and also generates
many NCQ command errors to check ASC/ASCQ returned by the device. With
the test suite, the error recovery path was extensively exercised. The
same tests were also executed with a SAS SMR drives to exercise the
error path.

The patches are based on the latest 5.18/scsi-staging tree.

Changes from v5:
* Rebased and retested on top of the latest 5.18/scsi_staging tree

Changes from v4:
* Extracted code style changes in patch 22 into the new patch 24
* Squashed patch 18 into patch 22 (now patch 21)
* Added reviewed-by tags

Changes from v3:
* Rebase on latest 5.18/scsi-staging tree
* Dropped former patch 24 (kdoc comment fixed upstream already)
* Merged former patch 27 and 30
* Fixed patch 26 commit message
* Added patches 30 and 31
* Added reviewed-by tags

Changes from v2:
* Reorganized the series: fixes first, cleanups second.
* Added more bug/leaks fix patches
* Addressed Gary's comment for the ccb alloc helper (patch 28)
* Rebased (and tested) all patches on 5.18/scsi-staging

Changes from v1:
* Added reviewed-by tags
* Addressed Christoph's comments on patch 4 and 8
* Added patches 21 and 22 to fix 2 additional problems found while
  preparing this v2 series
* Added patch 23 and 24 to cleanup the code further.

Damien Le Moal (31):
  scsi: libsas: Fix sas_ata_qc_issue() handling of NCQ NON DATA commands
  scsi: pm8001: Fix __iomem pointer use in pm8001_phy_control()
  scsi: pm8001: Fix pm8001_update_flash() local variable type
  scsi: pm8001: Fix command initialization in pm80XX_send_read_log()
  scsi: pm8001: Fix pm80xx_pci_mem_copy() interface
  scsi: pm8001: Fix command initialization in pm8001_chip_ssp_tm_req()
  scsi: pm8001: Fix payload initialization in pm80xx_set_thermal_config()
  scsi: pm8001: Fix le32 values handling in pm80xx_set_sas_protocol_timer_config()
  scsi: pm8001: Fix payload initialization in pm80xx_encrypt_update()
  scsi: pm8001: Fix le32 values handling in pm80xx_chip_ssp_io_req()
  scsi: pm8001: Fix le32 values handling in pm80xx_chip_sata_req()
  scsi: pm8001: Fix use of struct set_phy_profile_req fields
  scsi: pm8001: Remove local variable in pm8001_pci_resume()
  scsi: pm8001: Fix NCQ NON DATA command task initialization
  scsi: pm8001: Fix NCQ NON DATA command completion handling
  scsi: pm8001: Fix abort all task initialization
  scsi: pm8001: Fix pm8001_tag_alloc() failures handling
  scsi: pm8001: Fix pm8001_mpi_task_abort_resp()
  scsi: pm8001: Fix tag values handling
  scsi: pm8001: Fix task leak in pm8001_send_abort_all()
  scsi: pm8001: Fix tag leaks on error
  scsi: pm8001: fix memory leak in pm8001_chip_fw_flash_update_req()
  scsi: libsas: Simplify sas_ata_qc_issue() detection of NCQ commands
  scsi: pm8001: Cleanup pm8001_exec_internal_task_abort()
  scsi: pm8001: Simplify pm8001_get_ncq_tag()
  scsi: pm8001: Introduce ccb alloc/free helpers
  scsi: pm8001: Simplify pm8001_mpi_build_cmd() interface
  scsi: pm8001: Simplify pm8001_task_exec()
  scsi: pm8001: Simplify pm8001_ccb_task_free()
  scsi: pm8001: improve pm80XX_send_abort_all()
  scsi: pm8001: Fix pm8001_info() message format

 drivers/scsi/libsas/sas_ata.c     |  11 +-
 drivers/scsi/pm8001/pm8001_ctl.c  |   5 +-
 drivers/scsi/pm8001/pm8001_hwi.c  | 458 ++++++++++++-----------------
 drivers/scsi/pm8001/pm8001_init.c |  11 +-
 drivers/scsi/pm8001/pm8001_sas.c  | 297 +++++++++----------
 drivers/scsi/pm8001/pm8001_sas.h  |  66 ++++-
 drivers/scsi/pm8001/pm80xx_hwi.c  | 467 ++++++++++++++----------------
 drivers/scsi/pm8001/pm80xx_hwi.h  |   2 +-
 8 files changed, 609 insertions(+), 708 deletions(-)

Comments

John Garry Feb. 20, 2022, 9:49 a.m. UTC | #1
On 20/02/2022 03:18, Damien Le Moal wrote:
> To detect if a command is NCQ, there is no need to test all possible NCQ
> command codes. Instead, use ata_is_ncq() to test the command protocol.
> 
> Signed-off-by: Damien Le Moal<damien.lemoal@opensource.wdc.com>

Reviewed-by: John Garry <john.garry@huawei.com>
Martin K. Petersen Feb. 23, 2022, 2:33 a.m. UTC | #2
Damien,

> This first part of this series (patches 1 to 24) fixes handling of NCQ
> NON DATA commands in libsas and many bugs in the pm8001 driver.
>
> The fixes for the pm8001 driver include:
> * Suppression of all sparse warnings, fixing along the way many le32
>   handling bugs for big-endian architectures
> * Fix handling of NCQ NON DATA commands
> * Fix of tag values handling (0 *is* a valid tag value)
> * Fix many tag iand memory leaks in error path
> * Fix NCQ error recovery (abort all task execution) that was causing a
>   crash
>
> The second part of the series (patches 24 to 31) add a small cleanup of
> libsas code and many simplifications and iomprovements of the pm8001
> driver code.

Applied to 5.18/scsi-staging, thanks!
Martin K. Petersen Feb. 28, 2022, 3:43 a.m. UTC | #3
On Sun, 20 Feb 2022 12:17:39 +0900, Damien Le Moal wrote:

> This first part of this series (patches 1 to 24) fixes handling of NCQ
> NON DATA commands in libsas and many bugs in the pm8001 driver.
> 
> The fixes for the pm8001 driver include:
> * Suppression of all sparse warnings, fixing along the way many le32
>   handling bugs for big-endian architectures
> * Fix handling of NCQ NON DATA commands
> * Fix of tag values handling (0 *is* a valid tag value)
> * Fix many tag iand memory leaks in error path
> * Fix NCQ error recovery (abort all task execution) that was causing a
>   crash
> 
> [...]

Applied to 5.18/scsi-queue, thanks!

[01/31] scsi: libsas: Fix sas_ata_qc_issue() handling of NCQ NON DATA commands
        https://git.kernel.org/mkp/scsi/c/8454563e4c2a
[02/31] scsi: pm8001: Fix __iomem pointer use in pm8001_phy_control()
        https://git.kernel.org/mkp/scsi/c/d2ed913b9a42
[03/31] scsi: pm8001: Fix pm8001_update_flash() local variable type
        https://git.kernel.org/mkp/scsi/c/c58e935e809a
[04/31] scsi: pm8001: Fix command initialization in pm80XX_send_read_log()
        https://git.kernel.org/mkp/scsi/c/1a37b6738b58
[05/31] scsi: pm8001: Fix pm80xx_pci_mem_copy() interface
        https://git.kernel.org/mkp/scsi/c/3762d8f6edcd
[06/31] scsi: pm8001: Fix command initialization in pm8001_chip_ssp_tm_req()
        https://git.kernel.org/mkp/scsi/c/cd2268a18011
[07/31] scsi: pm8001: Fix payload initialization in pm80xx_set_thermal_config()
        https://git.kernel.org/mkp/scsi/c/bb225b12dbcc
[08/31] scsi: pm8001: Fix le32 values handling in pm80xx_set_sas_protocol_timer_config()
        https://git.kernel.org/mkp/scsi/c/ca374f5d92b8
[09/31] scsi: pm8001: Fix payload initialization in pm80xx_encrypt_update()
        https://git.kernel.org/mkp/scsi/c/f8b12dfb476d
[10/31] scsi: pm8001: Fix le32 values handling in pm80xx_chip_ssp_io_req()
        https://git.kernel.org/mkp/scsi/c/970404cc5744
[11/31] scsi: pm8001: Fix le32 values handling in pm80xx_chip_sata_req()
        https://git.kernel.org/mkp/scsi/c/fd6d0e376211
[12/31] scsi: pm8001: Fix use of struct set_phy_profile_req fields
        https://git.kernel.org/mkp/scsi/c/e5039a92f150
[13/31] scsi: pm8001: Remove local variable in pm8001_pci_resume()
        https://git.kernel.org/mkp/scsi/c/23c486d19a6c
[14/31] scsi: pm8001: Fix NCQ NON DATA command task initialization
        https://git.kernel.org/mkp/scsi/c/aa028141ab0b
[15/31] scsi: pm8001: Fix NCQ NON DATA command completion handling
        https://git.kernel.org/mkp/scsi/c/1d6736c3e162
[16/31] scsi: pm8001: Fix abort all task initialization
        https://git.kernel.org/mkp/scsi/c/7f12845c8389
[17/31] scsi: pm8001: Fix pm8001_tag_alloc() failures handling
        https://git.kernel.org/mkp/scsi/c/f17c599a44fc
[18/31] scsi: pm8001: Fix pm8001_mpi_task_abort_resp()
        https://git.kernel.org/mkp/scsi/c/7e6b7e740add
[19/31] scsi: pm8001: Fix tag values handling
        https://git.kernel.org/mkp/scsi/c/7fb23a785ba3
[20/31] scsi: pm8001: Fix task leak in pm8001_send_abort_all()
        https://git.kernel.org/mkp/scsi/c/f90a74892f3a
[21/31] scsi: pm8001: Fix tag leaks on error
        https://git.kernel.org/mkp/scsi/c/4c8f04b1905c
[22/31] scsi: pm8001: fix memory leak in pm8001_chip_fw_flash_update_req()
        https://git.kernel.org/mkp/scsi/c/f792a3629f4c
[23/31] scsi: libsas: Simplify sas_ata_qc_issue() detection of NCQ commands
        https://git.kernel.org/mkp/scsi/c/a1e7c7991923
[24/31] scsi: pm8001: Cleanup pm8001_exec_internal_task_abort()
        https://git.kernel.org/mkp/scsi/c/0c4ad6c3d3b8
[25/31] scsi: pm8001: Simplify pm8001_get_ncq_tag()
        https://git.kernel.org/mkp/scsi/c/bf67e693fc40
[26/31] scsi: pm8001: Introduce ccb alloc/free helpers
        https://git.kernel.org/mkp/scsi/c/99df0edb5a98
[27/31] scsi: pm8001: Simplify pm8001_mpi_build_cmd() interface
        https://git.kernel.org/mkp/scsi/c/f91767a35f09
[28/31] scsi: pm8001: Simplify pm8001_task_exec()
        https://git.kernel.org/mkp/scsi/c/e29c47fe8946
[29/31] scsi: pm8001: Simplify pm8001_ccb_task_free()
        https://git.kernel.org/mkp/scsi/c/304fe11bdc25
[30/31] scsi: pm8001: improve pm80XX_send_abort_all()
        https://git.kernel.org/mkp/scsi/c/ca44f98d6194
[31/31] scsi: pm8001: Fix pm8001_info() message format
        https://git.kernel.org/mkp/scsi/c/b709a4caa9d0