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)) {

Reply via email to