git: b8b5cc330490 - main - new-bus: Use M_WAITOK in more places
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 10 Mar 2025 17:35:45 UTC
The branch main has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=b8b5cc330490810fc28621ac16d8147d9c53c276
commit b8b5cc330490810fc28621ac16d8147d9c53c276
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2025-03-10 17:35:21 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2025-03-10 17:35:21 +0000
new-bus: Use M_WAITOK in more places
M_NOWAIT is now only used for devclass_get_devices,
devclass_get_drivers, and device_get_children. Other functions are
generally called from sleepable contexts such as module event
handlers, attach/detach routines, and the ioctl handler for
/dev/devctl2.
Suggested by: mjg (devclass_add_device)
Differential Revision: https://reviews.freebsd.org/D49274
---
sys/kern/subr_bus.c | 31 +++++++------------------------
1 file changed, 7 insertions(+), 24 deletions(-)
diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
index 63de61262554..1cbb91634d43 100644
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -575,9 +575,7 @@ devclass_find_internal(const char *classname, const char *parentname,
if (create && !dc) {
PDEBUG(("creating %s", classname));
dc = malloc(sizeof(struct devclass) + strlen(classname) + 1,
- M_BUS, M_NOWAIT | M_ZERO);
- if (!dc)
- return (NULL);
+ M_BUS, M_WAITOK | M_ZERO);
dc->parent = NULL;
dc->name = (char*) (dc + 1);
strcpy(dc->name, classname);
@@ -711,9 +709,7 @@ devclass_add_driver(devclass_t dc, driver_t *driver, int pass, devclass_t *dcp)
if (pass <= BUS_PASS_ROOT)
return (EINVAL);
- dl = malloc(sizeof *dl, M_BUS, M_NOWAIT|M_ZERO);
- if (!dl)
- return (ENOMEM);
+ dl = malloc(sizeof *dl, M_BUS, M_WAITOK|M_ZERO);
/*
* Compile the driver's methods. Also increase the reference count
@@ -1306,9 +1302,7 @@ devclass_add_device(devclass_t dc, device_t dev)
buflen = snprintf(NULL, 0, "%s%d$", dc->name, INT_MAX);
if (buflen < 0)
return (ENOMEM);
- dev->nameunit = malloc(buflen, M_BUS, M_NOWAIT|M_ZERO);
- if (!dev->nameunit)
- return (ENOMEM);
+ dev->nameunit = malloc(buflen, M_BUS, M_WAITOK|M_ZERO);
if ((error = devclass_alloc_unit(dc, dev, &dev->unit)) != 0) {
free(dev->nameunit, M_BUS);
@@ -1385,10 +1379,7 @@ make_device(device_t parent, const char *name, int unit)
dc = NULL;
}
- dev = malloc(sizeof(*dev), M_BUS, M_NOWAIT|M_ZERO);
- if (!dev)
- return (NULL);
-
+ dev = malloc(sizeof(*dev), M_BUS, M_WAITOK|M_ZERO);
dev->parent = parent;
TAILQ_INIT(&dev->children);
kobj_init((kobj_t) dev, &null_class);
@@ -2116,7 +2107,7 @@ device_set_desc_copy(device_t dev, const char *desc)
{
char *buf;
- buf = strdup_flags(desc, M_BUS, M_NOWAIT);
+ buf = strdup_flags(desc, M_BUS, M_WAITOK);
device_set_desc_internal(dev, buf, true);
}
@@ -2476,13 +2467,7 @@ device_set_driver(device_t dev, driver_t *driver)
else
policy = DOMAINSET_RR();
dev->softc = malloc_domainset(driver->size, M_BUS_SC,
- policy, M_NOWAIT | M_ZERO);
- if (!dev->softc) {
- kobj_delete((kobj_t) dev, NULL);
- kobj_init((kobj_t) dev, &null_class);
- dev->driver = NULL;
- return (ENOMEM);
- }
+ policy, M_WAITOK | M_ZERO);
}
} else {
kobj_init((kobj_t) dev, &null_class);
@@ -2935,9 +2920,7 @@ resource_list_add(struct resource_list *rl, int type, int rid,
rle = resource_list_find(rl, type, rid);
if (!rle) {
rle = malloc(sizeof(struct resource_list_entry), M_BUS,
- M_NOWAIT);
- if (!rle)
- panic("resource_list_add: can't record entry");
+ M_WAITOK);
STAILQ_INSERT_TAIL(rl, rle, link);
rle->type = type;
rle->rid = rid;