The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=fba56be09f1c344cc5805b898fbfef6066950942
commit fba56be09f1c344cc5805b898fbfef6066950942 Author: Marcin Cieslak <[email protected]> AuthorDate: 2026-02-25 01:58:59 +0000 Commit: John Baldwin <[email protected]> CommitDate: 2026-02-25 01:58:59 +0000 Do not fail 'devctl clear driver' if another driver is not found Detaching the bhyve(4) ppt driver from an unsupported PCI device should not raise a "Device not configured" error. We do not expect that a new driver must take over the device in this case. Reviewed by: imp, jhb Differential Revision: https://reviews.freebsd.org/D52050 --- lib/libdevctl/devctl.3 | 3 ++- sys/kern/subr_bus.c | 14 +++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/libdevctl/devctl.3 b/lib/libdevctl/devctl.3 index c8a4704825c2..94fe350e524b 100644 --- a/lib/libdevctl/devctl.3 +++ b/lib/libdevctl/devctl.3 @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd April 4, 2019 +.Dd February 24, 2026 .Dt DEVCTL 3 .Os .Sh NAME @@ -193,6 +193,7 @@ is true, the device will be detached from its current device driver. After the device's name is reset, it is reprobed and attached to a suitable device driver if one is found. +If no suitable device driver is found, no error is reported. .Pp The .Fn devctl_rescan diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c index c9d64e3674c6..b5c1c5b61f60 100644 --- a/sys/kern/subr_bus.c +++ b/sys/kern/subr_bus.c @@ -5961,7 +5961,19 @@ devctl2_ioctl(struct cdev *cdev, u_long cmd, caddr_t data, int fflag, dev->flags &= ~DF_FIXEDCLASS; dev->flags |= DF_WILDCARD; devclass_delete_device(dev->devclass, dev); - error = device_probe_and_attach(dev); + + /* + * Don't use device_probe_and_attach so that failing + * to find a new driver isn't reported as an error. + */ + error = device_probe(dev); + if (error == ENXIO) { + error = 0; + break; + } + if (error == 0) { + error = device_attach(dev); + } break; case DEV_RESCAN: if (!device_is_attached(dev)) {
