Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/xen convert the node watch code to use kmem_alloc()...
details: https://anonhg.NetBSD.org/src/rev/01b4448602c4
branches: trunk
changeset: 1008977:01b4448602c4
user: jdolecek <jdolecek%NetBSD.org@localhost>
date: Tue Apr 07 14:07:01 2020 +0000
description:
convert the node watch code to use kmem_alloc() instead of malloc()
diffstat:
sys/arch/xen/include/xenbus.h | 5 ++-
sys/arch/xen/xen/xbdback_xenbus.c | 12 +++----
sys/arch/xen/xenbus/xenbus_client.c | 55 ++++++++++++++++--------------------
sys/arch/xen/xenbus/xenbus_probe.c | 19 ++++++------
4 files changed, 43 insertions(+), 48 deletions(-)
diffs (216 lines):
diff -r fc837eb6b2c5 -r 01b4448602c4 sys/arch/xen/include/xenbus.h
--- a/sys/arch/xen/include/xenbus.h Tue Apr 07 13:38:50 2020 +0000
+++ b/sys/arch/xen/include/xenbus.h Tue Apr 07 14:07:01 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: xenbus.h,v 1.18 2020/04/07 13:38:50 jdolecek Exp $ */
+/* $NetBSD: xenbus.h,v 1.19 2020/04/07 14:07:01 jdolecek Exp $ */
/******************************************************************************
* xenbus.h
*
@@ -58,6 +58,7 @@
/* Path being watched. */
char *node;
+ size_t node_sz;
/* Callback (executed in a process context with no locks held). */
void (*xbw_callback)(struct xenbus_watch *,
@@ -180,6 +181,8 @@
void (*callback)(struct xenbus_watch *,
const char **, unsigned int));
+/* Unregister the watch, and free associated internal structures. */
+void xenbus_unwatch_path(struct xenbus_watch *);
/**
* Advertise in the store a change of the given driver to the given new_state.
diff -r fc837eb6b2c5 -r 01b4448602c4 sys/arch/xen/xen/xbdback_xenbus.c
--- a/sys/arch/xen/xen/xbdback_xenbus.c Tue Apr 07 13:38:50 2020 +0000
+++ b/sys/arch/xen/xen/xbdback_xenbus.c Tue Apr 07 14:07:01 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: xbdback_xenbus.c,v 1.76 2020/04/07 13:36:22 jdolecek Exp $ */
+/* $NetBSD: xbdback_xenbus.c,v 1.77 2020/04/07 14:07:01 jdolecek Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xbdback_xenbus.c,v 1.76 2020/04/07 13:36:22 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xbdback_xenbus.c,v 1.77 2020/04/07 14:07:01 jdolecek Exp $");
#include <sys/atomic.h>
#include <sys/buf.h>
@@ -487,11 +487,9 @@
xbdback_disconnect(xbdi);
/* unregister watch */
- if (xbdi->xbdi_watch.node) {
- unregister_xenbus_watch(&xbdi->xbdi_watch);
- free(xbdi->xbdi_watch.node, M_DEVBUF);
- xbdi->xbdi_watch.node = NULL;
- }
+ if (xbdi->xbdi_watch.node)
+ xenbus_unwatch_path(&xbdi->xbdi_watch);
+
/* unmap ring */
if (xbdi->xbdi_ring_va != 0) {
ungrop.host_addr = xbdi->xbdi_ring_va;
diff -r fc837eb6b2c5 -r 01b4448602c4 sys/arch/xen/xenbus/xenbus_client.c
--- a/sys/arch/xen/xenbus/xenbus_client.c Tue Apr 07 13:38:50 2020 +0000
+++ b/sys/arch/xen/xenbus/xenbus_client.c Tue Apr 07 14:07:01 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: xenbus_client.c,v 1.15 2020/04/07 13:38:50 jdolecek Exp $ */
+/* $NetBSD: xenbus_client.c,v 1.16 2020/04/07 14:07:01 jdolecek Exp $ */
/******************************************************************************
* Client-facing interface for the Xenbus driver. In other words, the
* interface between the Xenbus and the device-specific code, be it the
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xenbus_client.c,v 1.15 2020/04/07 13:38:50 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xenbus_client.c,v 1.16 2020/04/07 14:07:01 jdolecek Exp $");
#if 0
#define DPRINTK(fmt, args...) \
@@ -42,6 +42,7 @@
#include <sys/null.h>
#include <sys/errno.h>
#include <sys/malloc.h>
+#include <sys/kmem.h>
#include <sys/systm.h>
#include <xen/xen.h>
@@ -50,30 +51,6 @@
#include <xen/xenbus.h>
#include <xen/granttables.h>
-
-static int
-xenbus_watch_path(struct xenbus_device *dev, char *path,
- struct xenbus_watch *watch,
- void (*callback)(struct xenbus_watch *,
- const char **, unsigned int))
-{
- int err;
-
- watch->node = path;
- watch->xbw_callback = callback;
-
- err = register_xenbus_watch(watch);
-
- if (err) {
- watch->node = NULL;
- watch->xbw_callback = NULL;
- xenbus_dev_fatal(dev, err, "adding watch on %s", path);
- }
- err = 0;
-
- return err;
-}
-
int
xenbus_watch_path2(struct xenbus_device *dev, const char *path,
const char *path2, struct xenbus_watch *watch,
@@ -84,21 +61,37 @@
char *state;
DPRINTK("xenbus_watch_path2 path %s path2 %s\n", path, path2);
- state =
- malloc(strlen(path) + 1 + strlen(path2) + 1, M_DEVBUF,
- M_WAITOK);
+
+ watch->node_sz = strlen(path) + 1 + strlen(path2) + 1;
+ state = kmem_alloc(watch->node_sz, KM_SLEEP);
strcpy(state, path);
strcat(state, "/");
strcat(state, path2);
- err = xenbus_watch_path(dev, state, watch, callback);
+ watch->node = state;
+ watch->xbw_callback = callback;
+
+ err = register_xenbus_watch(watch);
if (err) {
- free(state, M_DEVBUF);
+ watch->node = NULL;
+ watch->node_sz = 0;
+ watch->xbw_callback = NULL;
+ xenbus_dev_fatal(dev, err, "adding watch on %s", state);
+ kmem_free(state, watch->node_sz);
}
return err;
}
+void
+xenbus_unwatch_path(struct xenbus_watch *watch)
+{
+ if (watch->node != NULL) {
+ unregister_xenbus_watch(watch);
+ kmem_free(watch->node, watch->node_sz);
+ watch->node = NULL;
+ }
+}
int
xenbus_switch_state(struct xenbus_device *dev,
diff -r fc837eb6b2c5 -r 01b4448602c4 sys/arch/xen/xenbus/xenbus_probe.c
--- a/sys/arch/xen/xenbus/xenbus_probe.c Tue Apr 07 13:38:50 2020 +0000
+++ b/sys/arch/xen/xenbus/xenbus_probe.c Tue Apr 07 14:07:01 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: xenbus_probe.c,v 1.43 2020/04/07 13:36:22 jdolecek Exp $ */
+/* $NetBSD: xenbus_probe.c,v 1.44 2020/04/07 14:07:01 jdolecek Exp $ */
/******************************************************************************
* Talks to Xen Store to figure out what devices we have.
*
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xenbus_probe.c,v 1.43 2020/04/07 13:36:22 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xenbus_probe.c,v 1.44 2020/04/07 14:07:01 jdolecek Exp $");
#if 0
#define DPRINTK(fmt, args...) \
@@ -42,6 +42,7 @@
#include <sys/null.h>
#include <sys/errno.h>
#include <sys/malloc.h>
+#include <sys/kmem.h>
#include <sys/systm.h>
#include <sys/param.h>
#include <sys/kthread.h>
@@ -232,11 +233,8 @@
static void
free_otherend_watch(struct xenbus_device *dev)
{
- if (dev->xbusd_otherend_watch.node) {
- unregister_xenbus_watch(&dev->xbusd_otherend_watch);
- free(dev->xbusd_otherend_watch.node, M_DEVBUF);
- dev->xbusd_otherend_watch.node = NULL;
- }
+ if (dev->xbusd_otherend_watch.node)
+ xenbus_unwatch_path(&dev->xbusd_otherend_watch);
}
static void
@@ -615,11 +613,14 @@
xenbus_probe_backends();
/* Watch for changes. */
- fe_watch.node = malloc(strlen("device") + 1, M_DEVBUF, M_NOWAIT);
+ fe_watch.node_sz = strlen("device") + 1;
+ fe_watch.node = kmem_alloc(fe_watch.node_sz, KM_SLEEP);
strcpy(fe_watch.node, "device");
fe_watch.xbw_callback = frontend_changed;
register_xenbus_watch(&fe_watch);
- be_watch.node = malloc(strlen("backend") + 1, M_DEVBUF, M_NOWAIT);
+
+ be_watch.node_sz = strlen("backend") + 1;
+ be_watch.node = kmem_alloc(be_watch.node_sz, KM_SLEEP);
strcpy(be_watch.node, "backend");
be_watch.xbw_callback = backend_changed;
register_xenbus_watch(&be_watch);
Home |
Main Index |
Thread Index |
Old Index