diff options
-rw-r--r-- | tools/blktap/drivers/blktapctrl_linux.c | 24 | ||||
-rw-r--r-- | tools/libxc/xc_linux.c | 121 |
2 files changed, 5 insertions, 140 deletions
diff --git a/tools/blktap/drivers/blktapctrl_linux.c b/tools/blktap/drivers/blktapctrl_linux.c index 7977873577..6282fa681a 100644 --- a/tools/blktap/drivers/blktapctrl_linux.c +++ b/tools/blktap/drivers/blktapctrl_linux.c @@ -79,31 +79,11 @@ int blktap_interface_create(int ctlfd, int *major, int *minor, blkif_t *blkif) 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 --git a/tools/libxc/xc_linux.c b/tools/libxc/xc_linux.c index 4c1498f2ae..883a70e7cb 100644 --- a/tools/libxc/xc_linux.c +++ b/tools/libxc/xc_linux.c @@ -316,126 +316,11 @@ int do_xen_hypercall(xc_interface *xch, privcmd_hypercall_t *hypercall) (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 *xch, int fd, int flush) 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) |