* [PATCH] aacraid: switch to pci_alloc_irq_vectors
@ 2016-11-08 7:11 Hannes Reinecke
2016-11-08 14:58 ` Christoph Hellwig
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Hannes Reinecke @ 2016-11-08 7:11 UTC (permalink / raw)
To: Martin K. Petersen
Cc: Christoph Hellwig, James Bottomley, linux-scsi, Hannes Reinecke,
Hannes Reinecke, Adaptec OEM Raid Solutions
Use pci_alloc_irq_vectors and drop the hand-crafted
interrupt affinity routines.
Signed-off-by: Hannes Reinecke <hare@suse.com>
Cc: Adaptec OEM Raid Solutions <aacraid@microsemi.com>
---
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);
}
} 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
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH] aacraid: switch to pci_alloc_irq_vectors
2016-11-08 7:11 [PATCH] aacraid: switch to pci_alloc_irq_vectors Hannes Reinecke
@ 2016-11-08 14:58 ` Christoph Hellwig
2016-11-15 19:33 ` Raghava Aditya Renukunta
2016-11-18 1:30 ` Martin K. Petersen
2 siblings, 0 replies; 6+ messages in thread
From: Christoph Hellwig @ 2016-11-08 14:58 UTC (permalink / raw)
To: Hannes Reinecke
Cc: Martin K. Petersen, Christoph Hellwig, James Bottomley,
linux-scsi, Hannes Reinecke, Adaptec OEM Raid Solutions
> @@ -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 */
With a bit more work we should be able to get rid of the aac_msix
array as well. I had actually started looking into that but got
dragged away.
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH] aacraid: switch to pci_alloc_irq_vectors
2016-11-08 7:11 [PATCH] aacraid: switch to pci_alloc_irq_vectors Hannes Reinecke
2016-11-08 14:58 ` Christoph Hellwig
@ 2016-11-15 19:33 ` Raghava Aditya Renukunta
2016-11-16 7:36 ` Hannes Reinecke
2016-11-18 1:30 ` Martin K. Petersen
2 siblings, 1 reply; 6+ messages in thread
From: Raghava Aditya Renukunta @ 2016-11-15 19:33 UTC (permalink / raw)
To: Hannes Reinecke, Martin K. Petersen
Cc: Christoph Hellwig, James Bottomley, linux-scsi@vger.kernel.org,
Hannes Reinecke, dl-esc-Aacraid Linux Driver
Hi Hannes,
Thank you for the patch
> -----Original Message-----
> From: Hannes Reinecke [mailto:hare@suse.de]
> Sent: Monday, November 7, 2016 11:12 PM
> To: Martin K. Petersen
> Cc: Christoph Hellwig; James Bottomley; linux-scsi@vger.kernel.org; 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@suse.com>
> Cc: Adaptec OEM Raid Solutions <aacraid@microsemi.com>
> ---
> 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
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH] aacraid: switch to pci_alloc_irq_vectors
2016-11-15 19:33 ` Raghava Aditya Renukunta
@ 2016-11-16 7:36 ` Hannes Reinecke
2016-11-16 17:14 ` Raghava Aditya Renukunta
0 siblings, 1 reply; 6+ messages in thread
From: Hannes Reinecke @ 2016-11-16 7:36 UTC (permalink / raw)
To: Raghava Aditya Renukunta, Martin K. Petersen
Cc: Christoph Hellwig, James Bottomley, linux-scsi@vger.kernel.org,
Hannes Reinecke, dl-esc-Aacraid Linux Driver
On 11/15/2016 08:33 PM, Raghava Aditya Renukunta wrote:
> Hi Hannes,
> Thank you for the patch
>
>> -----Original Message-----
>> From: Hannes Reinecke [mailto:hare@suse.de]
>> Sent: Monday, November 7, 2016 11:12 PM
>> To: Martin K. Petersen
>> Cc: Christoph Hellwig; James Bottomley; linux-scsi@vger.kernel.org; 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@suse.com>
>> Cc: Adaptec OEM Raid Solutions <aacraid@microsemi.com>
>> ---
>> 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?
>
Precisely.
Setting the PCI_IRQ_AFFINITY flag will instruct the PCI subsystem to set
the interrupt affinity.
It will take the physical layout of CPU cores into account, so the
results will be far better matched to the actual system.
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare@suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)
^ permalink raw reply [flat|nested] 6+ messages in thread* RE: [PATCH] aacraid: switch to pci_alloc_irq_vectors
2016-11-16 7:36 ` Hannes Reinecke
@ 2016-11-16 17:14 ` Raghava Aditya Renukunta
0 siblings, 0 replies; 6+ messages in thread
From: Raghava Aditya Renukunta @ 2016-11-16 17:14 UTC (permalink / raw)
To: Hannes Reinecke, Martin K. Petersen
Cc: Christoph Hellwig, James Bottomley, linux-scsi@vger.kernel.org,
Hannes Reinecke, dl-esc-Aacraid Linux Driver
> -----Original Message-----
> From: Hannes Reinecke [mailto:hare@suse.de]
> Sent: Tuesday, November 15, 2016 11:37 PM
> To: Raghava Aditya Renukunta; Martin K. Petersen
> Cc: Christoph Hellwig; James Bottomley; linux-scsi@vger.kernel.org; Hannes
> Reinecke; dl-esc-Aacraid Linux Driver
> Subject: Re: [PATCH] aacraid: switch to pci_alloc_irq_vectors
>
> EXTERNAL EMAIL
>
>
> On 11/15/2016 08:33 PM, Raghava Aditya Renukunta wrote:
> > Hi Hannes,
> > Thank you for the patch
> >
> >> -----Original Message-----
> >> From: Hannes Reinecke [mailto:hare@suse.de]
> >> Sent: Monday, November 7, 2016 11:12 PM
> >> To: Martin K. Petersen
> >> Cc: Christoph Hellwig; James Bottomley; linux-scsi@vger.kernel.org;
> 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@suse.com>
> >> Cc: Adaptec OEM Raid Solutions <aacraid@microsemi.com>
> >> ---
> >> 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?
> >
> Precisely.
> Setting the PCI_IRQ_AFFINITY flag will instruct the PCI subsystem to set
> the interrupt affinity.
> It will take the physical layout of CPU cores into account, so the
> results will be far better matched to the actual system.
>
> Cheers,
>
> Hannes
Yes I looked at the code and It looks good.
Thank you
Reviewed-by: Raghava Aditya Renukunta <raghavaaditya.renukunta@microsemi.com>
> --
> Dr. Hannes Reinecke Teamlead Storage & Networking
> hare@suse.de +49 911 74053 688
> SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
> GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
> HRB 21284 (AG Nürnberg)
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] aacraid: switch to pci_alloc_irq_vectors
2016-11-08 7:11 [PATCH] aacraid: switch to pci_alloc_irq_vectors Hannes Reinecke
2016-11-08 14:58 ` Christoph Hellwig
2016-11-15 19:33 ` Raghava Aditya Renukunta
@ 2016-11-18 1:30 ` Martin K. Petersen
2 siblings, 0 replies; 6+ messages in thread
From: Martin K. Petersen @ 2016-11-18 1:30 UTC (permalink / raw)
To: Hannes Reinecke
Cc: Martin K. Petersen, Christoph Hellwig, James Bottomley,
linux-scsi, Hannes Reinecke, Adaptec OEM Raid Solutions
>>>>> "Hannes" == Hannes Reinecke <hare@suse.de> writes:
Hannes> Use pci_alloc_irq_vectors and drop the hand-crafted interrupt
Hannes> affinity routines.
Applied to 4.10/scsi-queue.
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-11-18 1:30 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-08 7:11 [PATCH] aacraid: switch to pci_alloc_irq_vectors Hannes Reinecke
2016-11-08 14:58 ` Christoph Hellwig
2016-11-15 19:33 ` Raghava Aditya Renukunta
2016-11-16 7:36 ` Hannes Reinecke
2016-11-16 17:14 ` Raghava Aditya Renukunta
2016-11-18 1:30 ` Martin K. Petersen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).