Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/xen add a small wrapper xenbus_directory_free() to ...



details:   https://anonhg.NetBSD.org/src/rev/37560bcb84d4
branches:  trunk
changeset: 1008981:37560bcb84d4
user:      jdolecek <jdolecek%NetBSD.org@localhost>
date:      Tue Apr 07 15:59:57 2020 +0000

description:
add a small wrapper xenbus_directory_free() to free result of
xenbus_directory(), so that caller doesn't need to be aware how the memory
was allocated

diffstat:

 sys/arch/xen/include/xenbus.h      |   3 ++-
 sys/arch/xen/xenbus/xenbus_probe.c |  27 ++++++++++++++-------------
 sys/arch/xen/xenbus/xenbus_xs.c    |  10 ++++++++--
 3 files changed, 24 insertions(+), 16 deletions(-)

diffs (140 lines):

diff -r 860ba1db95a9 -r 37560bcb84d4 sys/arch/xen/include/xenbus.h
--- a/sys/arch/xen/include/xenbus.h     Tue Apr 07 15:43:42 2020 +0000
+++ b/sys/arch/xen/include/xenbus.h     Tue Apr 07 15:59:57 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: xenbus.h,v 1.20 2020/04/07 15:40:14 jdolecek Exp $ */
+/* $NetBSD: xenbus.h,v 1.21 2020/04/07 15:59:57 jdolecek Exp $ */
 /******************************************************************************
  * xenbus.h
  *
@@ -120,6 +120,7 @@
 int xenbus_directory(struct xenbus_transaction *t,
                        const char *dir, const char *node, unsigned int *num,
                        char ***);
+void xenbus_directory_free(unsigned int, char **);
 int xenbus_read(struct xenbus_transaction *,
                  const char *, const char *, char *, size_t);
 int xenbus_read_ul(struct xenbus_transaction *,
diff -r 860ba1db95a9 -r 37560bcb84d4 sys/arch/xen/xenbus/xenbus_probe.c
--- a/sys/arch/xen/xenbus/xenbus_probe.c        Tue Apr 07 15:43:42 2020 +0000
+++ b/sys/arch/xen/xenbus/xenbus_probe.c        Tue Apr 07 15:59:57 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: xenbus_probe.c,v 1.45 2020/04/07 15:40:14 jdolecek Exp $ */
+/* $NetBSD: xenbus_probe.c,v 1.46 2020/04/07 15:59:57 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.45 2020/04/07 15:40:14 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xenbus_probe.c,v 1.46 2020/04/07 15:59:57 jdolecek Exp $");
 
 #if 0
 #define DPRINTK(fmt, args...) \
@@ -41,7 +41,6 @@
 #include <sys/types.h>
 #include <sys/null.h>
 #include <sys/errno.h>
-#include <sys/malloc.h>
 #include <sys/kmem.h>
 #include <sys/systm.h>
 #include <sys/param.h>
@@ -316,16 +315,17 @@
        size_t lookup_sz = 0;
        unsigned long state;
        char **dir;
-       unsigned int dir_n = 0;
+       unsigned int orig_dir_n = 0, dir_n;
        struct xenbus_device *xbusd;
        struct xenbusdev_attach_args xa;
        char *ep;
 
        DPRINTK("probe %s type %s", path, type);
-       err = xenbus_directory(NULL, path, "", &dir_n, &dir);
+       err = xenbus_directory(NULL, path, "", &orig_dir_n, &dir);
        DPRINTK("directory err %d dir_n %d", err, dir_n);
        if (err)
                return err;
+       dir_n = orig_dir_n;
 
        /* Only sort frontend devices i.e. create == NULL*/
        if (dir_n > 1 && create == NULL) {
@@ -456,7 +456,7 @@
                    xbusd, xbusd_entries);
                watch_otherend(xbusd);
        }
-       free(dir, M_DEVBUF);
+       xenbus_directory_free(orig_dir_n, dir);
        if (lookup)
                kmem_free(lookup, lookup_sz);
        
@@ -511,7 +511,7 @@
                if (err)
                        break;
        }
-       free(dir, M_DEVBUF);
+       xenbus_directory_free(dir_n, dir);
        return err;
 }
 
@@ -542,10 +542,9 @@
                    &dirid_n, &dirid);
                DPRINTK("directory backend/%s err %d dirid_n %d",
                    dirt[type], err, dirid_n);
-               if (err) {
-                       free(dirt, M_DEVBUF); /* to be checked */
-                       return err;
-               }
+               if (err)
+                       goto out;
+
                for (id = 0; id < dirid_n; id++) {
                        snprintf(path, sizeof(path), "backend/%s/%s",
                            dirt[type], dirid[id]);
@@ -554,9 +553,11 @@
                        if (err)
                                break;
                }
-               free(dirid, M_DEVBUF);
+               xenbus_directory_free(dirid_n, dirid);
        }
-       free(dirt, M_DEVBUF);
+
+out:
+       xenbus_directory_free(dirt_n, dirt);
        return err;
 }
 
diff -r 860ba1db95a9 -r 37560bcb84d4 sys/arch/xen/xenbus/xenbus_xs.c
--- a/sys/arch/xen/xenbus/xenbus_xs.c   Tue Apr 07 15:43:42 2020 +0000
+++ b/sys/arch/xen/xenbus/xenbus_xs.c   Tue Apr 07 15:59:57 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: xenbus_xs.c,v 1.24 2020/04/07 11:47:06 jdolecek Exp $ */
+/* $NetBSD: xenbus_xs.c,v 1.25 2020/04/07 15:59:57 jdolecek Exp $ */
 /******************************************************************************
  * xenbus_xs.c
  *
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xenbus_xs.c,v 1.24 2020/04/07 11:47:06 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xenbus_xs.c,v 1.25 2020/04/07 15:59:57 jdolecek Exp $");
 
 #if 0
 #define DPRINTK(fmt, args...) \
@@ -338,6 +338,12 @@
        return 0;
 }
 
+void
+xenbus_directory_free(unsigned int num, char **dir)
+{
+       free(dir, M_DEVBUF);
+}
+
 /* Check if a path exists. Return 1 if it does. */
 int
 xenbus_exists(struct xenbus_transaction *t,



Home | Main Index | Thread Index | Old Index