PERFORCE change 230995 for review
    John Baldwin 
    jhb at FreeBSD.org
       
    Thu Jul 11 03:30:01 UTC 2013
    
    
  
http://p4web.freebsd.org/@@230995?ac=10
Change 230995 by jhb at jhb_pippin on 2013/07/11 03:29:51
	- Partial cardbus updates for the bus renumbering bits.
	- Don't leak PCI bus number resources.
Affected files ...
.. //depot/projects/pci/sys/dev/cardbus/cardbus.c#8 edit
.. //depot/projects/pci/sys/dev/cardbus/cardbusvar.h#3 edit
.. //depot/projects/pci/sys/dev/pccbb/pccbb.c#5 edit
.. //depot/projects/pci/sys/dev/pccbb/pccbb_pci.c#5 edit
.. //depot/projects/pci/sys/dev/pci/pci.c#43 edit
Differences ...
==== //depot/projects/pci/sys/dev/cardbus/cardbus.c#8 (text+ko) ====
@@ -96,17 +96,36 @@
 cardbus_attach(device_t cbdev)
 {
 	struct cardbus_softc *sc;
+#ifdef PCI_RES_BUS
+	int rid;
+#endif
 
 	sc = device_get_softc(cbdev);
 	sc->sc_dev = cbdev;
+#ifdef PCI_RES_BUS
+	rid = 0;
+	sc->sc_bus = bus_alloc_resource(cbdev, PCI_RES_BUS, &rid,
+	    pcib_get_bus(cbdev), pcib_get_bus(cbdev), 1, 0);
+	if (sc->sc_bus == NULL) {
+		device_printf(cbdev, "failed to allocate bus number\n");
+		return (ENXIO);
+	}
+#endif
 	return (0);
 }
 
 static int
 cardbus_detach(device_t cbdev)
 {
+#ifdef PCI_RES_BUS
+	struct cardbus_softc *sc;
+#endif
 
 	cardbus_detach_card(cbdev);
+#ifdef PCI_RES_BUS
+	sc = device_get_softc(cbdev);
+	(void)bus_release_resource(cbdev, PCI_RES_BUS, 0, sc->sc_bus));
+#endif
 	return (0);
 }
 
==== //depot/projects/pci/sys/dev/cardbus/cardbusvar.h#3 (text+ko) ====
@@ -69,6 +69,9 @@
 struct cardbus_softc 
 {
 	device_t	sc_dev;
+#ifdef PCI_RES_BUS
+	struct resource *sc_bus;
+#endif
 };
 
 /*
==== //depot/projects/pci/sys/dev/pccbb/pccbb.c#5 (text+ko) ====
@@ -1203,6 +1203,9 @@
 	u_long align;
 
 	switch (type) {
+#if defined(NEW_PCIB) && defined(PCI_RES_BUS)
+		/* XXX: PCI_RES_BUS handling */
+#endif
 	case SYS_RES_IRQ:
 		tmp = rman_get_start(sc->irq_res);
 		if (start > tmp || end < tmp || count != 1) {
==== //depot/projects/pci/sys/dev/pccbb/pccbb_pci.c#5 (text+ko) ====
@@ -321,6 +321,9 @@
 	sc->secbus = pci_read_config(brdev, PCIR_SECBUS_2, 1);
 	sc->subbus = pci_read_config(brdev, PCIR_SUBBUS_2, 1);
 	sc->pribus = pcib_get_bus(parent);
+#if defined(NEW_PCIB) && defined(PCI_RES_BUS)
+	/* XXX: Need something like pci_setup_secbus() here. */
+#endif
 	SLIST_INIT(&sc->rl);
 	cbb_powerstate_d0(brdev);
 
==== //depot/projects/pci/sys/dev/pci/pci.c#43 (text+ko) ====
@@ -3868,6 +3868,10 @@
 		pci_printf(&dinfo->cfg, "Device leaked memory resources\n");
 	if (resource_list_release_active(rl, dev, child, SYS_RES_IOPORT) != 0)
 		pci_printf(&dinfo->cfg, "Device leaked I/O resources\n");
+#ifdef PCI_RES_BUS
+	if (resource_list_release_active(rl, dev, child, PCI_RES_BUS) != 0)
+		pci_printf(&dinfo->cfg, "Device leaked PCI bus numbers\n");
+#endif
 
 	pci_cfg_save(child, dinfo, 1);
 }
    
    
More information about the p4-projects
mailing list