Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
xen.10697
qemu-xen-upstream-free-all-pirqs-for-msi_msix-w...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File qemu-xen-upstream-free-all-pirqs-for-msi_msix-when-driver-unload.patch of Package xen.10697
References: bsc#1032598 Subject: qemu-xen: free all the pirqs for msi/msix when driver unload From: Zhenzhong Duan zhenzhong.duan@oracle.com Wed May 7 13:41:48 2014 +0000 Date: Wed May 7 16:14:41 2014 +0000: Git: c976437c7dba9c7444fb41df45468968aaa326ad Pirqs are not freed when driver unload, then new pirqs are allocated when driver reload. This could exhaust pirqs if do it in a loop. This patch fixes the bug by freeing pirqs when ENABLE bit is cleared in msi/msix control reg. There is also other way of fixing it such as reuse pirqs between driver reload, but this way is better. Xen-devel: http://marc.info/?l=xen-devel&m=136800120304275&w=2 Signed-off-by: Zhenzhong Duan <zhenzhong.duan@oracle.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Index: xen-4.4.4-testing/tools/qemu-xen-dir-remote/hw/xen/xen_pt_config_init.c =================================================================== --- xen-4.4.4-testing.orig/tools/qemu-xen-dir-remote/hw/xen/xen_pt_config_init.c +++ xen-4.4.4-testing/tools/qemu-xen-dir-remote/hw/xen/xen_pt_config_init.c @@ -1109,8 +1109,8 @@ static int xen_pt_msgctrl_reg_write(XenP msi->mapped = true; } msi->flags |= PCI_MSI_FLAGS_ENABLE; - } else { - msi->flags &= ~PCI_MSI_FLAGS_ENABLE; + } else if (msi->mapped) { + xen_pt_msi_disable(s); } return 0; @@ -1451,6 +1451,8 @@ static int xen_pt_msixctrl_reg_write(Xen if ((*val & PCI_MSIX_FLAGS_ENABLE) && !(*val & PCI_MSIX_FLAGS_MASKALL)) { xen_pt_msix_update(s); + } else if (!(*val & PCI_MSIX_FLAGS_ENABLE) && s->msix->enabled) { + xen_pt_msix_disable(s); } debug_msix_enabled_old = s->msix->enabled; Index: xen-4.4.4-testing/tools/qemu-xen-dir-remote/hw/xen/xen_pt_msi.c =================================================================== --- xen-4.4.4-testing.orig/tools/qemu-xen-dir-remote/hw/xen/xen_pt_msi.c +++ xen-4.4.4-testing/tools/qemu-xen-dir-remote/hw/xen/xen_pt_msi.c @@ -282,7 +282,8 @@ void xen_pt_msi_disable(XenPCIPassthroug msi->initialized); /* clear msi info */ - msi->flags = 0; + msi->flags &= ~PCI_MSI_FLAGS_ENABLE; + msi->initialized = false; msi->mapped = false; msi->pirq = XEN_PT_UNASSIGNED_PIRQ; } @@ -445,7 +446,8 @@ static void pci_msix_write(void *opaque, if (offset != PCI_MSIX_ENTRY_VECTOR_CTRL) { const volatile uint32_t *vec_ctrl; - if (get_entry_value(entry, offset) == val) { + if (get_entry_value(entry, offset) == val + && entry->pirq != XEN_PT_UNASSIGNED_PIRQ) { return; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor