Christoph Hellwig
a25a9c85d1
scsi: libata: Switch to using ->device_configure
...
Switch to the ->device_configure method instead of ->slave_configure and
update the block limits on the passed in queue_limits instead of using the
per-limit accessors.
Signed-off-by: Christoph Hellwig <hch@lst.de >
Link: https://lore.kernel.org/r/20240409143748.980206-21-hch@lst.de
Reviewed-by: John Garry <john.g.garry@oracle.com >
Reviewed-by: Hannes Reinecke <hare@suse.de >
Acked-by: Damien Le Moal <dlemoal@kernel.org >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2024-04-11 21:37:50 -04:00
John Garry
bcd39f639e
scsi: libsas: Add LIBSAS_SHT_BASE
...
There is much duplication in the scsi_host_template structure for the
drivers which use libsas.
Similar to how a standard template is used in libata with __ATA_BASE_SHT,
create a standard template in LIBSAS_SHT_BASE.
Don't set a default for max_sectors at SCSI_DEFAULT_MAX_SECTORS, as
scsi_host_alloc() will default to this value automatically.
Even though some drivers don't set proc_name, it won't make much difference
to set as DRV_NAME.
Also add LIBSAS_SHT_BASE_NO_SLAVE_INIT for the hisi_sas drivers which have
custom .slave_alloc and .slave_configure methods.
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Signed-off-by: John Garry <john.g.garry@oracle.com >
Link: https://lore.kernel.org/r/20240308114339.1340549-2-john.g.garry@oracle.com
Reviewed-by: Igor Pylypiv <ipylypiv@google.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2024-03-25 16:08:30 -04:00
Damien Le Moal
1345a7d909
scsi: libsas: Declare sas_discover_end_dev() static
...
sas_discover_end_dev() is defined and used only in sas_discover.c. Define
this function as static.
Signed-off-by: Damien Le Moal <dlemoal@kernel.org >
Link: https://lore.kernel.org/r/20230912230551.454357-4-dlemoal@kernel.org
Reviewed-by: John Garry <john.g.garry@oracle.com >
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-09-13 21:06:44 -04:00
Damien Le Moal
9b52c1c6ca
scsi: libsas: Declare sas_set_phy_speed() static
...
sas_set_phy_speed() is used only within sas_init.c. Declare this function
as static.
Signed-off-by: Damien Le Moal <dlemoal@kernel.org >
Link: https://lore.kernel.org/r/20230912230551.454357-3-dlemoal@kernel.org
Reviewed-by: John Garry <john.g.garry@oracle.com >
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-09-13 21:06:44 -04:00
Damien Le Moal
d10b11dcb0
scsi: libsas: Move local functions declarations to sas_internal.h
...
Move the declarations of functions used only within libsas from
include/scsi/libsas.h to drivers/scsi/libsas/sas_internal.h
Signed-off-by: Damien Le Moal <dlemoal@kernel.org >
Link: https://lore.kernel.org/r/20230912230551.454357-2-dlemoal@kernel.org
Reviewed-by: John Garry <john.g.garry@oracle.com >
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-09-13 21:06:44 -04:00
Martin K. Petersen
1451455e6f
Merge patch series "libsas: Some tidy-up"
...
John Garry <john.g.garry@oracle.com > says:
This series tidies-up libsas a bit, including:
- delete structure(s) with only one member
- delete structure members which are only ever set
- delete structure members which are never set and code which relies on
that member being set
This conflicts with the following series:
https://lore.kernel.org/linux-scsi/20230809132249.37948-1-yuehaibing@huawei.com/
Any conflict should be trivial to resolve.
Based on mkp-scsi staging at a18e81d17a ("scsi: ufs: ufs-pci: Add support for QEMU")
Link: https://lore.kernel.org/r/20230815115156.343535-1-john.g.garry@oracle.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-24 21:06:16 -04:00
Martin K. Petersen
ef5d681b4d
Merge patch series "Returning FIS on success for CDL"
...
Igor Pylypiv <ipylypiv@google.com > says:
This patch series plumbs libata's request for a result taskfile
(ATA_QCFLAG_RESULT_TF) through libsas to pm80xx LLDD. Other libsas LLDDs
can start using the newly added return_fis_on_success as well, if needed.
For Command Duration Limits policy 0xD (command completes without an
error) libata needs FIS in order to detect the ATA_SENSE bit and read
the Sense Data for Successful NCQ Commands log (0Fh). pm80xx HBAs do
not return FIS on success by default, hence, the driver is updated to
set the RETFIS bit (Return FIS on good completion) when requested by
libsas.
Link: https://lore.kernel.org/r/20230819213040.1101044-1-ipylypiv@google.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-24 21:05:19 -04:00
John Garry
86344494e3
scsi: libsas: Delete sas_ata_task.retry_count
...
Since libsas was introduced in commit 2908d778ab ("[SCSI] aic94xx: new
driver"), sas_ata_task.retry_count is never set, so delete it and the
reference in asd_build_ata_ascb().
Signed-off-by: John Garry <john.g.garry@oracle.com >
Link: https://lore.kernel.org/r/20230815115156.343535-11-john.g.garry@oracle.com
Reviewed-by: Damien Le Moal <dlemoal@kernel.org >
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-21 17:50:59 -04:00
John Garry
44862dc2d2
scsi: libsas: Delete sas_ata_task.stp_affil_pol
...
Since libsas was introduced in commit 2908d778ab ("[SCSI] aic94xx: new
driver"), sas_ata_task.stp_affil_pol is never set, so delete it and the
reference in asd_build_ata_ascb().
Signed-off-by: John Garry <john.g.garry@oracle.com >
Link: https://lore.kernel.org/r/20230815115156.343535-10-john.g.garry@oracle.com
Reviewed-by: Damien Le Moal <dlemoal@kernel.org >
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-21 17:50:59 -04:00
John Garry
7b964c4022
scsi: libsas: Delete sas_ata_task.set_affil_pol
...
Since libsas was introduced in commit 2908d778ab ("[SCSI] aic94xx: new
driver"), sas_ata_task.set_affil_pol is never set, so delete it and the
reference in asd_build_ata_ascb().
Signed-off-by: John Garry <john.g.garry@oracle.com >
Link: https://lore.kernel.org/r/20230815115156.343535-9-john.g.garry@oracle.com
Reviewed-by: Damien Le Moal <dlemoal@kernel.org >
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-21 17:50:58 -04:00
John Garry
4dc051eb0c
scsi: libsas: Delete sas_ssp_task.task_prio
...
Since libsas was introduced in commit 2908d778ab ("[SCSI] aic94xx: new
driver"), sas_ssp_task.task_prio is never set, so delete it and any
references which depend on it being set (all of them).
Signed-off-by: John Garry <john.g.garry@oracle.com >
Link: https://lore.kernel.org/r/20230815115156.343535-8-john.g.garry@oracle.com
Reviewed-by: Damien Le Moal <dlemoal@kernel.org >
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-21 17:50:58 -04:00
John Garry
ebf26e93cf
scsi: libsas: Delete sas_ssp_task.enable_first_burst
...
Since libsas was introduced in commit 2908d778ab ("[SCSI] aic94xx: new
driver"), sas_ssp_task.enable_first_burst is never set, so delete it and
any references.
Signed-off-by: John Garry <john.g.garry@oracle.com >
Link: https://lore.kernel.org/r/20230815115156.343535-7-john.g.garry@oracle.com
Reviewed-by: Damien Le Moal <dlemoal@kernel.org >
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-21 17:50:58 -04:00
John Garry
31d9061b47
scsi: libsas: Delete sas_ssp_task.retry_count
...
Since libsas was introduced in commit 2908d778ab ("[SCSI] aic94xx: new
driver"), sas_ssp_task.retry_count is only ever set, so delete it.
The aic94xx driver also had its own retry_count definition in struct scb
sub-structs, which may have caused a mix-up.
Signed-off-by: John Garry <john.g.garry@oracle.com >
Link: https://lore.kernel.org/r/20230815115156.343535-6-john.g.garry@oracle.com
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Reviewed-by: Damien Le Moal <dlemoal@kernel.org >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-21 17:50:58 -04:00
John Garry
1136a0225d
scsi: libsas: Delete struct scsi_core
...
Since commit 79855d1785 ("libsas: remove task_collector mode"), struct
scsi_core only contains a reference to the shost. struct scsi_core is only
used in sas_ha_struct.core, so delete scsi_core and replace with a
reference to the shost there.
Signed-off-by: John Garry <john.g.garry@oracle.com >
Link: https://lore.kernel.org/r/20230815115156.343535-5-john.g.garry@oracle.com
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Reviewed-by: Damien Le Moal <dlemoal@kernel.org >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-21 17:50:58 -04:00
John Garry
2f4e20cd6e
scsi: libsas: Delete enum sas_phy_type
...
enum sas_phy_type is used for asd_sas_phy.type, which is only ever set, so
delete this member and the enum.
Signed-off-by: John Garry <john.g.garry@oracle.com >
Link: https://lore.kernel.org/r/20230815115156.343535-4-john.g.garry@oracle.com
Reviewed-by: Damien Le Moal <dlemoal@kernel.org >
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-21 17:50:57 -04:00
John Garry
c46a917093
scsi: libsas: Delete enum sas_class
...
enum sas_class prob would have been useful if function sas_show_class() was
ever implemented, which it wasn't.
enum sas_class is used as asd_sas_port.class and asd_sas_phy.class, which
are only ever set, so delete these members and the enum.
Signed-off-by: John Garry <john.g.garry@oracle.com >
Link: https://lore.kernel.org/r/20230815115156.343535-3-john.g.garry@oracle.com
Reviewed-by: Damien Le Moal <dlemoal@kernel.org >
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-21 17:50:57 -04:00
John Garry
b1bc497317
scsi: libsas: Delete sas_ha_struct.lldd_module
...
Since libsas was introduced in commit 2908d778ab ("[SCSI] aic94xx: new
driver"), sas_ha_struct.lldd_module has only ever been set, so remove it.
Struct scsi_host_template already has a reference to the LLD driver
module as to stop the driver being removed unexpectedly.
Signed-off-by: John Garry <john.g.garry@oracle.com >
Link: https://lore.kernel.org/r/20230815115156.343535-2-john.g.garry@oracle.com
Reviewed-by: Damien Le Moal <dlemoal@kernel.org >
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-21 17:50:57 -04:00
Igor Pylypiv
72875018f6
scsi: libsas: Add return_fis_on_success to sas_ata_task
...
Set return_fis_on_success when libata requests result taskfile.
For Command Duration Limits policy 0xD (command completes without
an error) libata needs FIS in order to detect the ATA_SENSE bit and
read the Sense Data for Successful NCQ Commands log (0Fh).
Signed-off-by: Igor Pylypiv <ipylypiv@google.com >
Link: https://lore.kernel.org/r/20230819213040.1101044-2-ipylypiv@google.com
Reviewed-by: Niklas Cassel <niklas.cassel@wdc.com >
Reviewed-by: Damien Le Moal <dlemoal@kernel.org >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-21 17:11:41 -04:00
Yue Haibing
2fcd1e2b64
scsi: libsas: Remove unused declarations
...
Commit 042ebd293b ("scsi: libsas: kill useless ha_event and do some
cleanup") removed sas_hae_reset() but not its declaration. Commit
2908d778ab ("[SCSI] aic94xx: new driver") declared but never implemented
other functions.
Signed-off-by: Yue Haibing <yuehaibing@huawei.com >
Link: https://lore.kernel.org/r/20230809132249.37948-1-yuehaibing@huawei.com
Reviewed-by: John Garry <john.g.garry@oracle.com >
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2023-08-21 16:22:09 -04:00
Jason Yan
ffebb38efe
scsi: libsas: Change the coding style of sas_discover_sata()
...
The coding style where calling this interface is inconsistent with other
interfaces for SATA devices. The standard style for other SATA interfaces
is like:
#ifdefine CONFIG_SCSI_SAS_ATA
void sas_ata_task_abort(struct sas_task *task);
#else
static inline void sas_ata_task_abort(struct sas_task *task)
{
}
#endif
And the callers does not have to do things like "#ifdefine CONFIG_SCSI_SAS_ATA"
and may call the interface directly. So follow the standard style here.
Cc: John Garry <john.g.garry@oracle.com >
Signed-off-by: Jason Yan <yanaijie@huawei.com >
Reviewed-by: Jack Wang <jinpu.wang@ionos.com >
Reviewed-by: John Garry <john.g.garry@oracle.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-12-30 16:59:10 +00:00
John Garry
a9ee3f8406
scsi: libsas: Add sas_task_find_rq()
...
blk-mq already provides a unique tag per request. Some libsas LLDDs - like
hisi_sas - already use this tag as the unique per-I/O HW tag.
Add a common function to provide the request associated with a sas_task for
all libsas LLDDs.
Signed-off-by: John Garry <john.garry@huawei.com >
Link: https://lore.kernel.org/r/1666091763-11023-2-git-send-email-john.garry@huawei.com
Reviewed-by: Jack Wang <jinpu.wang@ionos.com >
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Reviewed-by: Hannes Reinecke <hare@suse.de >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-10-22 03:02:51 +00:00
Jason Yan
2d08f329a4
scsi: libsas: Introduce sas_find_attached_phy_id() helper
...
LLDDs are all implementing their own attached phy ID finding code. Factor
it out to libsas.
Signed-off-by: Jason Yan <yanaijie@huawei.com >
Link: https://lore.kernel.org/r/20220928070130.3657183-3-yanaijie@huawei.com
Reviewed-by: Jack Wang <jinpu.wang@ionos.com >
Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Reviewed-by: John Garry <john.garry@huawei.com >
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-10-18 03:28:09 +00:00
John Garry
8e8d43642f
scsi: libsas: Make sas_{alloc, alloc_slow, free}_task() private
...
We have no users outside libsas any longer, so make sas_alloc_task(),
sas_alloc_slow_task(), and sas_free_task() private.
Signed-off-by: John Garry <john.garry@huawei.com >
Link: https://lore.kernel.org/r/1665998435-199946-8-git-send-email-john.garry@huawei.com
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Tested-by: Niklas Cassel <niklas.cassel@wdc.com > # pm80xx
Reviewed-by: Jason Yan <yanaijie@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-10-18 02:37:45 +00:00
Damien Le Moal
3dafe0648d
scsi: libsas: Introduce struct smp_rps_resp
...
Similarly to sas report general and discovery responses, define the
structure struct smp_rps_resp to handle SATA PHY report responses using a
structure with a size that is exactly equal to the sas defined response
size.
With this change, struct smp_resp becomes unused and is removed.
Link: https://lore.kernel.org/r/20220609022456.409087-4-damien.lemoal@opensource.wdc.com
Reviewed-by: John Garry <john.garry@huawei.com >
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-06-10 13:08:06 -04:00
John Garry
095478a6e5
scsi: hisi_sas: Use libsas internal abort support
...
Use the common libsas internal abort functionality.
In addition, this driver has special handling for internal abort timeouts -
specifically whether to reset the controller in that instance, so extend
the API for that.
Timeout is now increased to 20 * Hz from 6 * Hz.
We also retry for failure now, but this should not make a difference.
Link: https://lore.kernel.org/r/1647001432-239276-5-git-send-email-john.garry@huawei.com
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Acked-by: Jack Wang <jinpu.wang@ionos.com >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-03-14 23:33:24 -04:00
John Garry
6a91c3e315
scsi: libsas: Add sas_execute_internal_abort_dev()
...
Add support for a "device" variant of internal abort, which will abort all
pending I/Os for a specific device.
Link: https://lore.kernel.org/r/1647001432-239276-3-git-send-email-john.garry@huawei.com
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Acked-by: Jack Wang <jinpu.wang@ionos.com >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-03-14 23:33:23 -04:00
John Garry
5c9bf3635b
scsi: libsas: Add sas_execute_internal_abort_single()
...
The internal abort feature is common to hisi_sas and pm8001 HBAs, and the
driver support is similar also, so add a common handler.
Two modes of operation will be supported:
- single: Abort a single tagged command
- device: Abort all commands associated with a specific domain device
A new protocol is added, SAS_PROTOCOL_INTERNAL_ABORT, so the common queue
command API may be re-used.
Only add "single" support as a first step.
Link: https://lore.kernel.org/r/1647001432-239276-2-git-send-email-john.garry@huawei.com
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Acked-by: Jack Wang <jinpu.wang@ionos.com >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-03-14 23:33:23 -04:00
John Garry
f1834fd163
scsi: libsas: Make sas_notify_{phy,port}_event() return void
...
Nobody checks the return codes, so make them return void. Indeed, if the
LLDD cannot send an event, nothing much can be done in the LLDD about it.
Also remove prototype for sas_notify_phy_event() in sas_internal.h, which
should not be there.
Link: https://lore.kernel.org/r/1645786656-221630-2-git-send-email-john.garry@huawei.com
Reviewed-by: Xiang Chen <chenxiang66@hisilicon.com >
Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-27 21:48:29 -05:00
John Garry
3f2e252ef7
scsi: libsas: Add sas_execute_ata_cmd()
...
Add a function to execute an ATA command using the TMF code, and use in the
hisi_sas driver. That driver needs to be able to issue the command on a
specific phy, so add an interface for that.
With that, hisi_sas_exec_internal_tmf_task() may be deleted.
Link: https://lore.kernel.org/r/1645534259-27068-19-git-send-email-john.garry@huawei.com
Tested-by: Yihang Li <liyihang6@hisilicon.com >
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-22 21:11:02 -05:00
John Garry
4fea759edf
scsi: libsas: Add sas_abort_task()
...
Add a generic implementation of abort task TMF handler, and use in LLDDs.
With that, some LLDDs custom TMF functions can now be deleted.
Link: https://lore.kernel.org/r/1645112566-115804-18-git-send-email-john.garry@huawei.com
Tested-by: Yihang Li <liyihang6@hisilicon.com >
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-19 15:59:36 -05:00
John Garry
72f8810e1f
scsi: libsas: Add sas_query_task()
...
Add a generic implementation of query task TMF handler, and use in LLDDs.
Link: https://lore.kernel.org/r/1645112566-115804-17-git-send-email-john.garry@huawei.com
Tested-by: Yihang Li <liyihang6@hisilicon.com >
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-19 15:59:36 -05:00
John Garry
29d7769055
scsi: libsas: Add sas_lu_reset()
...
Add a generic implementation of LU reset TMF handler, and use in LLDDs.
Link: https://lore.kernel.org/r/1645112566-115804-16-git-send-email-john.garry@huawei.com
Tested-by: Yihang Li <liyihang6@hisilicon.com >
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-19 15:59:36 -05:00
John Garry
e858545295
scsi: libsas: Add sas_clear_task_set()
...
Add a generic implementation of clear task set TMF handler, and use in
LLDDs.
Link: https://lore.kernel.org/r/1645112566-115804-15-git-send-email-john.garry@huawei.com
Tested-by: Yihang Li <liyihang6@hisilicon.com >
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-19 15:59:36 -05:00
John Garry
69b80a0ed0
scsi: libsas: Add sas_abort_task_set()
...
Add a generic implementation of abort task set TMF handler, and use in
LLDDs.
Link: https://lore.kernel.org/r/1645112566-115804-14-git-send-email-john.garry@huawei.com
Tested-by: Yihang Li <liyihang6@hisilicon.com >
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-19 15:59:36 -05:00
John Garry
693e66a0a6
scsi: libsas: Add TMF handler aborted callback
...
The hisi_sas and pm8001 TMF handlers have some special processing for when
the TMF is aborted, so add a callback and fill it in for those drivers.
Link: https://lore.kernel.org/r/1645112566-115804-13-git-send-email-john.garry@huawei.com
Tested-by: Yihang Li <liyihang6@hisilicon.com >
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-19 15:59:35 -05:00
John Garry
2037a34031
scsi: libsas: Add TMF handler exec complete callback
...
The pm8001 TMF handler has some special processing when the TMF completes,
so add a callback and fill it in for the pm8001 driver.
Link: https://lore.kernel.org/r/1645112566-115804-12-git-send-email-john.garry@huawei.com
Tested-by: Yihang Li <liyihang6@hisilicon.com >
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-19 15:59:35 -05:00
John Garry
96e54376a8
scsi: libsas: Add sas_task.tmf
...
Add a pointer to a sas_tmf_task to the sas_task struct, as this will be
used when the common LLDD TMF code is factored out.
Also set it for the LLDDs to store per-sas_task TMF info.
Link: https://lore.kernel.org/r/1645112566-115804-9-git-send-email-john.garry@huawei.com
Tested-by: Yihang Li <liyihang6@hisilicon.com >
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-19 15:59:35 -05:00
John Garry
bbfe82cdba
scsi: libsas: Add struct sas_tmf_task
...
Some of the LLDDs which use libsas have their own definition of a struct
to hold TMF info, so add a common struct for libsas.
Also add an interim force phy id field for hisi_sas driver, which will be
removed once the STP "TMF" code is factored out.
Even though some LLDDs (pm8001) use a u32 for the tag, u16 will be adequate,
as that named driver only uses tags in range [0, 1024).
Link: https://lore.kernel.org/r/1645112566-115804-8-git-send-email-john.garry@huawei.com
Tested-by: Yihang Li <liyihang6@hisilicon.com >
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-19 15:59:35 -05:00
John Garry
2dd6801a67
scsi: libsas: Delete SAS_SG_ERR
...
No LLDD sets exec status as SAS_SG_ERR, so remove support.
Link: https://lore.kernel.org/r/1645112566-115804-5-git-send-email-john.garry@huawei.com
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-19 15:59:34 -05:00
John Garry
25882c82f8
scsi: libsas: Delete lldd_clear_aca callback
...
This callback is never called, so remove support.
Link: https://lore.kernel.org/r/1645112566-115804-4-git-send-email-john.garry@huawei.com
Tested-by: Yihang Li <liyihang6@hisilicon.com >
Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com >
Reviewed-by: Jack Wang <jinpu.wang@ionos.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Xiang Chen <chenxiang66@hisilicon.com >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-19 15:59:34 -05:00
Xiang Chen
26d4a969dd
scsi: libsas: Use void for sas_discover_event() return code
...
The callers of function sas_discover_event() do not check its return value.
The function also only ever returns 0, so use void instead.
Link: https://lore.kernel.org/r/1644561778-183074-2-git-send-email-chenxiang66@hisilicon.com
Reviewed-by: John Garry <john.garry@huawei.com >
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-11 17:13:29 -05:00
John Garry
26fc0ea74f
scsi: libsas: Drop SAS_TASK_AT_INITIATOR
...
This flag is now only ever set, so delete it.
This also avoids a use-after-free in the pm8001 queue path, as reported in
the following:
https://lore.kernel.org/linux-scsi/c3cb7228-254e-9584-182b-007ac5e6fe0a@huawei.com/T/#m28c94c6d3ff582ec4a9fa54819180740e8bd4cfb
https://lore.kernel.org/linux-scsi/0cc0c435-b4f2-9c76-258d-865ba50a29dd@huawei.com/
[mkp: checkpatch + two SAS_TASK_AT_INITIATOR references]
Link: https://lore.kernel.org/r/1644489804-85730-3-git-send-email-john.garry@huawei.com
Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2022-02-11 17:02:50 -05:00
Xiang Chen
4ea775abbb
scsi: libsas: Add flag SAS_HA_RESUMING
...
Add a flag SAS_HA_RESUMING and use it to indicate the state of resuming the
host controller.
Link: https://lore.kernel.org/r/1639999298-244569-11-git-send-email-chenxiang66@hisilicon.com
Reviewed-by: John Garry <john.garry@huawei.com >
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2021-12-22 23:38:30 -05:00
John Garry
fbefe22811
scsi: libsas: Don't always drain event workqueue for HA resume
...
For the hisi_sas driver, if a directly attached disk is removed during
suspend, a hang will occur in the resume process:
The background is that in commit 16fd4a7c59 ("scsi: hisi_sas: Add device
link between SCSI devices and hisi_hba"), it is ensured that the HBA device
cannot be runtime suspended when any SCSI device associated is active.
Other drivers which use libsas don't worry about this as none support
runtime suspend.
The mentioned hang occurs when an disk is removed during suspend. In the
removal process - from PHYE_RESUME_TIMEOUT event processing - we call into
scsi_remove_device(), which is being processed in the HA event workqueue.
Here we wait for all suppliers of the SCSI device to resume, which includes
the HBA device (from the above commit). However the HBA device cannot
resume, as it is waiting for the PHYE_RESUME_TIMEOUT to be processed (from
calling sas_resume_ha() -> sas_drain_work()). This is the deadlock.
There does not appear to be any need for the sas_drain_work() to be called
at all in sas_resume_ha() as it is not syncing against anything, so allow
LLDDs to avoid this by providing a variant of sas_resume_ha() which does
"sync", i.e. doesn't drain the event workqueue.
Link: https://lore.kernel.org/r/1639999298-244569-2-git-send-email-chenxiang66@hisilicon.com
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2021-12-22 23:38:29 -05:00
Luo Jiaxing
00aeaf329a
scsi: libsas: Export sas_phy_enable()
...
Export sas_phy_enable() so LLDDs can directly use it to control remote
phys.
We already do this for companion function sas_phy_reset().
Link: https://lore.kernel.org/r/1634041588-74824-4-git-send-email-john.garry@huawei.com
Signed-off-by: Luo Jiaxing <luojiaxing@huawei.com >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2021-10-12 22:46:06 -04:00
Bart Van Assche
d377f415dd
scsi: libsas: Introduce more SAM status code aliases in enum exec_status
...
This patch prepares for converting SAM status codes into an enum. Without
this patch converting SAM status codes into an enumeration type would
trigger complaints about enum type mismatches for the SAS code.
Link: https://lore.kernel.org/r/20210524025457.11299-2-bvanassche@acm.org
Cc: Hannes Reinecke <hare@suse.com >
Cc: Artur Paszkiewicz <artur.paszkiewicz@intel.com >
Cc: Jason Yan <yanaijie@huawei.com >
Reviewed-by: John Garry <john.garry@huawei.com >
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com >
Acked-by: Jack Wang <jinpu.wang@ionos.com >
Signed-off-by: Bart Van Assche <bvanassche@acm.org >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2021-06-02 16:10:46 -04:00
Ahmed S. Darwish
65f7cfba61
scsi: libsas: Remove temporarily-added _gfp() API variants
...
These variants were added for bisectability. Remove them, as all call sites
have now been convertd to use the original API.
Link: https://lore.kernel.org/r/20210118100955.1761652-20-a.darwish@linutronix.de
Cc: Jason Yan <yanaijie@huawei.com >
Reviewed-by: John Garry <john.garry@huawei.com >
Signed-off-by: Ahmed S. Darwish <a.darwish@linutronix.de >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2021-01-22 21:31:10 -05:00
Ahmed S. Darwish
5d6a75a1ed
scsi: libsas: Add gfp_t flags parameter to event notifications
...
All call-sites of below libsas APIs:
- sas_alloc_event()
- sas_notify_port_event()
- sas_notify_phy_event()
have been converted to use the _gfp()-suffixed version. Modify the
original APIs above to take a gfp_t flags parameter by default.
For bisectability, call-sites will be modified again to use the original
libsas APIs (while passing gfp_t). The temporary _gfp()-suffixed versions
can then be removed.
Link: https://lore.kernel.org/r/20210118100955.1761652-13-a.darwish@linutronix.de
Cc: Jason Yan <yanaijie@huawei.com >
Reviewed-by: John Garry <john.garry@huawei.com >
Signed-off-by: Ahmed S. Darwish <a.darwish@linutronix.de >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2021-01-22 21:31:09 -05:00
Ahmed S. Darwish
c2d0f1a65a
scsi: libsas: Introduce a _gfp() variant of event notifiers
...
sas_alloc_event() uses in_interrupt() to decide which allocation should be
used.
The usage of in_interrupt() in drivers is phased out and Linus clearly
requested that code which changes behaviour depending on context should
either be separated or the context be conveyed in an argument passed by the
caller, which usually knows the context.
The in_interrupt() check is also only partially correct, because it fails
to choose the correct code path when just preemption or interrupts are
disabled. For example, as in the following call chain:
mvsas/mv_sas.c: mvs_work_queue() [process context]
spin_lock_irqsave(mvs_info::lock, )
-> libsas/sas_event.c: sas_notify_phy_event()
-> sas_alloc_event()
-> in_interrupt() = false
-> invalid GFP_KERNEL allocation
-> libsas/sas_event.c: sas_notify_port_event()
-> sas_alloc_event()
-> in_interrupt() = false
-> invalid GFP_KERNEL allocation
Introduce sas_alloc_event_gfp(), sas_notify_port_event_gfp(), and
sas_notify_phy_event_gfp(), which all behave like the non _gfp() variants
but use a caller-passed GFP mask for allocations.
For bisectability, all callers will be modified first to pass GFP context,
then the non _gfp() libsas API variants will be modified to take a gfp_t by
default.
Link: https://lore.kernel.org/r/20210118100955.1761652-4-a.darwish@linutronix.de
Fixes: 1c393b970e ("scsi: libsas: Use dynamic alloced work to avoid sas event lost")
Cc: Jason Yan <yanaijie@huawei.com >
Reviewed-by: John Garry <john.garry@huawei.com >
Signed-off-by: Ahmed S. Darwish <a.darwish@linutronix.de >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2021-01-22 21:31:07 -05:00
John Garry
121181f3f8
scsi: libsas: Remove notifier indirection
...
LLDDs report events to libsas with .notify_port_event and .notify_phy_event
callbacks.
These callbacks are fixed and so there is no reason why the functions
cannot be called directly, so do that.
This neatens the code slightly, makes it more obvious, and reduces function
pointer usage, which is generally a good thing. Downside is that there are
2x more symbol exports.
[a.darwish@linutronix.de: Remove the now unused "sas_ha" local variables]
Link: https://lore.kernel.org/r/20210118100955.1761652-3-a.darwish@linutronix.de
Reviewed-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Jack Wang <jinpu.wang@cloud.ionos.com >
Signed-off-by: John Garry <john.garry@huawei.com >
Signed-off-by: Ahmed S. Darwish <a.darwish@linutronix.de >
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com >
2021-01-22 21:31:07 -05:00