2008-08-18 00:24:29 +02:00
|
|
|
commit 51259318c6d40d5dd962c92c561826714361120a
|
|
|
|
Author: Kevin Wolf <kwolf@suse.de>
|
|
|
|
Date: Wed Jul 23 10:51:07 2008 +0200
|
|
|
|
|
|
|
|
qemu-xen: Fix open_disk for blktap disks
|
|
|
|
|
|
|
|
Signed-off-by: Kevin Wolf <kwolf@suse.de>
|
|
|
|
|
2008-09-25 01:20:56 +02:00
|
|
|
Index: xen-3.3.1-testing/tools/ioemu-remote/hw/xen_blktap.c
|
2008-08-18 00:24:29 +02:00
|
|
|
===================================================================
|
2008-09-25 01:20:56 +02:00
|
|
|
--- xen-3.3.1-testing.orig/tools/ioemu-remote/hw/xen_blktap.c
|
|
|
|
+++ xen-3.3.1-testing/tools/ioemu-remote/hw/xen_blktap.c
|
2008-08-18 00:24:29 +02:00
|
|
|
@@ -32,6 +32,11 @@
|
|
|
|
#include <errno.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
+#ifndef QEMU_TOOL
|
|
|
|
+#include "qemu-common.h"
|
|
|
|
+#include "sysemu.h"
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
#include "xen_blktap.h"
|
|
|
|
#include "block_int.h"
|
|
|
|
#include "qemu-char.h"
|
|
|
|
@@ -217,13 +222,15 @@ static int map_new_dev(struct td_state *
|
|
|
|
|
|
|
|
static int open_disk(struct td_state *s, char *path, int readonly)
|
|
|
|
{
|
|
|
|
- struct disk_id id;
|
|
|
|
BlockDriverState* bs;
|
|
|
|
+ char* devname;
|
|
|
|
+ static int devnumber = 0;
|
|
|
|
+ int i;
|
|
|
|
|
|
|
|
- DPRINTF("Opening %s\n", path);
|
|
|
|
- bs = calloc(1, sizeof(*bs));
|
|
|
|
-
|
|
|
|
- memset(&id, 0, sizeof(struct disk_id));
|
|
|
|
+ DPRINTF("Opening %s as blktap%d\n", path, devnumber);
|
|
|
|
+ asprintf(&devname, "blktap%d", devnumber++);
|
|
|
|
+ bs = bdrv_new(devname);
|
|
|
|
+ free(devname);
|
|
|
|
|
|
|
|
if (bdrv_open(bs, path, 0) != 0) {
|
|
|
|
fprintf(stderr, "Could not open image file %s\n", path);
|
|
|
|
@@ -237,6 +244,18 @@ static int open_disk(struct td_state *s,
|
|
|
|
|
|
|
|
s->info = ((s->flags & TD_RDONLY) ? VDISK_READONLY : 0);
|
|
|
|
|
|
|
|
+#ifndef QEMU_TOOL
|
|
|
|
+ for (i = 0; i < MAX_DRIVES + 1; i++) {
|
|
|
|
+ if (drives_table[i].bdrv == NULL) {
|
|
|
|
+ drives_table[i].bdrv = bs;
|
|
|
|
+ drives_table[i].type = IF_BLKTAP;
|
|
|
|
+ drives_table[i].bus = 0;
|
|
|
|
+ drives_table[i].unit = 0;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2008-09-25 01:20:56 +02:00
|
|
|
Index: xen-3.3.1-testing/tools/ioemu-remote/hw/xen_blktap.h
|
2008-08-18 00:24:29 +02:00
|
|
|
===================================================================
|
2008-09-25 01:20:56 +02:00
|
|
|
--- xen-3.3.1-testing.orig/tools/ioemu-remote/hw/xen_blktap.h
|
|
|
|
+++ xen-3.3.1-testing/tools/ioemu-remote/hw/xen_blktap.h
|
2008-08-18 00:24:29 +02:00
|
|
|
@@ -30,11 +30,6 @@ typedef uint32_t td_flag_t;
|
|
|
|
|
|
|
|
#define TD_RDONLY 1
|
|
|
|
|
|
|
|
-struct disk_id {
|
|
|
|
- char *name;
|
|
|
|
- int drivertype;
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
/* This structure represents the state of an active virtual disk. */
|
|
|
|
struct td_state {
|
|
|
|
BlockDriverState* bs;
|
2008-09-25 01:20:56 +02:00
|
|
|
Index: xen-3.3.1-testing/tools/ioemu-remote/sysemu.h
|
2008-08-18 00:24:29 +02:00
|
|
|
===================================================================
|
2008-09-25 01:20:56 +02:00
|
|
|
--- xen-3.3.1-testing.orig/tools/ioemu-remote/sysemu.h
|
|
|
|
+++ xen-3.3.1-testing/tools/ioemu-remote/sysemu.h
|
2008-08-18 00:24:29 +02:00
|
|
|
@@ -116,6 +116,7 @@ extern unsigned int nb_prom_envs;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
+ IF_BLKTAP,
|
|
|
|
IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD
|
|
|
|
} BlockInterfaceType;
|
|
|
|
|
2008-09-25 01:20:56 +02:00
|
|
|
Index: xen-3.3.1-testing/tools/ioemu-remote/vl.c
|
2008-08-18 00:24:29 +02:00
|
|
|
===================================================================
|
2008-09-25 01:20:56 +02:00
|
|
|
--- xen-3.3.1-testing.orig/tools/ioemu-remote/vl.c
|
|
|
|
+++ xen-3.3.1-testing/tools/ioemu-remote/vl.c
|
2008-08-18 00:24:29 +02:00
|
|
|
@@ -5414,6 +5414,9 @@ static int drive_init(struct drive_opt *
|
|
|
|
case IF_PFLASH:
|
|
|
|
case IF_MTD:
|
|
|
|
break;
|
|
|
|
+ case IF_BLKTAP:
|
|
|
|
+ /* Cannot happen - silence gcc warning */
|
|
|
|
+ break;
|
|
|
|
}
|
|
|
|
if (!file[0])
|
|
|
|
return 0;
|