Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Aug 2009 08:29:41 GMT
From:      Marko Zec <zec@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 167019 for review
Message-ID:  <200908050829.n758TfWc088510@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=167019

Change 167019 by zec@zec_tpx32 on 2009/08/05 08:29:02

	IFC @ 167016

Affected files ...

.. //depot/projects/vimage-commit2/src/sys/amd64/amd64/machdep.c#15 integrate
.. //depot/projects/vimage-commit2/src/sys/contrib/pf/net/pf.c#18 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/aac/aac.c#5 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi.c#12 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_battery.c#4 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_cpu.c#6 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_dock.c#3 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_thermal.c#3 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/adb/adb_bus.c#5 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/amdtemp/amdtemp.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/amr/amr.c#6 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/ata/ata-all.c#9 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/atkbdc/psm.c#7 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/bktr/bktr_os.c#4 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c#25 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/drm/drm_drv.c#13 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/ips/ips_pci.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/mfi/mfi.c#9 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/mlx/mlx.c#6 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/mmc/mmc.c#10 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/pccbb/pccbb.c#7 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/pst/pst-iop.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/rp/rp.c#4 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/sound/pci/hda/hdac.c#19 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/twe/twe.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/usb/controller/usb_controller.c#13 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/usb/input/ukbd.c#12 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/usb/net/usb_ethernet.c#7 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_compat_linux.c#12 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_dev.c#13 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_handle_request.c#12 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_hub.c#16 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/usb/wlan/if_upgt.c#7 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/xen/blkback/blkback.c#4 integrate
.. //depot/projects/vimage-commit2/src/sys/dev/xen/netback/netback.c#3 integrate
.. //depot/projects/vimage-commit2/src/sys/i386/acpica/acpi_machdep.c#7 integrate
.. //depot/projects/vimage-commit2/src/sys/i386/bios/smapi.c#4 integrate
.. //depot/projects/vimage-commit2/src/sys/i386/bios/smbios.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/i386/bios/vpd.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/i386/i386/machdep.c#15 integrate
.. //depot/projects/vimage-commit2/src/sys/kern/kern_uuid.c#16 integrate
.. //depot/projects/vimage-commit2/src/sys/kern/subr_bus.c#11 integrate
.. //depot/projects/vimage-commit2/src/sys/kern/tty_pts.c#14 integrate
.. //depot/projects/vimage-commit2/src/sys/kern/tty_ttydisc.c#8 integrate
.. //depot/projects/vimage-commit2/src/sys/net/if_bridge.c#23 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/icmp6.h#7 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/icmp_var.h#6 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/in_gif.c#18 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/in_pcb.h#24 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/ip_divert.c#35 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/ip_icmp.c#22 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/ip_input.c#50 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/ip_var.h#22 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/tcp_input.c#43 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/tcp_var.h#21 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/udp_usrreq.c#46 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet/udp_var.h#12 integrate
.. //depot/projects/vimage-commit2/src/sys/netinet6/icmp6.c#34 integrate
.. //depot/projects/vimage-commit2/src/sys/pc98/cbus/fdc.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/sys/bus.h#4 integrate
.. //depot/projects/vimage-commit2/src/sys/sys/param.h#51 integrate
.. //depot/projects/vimage-commit2/src/sys/xen/xenbus/xenbus_probe.c#7 integrate

Differences ...

==== //depot/projects/vimage-commit2/src/sys/amd64/amd64/machdep.c#15 (text+ko) ====

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.706 2009/07/27 13:51:55 rpaulo Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.707 2009/08/02 11:26:23 ed Exp $");
 
 #include "opt_atalk.h"
 #include "opt_atpic.h"
@@ -214,6 +214,7 @@
 	sysenv = getenv("smbios.system.product");
 	if (sysenv != NULL) {
 		if (strncmp(sysenv, "MacBook1,1", 10) == 0 ||
+		    strncmp(sysenv, "MacBook3,1", 10) == 0 ||
 		    strncmp(sysenv, "MacBookPro1,1", 13) == 0 ||
 		    strncmp(sysenv, "MacBookPro1,2", 13) == 0 ||
 		    strncmp(sysenv, "Macmini1,1", 10) == 0) {

==== //depot/projects/vimage-commit2/src/sys/contrib/pf/net/pf.c#18 (text+ko) ====

@@ -41,7 +41,7 @@
 #include "opt_inet6.h"
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/contrib/pf/net/pf.c,v 1.68 2009/08/01 19:26:27 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/contrib/pf/net/pf.c,v 1.69 2009/08/02 19:43:32 rwatson Exp $");
 #endif
 
 #ifdef __FreeBSD__
@@ -6141,7 +6141,7 @@
 	if (r->rt == PF_FASTROUTE) {
 		in_rtalloc(ro, 0);
 		if (ro->ro_rt == 0) {
-			IPSTAT_INC(ips_noroute);
+			KMOD_IPSTAT_INC(ips_noroute);
 			goto bad;
 		}
 
@@ -6272,16 +6272,16 @@
 		if ((ifp->if_capabilities & IFCAP_CSUM_IPv4) &&
 		    ifp->if_bridge == NULL) {
 			m0->m_pkthdr.csum_flags |= M_IPV4_CSUM_OUT;
-			IPSTAT_INC(ips_outhwcsum);
+			KMOD_IPSTAT_INC(ips_outhwcsum);
 		} else {
 			ip->ip_sum = 0;
 			ip->ip_sum = in_cksum(m0, ip->ip_hl << 2);
 		}
 		/* Update relevant hardware checksum stats for TCP/UDP */
 		if (m0->m_pkthdr.csum_flags & M_TCPV4_CSUM_OUT)
-			TCPSTAT_INC(tcpstat.tcps_outhwcsum);
+			KMOD_TCPSTAT_INC(tcps_outhwcsum);
 		else if (m0->m_pkthdr.csum_flags & M_UDPV4_CSUM_OUT)
-			UDPSTAT_INC(udps_outhwcsum);
+			KMOD_UDPSTAT_INC(udps_outhwcsum);
 		error = (*ifp->if_output)(ifp, m0, sintosa(dst), NULL);
 		goto done;
 	}
@@ -6291,7 +6291,7 @@
 	 * Must be able to put at least 8 bytes per fragment.
 	 */
 	if (ip->ip_off & htons(IP_DF)) {
-		IPSTAT_INC(ips_cantfrag);
+		KMOD_IPSTAT_INC(ips_cantfrag);
 		if (r->rt != PF_DUPTO) {
 #ifdef __FreeBSD__
 			/* icmp_error() expects host byte ordering */
@@ -6348,7 +6348,7 @@
 	}
 
 	if (error == 0)
-		IPSTAT_INC(ips_fragmented);
+		KMOD_IPSTAT_INC(ips_fragmented);
 
 done:
 	if (r->rt != PF_DUPTO)
@@ -6622,23 +6622,23 @@
 		switch (p) {
 		case IPPROTO_TCP:
 		    {
-			TCPSTAT_INC(tcps_rcvbadsum);
+			KMOD_TCPSTAT_INC(tcps_rcvbadsum);
 			break;
 		    }
 		case IPPROTO_UDP:
 		    {
-			UDPSTAT_INC(udps_badsum);
+			KMOD_UDPSTAT_INC(udps_badsum);
 			break;
 		    }
 		case IPPROTO_ICMP:
 		    {
-			ICMPSTAT_INC(icps_checksum);
+			KMOD_ICMPSTAT_INC(icps_checksum);
 			break;
 		    }
 #ifdef INET6
 		case IPPROTO_ICMPV6:
 		    {
-			ICMP6STAT_INC(icp6s_checksum);
+			KMOD_ICMP6STAT_INC(icp6s_checksum);
 			break;
 		    }
 #endif /* INET6 */
@@ -6725,17 +6725,17 @@
 		m->m_pkthdr.csum_flags |= flag_bad;
 		switch (p) {
 		case IPPROTO_TCP:
-			TCPSTAT_INC(tcps_rcvbadsum);
+			KMOD_TCPSTAT_INC(tcps_rcvbadsum);
 			break;
 		case IPPROTO_UDP:
-			UDPSTAT_INC(udps_badsum);
+			KMOD_UDPSTAT_INC(udps_badsum);
 			break;
 		case IPPROTO_ICMP:
-			ICMPSTAT_INC(icps_checksum);
+			KMOD_ICMPSTAT_INC(icps_checksum);
 			break;
 #ifdef INET6
 		case IPPROTO_ICMPV6:
-			ICMP6STAT_INC(icp6s_checksum);
+			KMOD_ICMP6STAT_INC(icp6s_checksum);
 			break;
 #endif /* INET6 */
 		}

==== //depot/projects/vimage-commit2/src/sys/dev/aac/aac.c#5 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/aac/aac.c,v 1.142 2009/05/20 17:29:21 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/aac/aac.c,v 1.143 2009/08/02 14:28:40 attilio Exp $");
 
 /*
  * Driver for the Adaptec 'FSA' family of PCI/SCSI RAID adapters.
@@ -3270,10 +3270,10 @@
 			while (co != NULL) {
 				if (co->co_found == 0) {
 					mtx_unlock(&sc->aac_io_lock);
-					mtx_lock(&Giant);
+					newbus_xlock();
 					device_delete_child(sc->aac_dev,
 							    co->co_disk);
-					mtx_unlock(&Giant);
+					newbus_xunlock();
 					mtx_lock(&sc->aac_io_lock);
 					co_next = TAILQ_NEXT(co, co_link);
 					mtx_lock(&sc->aac_container_lock);
@@ -3291,9 +3291,9 @@
 			/* Attach the newly created containers */
 			if (added) {
 				mtx_unlock(&sc->aac_io_lock);
-				mtx_lock(&Giant);
+				newbus_xlock();
 				bus_generic_attach(sc->aac_dev);
-				mtx_unlock(&Giant);
+				newbus_xunlock();
 				mtx_lock(&sc->aac_io_lock);
 			}
 

==== //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi.c#12 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi.c,v 1.264 2009/06/05 18:44:36 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi.c,v 1.265 2009/08/02 14:28:40 attilio Exp $");
 
 #include "opt_acpi.h"
 #include <sys/param.h>
@@ -675,8 +675,6 @@
     device_t child, *devlist;
     int error, i, numdevs, pstate;
 
-    GIANT_REQUIRED;
-
     /* First give child devices a chance to suspend. */
     error = bus_generic_suspend(dev);
     if (error)
@@ -719,8 +717,6 @@
     int i, numdevs, error;
     device_t child, *devlist;
 
-    GIANT_REQUIRED;
-
     /*
      * Put all devices in D0 before resuming them.  Call _S0D on each one
      * since some systems expect this.
@@ -745,8 +741,6 @@
 acpi_shutdown(device_t dev)
 {
 
-    GIANT_REQUIRED;
-
     /* Allow children to shutdown first. */
     bus_generic_shutdown(dev);
 
@@ -2534,11 +2528,7 @@
     thread_unlock(curthread);
 #endif
 
-    /*
-     * Be sure to hold Giant across DEVICE_SUSPEND/RESUME since non-MPSAFE
-     * drivers need this.
-     */
-    mtx_lock(&Giant);
+    newbus_xlock();
 
     slp_state = ACPI_SS_NONE;
 
@@ -2611,7 +2601,7 @@
     if (slp_state >= ACPI_SS_SLEPT)
 	acpi_enable_fixed_events(sc);
 
-    mtx_unlock(&Giant);
+    newbus_xunlock();
 
 #ifdef SMP
     thread_lock(curthread);

==== //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_battery.c#4 (text+ko) ====

@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_battery.c,v 1.28 2009/06/05 18:44:36 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_battery.c,v 1.29 2009/08/02 14:28:40 attilio Exp $");
 
 #include "opt_acpi.h"
 #include <sys/param.h>
@@ -329,6 +329,7 @@
 
     dev = NULL;
     found_unit = 0;
+    newbus_slock();
     batt_dc = devclass_find("battery");
     maxunit = devclass_get_maxunit(batt_dc);
     for (i = 0; i < maxunit; i++) {
@@ -340,6 +341,7 @@
 	found_unit++;
 	dev = NULL;
     }
+    newbus_sunlock();
 
     return (dev);
 }
@@ -369,13 +371,17 @@
      */
     switch (cmd) {
     case ACPIIO_BATT_GET_UNITS:
+	newbus_slock();
 	*(int *)addr = acpi_battery_get_units();
+	newbus_sunlock();
 	error = 0;
 	break;
     case ACPIIO_BATT_GET_BATTINFO:
 	if (dev != NULL || unit == ACPI_BATTERY_ALL_UNITS) {
 	    bzero(&ioctl_arg->battinfo, sizeof(ioctl_arg->battinfo));
+	    newbus_slock();
 	    error = acpi_battery_get_battinfo(dev, &ioctl_arg->battinfo);
+	    newbus_sunlock();
 	}
 	break;
     case ACPIIO_BATT_GET_BIF:
@@ -416,6 +422,11 @@
 {
     int val, error;
 
+    /*
+     * Tolerate a race here because newbus lock can't be acquired before
+     * acpi_battery_get_battinfo() as it can create a LOR with the sysctl
+     * lock.
+     */
     acpi_battery_get_battinfo(NULL, &acpi_battery_battinfo);
     val = *(u_int *)oidp->oid_arg1;
     error = sysctl_handle_int(oidp, &val, 0, req);
@@ -427,6 +438,10 @@
 {
     int count, error;
 
+    /*
+     * Tolerate a race here in order to avoid a LOR between sysctl lock
+     * and newbus lock.
+     */
     count = acpi_battery_get_units();
     error = sysctl_handle_int(oidp, &count, 0, req);
     return (error);

==== //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_cpu.c#6 (text+ko) ====

@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_cpu.c,v 1.78 2009/06/05 18:44:36 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_cpu.c,v 1.79 2009/08/02 14:28:40 attilio Exp $");
 
 #include "opt_acpi.h"
 #include <sys/param.h>
@@ -732,7 +732,9 @@
     int i;
 
     /* Get set of CPU devices */
+    newbus_slock();
     devclass_get_devices(acpi_cpu_devclass, &cpu_devices, &cpu_ndevices);
+    newbus_sunlock();
 
     /*
      * Setup any quirks that might necessary now that we have probed

==== //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_dock.c#3 (text) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/acpica/acpi_dock.c,v 1.7 2009/06/05 18:44:36 jkim Exp $
+ * $FreeBSD: src/sys/dev/acpica/acpi_dock.c,v 1.8 2009/08/02 14:28:40 attilio Exp $
  */
 
 #include "opt_acpi.h"
@@ -188,12 +188,12 @@
 
 	dev = (device_t)context;
 
+	newbus_xlock();
 	if (!device_is_enabled(dev))
 		device_enable(dev);
 
-	mtx_lock(&Giant);
 	device_probe_and_attach(dev);
-	mtx_unlock(&Giant);
+	newbus_xunlock();
 }
 
 static ACPI_STATUS
@@ -299,11 +299,11 @@
 	    "ejecting device for %s\n", acpi_name(handle));
 
 	dev = acpi_get_device(handle);
+	newbus_xlock();
 	if (dev != NULL && device_is_attached(dev)) {
-		mtx_lock(&Giant);
 		device_detach(dev);
-		mtx_unlock(&Giant);
 	}
+	newbus_xunlock();
 
 	acpi_SetInteger(handle, "_EJ0", 0);
 out:

==== //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_thermal.c#3 (text+ko) ====

@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_thermal.c,v 1.71 2009/06/05 18:44:36 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_thermal.c,v 1.72 2009/08/02 14:28:40 attilio Exp $");
 
 #include "opt_acpi.h"
 #include <sys/param.h>
@@ -936,6 +936,8 @@
     sc = NULL;
 
     for (;;) {
+	newbus_slock();
+
 	/* If the number of devices has changed, re-evaluate. */
 	if (devclass_get_count(acpi_tz_devclass) != devcount) {
 	    if (devs != NULL) {
@@ -948,6 +950,7 @@
 	    for (i = 0; i < devcount; i++)
 		sc[i] = device_get_softc(devs[i]);
 	}
+	newbus_sunlock();
 
 	/* Check for temperature events and act on them. */
 	for (i = 0; i < devcount; i++) {

==== //depot/projects/vimage-commit2/src/sys/dev/adb/adb_bus.c#5 (text+ko) ====

@@ -22,7 +22,7 @@
  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/adb/adb_bus.c,v 1.4 2008/12/06 23:26:02 nwhitehorn Exp $
+ * $FreeBSD: src/sys/dev/adb/adb_bus.c,v 1.5 2009/08/02 14:28:40 attilio Exp $
  */
 
 #include <sys/cdefs.h>
@@ -113,6 +113,7 @@
 	uint8_t i, next_free;
 	uint16_t r3;
 
+	newbus_xlock();
 	sc->sc_dev = dev;
 	sc->parent = device_get_parent(dev);
 
@@ -187,6 +188,7 @@
 	}
 
 	bus_generic_attach(dev);
+	newbus_xunlock();
 
 	config_intrhook_disestablish(&sc->enum_hook);
 }

==== //depot/projects/vimage-commit2/src/sys/dev/amdtemp/amdtemp.c#2 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/amdtemp/amdtemp.c,v 1.3 2009/03/13 16:43:31 rpaulo Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/amdtemp/amdtemp.c,v 1.4 2009/08/02 14:28:40 attilio Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -269,6 +269,7 @@
 	/*
 	 * dev.cpu.N.temperature.
 	 */
+	newbus_xlock();
 	nexus = device_find_child(root_bus, "nexus", 0);
 	acpi = device_find_child(nexus, "acpi", 0);
 
@@ -285,6 +286,7 @@
 			    "Max of sensor 0 / 1");
 		}
 	}
+	newbus_xunlock();
 	config_intrhook_disestablish(&sc->sc_ich);
 }
 

==== //depot/projects/vimage-commit2/src/sys/dev/amr/amr.c#6 (text+ko) ====

@@ -56,7 +56,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/amr/amr.c,v 1.89 2009/05/20 17:29:21 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/amr/amr.c,v 1.90 2009/08/02 14:28:40 attilio Exp $");
 
 /*
  * Driver for the AMI MegaRaid family of controllers.
@@ -90,6 +90,10 @@
 
 SYSCTL_NODE(_hw, OID_AUTO, amr, CTLFLAG_RD, 0, "AMR driver parameters");
 
+/*
+ * In order to get rid of Giant, amr_state should be protected by
+ * a proper softc lock for the cdev operations.
+ */
 static d_open_t         amr_open;
 static d_close_t        amr_close;
 static d_ioctl_t        amr_ioctl;
@@ -312,9 +316,11 @@
 	config_intrhook_disestablish(&sc->amr_ich);
     sc->amr_ich.ich_func = NULL;
 
+    newbus_xlock();
     /* get up-to-date drive information */
     if (amr_query_controller(sc)) {
 	device_printf(sc->amr_dev, "can't scan controller for drives\n");
+	newbus_xunlock();
 	return;
     }
 
@@ -347,6 +353,7 @@
 
     /* interrupts will be enabled before we do anything more */
     sc->amr_state |= AMR_STATE_INTEN;
+    newbus_xunlock();
 
     /*
      * Start the timeout routine.
@@ -434,7 +441,11 @@
 amr_open(struct cdev *dev, int flags, int fmt, struct thread *td)
 {
     int			unit = dev2unit(dev);
-    struct amr_softc	*sc = devclass_get_softc(devclass_find("amr"), unit);
+    struct amr_softc	*sc;
+
+    newbus_slock();
+    sc = devclass_get_softc(devclass_find("amr"), unit);
+    newbus_sunlock();
 
     debug_called(1);
 
@@ -490,7 +501,11 @@
 amr_close(struct cdev *dev, int flags, int fmt, struct thread *td)
 {
     int			unit = dev2unit(dev);
-    struct amr_softc	*sc = devclass_get_softc(devclass_find("amr"), unit);
+    struct amr_softc	*sc;
+
+    newbus_slock();
+    sc = devclass_get_softc(devclass_find("amr"), unit);
+    newbus_sunlock();
 
     debug_called(1);
 
@@ -507,6 +522,7 @@
     struct amr_softc	*sc = (struct amr_softc *)dev->si_drv1;
     int			i, error = 0;
 
+    newbus_xlock();
     sc->amr_state |= AMR_STATE_REMAP_LD;
     while (sc->amr_busyslots) {
 	device_printf(sc->amr_dev, "idle controller\n");
@@ -530,6 +546,7 @@
 	     sc->amr_drive[i].al_disk = 0;
 	}
     }
+    newbus_xunlock();
 
 shutdown_out:
     amr_startup(sc);
@@ -805,7 +822,9 @@
 	    struct amr_linux_ioctl	ali;
 	    int				adapter, error;
 
+	    newbus_slock();
 	    devclass = devclass_find("amr");
+	    newbus_sunlock();
 	    if (devclass == NULL)
 		return (ENOENT);
 

==== //depot/projects/vimage-commit2/src/sys/dev/ata/ata-all.c#9 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/ata-all.c,v 1.307 2009/07/26 14:04:48 mav Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/ata-all.c,v 1.308 2009/08/02 14:28:40 attilio Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -54,7 +54,6 @@
 static  d_ioctl_t       ata_ioctl;
 static struct cdevsw ata_cdevsw = {
 	.d_version =    D_VERSION,
-	.d_flags =      D_NEEDGIANT, /* we need this as newbus isn't mpsafe */
 	.d_ioctl =      ata_ioctl,
 	.d_name =       "ata",
 };
@@ -204,7 +203,9 @@
 {
     device_t dev = (device_t)context;
 
+    newbus_xlock();
     ata_reinit(dev);
+    newbus_xunlock();
 }
 
 int
@@ -246,7 +247,6 @@
 
     /* reinit the children and delete any that fails */
     if (!device_get_children(dev, &children, &nchildren)) {
-	mtx_lock(&Giant);       /* newbus suckage it needs Giant */
 	for (i = 0; i < nchildren; i++) {
 	    /* did any children go missing ? */
 	    if (children[i] && device_is_attached(children[i]) &&
@@ -269,7 +269,6 @@
 	    }
 	}
 	free(children, M_TEMP);
-	mtx_unlock(&Giant);     /* newbus suckage dealt with, release Giant */
     }
 
     /* if we still have a good request put it on the queue again */
@@ -395,6 +394,7 @@
     int *value = (int *)data;
     int i, nchildren, error = ENOTTY;
 
+    newbus_xlock();
     switch (cmd) {
     case IOCATAGMAXCHANNEL:
 	/* In case we have channel 0..n this will return n+1. */
@@ -405,32 +405,40 @@
     case IOCATAREINIT:
 	if (*value >= devclass_get_maxunit(ata_devclass) ||
 	    !(device = devclass_get_device(ata_devclass, *value)) ||
-	    !device_is_attached(device))
+	    !device_is_attached(device)) {
+            newbus_xunlock();
 	    return ENXIO;
+	}
 	error = ata_reinit(device);
 	break;
 
     case IOCATAATTACH:
 	if (*value >= devclass_get_maxunit(ata_devclass) ||
 	    !(device = devclass_get_device(ata_devclass, *value)) ||
-	    !device_is_attached(device))
+	    !device_is_attached(device)) {
+            newbus_xunlock();
 	    return ENXIO;
+	}
 	error = DEVICE_ATTACH(device);
 	break;
 
     case IOCATADETACH:
 	if (*value >= devclass_get_maxunit(ata_devclass) ||
 	    !(device = devclass_get_device(ata_devclass, *value)) ||
-	    !device_is_attached(device))
+	    !device_is_attached(device)) {
+            newbus_xunlock();
 	    return ENXIO;
+	}
 	error = DEVICE_DETACH(device);
 	break;
 
     case IOCATADEVICES:
 	if (devices->channel >= devclass_get_maxunit(ata_devclass) ||
 	    !(device = devclass_get_device(ata_devclass, devices->channel)) ||
-	    !device_is_attached(device))
+	    !device_is_attached(device)) {
+            newbus_xunlock();
 	    return ENXIO;
+	}
 	bzero(devices->name[0], 32);
 	bzero(&devices->params[0], sizeof(struct ata_params));
 	bzero(devices->name[1], 32);
@@ -465,6 +473,7 @@
 	if (ata_raid_ioctl_func)
 	    error = ata_raid_ioctl_func(cmd, data);
     }
+    newbus_xunlock();
     return error;
 }
 
@@ -572,7 +581,7 @@
     struct ata_channel *ch;
     int ctlr;
 
-    mtx_lock(&Giant);       /* newbus suckage it needs Giant */
+    newbus_xlock();
 
     /* kick of probe and attach on all channels */
     for (ctlr = 0; ctlr < devclass_get_maxunit(ata_devclass); ctlr++) {
@@ -587,8 +596,7 @@
 	free(ata_delayed_attach, M_TEMP);
 	ata_delayed_attach = NULL;
     }
-
-    mtx_unlock(&Giant);     /* newbus suckage dealt with, release Giant */
+    newbus_xunlock();
 }
 
 
@@ -717,7 +725,6 @@
     if (bootverbose)
 	device_printf(dev, "Identifying devices: %08x\n", ch->devices);
 
-    mtx_lock(&Giant);
     /* Skip existing devices. */
     if (!device_get_children(dev, &children, &nchildren)) {
 	for (i = 0; i < nchildren; i++) {
@@ -729,10 +736,8 @@
     /* Create new devices. */
     if (bootverbose)
 	device_printf(dev, "New devices: %08x\n", n);
-    if (n == 0) {
-	mtx_unlock(&Giant);
+    if (n == 0)
 	return (0);
-    }
     for (i = 0; i < ATA_PM; ++i) {
 	if (n & (((ATA_ATA_MASTER | ATA_ATAPI_MASTER) << i))) {
 	    int unit = -1;
@@ -775,7 +780,6 @@
     }
     bus_generic_probe(dev);
     bus_generic_attach(dev);
-    mtx_unlock(&Giant);
     return 0;
 }
 

==== //depot/projects/vimage-commit2/src/sys/dev/atkbdc/psm.c#7 (text+ko) ====

@@ -59,7 +59,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/atkbdc/psm.c,v 1.103 2009/03/16 08:21:51 rnoland Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/atkbdc/psm.c,v 1.104 2009/08/02 14:28:40 attilio Exp $");
 
 #include "opt_isa.h"
 #include "opt_psm.h"
@@ -1488,7 +1488,9 @@
 	if (sc->state & PSM_OPEN)
 		return (EBUSY);
 
+	newbus_xlock();
 	device_busy(devclass_get_device(psm_devclass, unit));
+	newbus_xunlock();
 
 	/* Initialize state */
 	sc->mode.level = sc->dflt_mode.level;
@@ -1643,7 +1645,9 @@
 	/* close is almost always successful */
 	sc->state &= ~PSM_OPEN;
 	kbdc_lock(sc->kbdc, FALSE);
+	newbus_xlock();
 	device_unbusy(devclass_get_device(psm_devclass, unit));
+	newbus_xunlock();
 	return (0);
 }
 

==== //depot/projects/vimage-commit2/src/sys/dev/bktr/bktr_os.c#4 (text+ko) ====

@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/bktr/bktr_os.c,v 1.57 2009/05/26 12:01:37 ed Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/bktr/bktr_os.c,v 1.58 2009/08/02 14:28:40 attilio Exp $");
 
 /*
  * This is part of the Driver for Video Capture Cards (Frame grabbers)
@@ -597,7 +597,9 @@
 		return( ENXIO );	
 
 	/* Record that the device is now busy */
+	newbus_xlock();
 	device_busy(devclass_get_device(bktr_devclass, unit)); 
+	newbus_xunlock();
 
 
 	if (bt848_card != -1) {
@@ -668,8 +670,11 @@
 	}
 
 	/* If there was an error opening the device, undo the busy status */
-	if (result != 0)
+	if (result != 0) {
+		newbus_xlock();
 		device_unbusy(devclass_get_device(bktr_devclass, unit)); 
+		newbus_xunlock();
+	}
 	return( result );
 }
 
@@ -689,6 +694,7 @@
 	/* Get the device data */
 	bktr = (struct bktr_softc*)devclass_get_softc(bktr_devclass, unit);
 	if (bktr == NULL) {
+
 		/* the device is no longer valid/functioning */
 		return (ENXIO);
 	}
@@ -705,10 +711,11 @@
 		break;
 	default:
 		return (ENXIO);
-		break;
 	}
 
+	newbus_xlock();
 	device_unbusy(devclass_get_device(bktr_devclass, unit)); 
+	newbus_xunlock();
 	return( result );
 }
 

==== //depot/projects/vimage-commit2/src/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c#25 (text+ko) ====

@@ -28,7 +28,7 @@
 ***************************************************************************/
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c,v 1.36 2009/08/01 19:26:27 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c,v 1.37 2009/08/02 19:43:32 rwatson Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -3821,7 +3821,7 @@
 #endif
 
 	toep->tp_state = tp->t_state;
-	TCPSTAT_INC(tcps_connects);
+	KMOD_TCPSTAT_INC(tcps_connects);
 				
 }
 

==== //depot/projects/vimage-commit2/src/sys/dev/drm/drm_drv.c#13 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/drm/drm_drv.c,v 1.27 2009/06/23 18:24:09 rnoland Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/drm/drm_drv.c,v 1.28 2009/08/02 14:28:40 attilio Exp $");
 
 /** @file drm_drv.c
  * The catch-all file for DRM device support, including module setup/teardown,
@@ -614,11 +614,13 @@
 
 	if (!retcode) {
 		atomic_inc(&dev->counts[_DRM_STAT_OPENS]);
+		newbus_xlock();
 		DRM_LOCK();
 		device_busy(dev->device);
 		if (!dev->open_count++)
 			retcode = drm_firstopen(dev);
 		DRM_UNLOCK();
+		newbus_xunlock();
 	}
 
 	return retcode;
@@ -632,6 +634,11 @@
 
 	DRM_DEBUG("open_count = %d\n", dev->open_count);
 
+	/*
+	 * We require to lock newbus here for handling device_unbusy() and
+	 * avoid a LOR with DRM_LOCK.
+	 */
+	newbus_xlock();
 	DRM_LOCK();
 
 	if (dev->driver->preclose != NULL)
@@ -708,6 +715,7 @@
 	}
 
 	DRM_UNLOCK();
+	newbus_xunlock();
 }
 
 /* drm_ioctl is called whenever a process performs an ioctl on /dev/drm.

==== //depot/projects/vimage-commit2/src/sys/dev/ips/ips_pci.c#2 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ips/ips_pci.c,v 1.15 2007/02/23 12:18:44 piso Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ips/ips_pci.c,v 1.16 2009/08/02 14:28:40 attilio Exp $");
 
 #include <dev/ips/ipsreg.h>
 #include <dev/ips/ips.h>
@@ -173,10 +173,12 @@
 	struct ips_softc *sc = (struct ips_softc *)arg;
 
 	config_intrhook_disestablish(&sc->ips_ich);
+	newbus_xlock();
 	if (ips_adapter_init(sc))
 		ips_pci_free(sc);
 	else
 		sc->configured = 1;
+	newbus_xunlock();
 }
 
 static int ips_pci_free(ips_softc_t *sc)

==== //depot/projects/vimage-commit2/src/sys/dev/mfi/mfi.c#9 (text) ====

@@ -51,7 +51,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/mfi/mfi.c,v 1.50 2009/07/10 08:18:08 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mfi/mfi.c,v 1.51 2009/08/02 14:28:40 attilio Exp $");
 
 #include "opt_mfi.h"
 
@@ -1327,11 +1327,11 @@
 	mfi_release_command(cm);
 
 	mtx_unlock(&sc->mfi_io_lock);
-	mtx_lock(&Giant);
+	newbus_xlock();
 	if ((child = device_add_child(sc->mfi_dev, "mfid", -1)) == NULL) {
 		device_printf(sc->mfi_dev, "Failed to add logical disk\n");
 		free(ld_info, M_MFIBUF);
-		mtx_unlock(&Giant);
+		newbus_xunlock();
 		mtx_lock(&sc->mfi_io_lock);
 		return;
 	}
@@ -1339,7 +1339,7 @@
 	device_set_ivars(child, ld_info);
 	device_set_desc(child, "MFI Logical Disk");
 	bus_generic_attach(sc->mfi_dev);
-	mtx_unlock(&Giant);
+	newbus_xunlock();
 	mtx_lock(&sc->mfi_io_lock);
 }
 
@@ -1805,9 +1805,9 @@
 		KASSERT(ld != NULL, ("volume dissappeared"));
 		if (cm->cm_frame->header.cmd_status == MFI_STAT_OK) {
 			mtx_unlock(&sc->mfi_io_lock);
-			mtx_lock(&Giant);
+			newbus_xlock();
 			device_delete_child(sc->mfi_dev, ld->ld_dev);
-			mtx_unlock(&Giant);
+			newbus_xunlock();
 			mtx_lock(&sc->mfi_io_lock);
 		} else
 			mfi_disk_enable(ld);
@@ -1815,11 +1815,11 @@
 	case MFI_DCMD_CFG_CLEAR:
 		if (cm->cm_frame->header.cmd_status == MFI_STAT_OK) {
 			mtx_unlock(&sc->mfi_io_lock);
-			mtx_lock(&Giant);
+			newbus_xlock();
 			TAILQ_FOREACH_SAFE(ld, &sc->mfi_ld_tqh, ld_link, ldn) {
 				device_delete_child(sc->mfi_dev, ld->ld_dev);
 			}
-			mtx_unlock(&Giant);

>>> TRUNCATED FOR MAIL (1000 lines) <<<



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200908050829.n758TfWc088510>