svn commit: r215537 - in stable/7/sys: kern sys

Marius Strobl marius at FreeBSD.org
Fri Nov 19 17:24:04 UTC 2010


Author: marius
Date: Fri Nov 19 17:24:03 2010
New Revision: 215537
URL: http://svn.freebsd.org/changeset/base/215537

Log:
  MFC: r176965
  
  Any driver that relies on its parent to set the devclass has no way to
  know if has siblings that need an actual probe.  Introduce a specail
  return value called BUS_PROBE_NOOWILDCARD.  If the driver returns
  this, the probe is only successful for devices that have had a
  specific devclass set for them.
  
  Reviewed by: current@, jhb@, grehan@

Modified:
  stable/7/sys/kern/subr_bus.c
  stable/7/sys/sys/bus.h
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)

Modified: stable/7/sys/kern/subr_bus.c
==============================================================================
--- stable/7/sys/kern/subr_bus.c	Fri Nov 19 17:11:12 2010	(r215536)
+++ stable/7/sys/kern/subr_bus.c	Fri Nov 19 17:24:03 2010	(r215537)
@@ -1788,6 +1788,14 @@ device_probe_child(device_t dev, device_
 			 * of pri for the first match.
 			 */
 			if (best == NULL || result > pri) {
+				/*
+				 * Probes that return BUS_PROBE_NOWILDCARD
+				 * or lower only match when they are set
+				 * in stone by the parent bus.
+				 */
+				if (result <= BUS_PROBE_NOWILDCARD &&
+				    child->flags & DF_WILDCARD)
+					continue;
 				best = dl;
 				pri = result;
 				continue;

Modified: stable/7/sys/sys/bus.h
==============================================================================
--- stable/7/sys/sys/bus.h	Fri Nov 19 17:11:12 2010	(r215536)
+++ stable/7/sys/sys/bus.h	Fri Nov 19 17:24:03 2010	(r215537)
@@ -503,7 +503,10 @@ void	bus_data_generation_update(void);
  * is for drivers that wish to have a generic form and a specialized form,
  * like is done with the pci bus and the acpi pci bus.  BUS_PROBE_HOOVER is
  * for those busses that implement a generic device place-holder for devices on
- * the bus that have no more specific driver for them (aka ugen).
+ * the bus that have no more specific river for them (aka ugen).
+ * BUS_PROBE_NOWILDCARD or lower means that the device isn't really bidding
+ * for a device node, but accepts only devices that its parent has told it
+ * use this driver.
  */
 #define BUS_PROBE_SPECIFIC	0	/* Only I can use this device */
 #define BUS_PROBE_VENDOR	(-10)	/* Vendor supplied driver */
@@ -511,6 +514,7 @@ void	bus_data_generation_update(void);
 #define BUS_PROBE_LOW_PRIORITY	(-40)	/* Older, less desirable drivers */
 #define BUS_PROBE_GENERIC	(-100)	/* generic driver for dev */
 #define BUS_PROBE_HOOVER	(-500)	/* Generic dev for all devs on bus */
+#define BUS_PROBE_NOWILDCARD	(-2000000000) /* No wildcard device matches */
 
 /**
  * Shorthand for constructing method tables.


More information about the svn-src-stable-7 mailing list