diff options
Diffstat (limited to 'drivers/ata/libata-core.c')
-rw-r--r-- | drivers/ata/libata-core.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 0ddaf43d68c6..dc72690ed5db 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -4919,10 +4919,11 @@ struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev) | |||
4919 | */ | 4919 | */ |
4920 | void ata_qc_free(struct ata_queued_cmd *qc) | 4920 | void ata_qc_free(struct ata_queued_cmd *qc) |
4921 | { | 4921 | { |
4922 | struct ata_port *ap = qc->ap; | 4922 | struct ata_port *ap; |
4923 | unsigned int tag; | 4923 | unsigned int tag; |
4924 | 4924 | ||
4925 | WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */ | 4925 | WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */ |
4926 | ap = qc->ap; | ||
4926 | 4927 | ||
4927 | qc->flags = 0; | 4928 | qc->flags = 0; |
4928 | tag = qc->tag; | 4929 | tag = qc->tag; |
@@ -4934,11 +4935,13 @@ void ata_qc_free(struct ata_queued_cmd *qc) | |||
4934 | 4935 | ||
4935 | void __ata_qc_complete(struct ata_queued_cmd *qc) | 4936 | void __ata_qc_complete(struct ata_queued_cmd *qc) |
4936 | { | 4937 | { |
4937 | struct ata_port *ap = qc->ap; | 4938 | struct ata_port *ap; |
4938 | struct ata_link *link = qc->dev->link; | 4939 | struct ata_link *link; |
4939 | 4940 | ||
4940 | WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */ | 4941 | WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */ |
4941 | WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE)); | 4942 | WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE)); |
4943 | ap = qc->ap; | ||
4944 | link = qc->dev->link; | ||
4942 | 4945 | ||
4943 | if (likely(qc->flags & ATA_QCFLAG_DMAMAP)) | 4946 | if (likely(qc->flags & ATA_QCFLAG_DMAMAP)) |
4944 | ata_sg_clean(qc); | 4947 | ata_sg_clean(qc); |
@@ -5028,12 +5031,14 @@ void ata_qc_complete(struct ata_queued_cmd *qc) | |||
5028 | qc->flags |= ATA_QCFLAG_FAILED; | 5031 | qc->flags |= ATA_QCFLAG_FAILED; |
5029 | 5032 | ||
5030 | if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) { | 5033 | if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) { |
5031 | if (!ata_tag_internal(qc->tag)) { | 5034 | /* always fill result TF for failed qc */ |
5032 | /* always fill result TF for failed qc */ | 5035 | fill_result_tf(qc); |
5033 | fill_result_tf(qc); | 5036 | |
5037 | if (!ata_tag_internal(qc->tag)) | ||
5034 | ata_qc_schedule_eh(qc); | 5038 | ata_qc_schedule_eh(qc); |
5035 | return; | 5039 | else |
5036 | } | 5040 | __ata_qc_complete(qc); |
5041 | return; | ||
5037 | } | 5042 | } |
5038 | 5043 | ||
5039 | WARN_ON_ONCE(ap->pflags & ATA_PFLAG_FROZEN); | 5044 | WARN_ON_ONCE(ap->pflags & ATA_PFLAG_FROZEN); |
@@ -5591,6 +5596,9 @@ void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp) | |||
5591 | 5596 | ||
5592 | dev->link = link; | 5597 | dev->link = link; |
5593 | dev->devno = dev - link->device; | 5598 | dev->devno = dev - link->device; |
5599 | #ifdef CONFIG_ATA_ACPI | ||
5600 | dev->gtf_filter = ata_acpi_gtf_filter; | ||
5601 | #endif | ||
5594 | ata_dev_init(dev); | 5602 | ata_dev_init(dev); |
5595 | } | 5603 | } |
5596 | } | 5604 | } |