summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_bus.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1999-09-10 21:11:23 +0000
committerphk <phk@FreeBSD.org>1999-09-10 21:11:23 +0000
commitef637f985830fe1c2f98f725dd6766fd8b9c485e (patch)
tree9e3b128f6da307d6c7beda8b67160ace70e1adf3 /sys/kern/subr_bus.c
parentbe0f1c4ed24ca292e4cda9b1c25125ad0a18a7fb (diff)
downloadFreeBSD-src-ef637f985830fe1c2f98f725dd6766fd8b9c485e.zip
FreeBSD-src-ef637f985830fe1c2f98f725dd6766fd8b9c485e.tar.gz
Create and use a dedicated malloc type for bus related stuff.
Reviewed by: dfr
Diffstat (limited to 'sys/kern/subr_bus.c')
-rw-r--r--sys/kern/subr_bus.c44
1 files changed, 23 insertions, 21 deletions
diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
index 7368717..45eb393 100644
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -40,6 +40,8 @@
#include "opt_bus.h"
+MALLOC_DEFINE(M_BUS, "bus", "Bus data structures");
+
#ifdef BUS_DEBUG
#define PDEBUG(a) (printf(__FUNCTION__ ":%d: ", __LINE__), printf a, printf("\n"))
#define DEVICENAME(d) ((d)? device_get_name(d): "no device")
@@ -136,7 +138,7 @@ register_method(struct device_op_desc *desc)
m = (struct method *) malloc(sizeof(struct method)
+ strlen(desc->name) + 1,
- M_DEVBUF, M_NOWAIT);
+ M_BUS, M_NOWAIT);
if (!m)
panic("register_method: out of memory");
bzero(m, sizeof(struct method) + strlen(desc->name) + 1);
@@ -159,7 +161,7 @@ unregister_method(struct device_op_desc *desc)
if (m->refs == 0) {
PDEBUG(("method %s, reached refcount 0", desc->name));
LIST_REMOVE(m, link);
- free(m, M_DEVBUF);
+ free(m, M_BUS);
desc->method = 0;
}
}
@@ -192,7 +194,7 @@ compile_methods(driver_t *driver)
* Then allocate the compiled op table.
*/
ops = malloc(sizeof(struct device_ops) + (next_method_offset-1) * sizeof(devop_t),
- M_DEVBUF, M_NOWAIT);
+ M_BUS, M_NOWAIT);
if (!ops)
panic("compile_methods: out of memory");
bzero(ops, sizeof(struct device_ops) + (next_method_offset-1) * sizeof(devop_t));
@@ -229,7 +231,7 @@ free_methods(driver_t *driver)
/*
* Free memory and clean up.
*/
- free(driver->ops, M_DEVBUF);
+ free(driver->ops, M_BUS);
driver->ops = 0;
}
@@ -255,7 +257,7 @@ devclass_find_internal(const char *classname, int create)
PDEBUG(("%s not found%s", classname, (create? ", creating": "")));
if (create) {
dc = malloc(sizeof(struct devclass) + strlen(classname) + 1,
- M_DEVBUF, M_NOWAIT);
+ M_BUS, M_NOWAIT);
if (!dc)
return NULL;
bzero(dc, sizeof(struct devclass) + strlen(classname) + 1);
@@ -291,7 +293,7 @@ devclass_add_driver(devclass_t dc, driver_t *driver)
PDEBUG(("%s", DRIVERNAME(driver)));
- dl = malloc(sizeof *dl, M_DEVBUF, M_NOWAIT);
+ dl = malloc(sizeof *dl, M_BUS, M_NOWAIT);
if (!dl)
return ENOMEM;
bzero(dl, sizeof *dl);
@@ -372,7 +374,7 @@ devclass_delete_driver(devclass_t busclass, driver_t *driver)
}
TAILQ_REMOVE(&busclass->drivers, dl, link);
- free(dl, M_DEVBUF);
+ free(dl, M_BUS);
driver->refs--;
if (driver->refs == 0)
@@ -504,14 +506,14 @@ devclass_alloc_unit(devclass_t dc, int *unitp)
newsize = (dc->maxunit ? 2 * dc->maxunit
: MINALLOCSIZE / sizeof(device_t));
- newlist = malloc(sizeof(device_t) * newsize, M_DEVBUF, M_NOWAIT);
+ newlist = malloc(sizeof(device_t) * newsize, M_BUS, M_NOWAIT);
if (!newlist)
return ENOMEM;
bcopy(dc->devices, newlist, sizeof(device_t) * dc->maxunit);
bzero(newlist + dc->maxunit,
sizeof(device_t) * (newsize - dc->maxunit));
if (dc->devices)
- free(dc->devices, M_DEVBUF);
+ free(dc->devices, M_BUS);
dc->devices = newlist;
dc->maxunit = newsize;
}
@@ -529,13 +531,13 @@ devclass_add_device(devclass_t dc, device_t dev)
PDEBUG(("%s in devclass %s", DEVICENAME(dev), DEVCLANAME(dc)));
buflen = strlen(dc->name) + 5;
- dev->nameunit = malloc(buflen, M_DEVBUF, M_NOWAIT);
+ dev->nameunit = malloc(buflen, M_BUS, M_NOWAIT);
if (!dev->nameunit)
return ENOMEM;
bzero(dev->nameunit, buflen);
if ((error = devclass_alloc_unit(dc, &dev->unit)) != 0) {
- free(dev->nameunit, M_DEVBUF);
+ free(dev->nameunit, M_BUS);
dev->nameunit = NULL;
return error;
}
@@ -565,7 +567,7 @@ devclass_delete_device(devclass_t dc, device_t dev)
if (dev->flags & DF_WILDCARD)
dev->unit = -1;
dev->devclass = NULL;
- free(dev->nameunit, M_DEVBUF);
+ free(dev->nameunit, M_BUS);
dev->nameunit = NULL;
while (dc->nextunit > 0 && dc->devices[dc->nextunit - 1] == NULL)
dc->nextunit--;
@@ -596,7 +598,7 @@ make_device(device_t parent, const char *name,
} else
dc = NULL;
- dev = malloc(sizeof(struct device), M_DEVBUF, M_NOWAIT);
+ dev = malloc(sizeof(struct device), M_BUS, M_NOWAIT);
if (!dev)
return 0;
bzero(dev, sizeof(struct device));
@@ -703,7 +705,7 @@ device_delete_child(device_t dev, device_t child)
devclass_delete_device(child->devclass, child);
TAILQ_REMOVE(&dev->children, child, link);
device_set_desc(child, NULL);
- free(child, M_DEVBUF);
+ free(child, M_BUS);
return 0;
}
@@ -926,13 +928,13 @@ static void
device_set_desc_internal(device_t dev, const char* desc, int copy)
{
if (dev->desc && (dev->flags & DF_DESCMALLOCED)) {
- free(dev->desc, M_DEVBUF);
+ free(dev->desc, M_BUS);
dev->flags &= ~DF_DESCMALLOCED;
dev->desc = NULL;
}
if (copy && desc) {
- dev->desc = malloc(strlen(desc) + 1, M_DEVBUF, M_NOWAIT);
+ dev->desc = malloc(strlen(desc) + 1, M_BUS, M_NOWAIT);
if (dev->desc) {
strcpy(dev->desc, desc);
dev->flags |= DF_DESCMALLOCED;
@@ -1079,14 +1081,14 @@ device_set_driver(device_t dev, driver_t *driver)
return 0;
if (dev->softc) {
- free(dev->softc, M_DEVBUF);
+ free(dev->softc, M_BUS);
dev->softc = NULL;
}
dev->ops = &null_ops;
dev->driver = driver;
if (driver) {
dev->ops = driver->ops;
- dev->softc = malloc(driver->softc, M_DEVBUF, M_NOWAIT);
+ dev->softc = malloc(driver->softc, M_BUS, M_NOWAIT);
if (!dev->softc) {
dev->ops = &null_ops;
dev->driver = NULL;
@@ -1651,7 +1653,7 @@ resource_list_free(struct resource_list *rl)
if (rle->res)
panic("resource_list_free: resource entry is busy");
SLIST_REMOVE_HEAD(rl, link);
- free(rle, M_DEVBUF);
+ free(rle, M_BUS);
}
}
@@ -1664,7 +1666,7 @@ resource_list_add(struct resource_list *rl,
rle = resource_list_find(rl, type, rid);
if (!rle) {
- rle = malloc(sizeof(struct resource_list_entry), M_DEVBUF, M_NOWAIT);
+ rle = malloc(sizeof(struct resource_list_entry), M_BUS, M_NOWAIT);
if (!rle)
panic("resource_list_add: can't record entry");
SLIST_INSERT_HEAD(rl, rle, link);
@@ -1701,7 +1703,7 @@ resource_list_delete(struct resource_list *rl,
if (rle) {
SLIST_REMOVE(rl, rle, resource_list_entry, link);
- free(rle, M_DEVBUF);
+ free(rle, M_BUS);
}
}
OpenPOWER on IntegriCloud