* [PATCH v3 0/9] libata: remove references to 'old' error handler
@ 2023-07-21 16:32 Niklas Cassel
2023-07-21 16:32 ` [PATCH v3 1/9] ata: remove reference to non-existing error_handler() Niklas Cassel
` (8 more replies)
0 siblings, 9 replies; 25+ messages in thread
From: Niklas Cassel @ 2023-07-21 16:32 UTC (permalink / raw)
To: Damien Le Moal, Jonathan Corbet, Sergey Shtylyov, John Garry,
Jason Yan, James E.J. Bottomley, Martin K. Petersen
Cc: Hannes Reinecke, linux-ide, linux-scsi, Niklas Cassel, linux-doc
From: Niklas Cassel <niklas.cassel@wdc.com>
Hi all,
now that the ipr driver has been modified to not hook into libata
all drivers now use the 'new' error handler, so we can remove any
references to it. And do a general cleanup to remove callbacks
which are no longer needed.
Changes since v2:
-Fixed comments from John, thank you John!
-Fixed comments from Jason, thank you Jason!
-Patch 9/9 which actually removed the old eh callbacks from
struct ata_port_operations is new in V3.
-Updated the documentation to remove references to functions
that do no longer exist.
-Updated documentation to be in line with the current libata
EH code.
Hannes Reinecke (6):
ata: remove reference to non-existing error_handler()
ata,scsi: remove ata_sas_port_{start,stop} callbacks
ata,scsi: remove ata_sas_port_destroy()
ata: remove ata_sas_sync_probe()
ata: inline ata_port_probe()
ata,scsi: cleanup __ata_port_probe()
Niklas Cassel (3):
ata: sata_sx4: drop already completed TODO
ata: remove ata_bus_probe()
ata: remove deprecated EH callbacks
Documentation/driver-api/libata.rst | 38 +--
drivers/ata/libata-core.c | 355 +++++++---------------------
drivers/ata/libata-eh.c | 152 +++++-------
drivers/ata/libata-sata.c | 77 ------
drivers/ata/libata-scsi.c | 161 +------------
drivers/ata/libata-sff.c | 30 +--
drivers/ata/libata.h | 3 -
drivers/ata/pata_sl82c105.c | 3 +-
drivers/ata/sata_sx4.c | 1 -
drivers/scsi/libsas/sas_ata.c | 6 +-
drivers/scsi/libsas/sas_discover.c | 2 +-
include/linux/libata.h | 15 +-
12 files changed, 181 insertions(+), 662 deletions(-)
--
2.41.0
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v3 1/9] ata: remove reference to non-existing error_handler()
2023-07-21 16:32 [PATCH v3 0/9] libata: remove references to 'old' error handler Niklas Cassel
@ 2023-07-21 16:32 ` Niklas Cassel
2023-07-25 11:09 ` John Garry
2023-07-28 2:05 ` Jason Yan
2023-07-21 16:32 ` [PATCH v3 2/9] ata,scsi: remove ata_sas_port_{start,stop} callbacks Niklas Cassel
` (7 subsequent siblings)
8 siblings, 2 replies; 25+ messages in thread
From: Niklas Cassel @ 2023-07-21 16:32 UTC (permalink / raw)
To: Damien Le Moal
Cc: Hannes Reinecke, John Garry, linux-ide, linux-scsi,
Hannes Reinecke, Niklas Cassel
From: Hannes Reinecke <hare@suse.de>
With commit 65a15d6560df ("scsi: ipr: Remove SATA support") all
libata drivers now have the error_handler() callback provided,
so we can stop checking for non-existing error_handler callback.
Signed-off-by: Hannes Reinecke <hare@suse.de>
[niklas: fixed review comments, rebased, solved conflicts during rebase,
fixed bug that unconditionally dumped all QCs, removed the now unused
function ata_dump_status(), removed the now unreachable failure paths in
atapi_qc_complete(), removed the non-EH function to request ATAPI sense]
Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
---
drivers/ata/libata-core.c | 209 +++++++++++++++-----------------------
drivers/ata/libata-eh.c | 152 ++++++++++++---------------
drivers/ata/libata-sata.c | 7 +-
drivers/ata/libata-scsi.c | 161 ++---------------------------
drivers/ata/libata-sff.c | 30 ++----
include/linux/libata.h | 2 +-
6 files changed, 170 insertions(+), 391 deletions(-)
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index d37ab6087f2f..1f0306522649 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -1586,13 +1586,11 @@ static unsigned ata_exec_internal_sg(struct ata_device *dev,
}
}
- if (ap->ops->error_handler)
- ata_eh_release(ap);
+ ata_eh_release(ap);
rc = wait_for_completion_timeout(&wait, msecs_to_jiffies(timeout));
- if (ap->ops->error_handler)
- ata_eh_acquire(ap);
+ ata_eh_acquire(ap);
ata_sff_flush_pio_task(ap);
@@ -1607,10 +1605,7 @@ static unsigned ata_exec_internal_sg(struct ata_device *dev,
if (qc->flags & ATA_QCFLAG_ACTIVE) {
qc->err_mask |= AC_ERR_TIMEOUT;
- if (ap->ops->error_handler)
- ata_port_freeze(ap);
- else
- ata_qc_complete(qc);
+ ata_port_freeze(ap);
ata_dev_warn(dev, "qc timeout after %u msecs (cmd 0x%x)\n",
timeout, command);
@@ -4874,126 +4869,103 @@ static void ata_verify_xfer(struct ata_queued_cmd *qc)
void ata_qc_complete(struct ata_queued_cmd *qc)
{
struct ata_port *ap = qc->ap;
+ struct ata_device *dev = qc->dev;
+ struct ata_eh_info *ehi = &dev->link->eh_info;
/* Trigger the LED (if available) */
ledtrig_disk_activity(!!(qc->tf.flags & ATA_TFLAG_WRITE));
- /* XXX: New EH and old EH use different mechanisms to
- * synchronize EH with regular execution path.
- *
- * In new EH, a qc owned by EH is marked with ATA_QCFLAG_EH.
- * Normal execution path is responsible for not accessing a
- * qc owned by EH. libata core enforces the rule by returning NULL
- * from ata_qc_from_tag() for qcs owned by EH.
+ /*
+ * In order to synchronize EH with the regular execution path, a qc that
+ * is owned by EH is marked with ATA_QCFLAG_EH.
*
- * Old EH depends on ata_qc_complete() nullifying completion
- * requests if ATA_QCFLAG_EH_SCHEDULED is set. Old EH does
- * not synchronize with interrupt handler. Only PIO task is
- * taken care of.
+ * The normal execution path is responsible for not accessing a qc owned
+ * by EH. libata core enforces the rule by returning NULL from
+ * ata_qc_from_tag() for qcs owned by EH.
*/
- if (ap->ops->error_handler) {
- struct ata_device *dev = qc->dev;
- struct ata_eh_info *ehi = &dev->link->eh_info;
-
- if (unlikely(qc->err_mask))
- qc->flags |= ATA_QCFLAG_EH;
+ if (unlikely(qc->err_mask))
+ qc->flags |= ATA_QCFLAG_EH;
- /*
- * Finish internal commands without any further processing
- * and always with the result TF filled.
- */
- if (unlikely(ata_tag_internal(qc->tag))) {
- fill_result_tf(qc);
- trace_ata_qc_complete_internal(qc);
- __ata_qc_complete(qc);
- return;
- }
+ /*
+ * Finish internal commands without any further processing and always
+ * with the result TF filled.
+ */
+ if (unlikely(ata_tag_internal(qc->tag))) {
+ fill_result_tf(qc);
+ trace_ata_qc_complete_internal(qc);
+ __ata_qc_complete(qc);
+ return;
+ }
- /*
- * Non-internal qc has failed. Fill the result TF and
- * summon EH.
- */
- if (unlikely(qc->flags & ATA_QCFLAG_EH)) {
- fill_result_tf(qc);
- trace_ata_qc_complete_failed(qc);
- ata_qc_schedule_eh(qc);
- return;
- }
+ /* Non-internal qc has failed. Fill the result TF and summon EH. */
+ if (unlikely(qc->flags & ATA_QCFLAG_EH)) {
+ fill_result_tf(qc);
+ trace_ata_qc_complete_failed(qc);
+ ata_qc_schedule_eh(qc);
+ return;
+ }
- WARN_ON_ONCE(ata_port_is_frozen(ap));
+ WARN_ON_ONCE(ata_port_is_frozen(ap));
- /* read result TF if requested */
- if (qc->flags & ATA_QCFLAG_RESULT_TF)
- fill_result_tf(qc);
+ /* read result TF if requested */
+ if (qc->flags & ATA_QCFLAG_RESULT_TF)
+ fill_result_tf(qc);
- trace_ata_qc_complete_done(qc);
+ trace_ata_qc_complete_done(qc);
+ /*
+ * For CDL commands that completed without an error, check if we have
+ * sense data (ATA_SENSE is set). If we do, then the command may have
+ * been aborted by the device due to a limit timeout using the policy
+ * 0xD. For these commands, invoke EH to get the command sense data.
+ */
+ if (qc->result_tf.status & ATA_SENSE &&
+ ((ata_is_ncq(qc->tf.protocol) &&
+ dev->flags & ATA_DFLAG_CDL_ENABLED) ||
+ (!(ata_is_ncq(qc->tf.protocol) &&
+ ata_id_sense_reporting_enabled(dev->id))))) {
/*
- * For CDL commands that completed without an error, check if
- * we have sense data (ATA_SENSE is set). If we do, then the
- * command may have been aborted by the device due to a limit
- * timeout using the policy 0xD. For these commands, invoke EH
- * to get the command sense data.
+ * Tell SCSI EH to not overwrite scmd->result even if this
+ * command is finished with result SAM_STAT_GOOD.
*/
- if (qc->result_tf.status & ATA_SENSE &&
- ((ata_is_ncq(qc->tf.protocol) &&
- dev->flags & ATA_DFLAG_CDL_ENABLED) ||
- (!(ata_is_ncq(qc->tf.protocol) &&
- ata_id_sense_reporting_enabled(dev->id))))) {
- /*
- * Tell SCSI EH to not overwrite scmd->result even if
- * this command is finished with result SAM_STAT_GOOD.
- */
- qc->scsicmd->flags |= SCMD_FORCE_EH_SUCCESS;
- qc->flags |= ATA_QCFLAG_EH_SUCCESS_CMD;
- ehi->dev_action[dev->devno] |= ATA_EH_GET_SUCCESS_SENSE;
-
- /*
- * set pending so that ata_qc_schedule_eh() does not
- * trigger fast drain, and freeze the port.
- */
- ap->pflags |= ATA_PFLAG_EH_PENDING;
- ata_qc_schedule_eh(qc);
- return;
- }
+ qc->scsicmd->flags |= SCMD_FORCE_EH_SUCCESS;
+ qc->flags |= ATA_QCFLAG_EH_SUCCESS_CMD;
+ ehi->dev_action[dev->devno] |= ATA_EH_GET_SUCCESS_SENSE;
- /* Some commands need post-processing after successful
- * completion.
+ /*
+ * set pending so that ata_qc_schedule_eh() does not trigger
+ * fast drain, and freeze the port.
*/
- switch (qc->tf.command) {
- case ATA_CMD_SET_FEATURES:
- if (qc->tf.feature != SETFEATURES_WC_ON &&
- qc->tf.feature != SETFEATURES_WC_OFF &&
- qc->tf.feature != SETFEATURES_RA_ON &&
- qc->tf.feature != SETFEATURES_RA_OFF)
- break;
- fallthrough;
- case ATA_CMD_INIT_DEV_PARAMS: /* CHS translation changed */
- case ATA_CMD_SET_MULTI: /* multi_count changed */
- /* revalidate device */
- ehi->dev_action[dev->devno] |= ATA_EH_REVALIDATE;
- ata_port_schedule_eh(ap);
- break;
+ ap->pflags |= ATA_PFLAG_EH_PENDING;
+ ata_qc_schedule_eh(qc);
+ return;
+ }
- case ATA_CMD_SLEEP:
- dev->flags |= ATA_DFLAG_SLEEPING;
+ /* Some commands need post-processing after successful completion. */
+ switch (qc->tf.command) {
+ case ATA_CMD_SET_FEATURES:
+ if (qc->tf.feature != SETFEATURES_WC_ON &&
+ qc->tf.feature != SETFEATURES_WC_OFF &&
+ qc->tf.feature != SETFEATURES_RA_ON &&
+ qc->tf.feature != SETFEATURES_RA_OFF)
break;
- }
-
- if (unlikely(dev->flags & ATA_DFLAG_DUBIOUS_XFER))
- ata_verify_xfer(qc);
+ fallthrough;
+ case ATA_CMD_INIT_DEV_PARAMS: /* CHS translation changed */
+ case ATA_CMD_SET_MULTI: /* multi_count changed */
+ /* revalidate device */
+ ehi->dev_action[dev->devno] |= ATA_EH_REVALIDATE;
+ ata_port_schedule_eh(ap);
+ break;
- __ata_qc_complete(qc);
- } else {
- if (qc->flags & ATA_QCFLAG_EH_SCHEDULED)
- return;
+ case ATA_CMD_SLEEP:
+ dev->flags |= ATA_DFLAG_SLEEPING;
+ break;
+ }
- /* read result TF if failed or requested */
- if (qc->err_mask || qc->flags & ATA_QCFLAG_RESULT_TF)
- fill_result_tf(qc);
+ if (unlikely(dev->flags & ATA_DFLAG_DUBIOUS_XFER))
+ ata_verify_xfer(qc);
- __ata_qc_complete(qc);
- }
+ __ata_qc_complete(qc);
}
EXPORT_SYMBOL_GPL(ata_qc_complete);
@@ -5039,11 +5011,8 @@ void ata_qc_issue(struct ata_queued_cmd *qc)
struct ata_link *link = qc->dev->link;
u8 prot = qc->tf.protocol;
- /* Make sure only one non-NCQ command is outstanding. The
- * check is skipped for old EH because it reuses active qc to
- * request ATAPI sense.
- */
- WARN_ON_ONCE(ap->ops->error_handler && ata_tag_valid(link->active_tag));
+ /* Make sure only one non-NCQ command is outstanding. */
+ WARN_ON_ONCE(ata_tag_valid(link->active_tag));
if (ata_is_ncq(prot)) {
WARN_ON_ONCE(link->sactive & (1 << qc->hw_tag));
@@ -5917,15 +5886,9 @@ void __ata_port_probe(struct ata_port *ap)
int ata_port_probe(struct ata_port *ap)
{
- int rc = 0;
-
- if (ap->ops->error_handler) {
- __ata_port_probe(ap);
- ata_port_wait_eh(ap);
- } else {
- rc = ata_bus_probe(ap);
- }
- return rc;
+ __ata_port_probe(ap);
+ ata_port_wait_eh(ap);
+ return 0;
}
@@ -6130,9 +6093,6 @@ static void ata_port_detach(struct ata_port *ap)
struct ata_link *link;
struct ata_device *dev;
- if (!ap->ops->error_handler)
- goto skip_eh;
-
/* tell EH we're leaving & flush EH */
spin_lock_irqsave(ap->lock, flags);
ap->pflags |= ATA_PFLAG_UNLOADING;
@@ -6148,7 +6108,6 @@ static void ata_port_detach(struct ata_port *ap)
cancel_delayed_work_sync(&ap->hotplug_task);
cancel_delayed_work_sync(&ap->scsi_rescan_task);
- skip_eh:
/* clean up zpodd on port removal */
ata_for_each_link(link, ap, HOST_FIRST) {
ata_for_each_dev(dev, link, ALL) {
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 35e03679b0bf..9d6affabf225 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -571,13 +571,10 @@ void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *ap,
/* make sure sff pio task is not running */
ata_sff_flush_pio_task(ap);
- if (!ap->ops->error_handler)
- return;
-
/* synchronize with host lock and sort out timeouts */
/*
- * For new EH, all qcs are finished in one of three ways -
+ * For EH, all qcs are finished in one of three ways -
* normal completion, error completion, and SCSI timeout.
* Both completions can race against SCSI timeout. When normal
* completion wins, the qc never reaches EH. When error
@@ -659,94 +656,87 @@ EXPORT_SYMBOL(ata_scsi_cmd_error_handler);
void ata_scsi_port_error_handler(struct Scsi_Host *host, struct ata_port *ap)
{
unsigned long flags;
+ struct ata_link *link;
- /* invoke error handler */
- if (ap->ops->error_handler) {
- struct ata_link *link;
-
- /* acquire EH ownership */
- ata_eh_acquire(ap);
+ /* acquire EH ownership */
+ ata_eh_acquire(ap);
repeat:
- /* kill fast drain timer */
- del_timer_sync(&ap->fastdrain_timer);
+ /* kill fast drain timer */
+ del_timer_sync(&ap->fastdrain_timer);
- /* process port resume request */
- ata_eh_handle_port_resume(ap);
+ /* process port resume request */
+ ata_eh_handle_port_resume(ap);
- /* fetch & clear EH info */
- spin_lock_irqsave(ap->lock, flags);
+ /* fetch & clear EH info */
+ spin_lock_irqsave(ap->lock, flags);
- ata_for_each_link(link, ap, HOST_FIRST) {
- struct ata_eh_context *ehc = &link->eh_context;
- struct ata_device *dev;
+ ata_for_each_link(link, ap, HOST_FIRST) {
+ struct ata_eh_context *ehc = &link->eh_context;
+ struct ata_device *dev;
- memset(&link->eh_context, 0, sizeof(link->eh_context));
- link->eh_context.i = link->eh_info;
- memset(&link->eh_info, 0, sizeof(link->eh_info));
+ memset(&link->eh_context, 0, sizeof(link->eh_context));
+ link->eh_context.i = link->eh_info;
+ memset(&link->eh_info, 0, sizeof(link->eh_info));
- ata_for_each_dev(dev, link, ENABLED) {
- int devno = dev->devno;
+ ata_for_each_dev(dev, link, ENABLED) {
+ int devno = dev->devno;
- ehc->saved_xfer_mode[devno] = dev->xfer_mode;
- if (ata_ncq_enabled(dev))
- ehc->saved_ncq_enabled |= 1 << devno;
- }
+ ehc->saved_xfer_mode[devno] = dev->xfer_mode;
+ if (ata_ncq_enabled(dev))
+ ehc->saved_ncq_enabled |= 1 << devno;
}
+ }
- ap->pflags |= ATA_PFLAG_EH_IN_PROGRESS;
- ap->pflags &= ~ATA_PFLAG_EH_PENDING;
- ap->excl_link = NULL; /* don't maintain exclusion over EH */
+ ap->pflags |= ATA_PFLAG_EH_IN_PROGRESS;
+ ap->pflags &= ~ATA_PFLAG_EH_PENDING;
+ ap->excl_link = NULL; /* don't maintain exclusion over EH */
- spin_unlock_irqrestore(ap->lock, flags);
+ spin_unlock_irqrestore(ap->lock, flags);
- /* invoke EH, skip if unloading or suspended */
- if (!(ap->pflags & (ATA_PFLAG_UNLOADING | ATA_PFLAG_SUSPENDED)))
- ap->ops->error_handler(ap);
- else {
- /* if unloading, commence suicide */
- if ((ap->pflags & ATA_PFLAG_UNLOADING) &&
- !(ap->pflags & ATA_PFLAG_UNLOADED))
- ata_eh_unload(ap);
- ata_eh_finish(ap);
- }
+ /* invoke EH, skip if unloading or suspended */
+ if (!(ap->pflags & (ATA_PFLAG_UNLOADING | ATA_PFLAG_SUSPENDED)))
+ ap->ops->error_handler(ap);
+ else {
+ /* if unloading, commence suicide */
+ if ((ap->pflags & ATA_PFLAG_UNLOADING) &&
+ !(ap->pflags & ATA_PFLAG_UNLOADED))
+ ata_eh_unload(ap);
+ ata_eh_finish(ap);
+ }
- /* process port suspend request */
- ata_eh_handle_port_suspend(ap);
+ /* process port suspend request */
+ ata_eh_handle_port_suspend(ap);
- /* Exception might have happened after ->error_handler
- * recovered the port but before this point. Repeat
- * EH in such case.
- */
- spin_lock_irqsave(ap->lock, flags);
+ /*
+ * Exception might have happened after ->error_handler recovered the
+ * port but before this point. Repeat EH in such case.
+ */
+ spin_lock_irqsave(ap->lock, flags);
- if (ap->pflags & ATA_PFLAG_EH_PENDING) {
- if (--ap->eh_tries) {
- spin_unlock_irqrestore(ap->lock, flags);
- goto repeat;
- }
- ata_port_err(ap,
- "EH pending after %d tries, giving up\n",
- ATA_EH_MAX_TRIES);
- ap->pflags &= ~ATA_PFLAG_EH_PENDING;
+ if (ap->pflags & ATA_PFLAG_EH_PENDING) {
+ if (--ap->eh_tries) {
+ spin_unlock_irqrestore(ap->lock, flags);
+ goto repeat;
}
+ ata_port_err(ap,
+ "EH pending after %d tries, giving up\n",
+ ATA_EH_MAX_TRIES);
+ ap->pflags &= ~ATA_PFLAG_EH_PENDING;
+ }
- /* this run is complete, make sure EH info is clear */
- ata_for_each_link(link, ap, HOST_FIRST)
- memset(&link->eh_info, 0, sizeof(link->eh_info));
+ /* this run is complete, make sure EH info is clear */
+ ata_for_each_link(link, ap, HOST_FIRST)
+ memset(&link->eh_info, 0, sizeof(link->eh_info));
- /* end eh (clear host_eh_scheduled) while holding
- * ap->lock such that if exception occurs after this
- * point but before EH completion, SCSI midlayer will
- * re-initiate EH.
- */
- ap->ops->end_eh(ap);
+ /*
+ * end eh (clear host_eh_scheduled) while holding ap->lock such that if
+ * exception occurs after this point but before EH completion, SCSI
+ * midlayer will re-initiate EH.
+ */
+ ap->ops->end_eh(ap);
- spin_unlock_irqrestore(ap->lock, flags);
- ata_eh_release(ap);
- } else {
- WARN_ON(ata_qc_from_tag(ap, ap->link.active_tag) == NULL);
- ap->ops->eng_timeout(ap);
- }
+ spin_unlock_irqrestore(ap->lock, flags);
+ ata_eh_release(ap);
scsi_eh_flush_done_q(&ap->eh_done_q);
@@ -912,8 +902,6 @@ void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
{
struct ata_port *ap = qc->ap;
- WARN_ON(!ap->ops->error_handler);
-
qc->flags |= ATA_QCFLAG_EH;
ata_eh_set_pending(ap, 1);
@@ -934,8 +922,6 @@ void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
*/
void ata_std_sched_eh(struct ata_port *ap)
{
- WARN_ON(!ap->ops->error_handler);
-
if (ap->pflags & ATA_PFLAG_INITIALIZING)
return;
@@ -989,8 +975,6 @@ static int ata_do_link_abort(struct ata_port *ap, struct ata_link *link)
struct ata_queued_cmd *qc;
int tag, nr_aborted = 0;
- WARN_ON(!ap->ops->error_handler);
-
/* we're gonna abort all commands, no need for fast drain */
ata_eh_set_pending(ap, 0);
@@ -1065,8 +1049,6 @@ EXPORT_SYMBOL_GPL(ata_port_abort);
*/
static void __ata_port_freeze(struct ata_port *ap)
{
- WARN_ON(!ap->ops->error_handler);
-
if (ap->ops->freeze)
ap->ops->freeze(ap);
@@ -1091,8 +1073,6 @@ static void __ata_port_freeze(struct ata_port *ap)
*/
int ata_port_freeze(struct ata_port *ap)
{
- WARN_ON(!ap->ops->error_handler);
-
__ata_port_freeze(ap);
return ata_port_abort(ap);
@@ -1112,9 +1092,6 @@ void ata_eh_freeze_port(struct ata_port *ap)
{
unsigned long flags;
- if (!ap->ops->error_handler)
- return;
-
spin_lock_irqsave(ap->lock, flags);
__ata_port_freeze(ap);
spin_unlock_irqrestore(ap->lock, flags);
@@ -1134,9 +1111,6 @@ void ata_eh_thaw_port(struct ata_port *ap)
{
unsigned long flags;
- if (!ap->ops->error_handler)
- return;
-
spin_lock_irqsave(ap->lock, flags);
ap->pflags &= ~ATA_PFLAG_FROZEN;
diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c
index 85e279a12f62..99d4ab04bcce 100644
--- a/drivers/ata/libata-sata.c
+++ b/drivers/ata/libata-sata.c
@@ -1158,12 +1158,7 @@ EXPORT_SYMBOL_GPL(ata_sas_port_alloc);
*/
int ata_sas_port_start(struct ata_port *ap)
{
- /*
- * the port is marked as frozen at allocation time, but if we don't
- * have new eh, we won't thaw it
- */
- if (!ap->ops->error_handler)
- ap->pflags &= ~ATA_PFLAG_FROZEN;
+ /* the port is marked as frozen at allocation time */
return 0;
}
EXPORT_SYMBOL_GPL(ata_sas_port_start);
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 370d18aca71e..9111d1b3c586 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -709,47 +709,6 @@ static void ata_qc_set_pc_nbytes(struct ata_queued_cmd *qc)
qc->nbytes = scsi_bufflen(scmd) + qc->extrabytes;
}
-/**
- * ata_dump_status - user friendly display of error info
- * @ap: the port in question
- * @tf: ptr to filled out taskfile
- *
- * Decode and dump the ATA error/status registers for the user so
- * that they have some idea what really happened at the non
- * make-believe layer.
- *
- * LOCKING:
- * inherited from caller
- */
-static void ata_dump_status(struct ata_port *ap, struct ata_taskfile *tf)
-{
- u8 stat = tf->status, err = tf->error;
-
- if (stat & ATA_BUSY) {
- ata_port_warn(ap, "status=0x%02x {Busy} ", stat);
- } else {
- ata_port_warn(ap, "status=0x%02x { %s%s%s%s%s%s%s} ", stat,
- stat & ATA_DRDY ? "DriveReady " : "",
- stat & ATA_DF ? "DeviceFault " : "",
- stat & ATA_DSC ? "SeekComplete " : "",
- stat & ATA_DRQ ? "DataRequest " : "",
- stat & ATA_CORR ? "CorrectedError " : "",
- stat & ATA_SENSE ? "Sense " : "",
- stat & ATA_ERR ? "Error " : "");
- if (err)
- ata_port_warn(ap, "error=0x%02x {%s%s%s%s%s%s", err,
- err & ATA_ABORTED ?
- "DriveStatusError " : "",
- err & ATA_ICRC ?
- (err & ATA_ABORTED ?
- "BadCRC " : "Sector ") : "",
- err & ATA_UNC ? "UncorrectableError " : "",
- err & ATA_IDNF ? "SectorIdNotFound " : "",
- err & ATA_TRK0NF ? "TrackZeroNotFound " : "",
- err & ATA_AMNF ? "AddrMarkNotFound " : "");
- }
-}
-
/**
* ata_to_sense_error - convert ATA error to SCSI error
* @id: ATA device number
@@ -758,7 +717,6 @@ static void ata_dump_status(struct ata_port *ap, struct ata_taskfile *tf)
* @sk: the sense key we'll fill out
* @asc: the additional sense code we'll fill out
* @ascq: the additional sense code qualifier we'll fill out
- * @verbose: be verbose
*
* Converts an ATA error into a SCSI error. Fill out pointers to
* SK, ASC, and ASCQ bytes for later use in fixed or descriptor
@@ -768,7 +726,7 @@ static void ata_dump_status(struct ata_port *ap, struct ata_taskfile *tf)
* spin_lock_irqsave(host lock)
*/
static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
- u8 *asc, u8 *ascq, int verbose)
+ u8 *asc, u8 *ascq)
{
int i;
@@ -847,7 +805,7 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
*sk = sense_table[i][1];
*asc = sense_table[i][2];
*ascq = sense_table[i][3];
- goto translate_done;
+ return;
}
}
}
@@ -862,7 +820,7 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
*sk = stat_table[i][1];
*asc = stat_table[i][2];
*ascq = stat_table[i][3];
- goto translate_done;
+ return;
}
}
@@ -873,12 +831,6 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
*sk = ABORTED_COMMAND;
*asc = 0x00;
*ascq = 0x00;
-
- translate_done:
- if (verbose)
- pr_err("ata%u: translated ATA stat/err 0x%02x/%02x to SCSI SK/ASC/ASCQ 0x%x/%02x/%02x\n",
- id, drv_stat, drv_err, *sk, *asc, *ascq);
- return;
}
/*
@@ -904,7 +856,6 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)
struct ata_taskfile *tf = &qc->result_tf;
unsigned char *sb = cmd->sense_buffer;
unsigned char *desc = sb + 8;
- int verbose = qc->ap->ops->error_handler == NULL;
u8 sense_key, asc, ascq;
memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
@@ -916,7 +867,7 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)
if (qc->err_mask ||
tf->status & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
ata_to_sense_error(qc->ap->print_id, tf->status, tf->error,
- &sense_key, &asc, &ascq, verbose);
+ &sense_key, &asc, &ascq);
ata_scsi_set_sense(qc->dev, cmd, sense_key, asc, ascq);
} else {
/*
@@ -999,7 +950,6 @@ static void ata_gen_ata_sense(struct ata_queued_cmd *qc)
struct scsi_cmnd *cmd = qc->scsicmd;
struct ata_taskfile *tf = &qc->result_tf;
unsigned char *sb = cmd->sense_buffer;
- int verbose = qc->ap->ops->error_handler == NULL;
u64 block;
u8 sense_key, asc, ascq;
@@ -1017,7 +967,7 @@ static void ata_gen_ata_sense(struct ata_queued_cmd *qc)
if (qc->err_mask ||
tf->status & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
ata_to_sense_error(qc->ap->print_id, tf->status, tf->error,
- &sense_key, &asc, &ascq, verbose);
+ &sense_key, &asc, &ascq);
ata_scsi_set_sense(dev, cmd, sense_key, asc, ascq);
} else {
/* Could not decode error */
@@ -1179,9 +1129,6 @@ void ata_scsi_slave_destroy(struct scsi_device *sdev)
unsigned long flags;
struct ata_device *dev;
- if (!ap->ops->error_handler)
- return;
-
spin_lock_irqsave(ap->lock, flags);
dev = __ata_scsi_find_dev(ap, sdev);
if (dev && dev->sdev) {
@@ -1668,7 +1615,6 @@ static void ata_qc_done(struct ata_queued_cmd *qc)
static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
{
- struct ata_port *ap = qc->ap;
struct scsi_cmnd *cmd = qc->scsicmd;
u8 *cdb = cmd->cmnd;
int need_sense = (qc->err_mask != 0) &&
@@ -1692,9 +1638,6 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
/* Keep the SCSI ML and status byte, clear host byte. */
cmd->result &= 0x0000ffff;
- if (need_sense && !ap->ops->error_handler)
- ata_dump_status(ap, &qc->result_tf);
-
ata_qc_done(qc);
}
@@ -2601,71 +2544,6 @@ static unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf)
return 0;
}
-static void atapi_sense_complete(struct ata_queued_cmd *qc)
-{
- if (qc->err_mask && ((qc->err_mask & AC_ERR_DEV) == 0)) {
- /* FIXME: not quite right; we don't want the
- * translation of taskfile registers into
- * a sense descriptors, since that's only
- * correct for ATA, not ATAPI
- */
- ata_gen_passthru_sense(qc);
- }
-
- ata_qc_done(qc);
-}
-
-/* is it pointless to prefer PIO for "safety reasons"? */
-static inline int ata_pio_use_silly(struct ata_port *ap)
-{
- return (ap->flags & ATA_FLAG_PIO_DMA);
-}
-
-static void atapi_request_sense(struct ata_queued_cmd *qc)
-{
- struct ata_port *ap = qc->ap;
- struct scsi_cmnd *cmd = qc->scsicmd;
-
- memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
-
-#ifdef CONFIG_ATA_SFF
- if (ap->ops->sff_tf_read)
- ap->ops->sff_tf_read(ap, &qc->tf);
-#endif
-
- /* fill these in, for the case where they are -not- overwritten */
- cmd->sense_buffer[0] = 0x70;
- cmd->sense_buffer[2] = qc->tf.error >> 4;
-
- ata_qc_reinit(qc);
-
- /* setup sg table and init transfer direction */
- sg_init_one(&qc->sgent, cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE);
- ata_sg_init(qc, &qc->sgent, 1);
- qc->dma_dir = DMA_FROM_DEVICE;
-
- memset(&qc->cdb, 0, qc->dev->cdb_len);
- qc->cdb[0] = REQUEST_SENSE;
- qc->cdb[4] = SCSI_SENSE_BUFFERSIZE;
-
- qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
- qc->tf.command = ATA_CMD_PACKET;
-
- if (ata_pio_use_silly(ap)) {
- qc->tf.protocol = ATAPI_PROT_DMA;
- qc->tf.feature |= ATAPI_PKT_DMA;
- } else {
- qc->tf.protocol = ATAPI_PROT_PIO;
- qc->tf.lbam = SCSI_SENSE_BUFFERSIZE;
- qc->tf.lbah = 0;
- }
- qc->nbytes = SCSI_SENSE_BUFFERSIZE;
-
- qc->complete_fn = atapi_sense_complete;
-
- ata_qc_issue(qc);
-}
-
/*
* ATAPI devices typically report zero for their SCSI version, and sometimes
* deviate from the spec WRT response data format. If SCSI version is
@@ -2691,9 +2569,8 @@ static void atapi_qc_complete(struct ata_queued_cmd *qc)
struct scsi_cmnd *cmd = qc->scsicmd;
unsigned int err_mask = qc->err_mask;
- /* handle completion from new EH */
- if (unlikely(qc->ap->ops->error_handler &&
- (err_mask || qc->flags & ATA_QCFLAG_SENSE_VALID))) {
+ /* handle completion from EH */
+ if (unlikely(err_mask || qc->flags & ATA_QCFLAG_SENSE_VALID)) {
if (!(qc->flags & ATA_QCFLAG_SENSE_VALID)) {
/* FIXME: not quite right; we don't want the
@@ -2725,23 +2602,10 @@ static void atapi_qc_complete(struct ata_queued_cmd *qc)
return;
}
- /* successful completion or old EH failure path */
- if (unlikely(err_mask & AC_ERR_DEV)) {
- cmd->result = SAM_STAT_CHECK_CONDITION;
- atapi_request_sense(qc);
- return;
- } else if (unlikely(err_mask)) {
- /* FIXME: not quite right; we don't want the
- * translation of taskfile registers into
- * a sense descriptors, since that's only
- * correct for ATA, not ATAPI
- */
- ata_gen_passthru_sense(qc);
- } else {
- if (cmd->cmnd[0] == INQUIRY && (cmd->cmnd[1] & 0x03) == 0)
- atapi_fixup_inquiry(cmd);
- cmd->result = SAM_STAT_GOOD;
- }
+ /* successful completion path */
+ if (cmd->cmnd[0] == INQUIRY && (cmd->cmnd[1] & 0x03) == 0)
+ atapi_fixup_inquiry(cmd);
+ cmd->result = SAM_STAT_GOOD;
ata_qc_done(qc);
}
@@ -4790,9 +4654,6 @@ int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
unsigned long flags;
int devno, rc = 0;
- if (!ap->ops->error_handler)
- return -EOPNOTSUPP;
-
if (lun != SCAN_WILD_CARD && lun)
return -EINVAL;
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 9d28badfe41d..84471d92cd1b 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -883,31 +883,21 @@ static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq)
{
struct ata_port *ap = qc->ap;
- if (ap->ops->error_handler) {
- if (in_wq) {
- /* EH might have kicked in while host lock is
- * released.
- */
- qc = ata_qc_from_tag(ap, qc->tag);
- if (qc) {
- if (likely(!(qc->err_mask & AC_ERR_HSM))) {
- ata_sff_irq_on(ap);
- ata_qc_complete(qc);
- } else
- ata_port_freeze(ap);
- }
- } else {
- if (likely(!(qc->err_mask & AC_ERR_HSM)))
+ if (in_wq) {
+ /* EH might have kicked in while host lock is released. */
+ qc = ata_qc_from_tag(ap, qc->tag);
+ if (qc) {
+ if (likely(!(qc->err_mask & AC_ERR_HSM))) {
+ ata_sff_irq_on(ap);
ata_qc_complete(qc);
- else
+ } else
ata_port_freeze(ap);
}
} else {
- if (in_wq) {
- ata_sff_irq_on(ap);
- ata_qc_complete(qc);
- } else
+ if (likely(!(qc->err_mask & AC_ERR_HSM)))
ata_qc_complete(qc);
+ else
+ ata_port_freeze(ap);
}
}
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 820f7a3a2749..3eeea76c30de 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1785,7 +1785,7 @@ static inline struct ata_queued_cmd *ata_qc_from_tag(struct ata_port *ap,
{
struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
- if (unlikely(!qc) || !ap->ops->error_handler)
+ if (unlikely(!qc))
return qc;
if ((qc->flags & (ATA_QCFLAG_ACTIVE |
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 2/9] ata,scsi: remove ata_sas_port_{start,stop} callbacks
2023-07-21 16:32 [PATCH v3 0/9] libata: remove references to 'old' error handler Niklas Cassel
2023-07-21 16:32 ` [PATCH v3 1/9] ata: remove reference to non-existing error_handler() Niklas Cassel
@ 2023-07-21 16:32 ` Niklas Cassel
2023-07-28 2:05 ` Jason Yan
2023-07-21 16:32 ` [PATCH v3 3/9] ata,scsi: remove ata_sas_port_destroy() Niklas Cassel
` (6 subsequent siblings)
8 siblings, 1 reply; 25+ messages in thread
From: Niklas Cassel @ 2023-07-21 16:32 UTC (permalink / raw)
To: Damien Le Moal, John Garry, Jason Yan, James E.J. Bottomley,
Martin K. Petersen
Cc: Hannes Reinecke, linux-ide, linux-scsi, Hannes Reinecke,
Niklas Cassel
From: Hannes Reinecke <hare@suse.de>
Callbacks are empty now, so remove them.
Also, remove the call to ap->ops->port_start() in ata_sas_port_init(),
as this would otherwise cause a NULL pointer dereference, now when the
callback is gone.
Signed-off-by: Hannes Reinecke <hare@suse.de>
[niklas: remove the call to ap->ops->port_start() in ata_sas_port_init()]
Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
---
drivers/ata/libata-sata.c | 38 -----------------------------------
drivers/scsi/libsas/sas_ata.c | 2 --
include/linux/libata.h | 2 --
3 files changed, 42 deletions(-)
diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c
index 99d4ab04bcce..a8256cb08763 100644
--- a/drivers/ata/libata-sata.c
+++ b/drivers/ata/libata-sata.c
@@ -1144,40 +1144,6 @@ struct ata_port *ata_sas_port_alloc(struct ata_host *host,
}
EXPORT_SYMBOL_GPL(ata_sas_port_alloc);
-/**
- * ata_sas_port_start - Set port up for dma.
- * @ap: Port to initialize
- *
- * Called just after data structures for each port are
- * initialized.
- *
- * May be used as the port_start() entry in ata_port_operations.
- *
- * LOCKING:
- * Inherited from caller.
- */
-int ata_sas_port_start(struct ata_port *ap)
-{
- /* the port is marked as frozen at allocation time */
- return 0;
-}
-EXPORT_SYMBOL_GPL(ata_sas_port_start);
-
-/**
- * ata_sas_port_stop - Undo ata_sas_port_start()
- * @ap: Port to shut down
- *
- * May be used as the port_stop() entry in ata_port_operations.
- *
- * LOCKING:
- * Inherited from caller.
- */
-
-void ata_sas_port_stop(struct ata_port *ap)
-{
-}
-EXPORT_SYMBOL_GPL(ata_sas_port_stop);
-
/**
* ata_sas_async_probe - simply schedule probing and return
* @ap: Port to probe
@@ -1211,10 +1177,6 @@ EXPORT_SYMBOL_GPL(ata_sas_sync_probe);
int ata_sas_port_init(struct ata_port *ap)
{
- int rc = ap->ops->port_start(ap);
-
- if (rc)
- return rc;
ap->print_id = atomic_inc_return(&ata_print_id);
return 0;
}
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index 77714a495cbb..7ead1f1be97f 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -565,8 +565,6 @@ static struct ata_port_operations sas_sata_ops = {
.qc_prep = ata_noop_qc_prep,
.qc_issue = sas_ata_qc_issue,
.qc_fill_rtf = sas_ata_qc_fill_rtf,
- .port_start = ata_sas_port_start,
- .port_stop = ata_sas_port_stop,
.set_dmamode = sas_ata_set_dmamode,
.sched_eh = sas_ata_sched_eh,
.end_eh = sas_ata_end_eh,
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 3eeea76c30de..5faf2d5d3da5 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1244,10 +1244,8 @@ extern struct ata_port *ata_sas_port_alloc(struct ata_host *,
extern void ata_sas_async_probe(struct ata_port *ap);
extern int ata_sas_sync_probe(struct ata_port *ap);
extern int ata_sas_port_init(struct ata_port *);
-extern int ata_sas_port_start(struct ata_port *ap);
extern int ata_sas_tport_add(struct device *parent, struct ata_port *ap);
extern void ata_sas_tport_delete(struct ata_port *ap);
-extern void ata_sas_port_stop(struct ata_port *ap);
extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *);
extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, struct ata_port *ap);
extern void ata_tf_to_fis(const struct ata_taskfile *tf,
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 3/9] ata,scsi: remove ata_sas_port_destroy()
2023-07-21 16:32 [PATCH v3 0/9] libata: remove references to 'old' error handler Niklas Cassel
2023-07-21 16:32 ` [PATCH v3 1/9] ata: remove reference to non-existing error_handler() Niklas Cassel
2023-07-21 16:32 ` [PATCH v3 2/9] ata,scsi: remove ata_sas_port_{start,stop} callbacks Niklas Cassel
@ 2023-07-21 16:32 ` Niklas Cassel
2023-07-25 11:11 ` John Garry
2023-07-28 2:06 ` Jason Yan
2023-07-21 16:32 ` [PATCH v3 4/9] ata: remove ata_sas_sync_probe() Niklas Cassel
` (5 subsequent siblings)
8 siblings, 2 replies; 25+ messages in thread
From: Niklas Cassel @ 2023-07-21 16:32 UTC (permalink / raw)
To: Damien Le Moal, John Garry, Jason Yan, James E.J. Bottomley,
Martin K. Petersen
Cc: Hannes Reinecke, linux-ide, linux-scsi, Hannes Reinecke,
Niklas Cassel
From: Hannes Reinecke <hare@suse.de>
Is now a wrapper around kfree(), so call it directly.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
---
drivers/ata/libata-sata.c | 14 --------------
drivers/scsi/libsas/sas_ata.c | 2 +-
drivers/scsi/libsas/sas_discover.c | 2 +-
include/linux/libata.h | 1 -
4 files changed, 2 insertions(+), 17 deletions(-)
diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c
index a8256cb08763..b5de0f40ea25 100644
--- a/drivers/ata/libata-sata.c
+++ b/drivers/ata/libata-sata.c
@@ -1194,20 +1194,6 @@ void ata_sas_tport_delete(struct ata_port *ap)
}
EXPORT_SYMBOL_GPL(ata_sas_tport_delete);
-/**
- * ata_sas_port_destroy - Destroy a SATA port allocated by ata_sas_port_alloc
- * @ap: SATA port to destroy
- *
- */
-
-void ata_sas_port_destroy(struct ata_port *ap)
-{
- if (ap->ops->port_stop)
- ap->ops->port_stop(ap);
- kfree(ap);
-}
-EXPORT_SYMBOL_GPL(ata_sas_port_destroy);
-
/**
* ata_sas_slave_configure - Default slave_config routine for libata devices
* @sdev: SCSI device to configure
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index 7ead1f1be97f..a2eb9a2191c0 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -619,7 +619,7 @@ int sas_ata_init(struct domain_device *found_dev)
return 0;
destroy_port:
- ata_sas_port_destroy(ap);
+ kfree(ap);
free_host:
ata_host_put(ata_host);
return rc;
diff --git a/drivers/scsi/libsas/sas_discover.c b/drivers/scsi/libsas/sas_discover.c
index 8c6afe724944..07e18cdb85c7 100644
--- a/drivers/scsi/libsas/sas_discover.c
+++ b/drivers/scsi/libsas/sas_discover.c
@@ -301,7 +301,7 @@ void sas_free_device(struct kref *kref)
if (dev_is_sata(dev) && dev->sata_dev.ap) {
ata_sas_tport_delete(dev->sata_dev.ap);
- ata_sas_port_destroy(dev->sata_dev.ap);
+ kfree(dev->sata_dev.ap);
ata_host_put(dev->sata_dev.ata_host);
dev->sata_dev.ata_host = NULL;
dev->sata_dev.ap = NULL;
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 5faf2d5d3da5..bc755a1864a0 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1238,7 +1238,6 @@ extern int sata_link_debounce(struct ata_link *link,
extern int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy,
bool spm_wakeup);
extern int ata_slave_link_init(struct ata_port *ap);
-extern void ata_sas_port_destroy(struct ata_port *);
extern struct ata_port *ata_sas_port_alloc(struct ata_host *,
struct ata_port_info *, struct Scsi_Host *);
extern void ata_sas_async_probe(struct ata_port *ap);
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 4/9] ata: remove ata_sas_sync_probe()
2023-07-21 16:32 [PATCH v3 0/9] libata: remove references to 'old' error handler Niklas Cassel
` (2 preceding siblings ...)
2023-07-21 16:32 ` [PATCH v3 3/9] ata,scsi: remove ata_sas_port_destroy() Niklas Cassel
@ 2023-07-21 16:32 ` Niklas Cassel
2023-07-25 11:12 ` John Garry
2023-07-21 16:32 ` [PATCH v3 5/9] ata: inline ata_port_probe() Niklas Cassel
` (4 subsequent siblings)
8 siblings, 1 reply; 25+ messages in thread
From: Niklas Cassel @ 2023-07-21 16:32 UTC (permalink / raw)
To: Damien Le Moal
Cc: Hannes Reinecke, John Garry, linux-ide, linux-scsi,
Hannes Reinecke, Niklas Cassel, Jason Yan
From: Hannes Reinecke <hare@suse.de>
Unused.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
Reviewed-by: Jason Yan <yanaijie@huawei.com>
---
drivers/ata/libata-sata.c | 7 -------
include/linux/libata.h | 1 -
2 files changed, 8 deletions(-)
diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c
index b5de0f40ea25..23252ebe312d 100644
--- a/drivers/ata/libata-sata.c
+++ b/drivers/ata/libata-sata.c
@@ -1157,13 +1157,6 @@ void ata_sas_async_probe(struct ata_port *ap)
}
EXPORT_SYMBOL_GPL(ata_sas_async_probe);
-int ata_sas_sync_probe(struct ata_port *ap)
-{
- return ata_port_probe(ap);
-}
-EXPORT_SYMBOL_GPL(ata_sas_sync_probe);
-
-
/**
* ata_sas_port_init - Initialize a SATA device
* @ap: SATA port to initialize
diff --git a/include/linux/libata.h b/include/linux/libata.h
index bc755a1864a0..8e219c486a90 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1241,7 +1241,6 @@ extern int ata_slave_link_init(struct ata_port *ap);
extern struct ata_port *ata_sas_port_alloc(struct ata_host *,
struct ata_port_info *, struct Scsi_Host *);
extern void ata_sas_async_probe(struct ata_port *ap);
-extern int ata_sas_sync_probe(struct ata_port *ap);
extern int ata_sas_port_init(struct ata_port *);
extern int ata_sas_tport_add(struct device *parent, struct ata_port *ap);
extern void ata_sas_tport_delete(struct ata_port *ap);
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 5/9] ata: inline ata_port_probe()
2023-07-21 16:32 [PATCH v3 0/9] libata: remove references to 'old' error handler Niklas Cassel
` (3 preceding siblings ...)
2023-07-21 16:32 ` [PATCH v3 4/9] ata: remove ata_sas_sync_probe() Niklas Cassel
@ 2023-07-21 16:32 ` Niklas Cassel
2023-07-25 11:13 ` John Garry
2023-07-21 16:32 ` [PATCH v3 6/9] ata,scsi: cleanup __ata_port_probe() Niklas Cassel
` (3 subsequent siblings)
8 siblings, 1 reply; 25+ messages in thread
From: Niklas Cassel @ 2023-07-21 16:32 UTC (permalink / raw)
To: Damien Le Moal
Cc: Hannes Reinecke, John Garry, linux-ide, linux-scsi,
Hannes Reinecke, Niklas Cassel, Jason Yan
From: Hannes Reinecke <hare@suse.de>
Just used in one place.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
Reviewed-by: Jason Yan <yanaijie@huawei.com>
---
drivers/ata/libata-core.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 1f0306522649..c5e93e1a560d 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -5884,14 +5884,6 @@ void __ata_port_probe(struct ata_port *ap)
spin_unlock_irqrestore(ap->lock, flags);
}
-int ata_port_probe(struct ata_port *ap)
-{
- __ata_port_probe(ap);
- ata_port_wait_eh(ap);
- return 0;
-}
-
-
static void async_port_probe(void *data, async_cookie_t cookie)
{
struct ata_port *ap = data;
@@ -5906,7 +5898,8 @@ static void async_port_probe(void *data, async_cookie_t cookie)
if (!(ap->host->flags & ATA_HOST_PARALLEL_SCAN) && ap->port_no != 0)
async_synchronize_cookie(cookie);
- (void)ata_port_probe(ap);
+ __ata_port_probe(ap);
+ ata_port_wait_eh(ap);
/* in order to keep device order, we need to synchronize at this point */
async_synchronize_cookie(cookie);
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 6/9] ata,scsi: cleanup __ata_port_probe()
2023-07-21 16:32 [PATCH v3 0/9] libata: remove references to 'old' error handler Niklas Cassel
` (4 preceding siblings ...)
2023-07-21 16:32 ` [PATCH v3 5/9] ata: inline ata_port_probe() Niklas Cassel
@ 2023-07-21 16:32 ` Niklas Cassel
2023-07-25 11:16 ` John Garry
2023-07-21 16:32 ` [PATCH v3 7/9] ata: sata_sx4: drop already completed TODO Niklas Cassel
` (2 subsequent siblings)
8 siblings, 1 reply; 25+ messages in thread
From: Niklas Cassel @ 2023-07-21 16:32 UTC (permalink / raw)
To: Damien Le Moal, John Garry, Jason Yan, James E.J. Bottomley,
Martin K. Petersen
Cc: Hannes Reinecke, linux-ide, linux-scsi, Hannes Reinecke,
Niklas Cassel
From: Hannes Reinecke <hare@suse.de>
Rename __ata_port_probe() to ata_port_probe() and drop the wrapper
ata_sas_async_probe().
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
Reviewed-by: Jason Yan <yanaijie@huawei.com>
---
drivers/ata/libata-core.c | 5 +++--
drivers/ata/libata-sata.c | 13 -------------
drivers/ata/libata.h | 2 --
drivers/scsi/libsas/sas_ata.c | 2 +-
include/linux/libata.h | 2 +-
5 files changed, 5 insertions(+), 19 deletions(-)
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index c5e93e1a560d..dedae669c9da 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -5865,7 +5865,7 @@ void ata_host_init(struct ata_host *host, struct device *dev,
}
EXPORT_SYMBOL_GPL(ata_host_init);
-void __ata_port_probe(struct ata_port *ap)
+void ata_port_probe(struct ata_port *ap)
{
struct ata_eh_info *ehi = &ap->link.eh_info;
unsigned long flags;
@@ -5883,6 +5883,7 @@ void __ata_port_probe(struct ata_port *ap)
spin_unlock_irqrestore(ap->lock, flags);
}
+EXPORT_SYMBOL_GPL(ata_port_probe);
static void async_port_probe(void *data, async_cookie_t cookie)
{
@@ -5898,7 +5899,7 @@ static void async_port_probe(void *data, async_cookie_t cookie)
if (!(ap->host->flags & ATA_HOST_PARALLEL_SCAN) && ap->port_no != 0)
async_synchronize_cookie(cookie);
- __ata_port_probe(ap);
+ ata_port_probe(ap);
ata_port_wait_eh(ap);
/* in order to keep device order, we need to synchronize at this point */
diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c
index 23252ebe312d..c0253adbf47c 100644
--- a/drivers/ata/libata-sata.c
+++ b/drivers/ata/libata-sata.c
@@ -1144,19 +1144,6 @@ struct ata_port *ata_sas_port_alloc(struct ata_host *host,
}
EXPORT_SYMBOL_GPL(ata_sas_port_alloc);
-/**
- * ata_sas_async_probe - simply schedule probing and return
- * @ap: Port to probe
- *
- * For batch scheduling of probe for sas attached ata devices, assumes
- * the port has already been through ata_sas_port_init()
- */
-void ata_sas_async_probe(struct ata_port *ap)
-{
- __ata_port_probe(ap);
-}
-EXPORT_SYMBOL_GPL(ata_sas_async_probe);
-
/**
* ata_sas_port_init - Initialize a SATA device
* @ap: SATA port to initialize
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
index cf993885d2b2..1ec9b4427b84 100644
--- a/drivers/ata/libata.h
+++ b/drivers/ata/libata.h
@@ -78,8 +78,6 @@ extern int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg);
extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg);
extern struct ata_port *ata_port_alloc(struct ata_host *host);
extern const char *sata_spd_string(unsigned int spd);
-extern int ata_port_probe(struct ata_port *ap);
-extern void __ata_port_probe(struct ata_port *ap);
extern unsigned int ata_read_log_page(struct ata_device *dev, u8 log,
u8 page, void *buf, unsigned int sectors);
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index a2eb9a2191c0..d6bb37b3974a 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -653,7 +653,7 @@ void sas_probe_sata(struct asd_sas_port *port)
if (!dev_is_sata(dev))
continue;
- ata_sas_async_probe(dev->sata_dev.ap);
+ ata_port_probe(dev->sata_dev.ap);
}
mutex_unlock(&port->ha->disco_mutex);
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 8e219c486a90..67e34948eac8 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1240,7 +1240,7 @@ extern int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy,
extern int ata_slave_link_init(struct ata_port *ap);
extern struct ata_port *ata_sas_port_alloc(struct ata_host *,
struct ata_port_info *, struct Scsi_Host *);
-extern void ata_sas_async_probe(struct ata_port *ap);
+extern void ata_port_probe(struct ata_port *ap);
extern int ata_sas_port_init(struct ata_port *);
extern int ata_sas_tport_add(struct device *parent, struct ata_port *ap);
extern void ata_sas_tport_delete(struct ata_port *ap);
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 7/9] ata: sata_sx4: drop already completed TODO
2023-07-21 16:32 [PATCH v3 0/9] libata: remove references to 'old' error handler Niklas Cassel
` (5 preceding siblings ...)
2023-07-21 16:32 ` [PATCH v3 6/9] ata,scsi: cleanup __ata_port_probe() Niklas Cassel
@ 2023-07-21 16:32 ` Niklas Cassel
2023-07-25 11:16 ` John Garry
2023-07-21 16:32 ` [PATCH v3 8/9] ata: remove ata_bus_probe() Niklas Cassel
2023-07-21 16:32 ` [PATCH v3 9/9] ata: remove deprecated EH callbacks Niklas Cassel
8 siblings, 1 reply; 25+ messages in thread
From: Niklas Cassel @ 2023-07-21 16:32 UTC (permalink / raw)
To: Damien Le Moal
Cc: Hannes Reinecke, John Garry, linux-ide, linux-scsi, Niklas Cassel,
Hannes Reinecke, Jason Yan
From: Niklas Cassel <niklas.cassel@wdc.com>
The TODO claims that the pdc_20621_ops should set the .inherits
function pointer to &ata_base_port_ops after it has been converted
to use the new EH.
However, the driver was converted to use the new EH a long time ago,
in commit 67651ee5710c ("[libata] sata_sx4: convert to new exception
handling methods"), which also did set .inherits function pointer to
&ata_sff_port_ops (and ata_sff_port_ops itself has .inherits set to
&ata_base_port_ops).
Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Jason Yan <yanaijie@huawei.com>
---
drivers/ata/sata_sx4.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/ata/sata_sx4.c b/drivers/ata/sata_sx4.c
index ccc016072637..b51d7a9d0d90 100644
--- a/drivers/ata/sata_sx4.c
+++ b/drivers/ata/sata_sx4.c
@@ -232,7 +232,6 @@ static const struct scsi_host_template pdc_sata_sht = {
.dma_boundary = ATA_DMA_BOUNDARY,
};
-/* TODO: inherit from base port_ops after converting to new EH */
static struct ata_port_operations pdc_20621_ops = {
.inherits = &ata_sff_port_ops,
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 8/9] ata: remove ata_bus_probe()
2023-07-21 16:32 [PATCH v3 0/9] libata: remove references to 'old' error handler Niklas Cassel
` (6 preceding siblings ...)
2023-07-21 16:32 ` [PATCH v3 7/9] ata: sata_sx4: drop already completed TODO Niklas Cassel
@ 2023-07-21 16:32 ` Niklas Cassel
2023-07-25 11:19 ` John Garry
2023-07-28 2:06 ` Jason Yan
2023-07-21 16:32 ` [PATCH v3 9/9] ata: remove deprecated EH callbacks Niklas Cassel
8 siblings, 2 replies; 25+ messages in thread
From: Niklas Cassel @ 2023-07-21 16:32 UTC (permalink / raw)
To: Damien Le Moal, Jonathan Corbet
Cc: Hannes Reinecke, John Garry, linux-ide, linux-scsi, Niklas Cassel,
linux-doc
From: Niklas Cassel <niklas.cassel@wdc.com>
Remove ata_bus_probe() as it is unused.
Also, remove references to ata_bus_probe and port_disable in
Documentation/driver-api/libata.rst, as neither exist anymore.
Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
---
Documentation/driver-api/libata.rst | 16 ----
drivers/ata/libata-core.c | 138 ----------------------------
drivers/ata/libata.h | 1 -
include/linux/libata.h | 1 -
4 files changed, 156 deletions(-)
diff --git a/Documentation/driver-api/libata.rst b/Documentation/driver-api/libata.rst
index 311af516a3fd..eecb8b81e185 100644
--- a/Documentation/driver-api/libata.rst
+++ b/Documentation/driver-api/libata.rst
@@ -32,22 +32,6 @@ register blocks.
:c:type:`struct ata_port_operations <ata_port_operations>`
----------------------------------------------------------
-Disable ATA port
-~~~~~~~~~~~~~~~~
-
-::
-
- void (*port_disable) (struct ata_port *);
-
-
-Called from :c:func:`ata_bus_probe` error path, as well as when unregistering
-from the SCSI module (rmmod, hot unplug). This function should do
-whatever needs to be done to take the port out of use. In most cases,
-:c:func:`ata_port_disable` can be used as this hook.
-
-Called from :c:func:`ata_bus_probe` on a failed probe. Called from
-:c:func:`ata_scsi_release`.
-
Post-IDENTIFY device configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index dedae669c9da..0af88ef231d1 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -3057,144 +3057,6 @@ int ata_cable_sata(struct ata_port *ap)
}
EXPORT_SYMBOL_GPL(ata_cable_sata);
-/**
- * ata_bus_probe - Reset and probe ATA bus
- * @ap: Bus to probe
- *
- * Master ATA bus probing function. Initiates a hardware-dependent
- * bus reset, then attempts to identify any devices found on
- * the bus.
- *
- * LOCKING:
- * PCI/etc. bus probe sem.
- *
- * RETURNS:
- * Zero on success, negative errno otherwise.
- */
-
-int ata_bus_probe(struct ata_port *ap)
-{
- unsigned int classes[ATA_MAX_DEVICES];
- int tries[ATA_MAX_DEVICES];
- int rc;
- struct ata_device *dev;
-
- ata_for_each_dev(dev, &ap->link, ALL)
- tries[dev->devno] = ATA_PROBE_MAX_TRIES;
-
- retry:
- ata_for_each_dev(dev, &ap->link, ALL) {
- /* If we issue an SRST then an ATA drive (not ATAPI)
- * may change configuration and be in PIO0 timing. If
- * we do a hard reset (or are coming from power on)
- * this is true for ATA or ATAPI. Until we've set a
- * suitable controller mode we should not touch the
- * bus as we may be talking too fast.
- */
- dev->pio_mode = XFER_PIO_0;
- dev->dma_mode = 0xff;
-
- /* If the controller has a pio mode setup function
- * then use it to set the chipset to rights. Don't
- * touch the DMA setup as that will be dealt with when
- * configuring devices.
- */
- if (ap->ops->set_piomode)
- ap->ops->set_piomode(ap, dev);
- }
-
- /* reset and determine device classes */
- ap->ops->phy_reset(ap);
-
- ata_for_each_dev(dev, &ap->link, ALL) {
- if (dev->class != ATA_DEV_UNKNOWN)
- classes[dev->devno] = dev->class;
- else
- classes[dev->devno] = ATA_DEV_NONE;
-
- dev->class = ATA_DEV_UNKNOWN;
- }
-
- /* read IDENTIFY page and configure devices. We have to do the identify
- specific sequence bass-ackwards so that PDIAG- is released by
- the slave device */
-
- ata_for_each_dev(dev, &ap->link, ALL_REVERSE) {
- if (tries[dev->devno])
- dev->class = classes[dev->devno];
-
- if (!ata_dev_enabled(dev))
- continue;
-
- rc = ata_dev_read_id(dev, &dev->class, ATA_READID_POSTRESET,
- dev->id);
- if (rc)
- goto fail;
- }
-
- /* Now ask for the cable type as PDIAG- should have been released */
- if (ap->ops->cable_detect)
- ap->cbl = ap->ops->cable_detect(ap);
-
- /* We may have SATA bridge glue hiding here irrespective of
- * the reported cable types and sensed types. When SATA
- * drives indicate we have a bridge, we don't know which end
- * of the link the bridge is which is a problem.
- */
- ata_for_each_dev(dev, &ap->link, ENABLED)
- if (ata_id_is_sata(dev->id))
- ap->cbl = ATA_CBL_SATA;
-
- /* After the identify sequence we can now set up the devices. We do
- this in the normal order so that the user doesn't get confused */
-
- ata_for_each_dev(dev, &ap->link, ENABLED) {
- ap->link.eh_context.i.flags |= ATA_EHI_PRINTINFO;
- rc = ata_dev_configure(dev);
- ap->link.eh_context.i.flags &= ~ATA_EHI_PRINTINFO;
- if (rc)
- goto fail;
- }
-
- /* configure transfer mode */
- rc = ata_set_mode(&ap->link, &dev);
- if (rc)
- goto fail;
-
- ata_for_each_dev(dev, &ap->link, ENABLED)
- return 0;
-
- return -ENODEV;
-
- fail:
- tries[dev->devno]--;
-
- switch (rc) {
- case -EINVAL:
- /* eeek, something went very wrong, give up */
- tries[dev->devno] = 0;
- break;
-
- case -ENODEV:
- /* give it just one more chance */
- tries[dev->devno] = min(tries[dev->devno], 1);
- fallthrough;
- case -EIO:
- if (tries[dev->devno] == 1) {
- /* This is the last chance, better to slow
- * down than lose it.
- */
- sata_down_spd_limit(&ap->link, 0);
- ata_down_xfermask_limit(dev, ATA_DNXFER_PIO);
- }
- }
-
- if (!tries[dev->devno])
- ata_dev_disable(dev);
-
- goto retry;
-}
-
/**
* sata_print_link_status - Print SATA link status
* @link: SATA link to printk link status about
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
index 1ec9b4427b84..6e7d352803bd 100644
--- a/drivers/ata/libata.h
+++ b/drivers/ata/libata.h
@@ -122,7 +122,6 @@ extern void ata_scsi_media_change_notify(struct ata_device *dev);
extern void ata_scsi_hotplug(struct work_struct *work);
extern void ata_schedule_scsi_eh(struct Scsi_Host *shost);
extern void ata_scsi_dev_rescan(struct work_struct *work);
-extern int ata_bus_probe(struct ata_port *ap);
extern int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
unsigned int id, u64 lun);
void ata_scsi_sdev_config(struct scsi_device *sdev);
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 67e34948eac8..2d5e4b516a69 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -344,7 +344,6 @@ enum {
ATA_LINK_RESUME_TRIES = 5,
/* how hard are we gonna try to probe/recover devices */
- ATA_PROBE_MAX_TRIES = 3,
ATA_EH_DEV_TRIES = 3,
ATA_EH_PMP_TRIES = 5,
ATA_EH_PMP_LINK_TRIES = 3,
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v3 9/9] ata: remove deprecated EH callbacks
2023-07-21 16:32 [PATCH v3 0/9] libata: remove references to 'old' error handler Niklas Cassel
` (7 preceding siblings ...)
2023-07-21 16:32 ` [PATCH v3 8/9] ata: remove ata_bus_probe() Niklas Cassel
@ 2023-07-21 16:32 ` Niklas Cassel
2023-07-25 11:20 ` John Garry
` (3 more replies)
8 siblings, 4 replies; 25+ messages in thread
From: Niklas Cassel @ 2023-07-21 16:32 UTC (permalink / raw)
To: Damien Le Moal, Jonathan Corbet, Sergey Shtylyov
Cc: Hannes Reinecke, John Garry, linux-ide, linux-scsi, Niklas Cassel,
linux-doc
From: Niklas Cassel <niklas.cassel@wdc.com>
Now when all libata drivers have migrated to use the error_handler
callback, remove the deprecated phy_reset and eng_timeout callbacks.
Also remove references to non-existent functions sata_phy_reset and
ata_qc_timeout from Documentation/driver-api/libata.rst.
Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
---
Documentation/driver-api/libata.rst | 22 ++++++----------------
drivers/ata/pata_sl82c105.c | 3 +--
include/linux/libata.h | 6 ------
3 files changed, 7 insertions(+), 24 deletions(-)
diff --git a/Documentation/driver-api/libata.rst b/Documentation/driver-api/libata.rst
index eecb8b81e185..5da27a749246 100644
--- a/Documentation/driver-api/libata.rst
+++ b/Documentation/driver-api/libata.rst
@@ -256,14 +256,6 @@ advanced drivers implement their own ``->qc_issue``.
Exception and probe handling (EH)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-::
-
- void (*eng_timeout) (struct ata_port *ap);
- void (*phy_reset) (struct ata_port *ap);
-
-
-Deprecated. Use ``->error_handler()`` instead.
-
::
void (*freeze) (struct ata_port *ap);
@@ -348,8 +340,7 @@ SATA phy read/write
u32 val);
-Read and write standard SATA phy registers. Currently only used if
-``->phy_reset`` hook called the :c:func:`sata_phy_reset` helper function.
+Read and write standard SATA phy registers.
sc_reg is one of SCR_STATUS, SCR_CONTROL, SCR_ERROR, or SCR_ACTIVE.
Init and shutdown
@@ -520,13 +511,12 @@ to return without deallocating the qc. This leads us to
:c:func:`ata_scsi_error` is the current ``transportt->eh_strategy_handler()``
for libata. As discussed above, this will be entered in two cases -
-timeout and ATAPI error completion. This function calls low level libata
-driver's :c:func:`eng_timeout` callback, the standard callback for which is
-:c:func:`ata_eng_timeout`. It checks if a qc is active and calls
-:c:func:`ata_qc_timeout` on the qc if so. Actual error handling occurs in
-:c:func:`ata_qc_timeout`.
+timeout and ATAPI error completion. This function will check if a qc is active
+and has not failed yet. Such a qc will be marked with AC_ERR_TIMEOUT such that
+EH will know to handle it later. Then it calls low level libata driver's
+:c:func:`error_handler` callback.
-If EH is invoked for timeout, :c:func:`ata_qc_timeout` stops BMDMA and
+When the :c:func:`error_handler` callback is invoked it stops BMDMA and
completes the qc. Note that as we're currently in EH, we cannot call
scsi_done. As described in SCSI EH doc, a recovered scmd should be
either retried with :c:func:`scsi_queue_insert` or finished with
diff --git a/drivers/ata/pata_sl82c105.c b/drivers/ata/pata_sl82c105.c
index 3b62ea482f1a..93882e976ede 100644
--- a/drivers/ata/pata_sl82c105.c
+++ b/drivers/ata/pata_sl82c105.c
@@ -180,8 +180,7 @@ static void sl82c105_bmdma_start(struct ata_queued_cmd *qc)
* document.
*
* This function is also called to turn off DMA when a timeout occurs
- * during DMA operation. In both cases we need to reset the engine,
- * so no actual eng_timeout handler is required.
+ * during DMA operation. In both cases we need to reset the engine.
*
* We assume bmdma_stop is always called if bmdma_start as called. If
* not then we may need to wrap qc_issue.
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 2d5e4b516a69..3718169834d5 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -975,12 +975,6 @@ struct ata_port_operations {
ssize_t (*transmit_led_message)(struct ata_port *ap, u32 state,
ssize_t size);
- /*
- * Obsolete
- */
- void (*phy_reset)(struct ata_port *ap);
- void (*eng_timeout)(struct ata_port *ap);
-
/*
* ->inherits must be the last field and all the preceding
* fields must be pointers.
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH v3 1/9] ata: remove reference to non-existing error_handler()
2023-07-21 16:32 ` [PATCH v3 1/9] ata: remove reference to non-existing error_handler() Niklas Cassel
@ 2023-07-25 11:09 ` John Garry
2023-07-28 2:05 ` Jason Yan
1 sibling, 0 replies; 25+ messages in thread
From: John Garry @ 2023-07-25 11:09 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal
Cc: Hannes Reinecke, linux-ide, linux-scsi, Hannes Reinecke,
Niklas Cassel
On 21/07/2023 17:32, Niklas Cassel wrote:
Reviewed-by: John Garry <john.g.garry@oracle.com>
> diff --git a/include/linux/libata.h b/include/linux/libata.h
> index 820f7a3a2749..3eeea76c30de 100644
> --- a/include/linux/libata.h
> +++ b/include/linux/libata.h
> @@ -1785,7 +1785,7 @@ static inline struct ata_queued_cmd *ata_qc_from_tag(struct ata_port *ap,
> {
> struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
>
> - if (unlikely(!qc) || !ap->ops->error_handler)
> + if (unlikely(!qc))
> return qc;
nit: It might be better to explicitly return 'NULL' here. Or maybe
combine with "if ((qc->flags & (ATA_QCFLAG_ACTIVE" check to have only 1x
point where we return NULL, like
if (!qc || (qc->flags & (ATA_QCFLAG_ACTIVE ...
retrun NULL;
return qc;
>
> if ((qc->flags & (ATA_QCFLAG_ACTIVE |
> --
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 3/9] ata,scsi: remove ata_sas_port_destroy()
2023-07-21 16:32 ` [PATCH v3 3/9] ata,scsi: remove ata_sas_port_destroy() Niklas Cassel
@ 2023-07-25 11:11 ` John Garry
2023-07-28 2:06 ` Jason Yan
1 sibling, 0 replies; 25+ messages in thread
From: John Garry @ 2023-07-25 11:11 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal, Jason Yan, James E.J. Bottomley,
Martin K. Petersen
Cc: Hannes Reinecke, linux-ide, linux-scsi, Hannes Reinecke,
Niklas Cassel
On 21/07/2023 17:32, Niklas Cassel wrote:
> From: Hannes Reinecke<hare@suse.de>
>
> Is now a wrapper around kfree(), so call it directly.
>
> Signed-off-by: Hannes Reinecke<hare@suse.de>
> Signed-off-by: Niklas Cassel<niklas.cassel@wdc.com>
Reviewed-by: John Garry <john.g.garry@oracle.com>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 4/9] ata: remove ata_sas_sync_probe()
2023-07-21 16:32 ` [PATCH v3 4/9] ata: remove ata_sas_sync_probe() Niklas Cassel
@ 2023-07-25 11:12 ` John Garry
0 siblings, 0 replies; 25+ messages in thread
From: John Garry @ 2023-07-25 11:12 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal
Cc: Hannes Reinecke, linux-ide, linux-scsi, Hannes Reinecke,
Niklas Cassel, Jason Yan
On 21/07/2023 17:32, Niklas Cassel wrote:
> From: Hannes Reinecke<hare@suse.de>
>
> Unused.
>
> Signed-off-by: Hannes Reinecke<hare@suse.de>
> Signed-off-by: Niklas Cassel<niklas.cassel@wdc.com>
> Reviewed-by: Jason Yan<yanaijie@huawei.com>
Reviewed-by: John Garry <john.g.garry@oracle.com>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 5/9] ata: inline ata_port_probe()
2023-07-21 16:32 ` [PATCH v3 5/9] ata: inline ata_port_probe() Niklas Cassel
@ 2023-07-25 11:13 ` John Garry
0 siblings, 0 replies; 25+ messages in thread
From: John Garry @ 2023-07-25 11:13 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal
Cc: Hannes Reinecke, linux-ide, linux-scsi, Hannes Reinecke,
Niklas Cassel, Jason Yan
On 21/07/2023 17:32, Niklas Cassel wrote:
> From: Hannes Reinecke<hare@suse.de>
>
> Just used in one place.
>
> Signed-off-by: Hannes Reinecke<hare@suse.de>
> Signed-off-by: Niklas Cassel<niklas.cassel@wdc.com>
> Reviewed-by: Jason Yan<yanaijie@huawei.com>
Reviewed-by: John Garry <john.g.garry@oracle.com>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 6/9] ata,scsi: cleanup __ata_port_probe()
2023-07-21 16:32 ` [PATCH v3 6/9] ata,scsi: cleanup __ata_port_probe() Niklas Cassel
@ 2023-07-25 11:16 ` John Garry
0 siblings, 0 replies; 25+ messages in thread
From: John Garry @ 2023-07-25 11:16 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal, Jason Yan, James E.J. Bottomley,
Martin K. Petersen
Cc: Hannes Reinecke, linux-ide, linux-scsi, Hannes Reinecke,
Niklas Cassel
On 21/07/2023 17:32, Niklas Cassel wrote:
> From: Hannes Reinecke<hare@suse.de>
>
> Rename __ata_port_probe() to ata_port_probe() and drop the wrapper
> ata_sas_async_probe().
>
> Signed-off-by: Hannes Reinecke<hare@suse.de>
> Signed-off-by: Niklas Cassel<niklas.cassel@wdc.com>
> Reviewed-by: Jason Yan<yanaijie@huawei.com>
hisi_sas_main.c still has a comment mentioning ata_sas_async_probe() -
please check that
Apart from that:
Reviewed-by: John Garry <john.g.garry@oracle.com>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 7/9] ata: sata_sx4: drop already completed TODO
2023-07-21 16:32 ` [PATCH v3 7/9] ata: sata_sx4: drop already completed TODO Niklas Cassel
@ 2023-07-25 11:16 ` John Garry
0 siblings, 0 replies; 25+ messages in thread
From: John Garry @ 2023-07-25 11:16 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal
Cc: Hannes Reinecke, linux-ide, linux-scsi, Niklas Cassel,
Hannes Reinecke, Jason Yan
On 21/07/2023 17:32, Niklas Cassel wrote:
> From: Niklas Cassel<niklas.cassel@wdc.com>
>
> The TODO claims that the pdc_20621_ops should set the .inherits
> function pointer to &ata_base_port_ops after it has been converted
> to use the new EH.
>
> However, the driver was converted to use the new EH a long time ago,
> in commit 67651ee5710c ("[libata] sata_sx4: convert to new exception
> handling methods"), which also did set .inherits function pointer to
> &ata_sff_port_ops (and ata_sff_port_ops itself has .inherits set to
> &ata_base_port_ops).
>
> Signed-off-by: Niklas Cassel<niklas.cassel@wdc.com>
> Reviewed-by: Hannes Reinecke<hare@suse.de>
> Reviewed-by: Jason Yan<yanaijie@huawei.com>
Reviewed-by: John Garry <john.g.garry@oracle.com>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 8/9] ata: remove ata_bus_probe()
2023-07-21 16:32 ` [PATCH v3 8/9] ata: remove ata_bus_probe() Niklas Cassel
@ 2023-07-25 11:19 ` John Garry
2023-07-28 2:06 ` Jason Yan
1 sibling, 0 replies; 25+ messages in thread
From: John Garry @ 2023-07-25 11:19 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal, Jonathan Corbet
Cc: Hannes Reinecke, linux-ide, linux-scsi, Niklas Cassel, linux-doc
On 21/07/2023 17:32, Niklas Cassel wrote:
> From: Niklas Cassel<niklas.cassel@wdc.com>
>
> Remove ata_bus_probe() as it is unused.
>
> Also, remove references to ata_bus_probe and port_disable in
> Documentation/driver-api/libata.rst, as neither exist anymore.
>
> Signed-off-by: Niklas Cassel<niklas.cassel@wdc.com>
Reviewed-by: John Garry <john.g.garry@oracle.com>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 9/9] ata: remove deprecated EH callbacks
2023-07-21 16:32 ` [PATCH v3 9/9] ata: remove deprecated EH callbacks Niklas Cassel
@ 2023-07-25 11:20 ` John Garry
2023-07-25 12:01 ` John Garry
` (2 subsequent siblings)
3 siblings, 0 replies; 25+ messages in thread
From: John Garry @ 2023-07-25 11:20 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal, Jonathan Corbet, Sergey Shtylyov
Cc: Hannes Reinecke, linux-ide, linux-scsi, Niklas Cassel, linux-doc
On 21/07/2023 17:32, Niklas Cassel wrote:
> From: Niklas Cassel<niklas.cassel@wdc.com>
>
> Now when all libata drivers have migrated to use the error_handler
> callback, remove the deprecated phy_reset and eng_timeout callbacks.
>
> Also remove references to non-existent functions sata_phy_reset and
> ata_qc_timeout from Documentation/driver-api/libata.rst.
>
> Signed-off-by: Niklas Cassel<niklas.cassel@wdc.com>
Reviewed-by: John Garry <john.g.garry@oracle.com>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 9/9] ata: remove deprecated EH callbacks
2023-07-21 16:32 ` [PATCH v3 9/9] ata: remove deprecated EH callbacks Niklas Cassel
2023-07-25 11:20 ` John Garry
@ 2023-07-25 12:01 ` John Garry
2023-07-26 19:29 ` Sergey Shtylyov
2023-07-28 2:07 ` Jason Yan
3 siblings, 0 replies; 25+ messages in thread
From: John Garry @ 2023-07-25 12:01 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal, Jonathan Corbet, Sergey Shtylyov
Cc: Hannes Reinecke, linux-ide, linux-scsi, Niklas Cassel, linux-doc
On 21/07/2023 17:32, Niklas Cassel wrote:
> From: Niklas Cassel<niklas.cassel@wdc.com>
>
> Now when all libata drivers have migrated to use the error_handler
> callback, remove the deprecated phy_reset and eng_timeout callbacks.
>
> Also remove references to non-existent functions sata_phy_reset and
> ata_qc_timeout from Documentation/driver-api/libata.rst.
>
> Signed-off-by: Niklas Cassel<niklas.cassel@wdc.com>
Reviewed-by: John Garry <john.g.garry@oracle.com>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 9/9] ata: remove deprecated EH callbacks
2023-07-21 16:32 ` [PATCH v3 9/9] ata: remove deprecated EH callbacks Niklas Cassel
2023-07-25 11:20 ` John Garry
2023-07-25 12:01 ` John Garry
@ 2023-07-26 19:29 ` Sergey Shtylyov
2023-07-28 2:07 ` Jason Yan
3 siblings, 0 replies; 25+ messages in thread
From: Sergey Shtylyov @ 2023-07-26 19:29 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal, Jonathan Corbet
Cc: Hannes Reinecke, John Garry, linux-ide, linux-scsi, Niklas Cassel,
linux-doc
On 7/21/23 7:32 PM, Niklas Cassel wrote:
> From: Niklas Cassel <niklas.cassel@wdc.com>
>
> Now when all libata drivers have migrated to use the error_handler
> callback, remove the deprecated phy_reset and eng_timeout callbacks.
>
> Also remove references to non-existent functions sata_phy_reset and
> ata_qc_timeout from Documentation/driver-api/libata.rst.
>
> Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
[...]
> diff --git a/drivers/ata/pata_sl82c105.c b/drivers/ata/pata_sl82c105.c
> index 3b62ea482f1a..93882e976ede 100644
> --- a/drivers/ata/pata_sl82c105.c
> +++ b/drivers/ata/pata_sl82c105.c
> @@ -180,8 +180,7 @@ static void sl82c105_bmdma_start(struct ata_queued_cmd *qc)
> * document.
> *
> * This function is also called to turn off DMA when a timeout occurs
> - * during DMA operation. In both cases we need to reset the engine,
> - * so no actual eng_timeout handler is required.
> + * during DMA operation. In both cases we need to reset the engine.
> *
> * We assume bmdma_stop is always called if bmdma_start as called. If
> * not then we may need to wrap qc_issue.
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
[...]
MBR, Sergey
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 1/9] ata: remove reference to non-existing error_handler()
2023-07-21 16:32 ` [PATCH v3 1/9] ata: remove reference to non-existing error_handler() Niklas Cassel
2023-07-25 11:09 ` John Garry
@ 2023-07-28 2:05 ` Jason Yan
1 sibling, 0 replies; 25+ messages in thread
From: Jason Yan @ 2023-07-28 2:05 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal
Cc: Hannes Reinecke, John Garry, linux-ide, linux-scsi,
Hannes Reinecke, Niklas Cassel
On 2023/7/22 0:32, Niklas Cassel wrote:
> + /* Non-internal qc has failed. Fill the result TF and summon EH. */
> + if (unlikely(qc->flags & ATA_QCFLAG_EH)) {
> + fill_result_tf(qc);
> + trace_ata_qc_complete_failed(qc);
> + ata_qc_schedule_eh(qc);
> + return;
> + }
>
> - WARN_ON_ONCE(ata_port_is_frozen(ap));
> + WARN_ON_ONCE(ata_port_is_frozen(ap));
>
> - /* read result TF if requested */
> - if (qc->flags & ATA_QCFLAG_RESULT_TF)
> - fill_result_tf(qc);
> + /* read result TF if requested */
> + if (qc->flags & ATA_QCFLAG_RESULT_TF)
> + fill_result_tf(qc);
>
> - trace_ata_qc_complete_done(qc);
> + trace_ata_qc_complete_done(qc);
>
> + /*
> + * For CDL commands that completed without an error, check if we have
> + * sense data (ATA_SENSE is set). If we do, then the command may have
> + * been aborted by the device due to a limit timeout using the policy
> + * 0xD. For these commands, invoke EH to get the command sense data.
> + */
> + if (qc->result_tf.status & ATA_SENSE &&
> + ((ata_is_ncq(qc->tf.protocol) &&
> + dev->flags & ATA_DFLAG_CDL_ENABLED) ||
> + (!(ata_is_ncq(qc->tf.protocol) &&
> + ata_id_sense_reporting_enabled(dev->id))))) {
Hmm, this code is a little bit unreadable. Maybe factoring out a
function is a choice. But I think it is not directly related to this
change and can be done in a separate patch later. So:
Reviewed-by: Jason Yan <yanaijie@huawei.com>
Thanks,
Jason
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 2/9] ata,scsi: remove ata_sas_port_{start,stop} callbacks
2023-07-21 16:32 ` [PATCH v3 2/9] ata,scsi: remove ata_sas_port_{start,stop} callbacks Niklas Cassel
@ 2023-07-28 2:05 ` Jason Yan
0 siblings, 0 replies; 25+ messages in thread
From: Jason Yan @ 2023-07-28 2:05 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal, John Garry, James E.J. Bottomley,
Martin K. Petersen
Cc: Hannes Reinecke, linux-ide, linux-scsi, Hannes Reinecke,
Niklas Cassel
On 2023/7/22 0:32, Niklas Cassel wrote:
> Also, remove the call to ap->ops->port_start() in ata_sas_port_init(),
> as this would otherwise cause a NULL pointer dereference, now when the
> callback is gone.
>
> Signed-off-by: Hannes Reinecke<hare@suse.de>
> [niklas: remove the call to ap->ops->port_start() in ata_sas_port_init()]
> Signed-off-by: Niklas Cassel<niklas.cassel@wdc.com>
> ---
> drivers/ata/libata-sata.c | 38 -----------------------------------
> drivers/scsi/libsas/sas_ata.c | 2 --
> include/linux/libata.h | 2 --
> 3 files changed, 42 deletions(-)
Reviewed-by: Jason Yan <yanaijie@huawei.com>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 3/9] ata,scsi: remove ata_sas_port_destroy()
2023-07-21 16:32 ` [PATCH v3 3/9] ata,scsi: remove ata_sas_port_destroy() Niklas Cassel
2023-07-25 11:11 ` John Garry
@ 2023-07-28 2:06 ` Jason Yan
1 sibling, 0 replies; 25+ messages in thread
From: Jason Yan @ 2023-07-28 2:06 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal, John Garry, James E.J. Bottomley,
Martin K. Petersen
Cc: Hannes Reinecke, linux-ide, linux-scsi, Hannes Reinecke,
Niklas Cassel
On 2023/7/22 0:32, Niklas Cassel wrote:
> From: Hannes Reinecke<hare@suse.de>
>
> Is now a wrapper around kfree(), so call it directly.
>
> Signed-off-by: Hannes Reinecke<hare@suse.de>
> Signed-off-by: Niklas Cassel<niklas.cassel@wdc.com>
> ---
> drivers/ata/libata-sata.c | 14 --------------
> drivers/scsi/libsas/sas_ata.c | 2 +-
> drivers/scsi/libsas/sas_discover.c | 2 +-
> include/linux/libata.h | 1 -
> 4 files changed, 2 insertions(+), 17 deletions(-)
Reviewed-by: Jason Yan <yanaijie@huawei.com>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 8/9] ata: remove ata_bus_probe()
2023-07-21 16:32 ` [PATCH v3 8/9] ata: remove ata_bus_probe() Niklas Cassel
2023-07-25 11:19 ` John Garry
@ 2023-07-28 2:06 ` Jason Yan
1 sibling, 0 replies; 25+ messages in thread
From: Jason Yan @ 2023-07-28 2:06 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal, Jonathan Corbet
Cc: Hannes Reinecke, John Garry, linux-ide, linux-scsi, Niklas Cassel,
linux-doc
On 2023/7/22 0:32, Niklas Cassel wrote:
> From: Niklas Cassel<niklas.cassel@wdc.com>
>
> Remove ata_bus_probe() as it is unused.
>
> Also, remove references to ata_bus_probe and port_disable in
> Documentation/driver-api/libata.rst, as neither exist anymore.
>
> Signed-off-by: Niklas Cassel<niklas.cassel@wdc.com>
> ---
> Documentation/driver-api/libata.rst | 16 ----
> drivers/ata/libata-core.c | 138 ----------------------------
> drivers/ata/libata.h | 1 -
> include/linux/libata.h | 1 -
> 4 files changed, 156 deletions(-)
Reviewed-by: Jason Yan <yanaijie@huawei.com>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 9/9] ata: remove deprecated EH callbacks
2023-07-21 16:32 ` [PATCH v3 9/9] ata: remove deprecated EH callbacks Niklas Cassel
` (2 preceding siblings ...)
2023-07-26 19:29 ` Sergey Shtylyov
@ 2023-07-28 2:07 ` Jason Yan
3 siblings, 0 replies; 25+ messages in thread
From: Jason Yan @ 2023-07-28 2:07 UTC (permalink / raw)
To: Niklas Cassel, Damien Le Moal, Jonathan Corbet, Sergey Shtylyov
Cc: Hannes Reinecke, John Garry, linux-ide, linux-scsi, Niklas Cassel,
linux-doc
On 2023/7/22 0:32, Niklas Cassel wrote:
> From: Niklas Cassel<niklas.cassel@wdc.com>
>
> Now when all libata drivers have migrated to use the error_handler
> callback, remove the deprecated phy_reset and eng_timeout callbacks.
>
> Also remove references to non-existent functions sata_phy_reset and
> ata_qc_timeout from Documentation/driver-api/libata.rst.
>
> Signed-off-by: Niklas Cassel<niklas.cassel@wdc.com>
> ---
> Documentation/driver-api/libata.rst | 22 ++++++----------------
> drivers/ata/pata_sl82c105.c | 3 +--
> include/linux/libata.h | 6 ------
> 3 files changed, 7 insertions(+), 24 deletions(-)
Reviewed-by: Jason Yan <yanaijie@huawei.com>
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2023-07-28 2:07 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-21 16:32 [PATCH v3 0/9] libata: remove references to 'old' error handler Niklas Cassel
2023-07-21 16:32 ` [PATCH v3 1/9] ata: remove reference to non-existing error_handler() Niklas Cassel
2023-07-25 11:09 ` John Garry
2023-07-28 2:05 ` Jason Yan
2023-07-21 16:32 ` [PATCH v3 2/9] ata,scsi: remove ata_sas_port_{start,stop} callbacks Niklas Cassel
2023-07-28 2:05 ` Jason Yan
2023-07-21 16:32 ` [PATCH v3 3/9] ata,scsi: remove ata_sas_port_destroy() Niklas Cassel
2023-07-25 11:11 ` John Garry
2023-07-28 2:06 ` Jason Yan
2023-07-21 16:32 ` [PATCH v3 4/9] ata: remove ata_sas_sync_probe() Niklas Cassel
2023-07-25 11:12 ` John Garry
2023-07-21 16:32 ` [PATCH v3 5/9] ata: inline ata_port_probe() Niklas Cassel
2023-07-25 11:13 ` John Garry
2023-07-21 16:32 ` [PATCH v3 6/9] ata,scsi: cleanup __ata_port_probe() Niklas Cassel
2023-07-25 11:16 ` John Garry
2023-07-21 16:32 ` [PATCH v3 7/9] ata: sata_sx4: drop already completed TODO Niklas Cassel
2023-07-25 11:16 ` John Garry
2023-07-21 16:32 ` [PATCH v3 8/9] ata: remove ata_bus_probe() Niklas Cassel
2023-07-25 11:19 ` John Garry
2023-07-28 2:06 ` Jason Yan
2023-07-21 16:32 ` [PATCH v3 9/9] ata: remove deprecated EH callbacks Niklas Cassel
2023-07-25 11:20 ` John Garry
2023-07-25 12:01 ` John Garry
2023-07-26 19:29 ` Sergey Shtylyov
2023-07-28 2:07 ` Jason Yan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox