Merge remote-tracking branches 'asoc/fix/arizona', 'asoc/fix/fsl', 'asoc/fix/fsl...
[cascardo/linux.git] / drivers / ata / libata-core.c
index d19c37a..677c0c1 100644 (file)
@@ -4798,9 +4798,8 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words)
 static struct ata_queued_cmd *ata_qc_new(struct ata_port *ap)
 {
        struct ata_queued_cmd *qc = NULL;
-       unsigned int i, tag, max_queue;
-
-       max_queue = ap->scsi_host->can_queue;
+       unsigned int max_queue = ap->host->n_tags;
+       unsigned int i, tag;
 
        /* no command while frozen */
        if (unlikely(ap->pflags & ATA_PFLAG_FROZEN))
@@ -6094,6 +6093,7 @@ void ata_host_init(struct ata_host *host, struct device *dev,
 {
        spin_lock_init(&host->lock);
        mutex_init(&host->eh_mutex);
+       host->n_tags = ATA_MAX_QUEUE - 1;
        host->dev = dev;
        host->ops = ops;
 }
@@ -6175,15 +6175,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
 {
        int i, rc;
 
-       /*
-        * The max queue supported by hardware must not be greater than
-        * ATA_MAX_QUEUE.
-        */
-       if (sht->can_queue > ATA_MAX_QUEUE) {
-               dev_err(host->dev, "BUG: the hardware max queue is too large\n");
-               WARN_ON(1);
-               return -EINVAL;
-       }
+       host->n_tags = clamp(sht->can_queue, 1, ATA_MAX_QUEUE - 1);
 
        /* host must have been started */
        if (!(host->flags & ATA_HOST_STARTED)) {