newbus: Change attach failure behavior

In the rare case that we succeed in probing, but fail to attach, flip
the default to be to disable the
device. hw.bus.disable_failed_devices=false is no required to restore
the old behavior. The old behavior dates form a time when dynamic
control of devices wasn't yet present (devctl didn't exist). Now that
one can retry probe/attach the device with devctl, the default doesn't
make sense: The more desirable behaivor is to have stable device numbers
when one has several instances of the same device in a system (common
for NICs or HBAs).

Reviewed by:		jhb (verbal)
Sponsored by:		Netflix
This commit is contained in:
Warner Losh 2022-12-04 16:22:43 -07:00
parent aa52c6bdd7
commit 68c3f03021
2 changed files with 9 additions and 1 deletions

View File

@ -27,6 +27,14 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 14.x IS SLOW:
world, or to merely disable the most expensive debugging functionality
at runtime, run "ln -s 'abort:false,junk:false' /etc/malloc.conf".)
20221204:
hw.bus.disable_failed_devices has changed from 'false' to 'true' by
default. Now if newbus succeeds in probing a device, but fails to attach
the device, we'll disable the device. In the past, we'd keep retrying
the device on each new driver loaded. To get that behavior now, one
needs to use devctl to re-enable the device, and repobe it (or set
the sysctl/tunable hw.bus.disable_failed_devices=false).
20221122:
pf no longer accepts 'scrub fragment crop' or 'scrub fragment drop-ovl'.
These configurations are no longer automatically reinterpreted as

View File

@ -69,7 +69,7 @@ SYSCTL_NODE(_hw, OID_AUTO, bus, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL,
SYSCTL_ROOT_NODE(OID_AUTO, dev, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL,
NULL);
static bool disable_failed_devs = false;
static bool disable_failed_devs = true;
SYSCTL_BOOL(_hw_bus, OID_AUTO, disable_failed_devices, CTLFLAG_RWTUN, &disable_failed_devs,
0, "Do not retry attaching devices that return an error from DEVICE_ATTACH the first time");