RE: [PATCH] aacraid: switch to pci_alloc_irq_vectors

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hannes,
Thank you for the patch

> -----Original Message-----
> From: Hannes Reinecke [mailto:hare@xxxxxxx]
> Sent: Monday, November 7, 2016 11:12 PM
> To: Martin K. Petersen
> Cc: Christoph Hellwig; James Bottomley; linux-scsi@xxxxxxxxxxxxxxx; Hannes
> Reinecke; Hannes Reinecke; dl-esc-Aacraid Linux Driver
> Subject: [PATCH] aacraid: switch to pci_alloc_irq_vectors
> 
> EXTERNAL EMAIL
> 
> 
> Use pci_alloc_irq_vectors and drop the hand-crafted
> interrupt affinity routines.
> 
> Signed-off-by: Hannes Reinecke <hare@xxxxxxxx>
> Cc: Adaptec OEM Raid Solutions <aacraid@xxxxxxxxxxxxx>
> ---
>  drivers/scsi/aacraid/aacraid.h  |  1 -
>  drivers/scsi/aacraid/comminit.c | 10 +++-------
>  drivers/scsi/aacraid/commsup.c  | 25 +++++--------------------
>  drivers/scsi/aacraid/linit.c    | 20 ++++----------------
>  4 files changed, 12 insertions(+), 44 deletions(-)
> 
> diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
> index 969c312..f059c14 100644
> --- a/drivers/scsi/aacraid/aacraid.h
> +++ b/drivers/scsi/aacraid/aacraid.h
> @@ -1246,7 +1246,6 @@ struct aac_dev
>         u32                     max_msix;       /* max. MSI-X vectors */
>         u32                     vector_cap;     /* MSI-X vector capab.*/
>         int                     msi_enabled;    /* MSI/MSI-X enabled */
> -       struct msix_entry       msixentry[AAC_MAX_MSIX];
>         struct aac_msix_ctx     aac_msix[AAC_MAX_MSIX]; /* context */
>         u8                      adapter_shutdown;
>         u32                     handle_pci_error;
> diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c
> index 341ea32..4f56b10 100644
> --- a/drivers/scsi/aacraid/comminit.c
> +++ b/drivers/scsi/aacraid/comminit.c
> @@ -378,16 +378,12 @@ void aac_define_int_mode(struct aac_dev *dev)
>         if (msi_count > AAC_MAX_MSIX)
>                 msi_count = AAC_MAX_MSIX;
> 
> -       for (i = 0; i < msi_count; i++)
> -               dev->msixentry[i].entry = i;
> -
>         if (msi_count > 1 &&
>             pci_find_capability(dev->pdev, PCI_CAP_ID_MSIX)) {
>                 min_msix = 2;
> -               i = pci_enable_msix_range(dev->pdev,
> -                                   dev->msixentry,
> -                                   min_msix,
> -                                   msi_count);
> +               i = pci_alloc_irq_vectors(dev->pdev,
> +                                         min_msix, msi_count,
> +                                         PCI_IRQ_MSIX | PCI_IRQ_AFFINITY);
>                 if (i > 0) {
>                         dev->msi_enabled = 1;
>                         msi_count = i;
> diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
> index 0aeecec..9e7551f 100644
> --- a/drivers/scsi/aacraid/commsup.c
> +++ b/drivers/scsi/aacraid/commsup.c
> @@ -2043,30 +2043,22 @@ int aac_acquire_irq(struct aac_dev *dev)
>         int i;
>         int j;
>         int ret = 0;
> -       int cpu;
> 
> -       cpu = cpumask_first(cpu_online_mask);
>         if (!dev->sync_mode && dev->msi_enabled && dev->max_msix > 1) {
>                 for (i = 0; i < dev->max_msix; i++) {
>                         dev->aac_msix[i].vector_no = i;
>                         dev->aac_msix[i].dev = dev;
> -                       if (request_irq(dev->msixentry[i].vector,
> +                       if (request_irq(pci_irq_vector(dev->pdev, i),
>                                         dev->a_ops.adapter_intr,
>                                         0, "aacraid", &(dev->aac_msix[i]))) {
>                                 printk(KERN_ERR "%s%d: Failed to register IRQ for vector
> %d.\n",
>                                                 dev->name, dev->id, i);
>                                 for (j = 0 ; j < i ; j++)
> -                                       free_irq(dev->msixentry[j].vector,
> +                                       free_irq(pci_irq_vector(dev->pdev, j),
>                                                  &(dev->aac_msix[j]));
>                                 pci_disable_msix(dev->pdev);
>                                 ret = -1;
>                         }
> -                       if (irq_set_affinity_hint(dev->msixentry[i].vector,
> -                                                       get_cpu_mask(cpu))) {
> -                               printk(KERN_ERR "%s%d: Failed to set IRQ affinity for cpu
> %d\n",
> -                                           dev->name, dev->id, cpu);
> -                       }
> -                       cpu = cpumask_next(cpu, cpu_online_mask);

Is there a reason why the irq_set_affinity_hint was removed? Will the PCI_IRQ_AFFINITY flag enable hints?



>                 }
>         } else {
>                 dev->aac_msix[0].vector_no = 0;
> @@ -2096,16 +2088,9 @@ void aac_free_irq(struct aac_dev *dev)
>             dev->pdev->device == PMC_DEVICE_S8 ||
>             dev->pdev->device == PMC_DEVICE_S9) {
>                 if (dev->max_msix > 1) {
> -                       for (i = 0; i < dev->max_msix; i++) {
> -                               if (irq_set_affinity_hint(
> -                                       dev->msixentry[i].vector, NULL)) {
> -                                       printk(KERN_ERR "%s%d: Failed to reset IRQ affinity for
> cpu %d\n",
> -                                           dev->name, dev->id, cpu);
> -                               }
> -                               cpu = cpumask_next(cpu, cpu_online_mask);
> -                               free_irq(dev->msixentry[i].vector,
> -                                               &(dev->aac_msix[i]));
> -                       }
> +                       for (i = 0; i < dev->max_msix; i++)
> +                               free_irq(pci_irq_vector(dev->pdev, i),
> +                                        &(dev->aac_msix[i]));
>                 } else {
>                         free_irq(dev->pdev->irq, &(dev->aac_msix[0]));
>                 }
> diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
> index 79871f3..e4f3e22 100644
> --- a/drivers/scsi/aacraid/linit.c
> +++ b/drivers/scsi/aacraid/linit.c
> @@ -1071,7 +1071,6 @@ ssize_t aac_get_serial_number(struct device
> *device, char *buf)
>  static void __aac_shutdown(struct aac_dev * aac)
>  {
>         int i;
> -       int cpu;
> 
>         aac_send_shutdown(aac);
> 
> @@ -1087,24 +1086,13 @@ static void __aac_shutdown(struct aac_dev *
> aac)
>                 kthread_stop(aac->thread);
>         }
>         aac_adapter_disable_int(aac);
> -       cpu = cpumask_first(cpu_online_mask);
>         if (aac->pdev->device == PMC_DEVICE_S6 ||
>             aac->pdev->device == PMC_DEVICE_S7 ||
>             aac->pdev->device == PMC_DEVICE_S8 ||
>             aac->pdev->device == PMC_DEVICE_S9) {
>                 if (aac->max_msix > 1) {
>                         for (i = 0; i < aac->max_msix; i++) {
> -                               if (irq_set_affinity_hint(
> -                                   aac->msixentry[i].vector,
> -                                   NULL)) {
> -                                       printk(KERN_ERR "%s%d: Failed to reset IRQ affinity for
> cpu %d\n",
> -                                               aac->name,
> -                                               aac->id,
> -                                               cpu);
> -                               }
> -                               cpu = cpumask_next(cpu,
> -                                               cpu_online_mask);
> -                               free_irq(aac->msixentry[i].vector,
> +                               free_irq(pci_irq_vector(aac->pdev, i),
>                                          &(aac->aac_msix[i]));
>                         }
>                 } else {
> @@ -1350,7 +1338,7 @@ static void aac_release_resources(struct aac_dev
> *aac)
>             aac->pdev->device == PMC_DEVICE_S9) {
>                 if (aac->max_msix > 1) {
>                         for (i = 0; i < aac->max_msix; i++)
> -                               free_irq(aac->msixentry[i].vector,
> +                               free_irq(pci_irq_vector(aac->pdev, i),
>                                         &(aac->aac_msix[i]));
>                 } else {
>                         free_irq(aac->pdev->irq, &(aac->aac_msix[0]));
> @@ -1396,13 +1384,13 @@ static int aac_acquire_resources(struct aac_dev
> *dev)
>                         dev->aac_msix[i].vector_no = i;
>                         dev->aac_msix[i].dev = dev;
> 
> -                       if (request_irq(dev->msixentry[i].vector,
> +                       if (request_irq(pci_irq_vector(dev->pdev, i),
>                                         dev->a_ops.adapter_intr,
>                                         0, "aacraid", &(dev->aac_msix[i]))) {
>                                 printk(KERN_ERR "%s%d: Failed to register IRQ for vector
> %d.\n",
>                                                 name, instance, i);
>                                 for (j = 0 ; j < i ; j++)
> -                                       free_irq(dev->msixentry[j].vector,
> +                                       free_irq(pci_irq_vector(dev->pdev, j),
>                                                  &(dev->aac_msix[j]));
>                                 pci_disable_msix(dev->pdev);
>                                 goto error_iounmap;
> --
> 1.8.5.6

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux