vmd: allocate irq lists with correct msix count
PATCH 1/2 vmd: allocate irq lists with correct msix count
To reduce the amount of memory required for irq lists, only allocate their space after calling pci_msix_enable_range which may reduce the number of msix vectors allocated.
--- arch/x86/pci/vmd.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
arch/x86/pci/vmd.c +5 -5
@@ -679,11 +679,6 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)if (vmd->msix_count <0 )return -ENODEV ; - vmd->irqs =devm_kcalloc (&dev->dev, vmd->msix_count,sizeof (*vmd->irqs), -GFP_KERNEL ); -if (!vmd->irqs) -return -ENOMEM ; - vmd->msix_entries =devm_kcalloc (&dev->dev, vmd->msix_count,sizeof (*vmd->msix_entries),GFP_KERNEL );
@@ -697,6 +692,11 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)if (vmd->msix_count <0 )return vmd->msix_count; + vmd->irqs =devm_kcalloc (&dev->dev, vmd->msix_count,sizeof (*vmd->irqs), +GFP_KERNEL ); +if (!vmd->irqs) +return -ENOMEM ; +for (i =0 ; i < vmd->msix_count; i++) {INIT_LIST_HEAD (&vmd->irqs[i].irq_list); vmd->irqs[i].vmd_vector = vmd->msix_entries[i].vector;
Signature · 1 line
1.8.3.1
PATCH 2/2 vmd: convert to use pci_alloc_irq_vectors api
--- arch/x86/pci/vmd.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-)
arch/x86/pci/vmd.c +3 -12
@@ -78,7 +78,6 @@ struct vmd_dev {char __iomem *cfgbar;int msix_count; -struct msix_entry *msix_entries;struct vmd_irq_list *irqs;struct pci_sysdata sysdata;
@@ -679,16 +678,8 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)if (vmd->msix_count <0 )return -ENODEV ; - vmd->msix_entries =devm_kcalloc (&dev->dev, vmd->msix_count, -sizeof (*vmd->msix_entries), -GFP_KERNEL ); -if (!vmd->msix_entries) -return -ENOMEM ; -for (i =0 ; i < vmd->msix_count; i++) - vmd->msix_entries[i].entry = i; - - vmd->msix_count =pci_enable_msix_range (vmd->dev, vmd->msix_entries,1 , - vmd->msix_count); + vmd->msix_count =pci_alloc_irq_vectors (dev,1 , vmd->msix_count, +PCI_IRQ_MSIX |PCI_IRQ_AFFINITY );if (vmd->msix_count <0 )return vmd->msix_count;
@@ -699,7 +690,7 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)for (i =0 ; i < vmd->msix_count; i++) {INIT_LIST_HEAD (&vmd->irqs[i].irq_list); - vmd->irqs[i].vmd_vector = vmd->msix_entries[i].vector; + vmd->irqs[i].vmd_vector =pci_irq_vector (dev, i); vmd->irqs[i].index = i; err = devm_request_irq(&dev->dev, vmd->irqs[i].vmd_vector,
Signature · 1 line
1.8.3.1
Re: [PATCH 2/2] vmd: convert to use pci_alloc_irq_vectors api
Quoted 1 line · Jon Derrick
Signed-off-by Jon Derrick <[email protected]>
Nice simplification, looks good.
Quoted 41 lines
arch/x86/pci/vmd.c +3
-12@@ -78,7 +78,6 @@ struct vmd_dev {char __iomem *cfgbar;int msix_count; -struct msix_entry *msix_entries;struct vmd_irq_list *irqs;struct pci_sysdata sysdata;@@ -679,16 +678,8 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)if (vmd->msix_count <0 )return -ENODEV ; - vmd->msix_entries =devm_kcalloc (&dev->dev, vmd->msix_count, -sizeof (*vmd->msix_entries), -GFP_KERNEL ); -if (!vmd->msix_entries) -return -ENOMEM ; -for (i =0 ; i < vmd->msix_count; i++) - vmd->msix_entries[i].entry = i; - - vmd->msix_count =pci_enable_msix_range (vmd->dev, vmd->msix_entries,1 , - vmd->msix_count); + vmd->msix_count =pci_alloc_irq_vectors (dev,1 , vmd->msix_count, +PCI_IRQ_MSIX |PCI_IRQ_AFFINITY );if (vmd->msix_count <0 )return vmd->msix_count;@@ -699,7 +690,7 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)for (i =0 ; i < vmd->msix_count; i++) {INIT_LIST_HEAD (&vmd->irqs[i].irq_list); - vmd->irqs[i].vmd_vector = vmd->msix_entries[i].vector; + vmd->irqs[i].vmd_vector =pci_irq_vector (dev, i); vmd->irqs[i].index = i; err = devm_request_irq(&dev->dev, vmd->irqs[i].vmd_vector,
Quoted 5 lines · Jon Derrick
To reduce the amount of memory required for irq lists, only allocate their space after calling
pci_msix_enable_rangewhich may reduce the number of msix vectors allocated.Signed-off-by Jon Derrick <[email protected]>
Looks good.
Bjorn Helgaas
AppliedQuoted 5 lines · Jon Derrick
To reduce the amount of memory required for irq lists, only allocate their space after calling
pci_msix_enable_rangewhich may reduce the number of msix vectors allocated.Signed-off-by Jon Derrick <[email protected]>
Applied both patches to pci/host-vmd for v4.9, with Keith's Reviewed-by, thanks!
Quoted 35 lines
--- arch/x86/pci/vmd.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)arch/x86/pci/vmd.c +5
-5@@ -679,11 +679,6 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)if (vmd->msix_count <0 )return -ENODEV ; - vmd->irqs =devm_kcalloc (&dev->dev, vmd->msix_count,sizeof (*vmd->irqs), -GFP_KERNEL ); -if (!vmd->irqs) -return -ENOMEM ; - vmd->msix_entries =devm_kcalloc (&dev->dev, vmd->msix_count,sizeof (*vmd->msix_entries),GFP_KERNEL );@@ -697,6 +692,11 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)if (vmd->msix_count <0 )return vmd->msix_count; + vmd->irqs =devm_kcalloc (&dev->dev, vmd->msix_count,sizeof (*vmd->irqs), +GFP_KERNEL ); +if (!vmd->irqs) +return -ENOMEM ; +for (i =0 ; i < vmd->msix_count; i++) {INIT_LIST_HEAD (&vmd->irqs[i].irq_list); vmd->irqs[i].vmd_vector = vmd->msix_entries[i].vector;Signature · 1 line
1.8.3.1