svn commit: r338236 - in head: sbin/devmatch sys/kern sys/sys
Warner Losh
imp at FreeBSD.org
Thu Aug 23 05:06:21 UTC 2018
Author: imp
Date: Thu Aug 23 05:06:16 2018
New Revision: 338236
URL: https://svnweb.freebsd.org/changeset/base/338236
Log:
Add a new device flag: DF_ATTACHED_ONCE
This flag is set once the device has been successfully attached. When
set, it inhibits devmatch from trying to match the device. This in
turn allows kldunload to work as expected. Prior to the change, the
driver would immediately reload because devmatch had no notion that
the driver had once been attached, and therefore shouldn't participate
in further matching.
Differential Revision: https://reviews.freebsd.org/D16735
Modified:
head/sbin/devmatch/devmatch.c
head/sys/kern/subr_bus.c
head/sys/sys/bus.h
Modified: head/sbin/devmatch/devmatch.c
==============================================================================
--- head/sbin/devmatch/devmatch.c Thu Aug 23 05:06:11 2018 (r338235)
+++ head/sbin/devmatch/devmatch.c Thu Aug 23 05:06:16 2018 (r338236)
@@ -422,6 +422,8 @@ find_unmatched(struct devinfo_dev *dev, void *arg)
break;
if (!(dev->dd_flags & DF_ENABLED))
break;
+ if (dev->dd_flags & DF_ATTACHED_ONCE)
+ break;
parent = devinfo_handle_to_device(dev->dd_parent);
bus = strdup(parent->dd_name);
p = bus + strlen(bus) - 1;
Modified: head/sys/kern/subr_bus.c
==============================================================================
--- head/sys/kern/subr_bus.c Thu Aug 23 05:06:11 2018 (r338235)
+++ head/sys/kern/subr_bus.c Thu Aug 23 05:06:16 2018 (r338236)
@@ -2950,6 +2950,7 @@ device_attach(device_t dev)
dev->state = DS_NOTPRESENT;
return (error);
}
+ dev->flags |= DF_ATTACHED_ONCE;
attachtime = get_cyclecount() - attachtime;
/*
* 4 bits per device is a reasonable value for desktop and server
Modified: head/sys/sys/bus.h
==============================================================================
--- head/sys/sys/bus.h Thu Aug 23 05:06:11 2018 (r338235)
+++ head/sys/sys/bus.h Thu Aug 23 05:06:16 2018 (r338236)
@@ -93,6 +93,7 @@ struct u_device {
#define DF_REBID 0x80 /* Can rebid after attach */
#define DF_SUSPENDED 0x100 /* Device is suspended. */
#define DF_QUIET_CHILDREN 0x200 /* Default to quiet for all my children */
+#define DF_ATTACHED_ONCE 0x400 /* Has been attached at least once */
#define DF_NEEDNOMATCH 0x800 /* Has a pending NOMATCH event */
/**
More information about the svn-src-head
mailing list