Page MenuHomeFreeBSD

D26913.id78621.diff
No OneTemporary

D26913.id78621.diff

Index: sys/dev/usb/controller/xhci_pci.c
===================================================================
--- sys/dev/usb/controller/xhci_pci.c
+++ sys/dev/usb/controller/xhci_pci.c
@@ -277,21 +277,29 @@
rid = 0;
if (xhci_use_msix && (msix_table = pci_msix_table_bar(self)) >= 0) {
- sc->sc_msix_res = bus_alloc_resource_any(self, SYS_RES_MEMORY,
- &msix_table, RF_ACTIVE);
- if (sc->sc_msix_res == NULL) {
- /* May not be enabled */
- device_printf(self,
- "Unable to map MSI-X table \n");
+ if (msix_table == PCI_XHCI_CBMEM) {
+ sc->sc_msix_res = sc->sc_io_res;
} else {
+ sc->sc_msix_res = bus_alloc_resource_any(self,
+ SYS_RES_MEMORY, &msix_table, RF_ACTIVE);
+ if (sc->sc_msix_res == NULL) {
+ /* May not be enabled */
+ device_printf(self,
+ "Unable to map MSI-X table \n");
+ }
+ }
+ if (sc->sc_msix_res != NULL) {
count = 1;
if (pci_alloc_msix(self, &count) == 0) {
if (bootverbose)
device_printf(self, "MSI-X enabled\n");
rid = 1;
} else {
- bus_release_resource(self, SYS_RES_MEMORY,
- msix_table, sc->sc_msix_res);
+ if (sc->sc_msix_res != sc->sc_io_res) {
+ bus_release_resource(self,
+ SYS_RES_MEMORY,
+ msix_table, sc->sc_msix_res);
+ }
sc->sc_msix_res = NULL;
}
}
@@ -387,16 +395,16 @@
sc->sc_irq_res = NULL;
pci_release_msi(self);
}
+ if (sc->sc_msix_res != NULL && sc->sc_msix_res != sc->sc_io_res) {
+ bus_release_resource(self, SYS_RES_MEMORY,
+ rman_get_rid(sc->sc_msix_res), sc->sc_msix_res);
+ sc->sc_msix_res = NULL;
+ }
if (sc->sc_io_res) {
bus_release_resource(self, SYS_RES_MEMORY, PCI_XHCI_CBMEM,
sc->sc_io_res);
sc->sc_io_res = NULL;
}
- if (sc->sc_msix_res) {
- bus_release_resource(self, SYS_RES_MEMORY,
- rman_get_rid(sc->sc_msix_res), sc->sc_msix_res);
- sc->sc_msix_res = NULL;
- }
xhci_uninit(sc);

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 21, 6:50 AM (1 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30068052
Default Alt Text
D26913.id78621.diff (1 KB)

Event Timeline