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

[Xen-changelog] [xen-unstable] tools: assume that special Xen devices have been created by the platform



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1275472472 -3600
# Node ID a3bdee5a20daf590ae7a440dad4e3b104b99c620
# Parent  27e86dcdcfacabbb3ab93290c2b4fc51a27eaffc
tools: assume that special Xen devices have been created by the platform

Remove all the magic surrounding the special Xen devices in Linux
specific code whereby we attempt to figure out what the correct
major:minor number is and check the the existing device has these
numbers etc. In 2010 we really should be able to trust that the
platform has created the devices correctly or provide correct
configuration settings such that they are without resorting to tearing
down the platform configured state and rebuilding it.

tools/hotplug/Linux/xen-backend.rules already contains the necessary
udev rules to create /dev/xen/evtchn and friends in the correct place.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
 tools/blktap/drivers/blktapctrl_linux.c |   24 ------
 tools/libxc/xc_linux.c                  |  121 --------------------------------
 2 files changed, 5 insertions(+), 140 deletions(-)

diff -r 27e86dcdcfac -r a3bdee5a20da tools/blktap/drivers/blktapctrl_linux.c
--- a/tools/blktap/drivers/blktapctrl_linux.c   Wed Jun 02 10:52:17 2010 +0100
+++ b/tools/blktap/drivers/blktapctrl_linux.c   Wed Jun 02 10:54:32 2010 +0100
@@ -79,31 +79,11 @@ int blktap_interface_create(int ctlfd, i
 
 int blktap_interface_open(void)
 {
-       char *devname;
-       int ret;
        int ctlfd;
 
-       /* Attach to blktap0 */
-       if (asprintf(&devname,"%s/%s0", BLKTAP_DEV_DIR, BLKTAP_DEV_NAME) == -1)
-               goto open_failed;
-
-       ret = xc_find_device_number("blktap0");
-       if (ret < 0) {
-               DPRINTF("couldn't find device number for 'blktap0'\n");
-               goto open_failed;
-       }
-
-       blktap_major = major(ret);
-       make_blktap_dev(devname,blktap_major, 0);
-
-       ctlfd = open(devname, O_RDWR);
-       if (ctlfd == -1) {
+       ctlfd = open(BLKTAP_DEV_DIR "/" BLKTAP_DEV_NAME "0", O_RDWR);
+       if (ctlfd == -1)
                DPRINTF("blktap0 open failed\n");
-               goto open_failed;
-       }
 
        return ctlfd;
-
-open_failed:
-       return -1;
 }
diff -r 27e86dcdcfac -r a3bdee5a20da tools/libxc/xc_linux.c
--- a/tools/libxc/xc_linux.c    Wed Jun 02 10:52:17 2010 +0100
+++ b/tools/libxc/xc_linux.c    Wed Jun 02 10:54:32 2010 +0100
@@ -316,126 +316,11 @@ int do_xen_hypercall(xc_interface *xch, 
                       (unsigned long)hypercall);
 }
 
-#define MTAB "/proc/mounts"
-#define MAX_PATH 255
-#define _STR(x) #x
-#define STR(x) _STR(x)
-
-static int find_sysfsdir(char *sysfsdir)
-{
-    FILE *fp;
-    char type[MAX_PATH + 1];
-
-    if ( (fp = fopen(MTAB, "r")) == NULL )
-        return -1;
-
-    while ( fscanf(fp, "%*s %"STR(MAX_PATH)"s %"STR(MAX_PATH)"s %*s %*d %*d\n",
-                   sysfsdir, type) == 2 )
-        if ( strncmp(type, "sysfs", 5) == 0 )
-            break;
-
-    fclose(fp);
-
-    return ((strncmp(type, "sysfs", 5) == 0) ? 0 : -1);
-}
-
-int xc_find_device_number(const char *name)
-{
-    FILE *fp;
-    int i, major, minor;
-    char sysfsdir[MAX_PATH + 1];
-    static char *classlist[] = { "xen", "misc" };
-
-    for ( i = 0; i < (sizeof(classlist) / sizeof(classlist[0])); i++ )
-    {
-        if ( find_sysfsdir(sysfsdir) < 0 )
-            goto not_found;
-
-        /* <base>/class/<classname>/<devname>/dev */
-        strncat(sysfsdir, "/class/", MAX_PATH);
-        strncat(sysfsdir, classlist[i], MAX_PATH);
-        strncat(sysfsdir, "/", MAX_PATH);
-        strncat(sysfsdir, name, MAX_PATH);
-        strncat(sysfsdir, "/dev", MAX_PATH);
-
-        if ( (fp = fopen(sysfsdir, "r")) != NULL )
-            goto found;
-    }
-
- not_found:
-    errno = -ENOENT;
-    return -1;
-
- found:
-    if ( fscanf(fp, "%d:%d", &major, &minor) != 2 )
-    {
-        fclose(fp);
-        goto not_found;
-    }
-
-    fclose(fp);
-
-    return makedev(major, minor);
-}
-
-#define DEVXEN "/dev/xen"
-
-static int make_dev_xen(void)
-{
-    if ( mkdir(DEVXEN, 0755) != 0 )
-    {
-        struct stat st;
-        if ( (stat(DEVXEN, &st) != 0) || !S_ISDIR(st.st_mode) )
-            return -1;
-    }
-
-    return 0;
-}
-
-static int xendev_open(const char *dev)
-{
-    int fd, devnum;
-    struct stat st;
-    char *devname, *devpath;
-
-    devname = devpath = NULL;
-    fd = -1;
-
-    if ( asprintf(&devname, "xen!%s", dev) == 0 )
-        goto fail;
-
-    if ( asprintf(&devpath, "%s/%s", DEVXEN, dev) == 0 )
-        goto fail;
-
-    devnum = xc_find_device_number(dev);
-    if ( devnum == -1 )
-        devnum = xc_find_device_number(devname);
-
-    /*
-     * If we know what the correct device is and the path doesn't exist or 
-     * isn't a device, then remove it so we can create the device.
-     */
-    if ( (devnum != -1) &&
-         ((stat(devpath, &st) != 0) || !S_ISCHR(st.st_mode)) )
-    {
-        unlink(devpath);
-        if ( (make_dev_xen() == -1) ||
-             (mknod(devpath, S_IFCHR|0600, devnum) != 0) )
-            goto fail;
-    }
-
-    fd = open(devpath, O_RDWR);
-
- fail:
-    free(devname);
-    free(devpath);
-
-    return fd;
-}
+#define DEVXEN "/dev/xen/"
 
 int xc_evtchn_open(void)
 {
-    return xendev_open("evtchn");
+    return open(DEVXEN "evtchn", O_RDWR);
 }
 
 int xc_evtchn_close(int xce_handle)
@@ -551,7 +436,7 @@ void discard_file_cache(xc_interface *xc
 
 int xc_gnttab_open(xc_interface *xch)
 {
-    return xendev_open("gntdev");
+    return open(DEVXEN "gntdev", O_RDWR);
 }
 
 int xc_gnttab_close(xc_interface *xch, int xcg_handle)

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.