mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
vdpa: ifcvf: free config irq in ifcvf_free_irq()
We don't free config irq in ifcvf_free_irq() which will trigger a BUG() in pci core since we try to free the vectors that has an action. Fixing this by recording the config irq in ifcvf_hw structure and free it in ifcvf_free_irq(). Fixes:e7991f376a("ifcvf: implement config interrupt in IFCVF") Cc: Zhu Lingshan <lingshan.zhu@intel.com> Signed-off-by: Jason Wang <jasowang@redhat.com> Link: https://lore.kernel.org/r/20200723091254.20617-2-jasowang@redhat.com Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Zhu Lingshan <lingshan.zhu@intel.com> Fixes:e7991f376a("ifcvf: implement config interrupt in IFCVF") Cc: Zhu Lingshan <a class="moz-txt-link-rfc2396E" href="mailto:lingshan.zhu@intel.com"><lingshan.zhu@intel.com></a> Signed-off-by: Jason Wang <a class="moz-txt-link-rfc2396E" href="mailto:jasowang@redhat.com"><jasowang@redhat.com></a>
This commit is contained in:
committed by
Michael S. Tsirkin
parent
9f4ce5d72b
commit
2b9f28d5e8
@@ -84,7 +84,7 @@ struct ifcvf_hw {
|
|||||||
void __iomem * const *base;
|
void __iomem * const *base;
|
||||||
char config_msix_name[256];
|
char config_msix_name[256];
|
||||||
struct vdpa_callback config_cb;
|
struct vdpa_callback config_cb;
|
||||||
|
unsigned int config_irq;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ifcvf_adapter {
|
struct ifcvf_adapter {
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ static void ifcvf_free_irq(struct ifcvf_adapter *adapter, int queues)
|
|||||||
vf->vring[i].irq = -EINVAL;
|
vf->vring[i].irq = -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
devm_free_irq(&pdev->dev, vf->config_irq, vf);
|
||||||
ifcvf_free_irq_vectors(pdev);
|
ifcvf_free_irq_vectors(pdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,8 +75,8 @@ static int ifcvf_request_irq(struct ifcvf_adapter *adapter)
|
|||||||
snprintf(vf->config_msix_name, 256, "ifcvf[%s]-config\n",
|
snprintf(vf->config_msix_name, 256, "ifcvf[%s]-config\n",
|
||||||
pci_name(pdev));
|
pci_name(pdev));
|
||||||
vector = 0;
|
vector = 0;
|
||||||
irq = pci_irq_vector(pdev, vector);
|
vf->config_irq = pci_irq_vector(pdev, vector);
|
||||||
ret = devm_request_irq(&pdev->dev, irq,
|
ret = devm_request_irq(&pdev->dev, vf->config_irq,
|
||||||
ifcvf_config_changed, 0,
|
ifcvf_config_changed, 0,
|
||||||
vf->config_msix_name, vf);
|
vf->config_msix_name, vf);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
|||||||
Reference in New Issue
Block a user