git: 36a8572ee8f5 - main - bus_if: provide a default null rescan method

From: Mitchell Horne <mhorne_at_FreeBSD.org>
Date: Thu, 23 Jun 2022 18:16:05 UTC
The branch main has been updated by mhorne:

URL: https://cgit.FreeBSD.org/src/commit/?id=36a8572ee8f5db7ecb64bedc5738a363ec7cad36

commit 36a8572ee8f5db7ecb64bedc5738a363ec7cad36
Author:     Mitchell Horne <mhorne@FreeBSD.org>
AuthorDate: 2022-06-21 13:29:53 +0000
Commit:     Mitchell Horne <mhorne@FreeBSD.org>
CommitDate: 2022-06-23 18:15:10 +0000

    bus_if: provide a default null rescan method
    
    There is an existing helper method in subr_bus.c, but almost no drivers
    know to use it. It also returns the same error as an empty method,
    making it not very useful. Move this to bus_if.m and return a more
    sensible error code.
    
    This gives a slightly more meaningful error message when attempting
    'devctl rescan' on buses and devices alike:
      "Device not configured" --> "Operation not supported by device"
    
    Reviewed by:    imp
    MFC after:      1 week
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D35501
---
 sys/dev/cardbus/cardbus.c    |  1 -
 sys/kern/bus_if.m            | 13 ++++++++++---
 sys/kern/subr_bus.c          | 13 -------------
 sys/powerpc/ofw/ofw_pcibus.c |  1 -
 sys/sys/bus.h                |  1 -
 5 files changed, 10 insertions(+), 19 deletions(-)

diff --git a/sys/dev/cardbus/cardbus.c b/sys/dev/cardbus/cardbus.c
index c28b1558f28e..d0661e0473be 100644
--- a/sys/dev/cardbus/cardbus.c
+++ b/sys/dev/cardbus/cardbus.c
@@ -351,7 +351,6 @@ static device_method_t cardbus_methods[] = {
 	DEVMETHOD(bus_get_dma_tag,	bus_generic_get_dma_tag),
 	DEVMETHOD(bus_read_ivar,	cardbus_read_ivar),
 	DEVMETHOD(bus_driver_added,	cardbus_driver_added),
-	DEVMETHOD(bus_rescan,		bus_null_rescan),
 
 	/* Card Interface */
 	DEVMETHOD(card_attach_card,	cardbus_attach_card),
diff --git a/sys/kern/bus_if.m b/sys/kern/bus_if.m
index 1e4102e52d29..9862f87aac64 100644
--- a/sys/kern/bus_if.m
+++ b/sys/kern/bus_if.m
@@ -67,16 +67,23 @@ CODE {
 		panic("bus_add_child is not implemented");
 	}
 
-	static int null_reset_post(device_t bus, device_t dev)
+	static int
+	null_reset_post(device_t bus, device_t dev)
 	{
 		return (0);
 	}
 
-	static int null_reset_prepare(device_t bus, device_t dev)
+	static int
+	null_reset_prepare(device_t bus, device_t dev)
 	{
 		return (0);
 	}
 
+	static int
+	null_rescan(device_t dev)
+	{
+		return (ENODEV);
+	}
 };
 
 /**
@@ -253,7 +260,7 @@ METHOD device_t add_child {
  */
 METHOD int rescan {
 	device_t _dev;
-}
+} DEFAULT null_rescan;
 
 /**
  * @brief Allocate a system resource
diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
index 3be468fd7c43..eeecd4b189a2 100644
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -4708,19 +4708,6 @@ bus_generic_get_device_path(device_t bus, device_t child, const char *locator,
 	return (0);
 }
 
-
-/**
- * @brief Helper function for implementing BUS_RESCAN().
- *
- * This null implementation of BUS_RESCAN() always fails to indicate
- * the bus does not support rescanning.
- */
-int
-bus_null_rescan(device_t dev)
-{
-	return (ENXIO);
-}
-
 /*
  * Some convenience functions to make it easier for drivers to use the
  * resource-management functions.  All these really do is hide the
diff --git a/sys/powerpc/ofw/ofw_pcibus.c b/sys/powerpc/ofw/ofw_pcibus.c
index c0e99817888b..202adf11d53b 100644
--- a/sys/powerpc/ofw/ofw_pcibus.c
+++ b/sys/powerpc/ofw/ofw_pcibus.c
@@ -81,7 +81,6 @@ static device_method_t ofw_pcibus_methods[] = {
 	/* Bus interface */
 	DEVMETHOD(bus_child_deleted,	ofw_pcibus_child_deleted),
 	DEVMETHOD(bus_child_pnpinfo,	ofw_pcibus_child_pnpinfo_method),
-	DEVMETHOD(bus_rescan,		bus_null_rescan),
 	DEVMETHOD(bus_get_cpus,		ofw_pcibus_get_cpus),
 	DEVMETHOD(bus_get_domain,	ofw_pcibus_get_domain),
 
diff --git a/sys/sys/bus.h b/sys/sys/bus.h
index a1d11138a1cc..adb6a0ac57d4 100644
--- a/sys/sys/bus.h
+++ b/sys/sys/bus.h
@@ -513,7 +513,6 @@ int	bus_generic_get_device_path(device_t bus, device_t child, const char *locato
 				    struct sbuf *sb);
 int	bus_helper_reset_post(device_t dev, int flags);
 int	bus_helper_reset_prepare(device_t dev, int flags);
-int	bus_null_rescan(device_t dev);
 
 /*
  * Wrapper functions for the BUS_*_RESOURCE methods to make client code