aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-eh.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata/libata-eh.c')
-rw-r--r--drivers/ata/libata-eh.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 0d0a2c0ab9e7..ec32082356cb 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2814,6 +2814,7 @@ void ata_eh_finish(struct ata_port *ap)
2814/** 2814/**
2815 * ata_do_eh - do standard error handling 2815 * ata_do_eh - do standard error handling
2816 * @ap: host port to handle error for 2816 * @ap: host port to handle error for
2817 *
2817 * @prereset: prereset method (can be NULL) 2818 * @prereset: prereset method (can be NULL)
2818 * @softreset: softreset method (can be NULL) 2819 * @softreset: softreset method (can be NULL)
2819 * @hardreset: hardreset method (can be NULL) 2820 * @hardreset: hardreset method (can be NULL)
@@ -2844,6 +2845,30 @@ void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
2844 ata_eh_finish(ap); 2845 ata_eh_finish(ap);
2845} 2846}
2846 2847
2848/**
2849 * ata_std_error_handler - standard error handler
2850 * @ap: host port to handle error for
2851 *
2852 * Standard error handler
2853 *
2854 * LOCKING:
2855 * Kernel thread context (may sleep).
2856 */
2857void ata_std_error_handler(struct ata_port *ap)
2858{
2859 struct ata_port_operations *ops = ap->ops;
2860 ata_reset_fn_t hardreset = ops->hardreset;
2861
2862 /* sata_std_hardreset is inherited to all drivers from
2863 * ata_base_port_ops. Ignore it if SCR access is not
2864 * available.
2865 */
2866 if (hardreset == sata_std_hardreset && !sata_scr_valid(&ap->link))
2867 hardreset = NULL;
2868
2869 ata_do_eh(ap, ops->prereset, ops->softreset, hardreset, ops->postreset);
2870}
2871
2847#ifdef CONFIG_PM 2872#ifdef CONFIG_PM
2848/** 2873/**
2849 * ata_eh_handle_port_suspend - perform port suspend operation 2874 * ata_eh_handle_port_suspend - perform port suspend operation