summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorguido <guido@FreeBSD.org>2004-03-18 21:10:11 +0000
committerguido <guido@FreeBSD.org>2004-03-18 21:10:11 +0000
commitdf746a8c4241af79c5cde3a41a26daaefdf64556 (patch)
tree1803a74593eaa121eb1d3af15ebcdea5d85f572b /sys
parent569c6a8eda957ba93206aab029082de086eb77f4 (diff)
downloadFreeBSD-src-df746a8c4241af79c5cde3a41a26daaefdf64556.zip
FreeBSD-src-df746a8c4241af79c5cde3a41a26daaefdf64556.tar.gz
Prevent the strange situation that after each load/unload of a ppbus
device, the device is probed multiple times (so each device is detected N times after unloading/loading the module N-1 times). The real fix is (quote Doug and Warner): > : In an ideal world, there should be some kind of BUS_UNIDENTIFY method > : which a driver could use to delete the devices it created in > : BUS_IDENTIFY. > > Or the bus would have a driver deleted routine that got called and it > would remove all instances of the devclass attached to it. Reviewed by: Doug Rabson & Warner Losh
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/ppbus/if_plip.c5
-rw-r--r--sys/dev/ppbus/lpbb.c6
-rw-r--r--sys/dev/ppbus/lpt.c6
-rw-r--r--sys/dev/ppbus/pcfclock.c6
-rw-r--r--sys/dev/ppbus/ppi.c6
-rw-r--r--sys/dev/ppbus/pps.c6
-rw-r--r--sys/dev/ppbus/vpo.c6
7 files changed, 34 insertions, 7 deletions
diff --git a/sys/dev/ppbus/if_plip.c b/sys/dev/ppbus/if_plip.c
index 32221c7..9805e0b 100644
--- a/sys/dev/ppbus/if_plip.c
+++ b/sys/dev/ppbus/if_plip.c
@@ -183,8 +183,11 @@ static devclass_t lp_devclass;
static void
lp_identify(driver_t *driver, device_t parent)
{
+ device_t dev;
- BUS_ADD_CHILD(parent, 0, "plip", -1);
+ dev = device_find_child(parent, "plip", 0);
+ if (!dev)
+ BUS_ADD_CHILD(parent, 0, "plip", -1);
}
/*
* lpprobe()
diff --git a/sys/dev/ppbus/lpbb.c b/sys/dev/ppbus/lpbb.c
index 6516f50..a9b3667 100644
--- a/sys/dev/ppbus/lpbb.c
+++ b/sys/dev/ppbus/lpbb.c
@@ -58,7 +58,11 @@ static void
lpbb_identify(driver_t *driver, device_t parent)
{
- BUS_ADD_CHILD(parent, 0, "lpbb", -1);
+ device_t dev;
+
+ dev = device_find_child(parent, "lpbb", 0);
+ if (!dev)
+ BUS_ADD_CHILD(parent, 0, "lpbb", -1);
}
static int
diff --git a/sys/dev/ppbus/lpt.c b/sys/dev/ppbus/lpt.c
index f0bdea7..7855e36 100644
--- a/sys/dev/ppbus/lpt.c
+++ b/sys/dev/ppbus/lpt.c
@@ -340,7 +340,11 @@ static void
lpt_identify(driver_t *driver, device_t parent)
{
- BUS_ADD_CHILD(parent, 0, LPT_NAME, -1);
+ device_t dev;
+
+ dev = device_find_child(parent, LPT_NAME, 0);
+ if (!dev)
+ BUS_ADD_CHILD(parent, 0, LPT_NAME, -1);
}
/*
diff --git a/sys/dev/ppbus/pcfclock.c b/sys/dev/ppbus/pcfclock.c
index fd4c010..a47f304 100644
--- a/sys/dev/ppbus/pcfclock.c
+++ b/sys/dev/ppbus/pcfclock.c
@@ -117,7 +117,11 @@ static void
pcfclock_identify(driver_t *driver, device_t parent)
{
- BUS_ADD_CHILD(parent, 0, PCFCLOCK_NAME, -1);
+ device_t dev;
+
+ dev = device_find_child(parent, PCFCLOCK_NAME, 0);
+ if (!dev)
+ BUS_ADD_CHILD(parent, 0, PCFCLOCK_NAME, -1);
}
static int
diff --git a/sys/dev/ppbus/ppi.c b/sys/dev/ppbus/ppi.c
index 7df5851..113448d 100644
--- a/sys/dev/ppbus/ppi.c
+++ b/sys/dev/ppbus/ppi.c
@@ -133,7 +133,11 @@ static void
ppi_identify(driver_t *driver, device_t parent)
{
- BUS_ADD_CHILD(parent, 0, "ppi", -1);
+ device_t dev;
+
+ dev = device_find_child(parent, "ppi", 0);
+ if (!dev)
+ BUS_ADD_CHILD(parent, 0, "ppi", -1);
}
/*
diff --git a/sys/dev/ppbus/pps.c b/sys/dev/ppbus/pps.c
index 20a8b02..fef6157 100644
--- a/sys/dev/ppbus/pps.c
+++ b/sys/dev/ppbus/pps.c
@@ -75,7 +75,11 @@ static void
ppsidentify(driver_t *driver, device_t parent)
{
- BUS_ADD_CHILD(parent, 0, PPS_NAME, -1);
+ device_t dev;
+
+ dev = device_find_child(parent, PPS_NAME, 0);
+ if (!dev)
+ BUS_ADD_CHILD(parent, 0, PPS_NAME, -1);
}
static int
diff --git a/sys/dev/ppbus/vpo.c b/sys/dev/ppbus/vpo.c
index 69d2870..50ebf81 100644
--- a/sys/dev/ppbus/vpo.c
+++ b/sys/dev/ppbus/vpo.c
@@ -90,7 +90,11 @@ static void
vpo_identify(driver_t *driver, device_t parent)
{
- BUS_ADD_CHILD(parent, 0, "vpo", -1);
+ device_t dev;
+
+ dev = device_find_child(parent, "vpo", 0);
+ if (!dev)
+ BUS_ADD_CHILD(parent, 0, "vpo", -1);
}
/*
OpenPOWER on IntegriCloud