git: 42b7e9c4a9c5 - main - newbus: Remove redundant check for 0
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 16 Oct 2024 03:18:57 UTC
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=42b7e9c4a9c53f3d51926cf57858a17887363662 commit 42b7e9c4a9c53f3d51926cf57858a17887363662 Author: Warner Losh <imp@FreeBSD.org> AuthorDate: 2024-10-16 03:19:11 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2024-10-16 03:19:27 +0000 newbus: Remove redundant check for 0 We already checked to see if the return code is 0 above. This code is redundant. However, it's here so we can break out two layers, which a simple goto fixes. A subsequent change makes the pri < 0 condition no longer hold. This allows us to simplify a few things. Sponsored by: Netflix Reviewed by: jhb Differential Revision: https://reviews.freebsd.org/D44269 --- sys/kern/subr_bus.c | 57 +++++++++++++++++++++++------------------------------ 1 file changed, 25 insertions(+), 32 deletions(-) diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c index d0c41b59dbb6..ef71588f7157 100644 --- a/sys/kern/subr_bus.c +++ b/sys/kern/subr_bus.c @@ -1662,13 +1662,13 @@ device_probe_child(device_t dev, device_t child) result = DEVICE_PROBE(child); /* - * If the driver returns SUCCESS, there can be - * no higher match for this device. + * If probe returns 0, this is the driver that wins this + * device. */ if (result == 0) { best = dl; pri = 0; - break; + goto exact_match; /* C doesn't have break 2 */ } /* Reset flags and devclass before the next probe. */ @@ -1712,12 +1712,6 @@ device_probe_child(device_t dev, device_t child) continue; } } - /* - * If we have an unambiguous match in this devclass, - * don't look in the parent. - */ - if (best && pri == 0) - break; } if (best == NULL) @@ -1725,35 +1719,34 @@ device_probe_child(device_t dev, device_t child) /* * If we found a driver, change state and initialise the devclass. + * Set the winning driver, devclass, and flags. */ - if (pri < 0) { - /* Set the winning driver, devclass, and flags. */ - result = device_set_driver(child, best->driver); - if (result != 0) - return (result); - if (!child->devclass) { - result = device_set_devclass(child, best->driver->name); - if (result != 0) { - (void)device_set_driver(child, NULL); - return (result); - } - } - resource_int_value(best->driver->name, child->unit, - "flags", &child->devflags); - - /* - * A bit bogus. Call the probe method again to make sure - * that we have the right description. - */ - result = DEVICE_PROBE(child); - if (result > 0) { - if (!hasclass) - (void)device_set_devclass(child, NULL); + result = device_set_driver(child, best->driver); + if (result != 0) + return (result); + if (!child->devclass) { + result = device_set_devclass(child, best->driver->name); + if (result != 0) { (void)device_set_driver(child, NULL); return (result); } } + resource_int_value(best->driver->name, child->unit, + "flags", &child->devflags); + + /* + * A bit bogus. Call the probe method again to make sure that we have + * the right description for the device. + */ + result = DEVICE_PROBE(child); + if (result > 0) { + if (!hasclass) + (void)device_set_devclass(child, NULL); + (void)device_set_driver(child, NULL); + return (result); + } +exact_match: child->state = DS_ALIVE; bus_data_generation_update(); return (0);