This commit is contained in:
parent
cf62e5ae4d
commit
622c859b48
@ -2,7 +2,7 @@ Index: xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -1753,7 +1753,7 @@ class XendDomainInfo:
|
||||
@@ -1758,7 +1758,7 @@ class XendDomainInfo:
|
||||
xc.domain_setmaxmem(self.domid, maxmem)
|
||||
|
||||
# Make sure there's enough RAM available for the domain
|
||||
|
@ -5,7 +5,7 @@ Index: xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -2060,7 +2060,7 @@ class XendDomainInfo:
|
||||
@@ -2064,7 +2064,7 @@ class XendDomainInfo:
|
||||
(fn, BOOTLOADER_LOOPBACK_DEVICE))
|
||||
|
||||
vbd = {
|
||||
@ -45,7 +45,7 @@ Index: xen-3.2-testing/tools/ioemu/xenstore.c
|
||||
/* read the name of the device */
|
||||
if (pasprintf(&buf, "%s/dev", bpath) == -1)
|
||||
continue;
|
||||
@@ -243,6 +251,7 @@ void xenstore_parse_domain_config(int do
|
||||
@@ -250,6 +258,7 @@ void xenstore_parse_domain_config(int do
|
||||
free(type);
|
||||
free(params);
|
||||
free(dev);
|
||||
|
@ -1,410 +1,8 @@
|
||||
Index: xen-3.1-testing/tools/ioemu/block.c
|
||||
Index: xen-3.2-testing/tools/python/xen/xend/server/HalDaemon.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/block.c 2007-08-13 12:47:26.000000000 -0600
|
||||
+++ xen-3.1-testing/tools/ioemu/block.c 2007-08-13 12:48:46.000000000 -0600
|
||||
@@ -185,6 +185,13 @@
|
||||
uint8_t *buf;
|
||||
size_t bufsize = 1024;
|
||||
|
||||
+ if ( strcmp(filename, "/dev/cdrom") == 0) {
|
||||
+ drv = bdrv_find_format("raw");
|
||||
+ if (drv != NULL) {
|
||||
+ return(drv);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE);
|
||||
if (fd < 0) {
|
||||
buf = NULL;
|
||||
@@ -536,21 +543,11 @@
|
||||
return bs->read_only;
|
||||
}
|
||||
|
||||
-int bdrv_is_inserted(BlockDriverState *bs)
|
||||
-{
|
||||
- return bs->inserted;
|
||||
-}
|
||||
-
|
||||
int bdrv_is_locked(BlockDriverState *bs)
|
||||
{
|
||||
return bs->locked;
|
||||
}
|
||||
|
||||
-void bdrv_set_locked(BlockDriverState *bs, int locked)
|
||||
-{
|
||||
- bs->locked = locked;
|
||||
-}
|
||||
-
|
||||
void bdrv_set_change_cb(BlockDriverState *bs,
|
||||
void (*change_cb)(void *opaque), void *opaque)
|
||||
{
|
||||
@@ -697,8 +694,10 @@
|
||||
fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE);
|
||||
if (fd < 0) {
|
||||
fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE);
|
||||
- if (fd < 0)
|
||||
- return -1;
|
||||
+ if (fd < 0 && strstart(filename, "/dev/cd", NULL))
|
||||
+ fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE | O_NONBLOCK );
|
||||
+ if (fd < 0)
|
||||
+ return -1;
|
||||
bs->read_only = 1;
|
||||
}
|
||||
#ifdef _BSD
|
||||
@@ -769,8 +768,97 @@
|
||||
BDRVRawState *s = bs->opaque;
|
||||
bs->total_sectors = 0;
|
||||
close(s->fd);
|
||||
+ s->fd = -1;
|
||||
+}
|
||||
+
|
||||
+#include <linux/cdrom.h>
|
||||
+#include <sys/ioctl.h>
|
||||
+static int raw_is_inserted(BlockDriverState *bs)
|
||||
+{
|
||||
+ BDRVRawState *s = bs->opaque;
|
||||
+ int ret;
|
||||
+
|
||||
+ switch(bs->removable) {
|
||||
+ case BDRV_TYPE_CDROM:
|
||||
+ ret = ioctl(s->fd, CDROM_DRIVE_STATUS, CDSL_CURRENT);
|
||||
+ if (ret == CDS_DISC_OK) {
|
||||
+ return 1;
|
||||
+ }
|
||||
+ if (ret == -1) { // iso case
|
||||
+ return 1;
|
||||
+ }
|
||||
+ else {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ return 1;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int raw_media_changed(BlockDriverState *bs)
|
||||
+{
|
||||
+ int ret = 0;
|
||||
+
|
||||
+ switch(bs->removable) {
|
||||
+ case BDRV_TYPE_CDROM:
|
||||
+ {
|
||||
+ if( bs->media_changed == 1 )
|
||||
+ {
|
||||
+ ret = 1;
|
||||
+ bs->media_changed = 0;
|
||||
+ }
|
||||
+ return ret;
|
||||
+ }
|
||||
+ default:
|
||||
+ return -ENOTSUP;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int raw_eject(BlockDriverState *bs, int eject_flag)
|
||||
+{
|
||||
+ char cmd[sizeof(bs->filename) + 32];
|
||||
+
|
||||
+ switch(bs->removable) {
|
||||
+ case BDRV_TYPE_CDROM:
|
||||
+ if (eject_flag) {
|
||||
+ sprintf(cmd, "eject %s", bs->filename);
|
||||
+ if (system(cmd) == -1) {
|
||||
+ perror("CDROMEJECT");
|
||||
+ }
|
||||
+ } else {
|
||||
+ sprintf(cmd, "eject -t %s", bs->filename);
|
||||
+ if (system(cmd) == -1) {
|
||||
+ perror("CDROMCLOSETRAY");
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ return -ENOTSUP;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int raw_set_locked(BlockDriverState *bs, int locked)
|
||||
+{
|
||||
+ BDRVRawState *s = bs->opaque;
|
||||
+
|
||||
+ switch(bs->removable) {
|
||||
+ case BDRV_TYPE_CDROM:
|
||||
+ if (ioctl (s->fd, CDROM_LOCKDOOR, locked) < 0) {
|
||||
+ /* Note: an error can happen if the distribution automatically
|
||||
+ mounts the CD-ROM */
|
||||
+ // perror("CDROM_LOCKDOOR");
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ return -ENOTSUP;
|
||||
+ }
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
+
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#include <winioctl.h>
|
||||
@@ -850,6 +938,12 @@
|
||||
raw_close,
|
||||
raw_create,
|
||||
raw_flush,
|
||||
+
|
||||
+ /* removable device support */
|
||||
+ .bdrv_is_inserted = raw_is_inserted,
|
||||
+ .bdrv_media_changed = raw_media_changed,
|
||||
+ .bdrv_eject = raw_eject,
|
||||
+ .bdrv_set_locked = raw_set_locked,
|
||||
};
|
||||
|
||||
void bdrv_init(void)
|
||||
@@ -866,3 +960,96 @@
|
||||
bdrv_register(&bdrv_vpc);
|
||||
bdrv_register(&bdrv_vvfat);
|
||||
}
|
||||
+
|
||||
+/**************************************************************/
|
||||
+/* removable device support */
|
||||
+
|
||||
+/**
|
||||
+ * Return TRUE if the media is present
|
||||
+ */
|
||||
+int bdrv_is_inserted(BlockDriverState *bs)
|
||||
+{
|
||||
+ BlockDriver *drv = bs->drv;
|
||||
+ int ret;
|
||||
+ if (!drv)
|
||||
+ return 0;
|
||||
+ if (!drv->bdrv_is_inserted)
|
||||
+ return 1;
|
||||
+ ret = drv->bdrv_is_inserted(bs);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * Return TRUE if the media changed since the last call to this
|
||||
+ * function.
|
||||
+ */
|
||||
+int bdrv_media_changed(BlockDriverState *bs)
|
||||
+{
|
||||
+ BlockDriver *drv = bs->drv;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (!drv || !drv->bdrv_media_changed)
|
||||
+ ret = -ENOTSUP;
|
||||
+ else
|
||||
+ ret = drv->bdrv_media_changed(bs);
|
||||
+ if (ret == -ENOTSUP)
|
||||
+ ret = bs->media_changed;
|
||||
+ bs->media_changed = 0;
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/**
|
||||
+ * If eject_flag is TRUE, eject the media. Otherwise, close the tray
|
||||
+ */
|
||||
+void bdrv_eject(BlockDriverState *bs, int eject_flag)
|
||||
+{
|
||||
+
|
||||
+ int ret = 0;
|
||||
+ char cmd[sizeof(bs->filename) + 32];
|
||||
+ BlockDriver *drv = bs->drv;
|
||||
+
|
||||
+ switch(bs->removable) {
|
||||
+ case BDRV_TYPE_CDROM:
|
||||
+ if (eject_flag) {
|
||||
+ sprintf(cmd, "eject %s", bs->filename);
|
||||
+ if (system(cmd) == -1) {
|
||||
+ perror("CDROMEJECT");
|
||||
+ ret = -ENOTSUP;
|
||||
+ }
|
||||
+ } else {
|
||||
+ sprintf(cmd, "eject -t %s", bs->filename);
|
||||
+ if (system(cmd) == -1) {
|
||||
+ perror("CDROMCLOSETRAY");
|
||||
+ ret = -ENOTSUP;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ if (!drv || !drv->bdrv_eject) {
|
||||
+ ret = -ENOTSUP;
|
||||
+ } else {
|
||||
+ ret = drv->bdrv_eject(bs, eject_flag);
|
||||
+ }
|
||||
+ if (ret == -ENOTSUP) {
|
||||
+ if (eject_flag)
|
||||
+ bdrv_close(bs);
|
||||
+ }
|
||||
+ }
|
||||
+ //return ret;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * Lock or unlock the media (if it is locked, the user won't be able
|
||||
+ * to eject it manually).
|
||||
+ */
|
||||
+void bdrv_set_locked(BlockDriverState *bs, int locked)
|
||||
+{
|
||||
+ BlockDriver *drv = bs->drv;
|
||||
+
|
||||
+ bs->locked = locked;
|
||||
+ if (drv && drv->bdrv_set_locked) {
|
||||
+ drv->bdrv_set_locked(bs, locked);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
Index: xen-3.1-testing/tools/ioemu/block_int.h
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/block_int.h 2007-05-17 09:51:09.000000000 -0600
|
||||
+++ xen-3.1-testing/tools/ioemu/block_int.h 2007-08-13 12:47:26.000000000 -0600
|
||||
@@ -41,6 +41,13 @@
|
||||
int nb_sectors, int *pnum);
|
||||
int (*bdrv_set_key)(BlockDriverState *bs, const char *key);
|
||||
int (*bdrv_make_empty)(BlockDriverState *bs);
|
||||
+
|
||||
+ /* removable device specific */
|
||||
+ int (*bdrv_is_inserted)(BlockDriverState *bs);
|
||||
+ int (*bdrv_media_changed)(BlockDriverState *bs);
|
||||
+ int (*bdrv_eject)(BlockDriverState *bs, int eject_flag);
|
||||
+ int (*bdrv_set_locked)(BlockDriverState *bs, int locked);
|
||||
+
|
||||
struct BlockDriver *next;
|
||||
};
|
||||
|
||||
@@ -65,6 +72,7 @@
|
||||
char backing_file[1024]; /* if non zero, the image is a diff of
|
||||
this file image */
|
||||
int is_temporary;
|
||||
+ int media_changed;
|
||||
|
||||
BlockDriverState *backing_hd;
|
||||
|
||||
Index: xen-3.1-testing/tools/ioemu/hw/ide.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/hw/ide.c 2007-05-17 09:51:09.000000000 -0600
|
||||
+++ xen-3.1-testing/tools/ioemu/hw/ide.c 2007-08-13 12:47:26.000000000 -0600
|
||||
@@ -278,6 +278,7 @@
|
||||
#define ASC_ILLEGAL_OPCODE 0x20
|
||||
#define ASC_LOGICAL_BLOCK_OOR 0x21
|
||||
#define ASC_INV_FIELD_IN_CMD_PACKET 0x24
|
||||
+#define ASC_MEDIA_CHANGED 0x28
|
||||
#define ASC_MEDIUM_NOT_PRESENT 0x3a
|
||||
#define ASC_SAVING_PARAMETERS_NOT_SUPPORTED 0x39
|
||||
|
||||
@@ -393,6 +394,7 @@
|
||||
} PCIIDEState;
|
||||
|
||||
#define DMA_MULTI_THREAD
|
||||
+#undef DMA_MULTI_THREAD
|
||||
|
||||
#ifdef DMA_MULTI_THREAD
|
||||
|
||||
@@ -1341,7 +1343,6 @@
|
||||
} else {
|
||||
ide_atapi_cmd_error(s, SENSE_NOT_READY,
|
||||
ASC_MEDIUM_NOT_PRESENT);
|
||||
- xenstore_check_new_media_present(1000);
|
||||
}
|
||||
break;
|
||||
case GPCMD_MODE_SENSE_10:
|
||||
@@ -1530,7 +1531,10 @@
|
||||
|
||||
if (eject && !start) {
|
||||
/* eject the disk */
|
||||
- bdrv_close(s->bs);
|
||||
+ bdrv_eject(s->bs, 1);
|
||||
+ } else if (eject && start) {
|
||||
+ /* close the tray */
|
||||
+ bdrv_eject(s->bs, 0);
|
||||
}
|
||||
ide_atapi_cmd_ok(s);
|
||||
}
|
||||
Index: xen-3.1-testing/tools/ioemu/xenstore.c
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/ioemu/xenstore.c 2007-05-17 09:51:09.000000000 -0600
|
||||
+++ xen-3.1-testing/tools/ioemu/xenstore.c 2007-08-13 12:47:37.000000000 -0600
|
||||
@@ -82,7 +82,7 @@
|
||||
char **e = NULL;
|
||||
char *buf = NULL, *path;
|
||||
char *fpath = NULL, *bpath = NULL,
|
||||
- *dev = NULL, *params = NULL, *type = NULL;
|
||||
+ *dev = NULL, *params = NULL, *type = NULL, *media_present = NULL;
|
||||
int i, is_scsi;
|
||||
unsigned int len, num, hd_index;
|
||||
|
||||
@@ -170,6 +170,11 @@
|
||||
bdrv_set_type_hint(bs_table[hd_index], BDRV_TYPE_CDROM);
|
||||
if (pasprintf(&buf, "%s/params", bpath) != -1)
|
||||
xs_watch(xsh, buf, dev);
|
||||
+ if (pasprintf(&buf, "%s/media-present", bpath) != -1) {
|
||||
+ free(media_present);
|
||||
+ media_present = xs_read(xsh, XBT_NULL, buf, &len);
|
||||
+ xs_watch(xsh, buf, "media_present");
|
||||
+ }
|
||||
}
|
||||
/* open device now if media present */
|
||||
if (params[0]) {
|
||||
@@ -313,7 +318,7 @@
|
||||
|
||||
void xenstore_process_event(void *opaque)
|
||||
{
|
||||
- char **vec, *image = NULL;
|
||||
+ char **vec, *image = NULL, *media_present = NULL;
|
||||
unsigned int len, num, hd_index;
|
||||
|
||||
vec = xs_read_watch(xsh, &num);
|
||||
@@ -325,6 +330,40 @@
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ if (!strcmp(vec[XS_WATCH_TOKEN], "media_present")) {
|
||||
+ media_present = xs_read(xsh, XBT_NULL, vec[XS_WATCH_PATH], &len);
|
||||
+ if (media_present) {
|
||||
+ BlockDriverState *bs;
|
||||
+ char *buf = NULL, *cp = NULL, *path = NULL, *dev = NULL;
|
||||
+
|
||||
+ path = strdup(vec[XS_WATCH_PATH]);
|
||||
+ cp = strstr(path, "media-present");
|
||||
+ if (cp){
|
||||
+ *(cp-1) = '\0';
|
||||
+ pasprintf(&buf, "%s/dev", path);
|
||||
+ dev = xs_read(xsh, XBT_NULL, buf, &len);
|
||||
+ if (dev) {
|
||||
+ bs = bdrv_find(dev);
|
||||
+ if (!bs) {
|
||||
+ term_printf("device not found\n");
|
||||
+ goto out;
|
||||
+ }
|
||||
+ if (strcmp(media_present, "0") == 0 && bs) {
|
||||
+ bdrv_close(bs);
|
||||
+ }
|
||||
+ else if (strcmp(media_present, "1") == 0 && bs != NULL && bs->drv == NULL) {
|
||||
+ if (bdrv_open(bs, bs->filename, 0 /* snapshot */) < 0) {
|
||||
+ fprintf(stderr, "qemu: could not open hard disk image '%s'\n",
|
||||
+ bs->filename);
|
||||
+ }
|
||||
+ bs->media_changed = 1;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
if (strncmp(vec[XS_WATCH_TOKEN], "hd", 2) ||
|
||||
strlen(vec[XS_WATCH_TOKEN]) != 3)
|
||||
goto out;
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/server/HalDaemon.py
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/server/HalDaemon.py 2007-08-13 12:47:26.000000000 -0600
|
||||
@@ -0,0 +1,228 @@
|
||||
--- /dev/null
|
||||
+++ xen-3.2-testing/tools/python/xen/xend/server/HalDaemon.py
|
||||
@@ -0,0 +1,238 @@
|
||||
+#!/usr/bin/env python
|
||||
+# -*- mode: python; -*-
|
||||
+#============================================================================
|
||||
@ -609,8 +207,8 @@ Index: xen-3.1-testing/tools/python/xen/xend/server/HalDaemon.py
|
||||
+ vbd_type = value;
|
||||
+ if vbd_type is not None and vbd_physical_device is not None and vbd_media is not None :
|
||||
+ inode = vbd_physical_device.split(':')
|
||||
+ imajor = inode[0]
|
||||
+ iminor = inode[1]
|
||||
+ imajor = parse_hex(inode[0])
|
||||
+ iminor = parse_hex(inode[1])
|
||||
+ log.debug("action:%s major:%s- minor:%s- imajor:%s- iminor:%s- inode: %s",
|
||||
+ action,major,minor, imajor, iminor, inode)
|
||||
+ if int(imajor) == int(major) and int(iminor) == int(minor):
|
||||
@ -627,17 +225,27 @@ Index: xen-3.1-testing/tools/python/xen/xend/server/HalDaemon.py
|
||||
+ print >>f, "HalDaemon ", fmt % args
|
||||
+ f.close()
|
||||
+
|
||||
+
|
||||
+def parse_hex(val):
|
||||
+ try:
|
||||
+ if isinstance(val, types.StringTypes):
|
||||
+ return int(val, 16)
|
||||
+ else:
|
||||
+ return val
|
||||
+ except ValueError:
|
||||
+ return None
|
||||
+
|
||||
+if __name__ == "__main__":
|
||||
+ watcher = HalDaemon()
|
||||
+ watcher.run()
|
||||
+ print 'Falling off end'
|
||||
+
|
||||
+
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/server/Hald.py
|
||||
Index: xen-3.2-testing/tools/python/xen/xend/server/Hald.py
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/server/Hald.py 2007-08-13 12:47:26.000000000 -0600
|
||||
@@ -0,0 +1,113 @@
|
||||
--- /dev/null
|
||||
+++ xen-3.2-testing/tools/python/xen/xend/server/Hald.py
|
||||
@@ -0,0 +1,125 @@
|
||||
+#============================================================================
|
||||
+# This library is free software; you can redistribute it and/or
|
||||
+# modify it under the terms of version 2.1 of the GNU Lesser General Public
|
||||
@ -714,6 +322,8 @@ Index: xen-3.1-testing/tools/python/xen/xend/server/Hald.py
|
||||
+ pid2 = None
|
||||
+ if pid2 == 0:
|
||||
+ os.chdir("/")
|
||||
+ env = os.environ.copy()
|
||||
+ env['PYTHONPATH'] = self.getpythonpath()
|
||||
+ for fd in range(0, 256):
|
||||
+ try:
|
||||
+ os.close(fd)
|
||||
@ -722,7 +332,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/server/Hald.py
|
||||
+ os.open("/dev/null", os.O_RDWR)
|
||||
+ os.dup2(0, 1)
|
||||
+ os.dup2(0, 2)
|
||||
+ os.execvp(prog, args)
|
||||
+ os.execvpe(prog, args, env)
|
||||
+ os._exit(1)
|
||||
+ else:
|
||||
+ w.write(str(pid2 or 0))
|
||||
@ -736,6 +346,16 @@ Index: xen-3.1-testing/tools/python/xen/xend/server/Hald.py
|
||||
+ #log.debug( "daemon_pid: %d", daemon_pid )
|
||||
+ return daemon_pid
|
||||
+
|
||||
+ def getpythonpath(self):
|
||||
+ str = " "
|
||||
+ for p in sys.path:
|
||||
+ if str != " ":
|
||||
+ str = str + ":" + p
|
||||
+ else:
|
||||
+ if str != "":
|
||||
+ str = p
|
||||
+ return str
|
||||
+
|
||||
+ def find(self,path, matchFunc=os.path.isfile):
|
||||
+ """Find a module in the sys.path
|
||||
+ From web page: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52224
|
||||
@ -751,11 +371,11 @@ Index: xen-3.1-testing/tools/python/xen/xend/server/Hald.py
|
||||
+ watcher.run()
|
||||
+ time.sleep(10)
|
||||
+ watcher.shutdown()
|
||||
Index: xen-3.1-testing/tools/python/xen/xend/server/SrvServer.py
|
||||
Index: xen-3.2-testing/tools/python/xen/xend/server/SrvServer.py
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/python/xen/xend/server/SrvServer.py 2007-05-17 09:51:10.000000000 -0600
|
||||
+++ xen-3.1-testing/tools/python/xen/xend/server/SrvServer.py 2007-08-13 12:47:26.000000000 -0600
|
||||
@@ -57,6 +57,7 @@
|
||||
--- xen-3.2-testing.orig/tools/python/xen/xend/server/SrvServer.py
|
||||
+++ xen-3.2-testing/tools/python/xen/xend/server/SrvServer.py
|
||||
@@ -56,6 +56,7 @@ from xen.web.SrvDir import SrvDir
|
||||
|
||||
from SrvRoot import SrvRoot
|
||||
from XMLRPCServer import XMLRPCServer
|
||||
@ -763,7 +383,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/server/SrvServer.py
|
||||
|
||||
xoptions = XendOptions.instance()
|
||||
|
||||
@@ -248,6 +249,8 @@
|
||||
@@ -245,6 +246,8 @@ def _loadConfig(servers, root, reload):
|
||||
if xoptions.get_xend_unix_xmlrpc_server():
|
||||
servers.add(XMLRPCServer(XendAPI.AUTH_PAM, False))
|
||||
|
||||
@ -772,3 +392,84 @@ Index: xen-3.1-testing/tools/python/xen/xend/server/SrvServer.py
|
||||
|
||||
def create():
|
||||
root = SrvDir()
|
||||
Index: xen-3.2-testing/tools/ioemu/xenstore.c
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/tools/ioemu/xenstore.c
|
||||
+++ xen-3.2-testing/tools/ioemu/xenstore.c
|
||||
@@ -215,6 +215,13 @@ void xenstore_parse_domain_config(int do
|
||||
bdrv_set_type_hint(bs_table[hd_index], BDRV_TYPE_CDROM);
|
||||
if (pasprintf(&buf, "%s/params", bpath) != -1)
|
||||
xs_watch(xsh, buf, dev);
|
||||
+ /* if pyhsical put a watch on media-present after creating it */
|
||||
+ if (drv && !strcmp(drv, "phy")) {
|
||||
+ if (pasprintf(&buf, "%s/media-present", bpath) != -1) {
|
||||
+ xs_write(xsh, XBT_NULL, buf, "1", strlen("1"));
|
||||
+ xs_watch(xsh, buf, "media-present");
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
/* open device now if media present */
|
||||
if (params[0]) {
|
||||
@@ -416,6 +423,50 @@ void xenstore_record_dm_state(char *stat
|
||||
free(path);
|
||||
}
|
||||
|
||||
+void xenstore_process_media_change_event(char **vec)
|
||||
+{
|
||||
+ char *media_present = NULL;
|
||||
+ unsigned int len;
|
||||
+
|
||||
+ media_present = xs_read(xsh, XBT_NULL, vec[XS_WATCH_PATH], &len);
|
||||
+
|
||||
+ if (media_present) {
|
||||
+ BlockDriverState *bs;
|
||||
+ char *buf = NULL, *cp = NULL, *path = NULL, *dev = NULL;
|
||||
+
|
||||
+ path = strdup(vec[XS_WATCH_PATH]);
|
||||
+ cp = strstr(path, "media-present");
|
||||
+ if (cp){
|
||||
+ *(cp-1) = '\0';
|
||||
+ pasprintf(&buf, "%s/dev", path);
|
||||
+ dev = xs_read(xsh, XBT_NULL, buf, &len);
|
||||
+ if (dev) {
|
||||
+ if ( !strncmp(dev, "xvd", 3)) {
|
||||
+ memmove(dev, dev+1, strlen(dev));
|
||||
+ dev[0] = 'h';
|
||||
+ dev[1] = 'd';
|
||||
+ }
|
||||
+ bs = bdrv_find(dev);
|
||||
+ if (!bs) {
|
||||
+ term_printf("device not found\n");
|
||||
+ return;
|
||||
+ }
|
||||
+ if (strcmp(media_present, "0") == 0 && bs) {
|
||||
+ bdrv_close(bs);
|
||||
+ }
|
||||
+ else if (strcmp(media_present, "1") == 0 &&
|
||||
+ bs != NULL && bs->drv == NULL) {
|
||||
+ if (bdrv_open(bs, bs->filename, 0 /* snapshot */) < 0) {
|
||||
+ fprintf(logfile, "%s() qemu: could not open cdrom disk '%s'\n",
|
||||
+ __func__, bs->filename);
|
||||
+ }
|
||||
+ bs->media_changed = 1;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
void xenstore_process_event(void *opaque)
|
||||
{
|
||||
char **vec, *image = NULL;
|
||||
@@ -435,6 +486,11 @@ void xenstore_process_event(void *opaque
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ if (!strcmp(vec[XS_WATCH_TOKEN], "media-present")) {
|
||||
+ xenstore_process_media_change_event(vec);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
if (strncmp(vec[XS_WATCH_TOKEN], "hd", 2) ||
|
||||
strlen(vec[XS_WATCH_TOKEN]) != 3)
|
||||
goto out;
|
||||
|
165
const-callback-arg.patch
Normal file
165
const-callback-arg.patch
Normal file
@ -0,0 +1,165 @@
|
||||
Index: 2008-01-07/xen/arch/ia64/xen/hypercall.c
|
||||
===================================================================
|
||||
--- 2008-01-07.orig/xen/arch/ia64/xen/hypercall.c 2007-12-05 17:13:57.000000000 +0100
|
||||
+++ 2008-01-07/xen/arch/ia64/xen/hypercall.c 2008-01-07 12:11:43.000000000 +0100
|
||||
@@ -34,9 +34,6 @@
|
||||
#include <xen/perfc.h>
|
||||
#include <public/arch-ia64/debug_op.h>
|
||||
|
||||
-extern long do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg);
|
||||
-extern long do_callback_op(int cmd, XEN_GUEST_HANDLE(void) arg);
|
||||
-
|
||||
static IA64FAULT
|
||||
xen_hypercall (struct pt_regs *regs)
|
||||
{
|
||||
@@ -457,7 +454,7 @@ static long unregister_guest_callback(st
|
||||
/* First time to add callback to xen/ia64, so let's just stick to
|
||||
* the newer callback interface.
|
||||
*/
|
||||
-long do_callback_op(int cmd, XEN_GUEST_HANDLE(void) arg)
|
||||
+long do_callback_op(int cmd, XEN_GUEST_HANDLE(cvoid) arg)
|
||||
{
|
||||
long ret;
|
||||
|
||||
Index: 2008-01-07/xen/arch/x86/x86_32/traps.c
|
||||
===================================================================
|
||||
--- 2008-01-07.orig/xen/arch/x86/x86_32/traps.c 2007-11-26 16:57:03.000000000 +0100
|
||||
+++ 2008-01-07/xen/arch/x86/x86_32/traps.c 2008-01-07 12:11:43.000000000 +0100
|
||||
@@ -419,7 +419,7 @@ static long unregister_guest_callback(st
|
||||
}
|
||||
|
||||
|
||||
-long do_callback_op(int cmd, XEN_GUEST_HANDLE(void) arg)
|
||||
+long do_callback_op(int cmd, XEN_GUEST_HANDLE(cvoid) arg)
|
||||
{
|
||||
long ret;
|
||||
|
||||
Index: 2008-01-07/xen/arch/x86/x86_64/traps.c
|
||||
===================================================================
|
||||
--- 2008-01-07.orig/xen/arch/x86/x86_64/traps.c 2007-11-02 17:25:58.000000000 +0100
|
||||
+++ 2008-01-07/xen/arch/x86/x86_64/traps.c 2008-01-07 12:11:43.000000000 +0100
|
||||
@@ -470,7 +470,7 @@ static long unregister_guest_callback(st
|
||||
}
|
||||
|
||||
|
||||
-long do_callback_op(int cmd, XEN_GUEST_HANDLE(void) arg)
|
||||
+long do_callback_op(int cmd, XEN_GUEST_HANDLE(cvoid) arg)
|
||||
{
|
||||
long ret;
|
||||
|
||||
Index: 2008-01-07/xen/include/asm-x86/guest_access.h
|
||||
===================================================================
|
||||
--- 2008-01-07.orig/xen/include/asm-x86/guest_access.h 2007-12-07 11:51:50.000000000 +0100
|
||||
+++ 2008-01-07/xen/include/asm-x86/guest_access.h 2008-01-07 12:11:43.000000000 +0100
|
||||
@@ -34,7 +34,8 @@
|
||||
*/
|
||||
#define copy_to_guest_offset(hnd, off, ptr, nr) ({ \
|
||||
const typeof(*(ptr)) *_s = (ptr); \
|
||||
- char (*_d)[sizeof(*_s)] = (void *)(hnd).p; \
|
||||
+ void *_p = (hnd).p; \
|
||||
+ char (*_d)[sizeof(*_s)] = _p; \
|
||||
((void)((hnd).p == (ptr))); \
|
||||
is_hvm_vcpu(current) ? \
|
||||
copy_to_user_hvm(_d+(off), _s, sizeof(*_s)*(nr)) : \
|
||||
@@ -82,7 +83,8 @@
|
||||
|
||||
#define __copy_to_guest_offset(hnd, off, ptr, nr) ({ \
|
||||
const typeof(*(ptr)) *_s = (ptr); \
|
||||
- char (*_d)[sizeof(*_s)] = (void *)(hnd).p; \
|
||||
+ void *_p = (hnd).p; \
|
||||
+ char (*_d)[sizeof(*_s)] = _p; \
|
||||
((void)((hnd).p == (ptr))); \
|
||||
is_hvm_vcpu(current) ? \
|
||||
copy_to_user_hvm(_d+(off), _s, sizeof(*_s)*(nr)) : \
|
||||
Index: 2008-01-07/xen/include/public/arch-ia64.h
|
||||
===================================================================
|
||||
--- 2008-01-07.orig/xen/include/public/arch-ia64.h 2008-01-07 12:02:52.000000000 +0100
|
||||
+++ 2008-01-07/xen/include/public/arch-ia64.h 2008-01-07 12:11:43.000000000 +0100
|
||||
@@ -47,18 +47,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
-/* Guest handles for primitive C types. */
|
||||
-__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
|
||||
-__DEFINE_XEN_GUEST_HANDLE(uint, unsigned int);
|
||||
-__DEFINE_XEN_GUEST_HANDLE(ulong, unsigned long);
|
||||
-__DEFINE_XEN_GUEST_HANDLE(u64, unsigned long);
|
||||
-DEFINE_XEN_GUEST_HANDLE(char);
|
||||
-DEFINE_XEN_GUEST_HANDLE(int);
|
||||
-DEFINE_XEN_GUEST_HANDLE(long);
|
||||
-DEFINE_XEN_GUEST_HANDLE(void);
|
||||
-
|
||||
typedef unsigned long xen_pfn_t;
|
||||
-DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
|
||||
#define PRI_xen_pfn "lx"
|
||||
#endif
|
||||
|
||||
Index: 2008-01-07/xen/include/public/arch-powerpc.h
|
||||
===================================================================
|
||||
--- 2008-01-07.orig/xen/include/public/arch-powerpc.h 2008-01-07 12:02:52.000000000 +0100
|
||||
+++ 2008-01-07/xen/include/public/arch-powerpc.h 2008-01-07 12:11:43.000000000 +0100
|
||||
@@ -47,17 +47,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
-/* Guest handles for primitive C types. */
|
||||
-__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
|
||||
-__DEFINE_XEN_GUEST_HANDLE(uint, unsigned int);
|
||||
-__DEFINE_XEN_GUEST_HANDLE(ulong, unsigned long);
|
||||
-DEFINE_XEN_GUEST_HANDLE(char);
|
||||
-DEFINE_XEN_GUEST_HANDLE(int);
|
||||
-DEFINE_XEN_GUEST_HANDLE(long);
|
||||
-DEFINE_XEN_GUEST_HANDLE(void);
|
||||
-
|
||||
typedef unsigned long long xen_pfn_t;
|
||||
-DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
|
||||
#define PRI_xen_pfn "llx"
|
||||
#endif
|
||||
|
||||
Index: 2008-01-07/xen/include/public/arch-x86/xen.h
|
||||
===================================================================
|
||||
--- 2008-01-07.orig/xen/include/public/arch-x86/xen.h 2008-01-07 12:02:52.000000000 +0100
|
||||
+++ 2008-01-07/xen/include/public/arch-x86/xen.h 2008-01-07 12:11:43.000000000 +0100
|
||||
@@ -53,17 +53,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
-/* Guest handles for primitive C types. */
|
||||
-__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
|
||||
-__DEFINE_XEN_GUEST_HANDLE(uint, unsigned int);
|
||||
-__DEFINE_XEN_GUEST_HANDLE(ulong, unsigned long);
|
||||
-DEFINE_XEN_GUEST_HANDLE(char);
|
||||
-DEFINE_XEN_GUEST_HANDLE(int);
|
||||
-DEFINE_XEN_GUEST_HANDLE(long);
|
||||
-DEFINE_XEN_GUEST_HANDLE(void);
|
||||
-
|
||||
typedef unsigned long xen_pfn_t;
|
||||
-DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
|
||||
#define PRI_xen_pfn "lx"
|
||||
#endif
|
||||
|
||||
Index: 2008-01-07/xen/include/public/xen.h
|
||||
===================================================================
|
||||
--- 2008-01-07.orig/xen/include/public/xen.h 2008-01-07 12:02:52.000000000 +0100
|
||||
+++ 2008-01-07/xen/include/public/xen.h 2008-01-07 12:11:43.000000000 +0100
|
||||
@@ -39,6 +39,20 @@
|
||||
#error "Unsupported architecture"
|
||||
#endif
|
||||
|
||||
+#ifndef __ASSEMBLY__
|
||||
+/* Guest handles for primitive C types. */
|
||||
+DEFINE_XEN_GUEST_HANDLE(char);
|
||||
+__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
|
||||
+DEFINE_XEN_GUEST_HANDLE(int);
|
||||
+__DEFINE_XEN_GUEST_HANDLE(uint, unsigned int);
|
||||
+DEFINE_XEN_GUEST_HANDLE(long);
|
||||
+__DEFINE_XEN_GUEST_HANDLE(ulong, unsigned long);
|
||||
+DEFINE_XEN_GUEST_HANDLE(void);
|
||||
+__DEFINE_XEN_GUEST_HANDLE(cvoid, const void);
|
||||
+
|
||||
+DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* HYPERCALLS
|
||||
*/
|
49
const-set-trap-table-arg.patch
Normal file
49
const-set-trap-table-arg.patch
Normal file
@ -0,0 +1,49 @@
|
||||
Index: 2008-01-07/xen/arch/x86/traps.c
|
||||
===================================================================
|
||||
--- 2008-01-07.orig/xen/arch/x86/traps.c 2008-01-07 12:02:51.000000000 +0100
|
||||
+++ 2008-01-07/xen/arch/x86/traps.c 2008-01-07 12:11:52.000000000 +0100
|
||||
@@ -49,6 +49,7 @@
|
||||
#include <xen/trace.h>
|
||||
#include <asm/paging.h>
|
||||
#include <asm/system.h>
|
||||
+#include <asm/hypercall.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/desc.h>
|
||||
@@ -2812,7 +2813,7 @@ long unregister_guest_nmi_callback(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-long do_set_trap_table(XEN_GUEST_HANDLE(trap_info_t) traps)
|
||||
+long do_set_trap_table(XEN_GUEST_HANDLE(const_trap_info_t) traps)
|
||||
{
|
||||
struct trap_info cur;
|
||||
struct vcpu *curr = current;
|
||||
Index: 2008-01-07/xen/include/asm-x86/hypercall.h
|
||||
===================================================================
|
||||
--- 2008-01-07.orig/xen/include/asm-x86/hypercall.h 2007-06-04 08:35:36.000000000 +0200
|
||||
+++ 2008-01-07/xen/include/asm-x86/hypercall.h 2008-01-07 12:11:52.000000000 +0100
|
||||
@@ -32,9 +32,10 @@ extern long
|
||||
do_physdev_op_compat(
|
||||
XEN_GUEST_HANDLE(physdev_op_t) uop);
|
||||
|
||||
+__DEFINE_XEN_GUEST_HANDLE(const_trap_info_t, const trap_info_t);
|
||||
extern long
|
||||
do_set_trap_table(
|
||||
- XEN_GUEST_HANDLE(trap_info_t) traps);
|
||||
+ XEN_GUEST_HANDLE(const_trap_info_t) traps);
|
||||
|
||||
extern int
|
||||
do_mmu_update(
|
||||
Index: 2008-01-07/xen/include/public/arch-x86/xen.h
|
||||
===================================================================
|
||||
--- 2008-01-07.orig/xen/include/public/arch-x86/xen.h 2008-01-07 12:11:43.000000000 +0100
|
||||
+++ 2008-01-07/xen/include/public/arch-x86/xen.h 2008-01-07 12:11:52.000000000 +0100
|
||||
@@ -98,7 +98,6 @@ struct trap_info {
|
||||
unsigned long address; /* code offset */
|
||||
};
|
||||
typedef struct trap_info trap_info_t;
|
||||
-DEFINE_XEN_GUEST_HANDLE(trap_info_t);
|
||||
|
||||
typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */
|
||||
|
@ -18,7 +18,7 @@ Index: xen-3.2-testing/unmodified_drivers/linux-2.6/mkbuildtree
|
||||
+fi
|
||||
+cd "$(dirname "$0")"
|
||||
+
|
||||
+if [ -n "$ALT_KMP_OS" -a "$ALT_KMP_OS" == sles10sp1 ]; then
|
||||
+if [ -n "$ALT_KMP_OS" -a "$ALT_KMP_OS" == other ]; then
|
||||
+ XL=$C/linux-2.6-xen-sparse
|
||||
+ XEN=$C/linux-2.6-xen-sparse/include/xen
|
||||
fi
|
||||
@ -28,7 +28,7 @@ Index: xen-3.2-testing/unmodified_drivers/linux-2.6/mkbuildtree
|
||||
+ if echo $d | egrep -q netfront; then
|
||||
+ ln -sf ${XL}/drivers/xen/netfront/netfront.c netfront
|
||||
+ ln -sf ${XL}/drivers/xen/netfront/netfront.h netfront
|
||||
+ cp -p ../../linux-2.6-xen-sparse/drivers/xen/netfront/accel.c netfront
|
||||
+ cp -p ../../linux-2.6-xen-sparse/drivers/xen/netfront/accel.c netfront
|
||||
+ continue
|
||||
+ fi
|
||||
+ # END TEMPORARY
|
||||
@ -44,3 +44,19 @@ Index: xen-3.2-testing/unmodified_drivers/linux-2.6/mkbuildtree
|
||||
|
||||
# Need to be quite careful here: we don't want the files we link in to
|
||||
# risk overriding the native Linux ones (in particular, system.h must
|
||||
Index: xen-3.2-testing/unmodified_drivers/linux-2.6/overrides.mk
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/unmodified_drivers/linux-2.6/overrides.mk
|
||||
+++ xen-3.2-testing/unmodified_drivers/linux-2.6/overrides.mk
|
||||
@@ -4,6 +4,11 @@
|
||||
#
|
||||
# (i.e. we need the native config for things like -mregparm, but
|
||||
# a Xen kernel to find the right headers)
|
||||
+ifeq ($(ALT_KMP_OS),other)
|
||||
+ SPARSEINCLUDE := -I$(M)/../../linux-2.6-xen-sparse/include/xen -I$(M)/../../linux-2.6-xen-sparse/include
|
||||
+ SPARSEINCLUDE += $(CPPFLAGS)
|
||||
+ CPPFLAGS = $(SPARSEINCLUDE)
|
||||
+endif
|
||||
EXTRA_CFLAGS += -D__XEN_INTERFACE_VERSION__=0x00030205
|
||||
EXTRA_CFLAGS += -DCONFIG_XEN_COMPAT=0xffffff
|
||||
EXTRA_CFLAGS += -I$(M)/include -I$(M)/compat-include -DHAVE_XEN_PLATFORM_COMPAT_H
|
||||
|
@ -254,7 +254,7 @@ Index: xen-3.2-testing/tools/ioemu/vl.c
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/tools/ioemu/vl.c
|
||||
+++ xen-3.2-testing/tools/ioemu/vl.c
|
||||
@@ -3584,8 +3584,8 @@ typedef struct NetSocketState {
|
||||
@@ -3582,8 +3582,8 @@ typedef struct NetSocketState {
|
||||
VLANClientState *vc;
|
||||
int fd;
|
||||
int state; /* 0 = getting length, 1 = getting data */
|
||||
@ -265,7 +265,7 @@ Index: xen-3.2-testing/tools/ioemu/vl.c
|
||||
uint8_t buf[4096];
|
||||
struct sockaddr_in dgram_dst; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */
|
||||
} NetSocketState;
|
||||
@@ -3616,7 +3616,8 @@ static void net_socket_receive_dgram(voi
|
||||
@@ -3614,7 +3614,8 @@ static void net_socket_receive_dgram(voi
|
||||
static void net_socket_send(void *opaque)
|
||||
{
|
||||
NetSocketState *s = opaque;
|
||||
@ -275,7 +275,7 @@ Index: xen-3.2-testing/tools/ioemu/vl.c
|
||||
uint8_t buf1[4096];
|
||||
const uint8_t *buf;
|
||||
|
||||
@@ -3655,7 +3656,15 @@ static void net_socket_send(void *opaque
|
||||
@@ -3653,7 +3654,15 @@ static void net_socket_send(void *opaque
|
||||
l = s->packet_len - s->index;
|
||||
if (l > size)
|
||||
l = size;
|
||||
|
@ -1,7 +1,7 @@
|
||||
Index: xen-3.2-testing/xen/arch/x86/hvm/hvm.c
|
||||
Index: 2008-01-07/xen/arch/x86/hvm/hvm.c
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/xen/arch/x86/hvm/hvm.c
|
||||
+++ xen-3.2-testing/xen/arch/x86/hvm/hvm.c
|
||||
--- 2008-01-07.orig/xen/arch/x86/hvm/hvm.c 2008-01-07 12:02:51.000000000 +0100
|
||||
+++ 2008-01-07/xen/arch/x86/hvm/hvm.c 2008-01-07 12:11:59.000000000 +0100
|
||||
@@ -606,10 +606,11 @@ int hvm_set_efer(uint64_t value)
|
||||
|
||||
value &= ~EFER_LMA;
|
||||
@ -15,10 +15,10 @@ Index: xen-3.2-testing/xen/arch/x86/hvm/hvm.c
|
||||
(!cpu_has_ffxsr && (value & EFER_FFXSE)) )
|
||||
{
|
||||
gdprintk(XENLOG_WARNING, "Trying to set reserved bit in "
|
||||
Index: xen-3.2-testing/xen/arch/x86/hvm/svm/svm.c
|
||||
Index: 2008-01-07/xen/arch/x86/hvm/svm/svm.c
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/xen/arch/x86/hvm/svm/svm.c
|
||||
+++ xen-3.2-testing/xen/arch/x86/hvm/svm/svm.c
|
||||
--- 2008-01-07.orig/xen/arch/x86/hvm/svm/svm.c 2008-01-07 12:02:51.000000000 +0100
|
||||
+++ 2008-01-07/xen/arch/x86/hvm/svm/svm.c 2008-01-07 12:11:59.000000000 +0100
|
||||
@@ -53,6 +53,11 @@
|
||||
|
||||
u32 svm_feature_flags;
|
||||
@ -54,10 +54,10 @@ Index: xen-3.2-testing/xen/arch/x86/hvm/svm/svm.c
|
||||
if ( cpu != 0 )
|
||||
return 1;
|
||||
|
||||
Index: xen-3.2-testing/xen/include/asm-x86/hvm/hvm.h
|
||||
Index: 2008-01-07/xen/include/asm-x86/hvm/hvm.h
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/xen/include/asm-x86/hvm/hvm.h
|
||||
+++ xen-3.2-testing/xen/include/asm-x86/hvm/hvm.h
|
||||
--- 2008-01-07.orig/xen/include/asm-x86/hvm/hvm.h 2008-01-07 12:02:52.000000000 +0100
|
||||
+++ 2008-01-07/xen/include/asm-x86/hvm/hvm.h 2008-01-07 12:11:59.000000000 +0100
|
||||
@@ -127,6 +127,12 @@ struct hvm_function_table {
|
||||
extern struct hvm_function_table hvm_funcs;
|
||||
extern int hvm_enabled;
|
||||
|
@ -48,7 +48,7 @@ Index: xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -1524,6 +1524,9 @@ class XendDomainInfo:
|
||||
@@ -1528,6 +1528,9 @@ class XendDomainInfo:
|
||||
if devclass in XendDevices.valid_devices():
|
||||
log.info("createDevice: %s : %s" % (devclass, scrub_password(config)))
|
||||
dev_uuid = config.get('uuid')
|
||||
|
@ -1,623 +0,0 @@
|
||||
Index: xen-3.2-testing/xen/arch/x86/x86_emulate.c
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/xen/arch/x86/x86_emulate.c
|
||||
+++ xen-3.2-testing/xen/arch/x86/x86_emulate.c
|
||||
@@ -280,24 +280,6 @@ struct operand {
|
||||
#define CR0_PE (1<<0)
|
||||
#define CR4_TSD (1<<2)
|
||||
|
||||
-/* EFLAGS bit definitions. */
|
||||
-#define EFLG_VIP (1<<20)
|
||||
-#define EFLG_VIF (1<<19)
|
||||
-#define EFLG_AC (1<<18)
|
||||
-#define EFLG_VM (1<<17)
|
||||
-#define EFLG_RF (1<<16)
|
||||
-#define EFLG_NT (1<<14)
|
||||
-#define EFLG_IOPL (3<<12)
|
||||
-#define EFLG_OF (1<<11)
|
||||
-#define EFLG_DF (1<<10)
|
||||
-#define EFLG_IF (1<<9)
|
||||
-#define EFLG_TF (1<<8)
|
||||
-#define EFLG_SF (1<<7)
|
||||
-#define EFLG_ZF (1<<6)
|
||||
-#define EFLG_AF (1<<4)
|
||||
-#define EFLG_PF (1<<2)
|
||||
-#define EFLG_CF (1<<0)
|
||||
-
|
||||
/* Exception definitions. */
|
||||
#define EXC_DE 0
|
||||
#define EXC_DB 1
|
||||
@@ -328,7 +310,7 @@ struct operand {
|
||||
* These EFLAGS bits are restored from saved value during emulation, and
|
||||
* any changes are written back to the saved value after emulation.
|
||||
*/
|
||||
-#define EFLAGS_MASK (EFLG_OF|EFLG_SF|EFLG_ZF|EFLG_AF|EFLG_PF|EFLG_CF)
|
||||
+#define EFLAGS_MASK (EF_OF|EF_SF|EF_ZF|EF_AF|EF_PF|EF_CF)
|
||||
|
||||
/* Before executing instruction: restore necessary bits in EFLAGS. */
|
||||
#define _PRE_EFLAGS(_sav, _msk, _tmp) \
|
||||
@@ -680,28 +662,28 @@ test_cc(
|
||||
switch ( (condition & 15) >> 1 )
|
||||
{
|
||||
case 0: /* o */
|
||||
- rc |= (flags & EFLG_OF);
|
||||
+ rc |= (flags & EF_OF);
|
||||
break;
|
||||
case 1: /* b/c/nae */
|
||||
- rc |= (flags & EFLG_CF);
|
||||
+ rc |= (flags & EF_CF);
|
||||
break;
|
||||
case 2: /* z/e */
|
||||
- rc |= (flags & EFLG_ZF);
|
||||
+ rc |= (flags & EF_ZF);
|
||||
break;
|
||||
case 3: /* be/na */
|
||||
- rc |= (flags & (EFLG_CF|EFLG_ZF));
|
||||
+ rc |= (flags & (EF_CF|EF_ZF));
|
||||
break;
|
||||
case 4: /* s */
|
||||
- rc |= (flags & EFLG_SF);
|
||||
+ rc |= (flags & EF_SF);
|
||||
break;
|
||||
case 5: /* p/pe */
|
||||
- rc |= (flags & EFLG_PF);
|
||||
+ rc |= (flags & EF_PF);
|
||||
break;
|
||||
case 7: /* le/ng */
|
||||
- rc |= (flags & EFLG_ZF);
|
||||
+ rc |= (flags & EF_ZF);
|
||||
/* fall through */
|
||||
case 6: /* l/nge */
|
||||
- rc |= (!(flags & EFLG_SF) != !(flags & EFLG_OF));
|
||||
+ rc |= (!(flags & EF_SF) != !(flags & EF_OF));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -716,7 +698,7 @@ get_cpl(
|
||||
{
|
||||
struct segment_register reg;
|
||||
|
||||
- if ( ctxt->regs->eflags & EFLG_VM )
|
||||
+ if ( ctxt->regs->eflags & EF_VM )
|
||||
return 3;
|
||||
|
||||
if ( (ops->read_segment == NULL) ||
|
||||
@@ -1321,9 +1303,9 @@ x86_emulate(
|
||||
/* arpl */
|
||||
uint16_t src_val = dst.val;
|
||||
dst = src;
|
||||
- _regs.eflags &= ~EFLG_ZF;
|
||||
- _regs.eflags |= ((src_val & 3) > (dst.val & 3)) ? EFLG_ZF : 0;
|
||||
- if ( _regs.eflags & EFLG_ZF )
|
||||
+ _regs.eflags &= ~EF_ZF;
|
||||
+ _regs.eflags |= ((src_val & 3) > (dst.val & 3)) ? EF_ZF : 0;
|
||||
+ if ( _regs.eflags & EF_ZF )
|
||||
dst.val = (dst.val & ~3) | (src_val & 3);
|
||||
else
|
||||
dst.type = OP_NONE;
|
||||
@@ -1334,27 +1316,27 @@ x86_emulate(
|
||||
case 0x69: /* imul imm16/32 */
|
||||
case 0x6b: /* imul imm8 */ {
|
||||
unsigned long reg = *(long *)decode_register(modrm_reg, &_regs, 0);
|
||||
- _regs.eflags &= ~(EFLG_OF|EFLG_CF);
|
||||
+ _regs.eflags &= ~(EF_OF|EF_CF);
|
||||
switch ( dst.bytes )
|
||||
{
|
||||
case 2:
|
||||
dst.val = ((uint32_t)(int16_t)src.val *
|
||||
(uint32_t)(int16_t)reg);
|
||||
if ( (int16_t)dst.val != (uint32_t)dst.val )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
break;
|
||||
#ifdef __x86_64__
|
||||
case 4:
|
||||
dst.val = ((uint64_t)(int32_t)src.val *
|
||||
(uint64_t)(int32_t)reg);
|
||||
if ( (int32_t)dst.val != dst.val )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
break;
|
||||
#endif
|
||||
default: {
|
||||
unsigned long m[2] = { src.val, reg };
|
||||
if ( imul_dbl(m) )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
dst.val = m[0];
|
||||
break;
|
||||
}
|
||||
@@ -1538,32 +1520,32 @@ x86_emulate(
|
||||
dst.type = OP_REG;
|
||||
dst.reg = (unsigned long *)&_regs.eax;
|
||||
dst.val = *dst.reg;
|
||||
- _regs.eflags &= ~(EFLG_OF|EFLG_CF);
|
||||
+ _regs.eflags &= ~(EF_OF|EF_CF);
|
||||
switch ( src.bytes )
|
||||
{
|
||||
case 1:
|
||||
dst.val *= src.val;
|
||||
if ( (uint8_t)dst.val != (uint16_t)dst.val )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
break;
|
||||
case 2:
|
||||
dst.val *= src.val;
|
||||
if ( (uint16_t)dst.val != (uint32_t)dst.val )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
*(uint16_t *)&_regs.edx = dst.val >> 16;
|
||||
break;
|
||||
#ifdef __x86_64__
|
||||
case 4:
|
||||
dst.val *= src.val;
|
||||
if ( (uint32_t)dst.val != dst.val )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
_regs.edx = (uint32_t)(dst.val >> 32);
|
||||
break;
|
||||
#endif
|
||||
default: {
|
||||
unsigned long m[2] = { src.val, dst.val };
|
||||
if ( mul_dbl(m) )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
_regs.edx = m[1];
|
||||
dst.val = m[0];
|
||||
break;
|
||||
@@ -1575,20 +1557,20 @@ x86_emulate(
|
||||
dst.type = OP_REG;
|
||||
dst.reg = (unsigned long *)&_regs.eax;
|
||||
dst.val = *dst.reg;
|
||||
- _regs.eflags &= ~(EFLG_OF|EFLG_CF);
|
||||
+ _regs.eflags &= ~(EF_OF|EF_CF);
|
||||
switch ( src.bytes )
|
||||
{
|
||||
case 1:
|
||||
dst.val = ((uint16_t)(int8_t)src.val *
|
||||
(uint16_t)(int8_t)dst.val);
|
||||
if ( (int8_t)dst.val != (uint16_t)dst.val )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
break;
|
||||
case 2:
|
||||
dst.val = ((uint32_t)(int16_t)src.val *
|
||||
(uint32_t)(int16_t)dst.val);
|
||||
if ( (int16_t)dst.val != (uint32_t)dst.val )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
*(uint16_t *)&_regs.edx = dst.val >> 16;
|
||||
break;
|
||||
#ifdef __x86_64__
|
||||
@@ -1596,14 +1578,14 @@ x86_emulate(
|
||||
dst.val = ((uint64_t)(int32_t)src.val *
|
||||
(uint64_t)(int32_t)dst.val);
|
||||
if ( (int32_t)dst.val != dst.val )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
_regs.edx = (uint32_t)(dst.val >> 32);
|
||||
break;
|
||||
#endif
|
||||
default: {
|
||||
unsigned long m[2] = { src.val, dst.val };
|
||||
if ( imul_dbl(m) )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
_regs.edx = m[1];
|
||||
dst.val = m[0];
|
||||
break;
|
||||
@@ -1824,10 +1806,10 @@ x86_emulate(
|
||||
}
|
||||
|
||||
/* Commit shadow register state. */
|
||||
- _regs.eflags &= ~EFLG_RF;
|
||||
+ _regs.eflags &= ~EF_RF;
|
||||
*ctxt->regs = _regs;
|
||||
|
||||
- if ( (_regs.eflags & EFLG_TF) &&
|
||||
+ if ( (_regs.eflags & EF_TF) &&
|
||||
(rc == X86EMUL_OKAY) &&
|
||||
(ops->inject_hw_exception != NULL) )
|
||||
rc = ops->inject_hw_exception(EXC_DB, ctxt) ? : X86EMUL_EXCEPTION;
|
||||
@@ -1906,21 +1888,21 @@ x86_emulate(
|
||||
uint8_t al = _regs.eax;
|
||||
unsigned long eflags = _regs.eflags;
|
||||
generate_exception_if(mode_64bit(), EXC_UD);
|
||||
- _regs.eflags &= ~(EFLG_CF|EFLG_AF);
|
||||
- if ( ((al & 0x0f) > 9) || (eflags & EFLG_AF) )
|
||||
+ _regs.eflags &= ~(EF_CF|EF_AF);
|
||||
+ if ( ((al & 0x0f) > 9) || (eflags & EF_AF) )
|
||||
{
|
||||
*(uint8_t *)&_regs.eax += 6;
|
||||
- _regs.eflags |= EFLG_AF;
|
||||
+ _regs.eflags |= EF_AF;
|
||||
}
|
||||
- if ( (al > 0x99) || (eflags & EFLG_CF) )
|
||||
+ if ( (al > 0x99) || (eflags & EF_CF) )
|
||||
{
|
||||
*(uint8_t *)&_regs.eax += 0x60;
|
||||
- _regs.eflags |= EFLG_CF;
|
||||
+ _regs.eflags |= EF_CF;
|
||||
}
|
||||
- _regs.eflags &= ~(EFLG_SF|EFLG_ZF|EFLG_PF);
|
||||
- _regs.eflags |= ((uint8_t)_regs.eax == 0) ? EFLG_ZF : 0;
|
||||
- _regs.eflags |= (( int8_t)_regs.eax < 0) ? EFLG_SF : 0;
|
||||
- _regs.eflags |= even_parity(_regs.eax) ? EFLG_PF : 0;
|
||||
+ _regs.eflags &= ~(EF_SF|EF_ZF|EF_PF);
|
||||
+ _regs.eflags |= ((uint8_t)_regs.eax == 0) ? EF_ZF : 0;
|
||||
+ _regs.eflags |= (( int8_t)_regs.eax < 0) ? EF_SF : 0;
|
||||
+ _regs.eflags |= even_parity(_regs.eax) ? EF_PF : 0;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1928,35 +1910,35 @@ x86_emulate(
|
||||
uint8_t al = _regs.eax;
|
||||
unsigned long eflags = _regs.eflags;
|
||||
generate_exception_if(mode_64bit(), EXC_UD);
|
||||
- _regs.eflags &= ~(EFLG_CF|EFLG_AF);
|
||||
- if ( ((al & 0x0f) > 9) || (eflags & EFLG_AF) )
|
||||
+ _regs.eflags &= ~(EF_CF|EF_AF);
|
||||
+ if ( ((al & 0x0f) > 9) || (eflags & EF_AF) )
|
||||
{
|
||||
- _regs.eflags |= EFLG_AF;
|
||||
- if ( (al < 6) || (eflags & EFLG_CF) )
|
||||
- _regs.eflags |= EFLG_CF;
|
||||
+ _regs.eflags |= EF_AF;
|
||||
+ if ( (al < 6) || (eflags & EF_CF) )
|
||||
+ _regs.eflags |= EF_CF;
|
||||
*(uint8_t *)&_regs.eax -= 6;
|
||||
}
|
||||
- if ( (al > 0x99) || (eflags & EFLG_CF) )
|
||||
+ if ( (al > 0x99) || (eflags & EF_CF) )
|
||||
{
|
||||
*(uint8_t *)&_regs.eax -= 0x60;
|
||||
- _regs.eflags |= EFLG_CF;
|
||||
+ _regs.eflags |= EF_CF;
|
||||
}
|
||||
- _regs.eflags &= ~(EFLG_SF|EFLG_ZF|EFLG_PF);
|
||||
- _regs.eflags |= ((uint8_t)_regs.eax == 0) ? EFLG_ZF : 0;
|
||||
- _regs.eflags |= (( int8_t)_regs.eax < 0) ? EFLG_SF : 0;
|
||||
- _regs.eflags |= even_parity(_regs.eax) ? EFLG_PF : 0;
|
||||
+ _regs.eflags &= ~(EF_SF|EF_ZF|EF_PF);
|
||||
+ _regs.eflags |= ((uint8_t)_regs.eax == 0) ? EF_ZF : 0;
|
||||
+ _regs.eflags |= (( int8_t)_regs.eax < 0) ? EF_SF : 0;
|
||||
+ _regs.eflags |= even_parity(_regs.eax) ? EF_PF : 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case 0x37: /* aaa */
|
||||
case 0x3f: /* aas */
|
||||
generate_exception_if(mode_64bit(), EXC_UD);
|
||||
- _regs.eflags &= ~EFLG_CF;
|
||||
- if ( ((uint8_t)_regs.eax > 9) || (_regs.eflags & EFLG_AF) )
|
||||
+ _regs.eflags &= ~EF_CF;
|
||||
+ if ( ((uint8_t)_regs.eax > 9) || (_regs.eflags & EF_AF) )
|
||||
{
|
||||
((uint8_t *)&_regs.eax)[0] += (b == 0x37) ? 6 : -6;
|
||||
((uint8_t *)&_regs.eax)[1] += (b == 0x37) ? 1 : -1;
|
||||
- _regs.eflags |= EFLG_CF | EFLG_AF;
|
||||
+ _regs.eflags |= EF_CF | EF_AF;
|
||||
}
|
||||
((uint8_t *)&_regs.eax)[0] &= 0x0f;
|
||||
break;
|
||||
@@ -2057,7 +2039,7 @@ x86_emulate(
|
||||
&dst.val, ctxt)) != 0 )
|
||||
goto done;
|
||||
register_address_increment(
|
||||
- _regs.edi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
|
||||
+ _regs.edi, (_regs.eflags & EF_DF) ? -dst.bytes : dst.bytes);
|
||||
break;
|
||||
|
||||
case 0x6e ... 0x6f: /* outs %esi,%dx */
|
||||
@@ -2072,7 +2054,7 @@ x86_emulate(
|
||||
dst.val, ctxt)) != 0 )
|
||||
goto done;
|
||||
register_address_increment(
|
||||
- _regs.esi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
|
||||
+ _regs.esi, (_regs.eflags & EF_DF) ? -dst.bytes : dst.bytes);
|
||||
break;
|
||||
|
||||
case 0x70 ... 0x7f: /* jcc (short) */ {
|
||||
@@ -2149,9 +2131,9 @@ x86_emulate(
|
||||
goto push;
|
||||
|
||||
case 0x9d: /* popf */ {
|
||||
- uint32_t mask = EFLG_VIP | EFLG_VIF | EFLG_VM;
|
||||
+ uint32_t mask = EF_VIP | EF_VIF | EF_VM;
|
||||
if ( !mode_iopl() )
|
||||
- mask |= EFLG_IOPL;
|
||||
+ mask |= EF_IOPL;
|
||||
fail_if(ops->write_rflags == NULL);
|
||||
/* 64-bit mode: POP defaults to a 64-bit operand. */
|
||||
if ( mode_64bit() && (op_bytes == 4) )
|
||||
@@ -2206,9 +2188,9 @@ x86_emulate(
|
||||
&dst.val, dst.bytes, ctxt)) != 0 )
|
||||
goto done;
|
||||
register_address_increment(
|
||||
- _regs.esi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
|
||||
+ _regs.esi, (_regs.eflags & EF_DF) ? -dst.bytes : dst.bytes);
|
||||
register_address_increment(
|
||||
- _regs.edi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
|
||||
+ _regs.edi, (_regs.eflags & EF_DF) ? -dst.bytes : dst.bytes);
|
||||
break;
|
||||
|
||||
case 0xa6 ... 0xa7: /* cmps */ {
|
||||
@@ -2221,13 +2203,13 @@ x86_emulate(
|
||||
&src.val, src.bytes, ctxt)) )
|
||||
goto done;
|
||||
register_address_increment(
|
||||
- _regs.esi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
|
||||
+ _regs.esi, (_regs.eflags & EF_DF) ? -dst.bytes : dst.bytes);
|
||||
register_address_increment(
|
||||
- _regs.edi, (_regs.eflags & EFLG_DF) ? -src.bytes : src.bytes);
|
||||
+ _regs.edi, (_regs.eflags & EF_DF) ? -src.bytes : src.bytes);
|
||||
/* cmp: dst - src ==> src=*%%edi,dst=*%%esi ==> *%%esi - *%%edi */
|
||||
emulate_2op_SrcV("cmp", src, dst, _regs.eflags);
|
||||
- if ( ((rep_prefix == REPE_PREFIX) && !(_regs.eflags & EFLG_ZF)) ||
|
||||
- ((rep_prefix == REPNE_PREFIX) && (_regs.eflags & EFLG_ZF)) )
|
||||
+ if ( ((rep_prefix == REPE_PREFIX) && !(_regs.eflags & EF_ZF)) ||
|
||||
+ ((rep_prefix == REPNE_PREFIX) && (_regs.eflags & EF_ZF)) )
|
||||
_regs.eip = next_eip;
|
||||
break;
|
||||
}
|
||||
@@ -2240,7 +2222,7 @@ x86_emulate(
|
||||
dst.mem.off = truncate_ea(_regs.edi);
|
||||
dst.val = _regs.eax;
|
||||
register_address_increment(
|
||||
- _regs.edi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
|
||||
+ _regs.edi, (_regs.eflags & EF_DF) ? -dst.bytes : dst.bytes);
|
||||
break;
|
||||
|
||||
case 0xac ... 0xad: /* lods */
|
||||
@@ -2252,7 +2234,7 @@ x86_emulate(
|
||||
&dst.val, dst.bytes, ctxt)) != 0 )
|
||||
goto done;
|
||||
register_address_increment(
|
||||
- _regs.esi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
|
||||
+ _regs.esi, (_regs.eflags & EF_DF) ? -dst.bytes : dst.bytes);
|
||||
break;
|
||||
|
||||
case 0xae ... 0xaf: /* scas */ {
|
||||
@@ -2264,11 +2246,11 @@ x86_emulate(
|
||||
&src.val, src.bytes, ctxt)) != 0 )
|
||||
goto done;
|
||||
register_address_increment(
|
||||
- _regs.edi, (_regs.eflags & EFLG_DF) ? -src.bytes : src.bytes);
|
||||
+ _regs.edi, (_regs.eflags & EF_DF) ? -src.bytes : src.bytes);
|
||||
/* cmp: dst - src ==> src=*%%edi,dst=%%eax ==> %%eax - *%%edi */
|
||||
emulate_2op_SrcV("cmp", src, dst, _regs.eflags);
|
||||
- if ( ((rep_prefix == REPE_PREFIX) && !(_regs.eflags & EFLG_ZF)) ||
|
||||
- ((rep_prefix == REPNE_PREFIX) && (_regs.eflags & EFLG_ZF)) )
|
||||
+ if ( ((rep_prefix == REPE_PREFIX) && !(_regs.eflags & EF_ZF)) ||
|
||||
+ ((rep_prefix == REPNE_PREFIX) && (_regs.eflags & EF_ZF)) )
|
||||
_regs.eip = next_eip;
|
||||
break;
|
||||
}
|
||||
@@ -2369,16 +2351,16 @@ x86_emulate(
|
||||
|
||||
case 0xce: /* into */
|
||||
generate_exception_if(mode_64bit(), EXC_UD);
|
||||
- if ( !(_regs.eflags & EFLG_OF) )
|
||||
+ if ( !(_regs.eflags & EF_OF) )
|
||||
break;
|
||||
src.val = EXC_OF;
|
||||
goto swint;
|
||||
|
||||
case 0xcf: /* iret */ {
|
||||
unsigned long cs, eip, eflags;
|
||||
- uint32_t mask = EFLG_VIP | EFLG_VIF | EFLG_VM;
|
||||
+ uint32_t mask = EF_VIP | EF_VIF | EF_VM;
|
||||
if ( !mode_iopl() )
|
||||
- mask |= EFLG_IOPL;
|
||||
+ mask |= EF_IOPL;
|
||||
fail_if(!in_realmode(ctxt, ops));
|
||||
fail_if(ops->write_rflags == NULL);
|
||||
if ( (rc = ops->read(x86_seg_ss, sp_post_inc(op_bytes),
|
||||
@@ -2407,10 +2389,10 @@ x86_emulate(
|
||||
generate_exception_if(mode_64bit(), EXC_UD);
|
||||
generate_exception_if(base == 0, EXC_DE);
|
||||
*(uint16_t *)&_regs.eax = ((al / base) << 8) | (al % base);
|
||||
- _regs.eflags &= ~(EFLG_SF|EFLG_ZF|EFLG_PF);
|
||||
- _regs.eflags |= ((uint8_t)_regs.eax == 0) ? EFLG_ZF : 0;
|
||||
- _regs.eflags |= (( int8_t)_regs.eax < 0) ? EFLG_SF : 0;
|
||||
- _regs.eflags |= even_parity(_regs.eax) ? EFLG_PF : 0;
|
||||
+ _regs.eflags &= ~(EF_SF|EF_ZF|EF_PF);
|
||||
+ _regs.eflags |= ((uint8_t)_regs.eax == 0) ? EF_ZF : 0;
|
||||
+ _regs.eflags |= (( int8_t)_regs.eax < 0) ? EF_SF : 0;
|
||||
+ _regs.eflags |= even_parity(_regs.eax) ? EF_PF : 0;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2419,16 +2401,16 @@ x86_emulate(
|
||||
uint16_t ax = _regs.eax;
|
||||
generate_exception_if(mode_64bit(), EXC_UD);
|
||||
*(uint16_t *)&_regs.eax = (uint8_t)(ax + ((ax >> 8) * base));
|
||||
- _regs.eflags &= ~(EFLG_SF|EFLG_ZF|EFLG_PF);
|
||||
- _regs.eflags |= ((uint8_t)_regs.eax == 0) ? EFLG_ZF : 0;
|
||||
- _regs.eflags |= (( int8_t)_regs.eax < 0) ? EFLG_SF : 0;
|
||||
- _regs.eflags |= even_parity(_regs.eax) ? EFLG_PF : 0;
|
||||
+ _regs.eflags &= ~(EF_SF|EF_ZF|EF_PF);
|
||||
+ _regs.eflags |= ((uint8_t)_regs.eax == 0) ? EF_ZF : 0;
|
||||
+ _regs.eflags |= (( int8_t)_regs.eax < 0) ? EF_SF : 0;
|
||||
+ _regs.eflags |= even_parity(_regs.eax) ? EF_PF : 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case 0xd6: /* salc */
|
||||
generate_exception_if(mode_64bit(), EXC_UD);
|
||||
- *(uint8_t *)&_regs.eax = (_regs.eflags & EFLG_CF) ? 0xff : 0x00;
|
||||
+ *(uint8_t *)&_regs.eax = (_regs.eflags & EF_CF) ? 0xff : 0x00;
|
||||
break;
|
||||
|
||||
case 0xd7: /* xlat */ {
|
||||
@@ -2442,7 +2424,7 @@ x86_emulate(
|
||||
|
||||
case 0xe0 ... 0xe2: /* loop{,z,nz} */ {
|
||||
int rel = insn_fetch_type(int8_t);
|
||||
- int do_jmp = !(_regs.eflags & EFLG_ZF); /* loopnz */
|
||||
+ int do_jmp = !(_regs.eflags & EF_ZF); /* loopnz */
|
||||
if ( b == 0xe1 )
|
||||
do_jmp = !do_jmp; /* loopz */
|
||||
else if ( b == 0xe2 )
|
||||
@@ -2552,34 +2534,34 @@ x86_emulate(
|
||||
break;
|
||||
|
||||
case 0xf5: /* cmc */
|
||||
- _regs.eflags ^= EFLG_CF;
|
||||
+ _regs.eflags ^= EF_CF;
|
||||
break;
|
||||
|
||||
case 0xf8: /* clc */
|
||||
- _regs.eflags &= ~EFLG_CF;
|
||||
+ _regs.eflags &= ~EF_CF;
|
||||
break;
|
||||
|
||||
case 0xf9: /* stc */
|
||||
- _regs.eflags |= EFLG_CF;
|
||||
+ _regs.eflags |= EF_CF;
|
||||
break;
|
||||
|
||||
case 0xfa: /* cli */
|
||||
case 0xfb: /* sti */
|
||||
generate_exception_if(!mode_iopl(), EXC_GP);
|
||||
fail_if(ops->write_rflags == NULL);
|
||||
- _regs.eflags &= ~EFLG_IF;
|
||||
+ _regs.eflags &= ~EF_IE;
|
||||
if ( b == 0xfb ) /* sti */
|
||||
- _regs.eflags |= EFLG_IF;
|
||||
+ _regs.eflags |= EF_IE;
|
||||
if ( (rc = ops->write_rflags(_regs.eflags, ctxt)) != 0 )
|
||||
goto done;
|
||||
break;
|
||||
|
||||
case 0xfc: /* cld */
|
||||
- _regs.eflags &= ~EFLG_DF;
|
||||
+ _regs.eflags &= ~EF_DF;
|
||||
break;
|
||||
|
||||
case 0xfd: /* std */
|
||||
- _regs.eflags |= EFLG_DF;
|
||||
+ _regs.eflags |= EF_DF;
|
||||
break;
|
||||
}
|
||||
goto writeback;
|
||||
@@ -2604,7 +2586,7 @@ x86_emulate(
|
||||
emulate_2op_SrcV("cmp", src, dst, _regs.eflags);
|
||||
/* Always write back. The question is: where to? */
|
||||
d |= Mov;
|
||||
- if ( _regs.eflags & EFLG_ZF )
|
||||
+ if ( _regs.eflags & EF_ZF )
|
||||
{
|
||||
/* Success: write back to memory. */
|
||||
dst.val = src.orig_val;
|
||||
@@ -2639,14 +2621,14 @@ x86_emulate(
|
||||
((dst.orig_val << shift) |
|
||||
((src.val >> (width - shift)) & ((1ull << shift) - 1))));
|
||||
dst.val = truncate_word(dst.val, dst.bytes);
|
||||
- _regs.eflags &= ~(EFLG_OF|EFLG_SF|EFLG_ZF|EFLG_PF|EFLG_CF);
|
||||
+ _regs.eflags &= ~(EF_OF|EF_SF|EF_ZF|EF_PF|EF_CF);
|
||||
if ( (dst.val >> ((b & 8) ? (shift - 1) : (width - shift))) & 1 )
|
||||
- _regs.eflags |= EFLG_CF;
|
||||
+ _regs.eflags |= EF_CF;
|
||||
if ( ((dst.val ^ dst.orig_val) >> (width - 1)) & 1 )
|
||||
- _regs.eflags |= EFLG_OF;
|
||||
- _regs.eflags |= ((dst.val >> (width - 1)) & 1) ? EFLG_SF : 0;
|
||||
- _regs.eflags |= (dst.val == 0) ? EFLG_ZF : 0;
|
||||
- _regs.eflags |= even_parity(dst.val) ? EFLG_PF : 0;
|
||||
+ _regs.eflags |= EF_OF;
|
||||
+ _regs.eflags |= ((dst.val >> (width - 1)) & 1) ? EF_SF : 0;
|
||||
+ _regs.eflags |= (dst.val == 0) ? EF_ZF : 0;
|
||||
+ _regs.eflags |= even_parity(dst.val) ? EF_PF : 0;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2659,27 +2641,27 @@ x86_emulate(
|
||||
break;
|
||||
|
||||
case 0xaf: /* imul */
|
||||
- _regs.eflags &= ~(EFLG_OF|EFLG_CF);
|
||||
+ _regs.eflags &= ~(EF_OF|EF_CF);
|
||||
switch ( dst.bytes )
|
||||
{
|
||||
case 2:
|
||||
dst.val = ((uint32_t)(int16_t)src.val *
|
||||
(uint32_t)(int16_t)dst.val);
|
||||
if ( (int16_t)dst.val != (uint32_t)dst.val )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
break;
|
||||
#ifdef __x86_64__
|
||||
case 4:
|
||||
dst.val = ((uint64_t)(int32_t)src.val *
|
||||
(uint64_t)(int32_t)dst.val);
|
||||
if ( (int32_t)dst.val != dst.val )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
break;
|
||||
#endif
|
||||
default: {
|
||||
unsigned long m[2] = { src.val, dst.val };
|
||||
if ( imul_dbl(m) )
|
||||
- _regs.eflags |= EFLG_OF|EFLG_CF;
|
||||
+ _regs.eflags |= EF_OF|EF_CF;
|
||||
dst.val = m[0];
|
||||
break;
|
||||
}
|
||||
@@ -2710,8 +2692,8 @@ x86_emulate(
|
||||
asm ( "bsf %2,%0; setz %b1"
|
||||
: "=r" (dst.val), "=q" (zf)
|
||||
: "r" (src.val), "1" (0) );
|
||||
- _regs.eflags &= ~EFLG_ZF;
|
||||
- _regs.eflags |= zf ? EFLG_ZF : 0;
|
||||
+ _regs.eflags &= ~EF_ZF;
|
||||
+ _regs.eflags |= zf ? EF_ZF : 0;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2720,8 +2702,8 @@ x86_emulate(
|
||||
asm ( "bsr %2,%0; setz %b1"
|
||||
: "=r" (dst.val), "=q" (zf)
|
||||
: "r" (src.val), "1" (0) );
|
||||
- _regs.eflags &= ~EFLG_ZF;
|
||||
- _regs.eflags |= zf ? EFLG_ZF : 0;
|
||||
+ _regs.eflags &= ~EF_ZF;
|
||||
+ _regs.eflags |= zf ? EF_ZF : 0;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2984,7 +2966,7 @@ x86_emulate(
|
||||
{
|
||||
_regs.eax = old_lo;
|
||||
_regs.edx = old_hi;
|
||||
- _regs.eflags &= ~EFLG_ZF;
|
||||
+ _regs.eflags &= ~EF_ZF;
|
||||
}
|
||||
else if ( ops->cmpxchg8b == NULL )
|
||||
{
|
||||
@@ -2996,7 +2978,7 @@ x86_emulate(
|
||||
if ( (rc = ops->cmpxchg8b(ea.mem.seg, ea.mem.off, old_lo, old_hi,
|
||||
_regs.ebx, _regs.ecx, ctxt)) != 0 )
|
||||
goto done;
|
||||
- _regs.eflags |= EFLG_ZF;
|
||||
+ _regs.eflags |= EF_ZF;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -3011,7 +2993,7 @@ x86_emulate(
|
||||
{
|
||||
_regs.eax = (uint32_t)(old>>0);
|
||||
_regs.edx = (uint32_t)(old>>32);
|
||||
- _regs.eflags &= ~EFLG_ZF;
|
||||
+ _regs.eflags &= ~EF_ZF;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -3019,7 +3001,7 @@ x86_emulate(
|
||||
if ( (rc = ops->cmpxchg(ea.mem.seg, ea.mem.off, old,
|
||||
new, 8, ctxt)) != 0 )
|
||||
goto done;
|
||||
- _regs.eflags |= EFLG_ZF;
|
||||
+ _regs.eflags |= EF_ZF;
|
||||
}
|
||||
break;
|
||||
}
|
@ -14,6 +14,8 @@ Index: xen-3.2-testing/xen/arch/x86/mm.c
|
||||
offset, ((u64)old_hi << 32) | old, ((u64)new_hi << 32) | new, 8, 1,
|
||||
container_of(ctxt, struct ptwr_emulate_ctxt, ctxt));
|
||||
}
|
||||
+#else
|
||||
+#define ptwr_emulated_cmpxchg8b NULL
|
||||
+#endif
|
||||
|
||||
static struct x86_emulate_ops ptwr_emulate_ops = {
|
||||
@ -22,9 +24,7 @@ Index: xen-3.2-testing/xen/arch/x86/mm.c
|
||||
.write = ptwr_emulated_write,
|
||||
.cmpxchg = ptwr_emulated_cmpxchg,
|
||||
- .cmpxchg8b = ptwr_emulated_cmpxchg8b
|
||||
+#ifdef __i386__
|
||||
+ .cmpxchg2 = ptwr_emulated_cmpxchg8b
|
||||
+#endif
|
||||
};
|
||||
|
||||
/* Write page fault handler: check if guest is trying to modify a PTE. */
|
||||
@ -32,7 +32,7 @@ Index: xen-3.2-testing/xen/arch/x86/mm/shadow/common.c
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/xen/arch/x86/mm/shadow/common.c
|
||||
+++ xen-3.2-testing/xen/arch/x86/mm/shadow/common.c
|
||||
@@ -252,6 +252,7 @@ hvm_emulate_cmpxchg(enum x86_segment seg
|
||||
@@ -251,6 +251,7 @@ hvm_emulate_cmpxchg(enum x86_segment seg
|
||||
v, addr, old, new, bytes, sh_ctxt);
|
||||
}
|
||||
|
||||
@ -40,10 +40,12 @@ Index: xen-3.2-testing/xen/arch/x86/mm/shadow/common.c
|
||||
static int
|
||||
hvm_emulate_cmpxchg8b(enum x86_segment seg,
|
||||
unsigned long offset,
|
||||
@@ -275,13 +276,16 @@ hvm_emulate_cmpxchg8b(enum x86_segment s
|
||||
@@ -274,13 +275,16 @@ hvm_emulate_cmpxchg8b(enum x86_segment s
|
||||
return v->arch.paging.mode->shadow.x86_emulate_cmpxchg8b(
|
||||
v, addr, old_lo, old_hi, new_lo, new_hi, sh_ctxt);
|
||||
}
|
||||
+#else
|
||||
+#define hvm_emulate_cmpxchg8b NULL
|
||||
+#endif
|
||||
|
||||
static struct x86_emulate_ops hvm_shadow_emulator_ops = {
|
||||
@ -52,13 +54,11 @@ Index: xen-3.2-testing/xen/arch/x86/mm/shadow/common.c
|
||||
.write = hvm_emulate_write,
|
||||
.cmpxchg = hvm_emulate_cmpxchg,
|
||||
- .cmpxchg8b = hvm_emulate_cmpxchg8b,
|
||||
+#ifdef __i386__
|
||||
+ .cmpxchg2 = hvm_emulate_cmpxchg8b,
|
||||
+#endif
|
||||
};
|
||||
|
||||
static int
|
||||
@@ -332,6 +336,7 @@ pv_emulate_cmpxchg(enum x86_segment seg,
|
||||
@@ -331,6 +335,7 @@ pv_emulate_cmpxchg(enum x86_segment seg,
|
||||
v, offset, old, new, bytes, sh_ctxt);
|
||||
}
|
||||
|
||||
@ -66,10 +66,12 @@ Index: xen-3.2-testing/xen/arch/x86/mm/shadow/common.c
|
||||
static int
|
||||
pv_emulate_cmpxchg8b(enum x86_segment seg,
|
||||
unsigned long offset,
|
||||
@@ -347,13 +352,16 @@ pv_emulate_cmpxchg8b(enum x86_segment se
|
||||
@@ -346,13 +351,16 @@ pv_emulate_cmpxchg8b(enum x86_segment se
|
||||
return v->arch.paging.mode->shadow.x86_emulate_cmpxchg8b(
|
||||
v, offset, old_lo, old_hi, new_lo, new_hi, sh_ctxt);
|
||||
}
|
||||
+#else
|
||||
+#define pv_emulate_cmpxchg8b NULL
|
||||
+#endif
|
||||
|
||||
static struct x86_emulate_ops pv_shadow_emulator_ops = {
|
||||
@ -78,13 +80,11 @@ Index: xen-3.2-testing/xen/arch/x86/mm/shadow/common.c
|
||||
.write = pv_emulate_write,
|
||||
.cmpxchg = pv_emulate_cmpxchg,
|
||||
- .cmpxchg8b = pv_emulate_cmpxchg8b,
|
||||
+#ifdef __i386__
|
||||
+ .cmpxchg2 = pv_emulate_cmpxchg8b,
|
||||
+#endif
|
||||
};
|
||||
|
||||
struct x86_emulate_ops *shadow_init_emulation(
|
||||
@@ -367,7 +375,12 @@ struct x86_emulate_ops *shadow_init_emul
|
||||
@@ -366,7 +374,12 @@ struct x86_emulate_ops *shadow_init_emul
|
||||
|
||||
if ( !is_hvm_vcpu(v) )
|
||||
{
|
||||
@ -101,7 +101,7 @@ Index: xen-3.2-testing/xen/arch/x86/mm/shadow/multi.c
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/xen/arch/x86/mm/shadow/multi.c
|
||||
+++ xen-3.2-testing/xen/arch/x86/mm/shadow/multi.c
|
||||
@@ -4230,7 +4230,8 @@ sh_x86_emulate_cmpxchg(struct vcpu *v, u
|
||||
@@ -4244,7 +4244,8 @@ sh_x86_emulate_cmpxchg(struct vcpu *v, u
|
||||
return rv;
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ Index: xen-3.2-testing/xen/arch/x86/mm/shadow/multi.c
|
||||
sh_x86_emulate_cmpxchg8b(struct vcpu *v, unsigned long vaddr,
|
||||
unsigned long old_lo, unsigned long old_hi,
|
||||
unsigned long new_lo, unsigned long new_hi,
|
||||
@@ -4265,6 +4266,7 @@ sh_x86_emulate_cmpxchg8b(struct vcpu *v,
|
||||
@@ -4280,6 +4281,7 @@ sh_x86_emulate_cmpxchg8b(struct vcpu *v,
|
||||
shadow_unlock(v->domain);
|
||||
return rv;
|
||||
}
|
||||
@ -119,7 +119,7 @@ Index: xen-3.2-testing/xen/arch/x86/mm/shadow/multi.c
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -4551,7 +4553,9 @@ struct paging_mode sh_paging_mode = {
|
||||
@@ -4566,7 +4568,9 @@ struct paging_mode sh_paging_mode = {
|
||||
.shadow.detach_old_tables = sh_detach_old_tables,
|
||||
.shadow.x86_emulate_write = sh_x86_emulate_write,
|
||||
.shadow.x86_emulate_cmpxchg = sh_x86_emulate_cmpxchg,
|
||||
@ -133,15 +133,20 @@ Index: xen-3.2-testing/xen/arch/x86/x86_emulate.c
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/xen/arch/x86/x86_emulate.c
|
||||
+++ xen-3.2-testing/xen/arch/x86/x86_emulate.c
|
||||
@@ -30,6 +30,7 @@
|
||||
@@ -30,10 +30,11 @@
|
||||
#include <xen/types.h>
|
||||
#include <xen/lib.h>
|
||||
#include <asm/regs.h>
|
||||
+#include <asm/processor.h>
|
||||
#undef cmpxchg
|
||||
#undef cpuid
|
||||
+#undef wbinvd
|
||||
#endif
|
||||
@@ -2954,58 +2955,63 @@ x86_emulate(
|
||||
-#undef wbinvd /* Macro'ed in include/asm-x86/system.h */
|
||||
#include <asm-x86/x86_emulate.h>
|
||||
|
||||
/* Operand sizes: 8-bit operands or specified/overridden size. */
|
||||
@@ -2978,58 +2979,63 @@ x86_emulate(
|
||||
src.val = x86_seg_gs;
|
||||
goto pop_seg;
|
||||
|
||||
@ -158,7 +163,7 @@ Index: xen-3.2-testing/xen/arch/x86/x86_emulate.c
|
||||
- {
|
||||
- _regs.eax = old_lo;
|
||||
- _regs.edx = old_hi;
|
||||
- _regs.eflags &= ~EF_ZF;
|
||||
- _regs.eflags &= ~EFLG_ZF;
|
||||
- }
|
||||
- else if ( ops->cmpxchg8b == NULL )
|
||||
- {
|
||||
@ -175,7 +180,7 @@ Index: xen-3.2-testing/xen/arch/x86/x86_emulate.c
|
||||
+
|
||||
+ if ( (rc = ops->read(ea.mem.seg, ea.mem.off, &old, 8, ctxt)) != 0 )
|
||||
goto done;
|
||||
- _regs.eflags |= EF_ZF;
|
||||
- _regs.eflags |= EFLG_ZF;
|
||||
- }
|
||||
- break;
|
||||
- }
|
||||
@ -190,13 +195,13 @@ Index: xen-3.2-testing/xen/arch/x86/x86_emulate.c
|
||||
- {
|
||||
- _regs.eax = (uint32_t)(old>>0);
|
||||
- _regs.edx = (uint32_t)(old>>32);
|
||||
- _regs.eflags &= ~EF_ZF;
|
||||
- _regs.eflags &= ~EFLG_ZF;
|
||||
+ if ( ((uint32_t)(old>>0) != (uint32_t)_regs.eax) ||
|
||||
+ ((uint32_t)(old>>32) != (uint32_t)_regs.edx) )
|
||||
+ {
|
||||
+ _regs.eax = (uint32_t)(old>>0);
|
||||
+ _regs.edx = (uint32_t)(old>>32);
|
||||
+ _regs.eflags &= ~EF_ZF;
|
||||
+ _regs.eflags &= ~EFLG_ZF;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
@ -204,7 +209,7 @@ Index: xen-3.2-testing/xen/arch/x86/x86_emulate.c
|
||||
+ if ( (rc = ops->cmpxchg(ea.mem.seg, ea.mem.off, old,
|
||||
+ new, 8, ctxt)) != 0 )
|
||||
+ goto done;
|
||||
+ _regs.eflags |= EF_ZF;
|
||||
+ _regs.eflags |= EFLG_ZF;
|
||||
+ }
|
||||
}
|
||||
+ else if ( !cpu_has_cmpxchg16b )
|
||||
@ -222,12 +227,12 @@ Index: xen-3.2-testing/xen/arch/x86/x86_emulate.c
|
||||
+ (rc = ops->read(ea.mem.seg, ea.mem.off+sizeof(old_lo),
|
||||
+ &old_hi, sizeof(old_lo), ctxt)) )
|
||||
goto done;
|
||||
- _regs.eflags |= EF_ZF;
|
||||
- _regs.eflags |= EFLG_ZF;
|
||||
+ if ( (old_lo != _regs.eax) || (old_hi != _regs.edx) )
|
||||
+ {
|
||||
+ _regs.eax = old_lo;
|
||||
+ _regs.edx = old_hi;
|
||||
+ _regs.eflags &= ~EF_ZF;
|
||||
+ _regs.eflags &= ~EFLG_ZF;
|
||||
+ }
|
||||
+ else if ( ops->cmpxchg2 == NULL )
|
||||
+ {
|
||||
@ -239,7 +244,7 @@ Index: xen-3.2-testing/xen/arch/x86/x86_emulate.c
|
||||
+ if ( (rc = ops->cmpxchg2(ea.mem.seg, ea.mem.off, old_lo, old_hi,
|
||||
+ _regs.ebx, _regs.ecx, ctxt)) != 0 )
|
||||
+ goto done;
|
||||
+ _regs.eflags |= EF_ZF;
|
||||
+ _regs.eflags |= EFLG_ZF;
|
||||
+ }
|
||||
}
|
||||
break;
|
||||
@ -248,7 +253,7 @@ Index: xen-3.2-testing/xen/arch/x86/x86_emulate.c
|
||||
|
||||
case 0xc8 ... 0xcf: /* bswap */
|
||||
dst.type = OP_REG;
|
||||
@@ -3015,7 +3021,7 @@ x86_emulate(
|
||||
@@ -3039,7 +3045,7 @@ x86_emulate(
|
||||
{
|
||||
default: /* case 2: */
|
||||
/* Undefined behaviour. Writes zero on all tested CPUs. */
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7a3b0d72259d820195d38cffac039b8e5daaa99ebc8e80b375242361b53646cb
|
||||
size 6419511
|
||||
oid sha256:b7da7e0b2e35bba8e475d26a062540e83b76868bbcc3d3d3d7d1f447ce685115
|
||||
size 6404909
|
||||
|
@ -89,13 +89,12 @@ Index: xen-3.2-testing/tools/examples/Makefile
|
||||
|
||||
.PHONY: install-configs
|
||||
install-configs: $(XEN_CONFIGS)
|
||||
@@ -109,9 +97,7 @@ install-udev:
|
||||
@@ -109,8 +97,7 @@ install-udev:
|
||||
$(INSTALL_DIR) $(DESTDIR)$(UDEV_RULES_DIR)/rules.d
|
||||
for i in $(UDEV_RULES); \
|
||||
set -e; for i in $(UDEV_RULES); \
|
||||
do \
|
||||
- $(INSTALL_DATA) $$i $(DESTDIR)$(UDEV_RULES_DIR); \
|
||||
- ( cd $(DESTDIR)$(UDEV_RULES_DIR)/rules.d ; \
|
||||
- ln -sf ../$$i . ) \
|
||||
- ln -sf ../$$i $(DESTDIR)$(UDEV_RULES_DIR)/rules.d; \
|
||||
+ $(INSTALL_DATA) $$i $(DESTDIR)$(UDEV_RULES_DIR)/rules.d; \
|
||||
done
|
||||
|
||||
|
@ -1,16 +1,117 @@
|
||||
Index: xen-3.2-testing/tools/python/xen/util/blkif.py
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/tools/python/xen/util/blkif.py
|
||||
+++ xen-3.2-testing/tools/python/xen/util/blkif.py
|
||||
@@ -66,23 +66,24 @@ def blkdev_segment(name):
|
||||
'type' : 'Disk' }
|
||||
return val
|
||||
|
||||
-def _parse_uname(uname):
|
||||
- fn = taptype = None
|
||||
+def parse_uname(uname):
|
||||
+ fn = tpy = taptype = None
|
||||
if uname.find(":") != -1:
|
||||
(typ, fn) = uname.split(":", 1)
|
||||
if typ == "phy" and not fn.startswith("/"):
|
||||
fn = "/dev/%s" %(fn,)
|
||||
if typ == "tap":
|
||||
(taptype, fn) = fn.split(":", 1)
|
||||
- return (fn, taptype)
|
||||
+ return (fn, (typ, taptype))
|
||||
+ return (fn, (typ,taptype))
|
||||
|
||||
def blkdev_uname_to_file(uname):
|
||||
"""Take a blkdev uname and return the corresponding filename."""
|
||||
- return _parse_uname(uname)[0]
|
||||
+ return parse_uname(uname)[0]
|
||||
|
||||
def blkdev_uname_to_taptype(uname):
|
||||
"""Take a blkdev uname and return the blktap type."""
|
||||
- return _parse_uname(uname)[1]
|
||||
+ return parse_uname(uname)[1][0]
|
||||
|
||||
def mount_mode(name):
|
||||
mode = None
|
||||
Index: xen-3.2-testing/tools/python/xen/xend/server/DevController.py
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/tools/python/xen/xend/server/DevController.py
|
||||
+++ xen-3.2-testing/tools/python/xen/xend/server/DevController.py
|
||||
@@ -561,6 +561,31 @@ class DevController:
|
||||
return result['status']
|
||||
|
||||
|
||||
+ def waitForFrontend(self, devid):
|
||||
+ def frontendStatusCallback(statusPath, ev, result):
|
||||
+ status = xstransact.Read(statusPath)
|
||||
+ log.debug("frontendStatusCallback %s = %s" % (statusPath, status))
|
||||
+ try:
|
||||
+ status = int(status)
|
||||
+ if status == xenbusState['Connected']:
|
||||
+ result['status'] = Connected
|
||||
+ elif status == xenbusState['Closed']:
|
||||
+ result['status'] = Error
|
||||
+ else:
|
||||
+ raise
|
||||
+ except:
|
||||
+ return 1
|
||||
+ ev.set()
|
||||
+ return 0
|
||||
+ frontpath = self.frontendPath(devid)
|
||||
+ statusPath = frontpath + '/state'
|
||||
+ ev = Event()
|
||||
+ result = { 'status': Timeout }
|
||||
+ xswatch(statusPath, frontendStatusCallback, ev, result)
|
||||
+ ev.wait(5)
|
||||
+ return result['status']
|
||||
+
|
||||
+
|
||||
def backendPath(self, backdom, devid):
|
||||
"""Construct backend path given the backend domain and device id.
|
||||
|
||||
Index: xen-3.2-testing/tools/python/xen/xend/XendBootloader.py
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/tools/python/xen/xend/XendBootloader.py
|
||||
+++ xen-3.2-testing/tools/python/xen/xend/XendBootloader.py
|
||||
@@ -14,6 +14,7 @@
|
||||
@@ -12,8 +12,9 @@
|
||||
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
#
|
||||
|
||||
import os, select, errno, stat, signal
|
||||
-import os, select, errno, stat, signal
|
||||
+import os, select, errno, stat, signal, time
|
||||
import random
|
||||
+import re
|
||||
import shlex
|
||||
from xen.xend import sxp
|
||||
|
||||
@@ -185,3 +186,14 @@ def bootloader_tidy(dom):
|
||||
@@ -38,8 +39,25 @@ def bootloader(blexec, disk, dom, quiet
|
||||
msg = "Bootloader isn't executable"
|
||||
log.error(msg)
|
||||
raise VmError(msg)
|
||||
- if not os.access(disk, os.R_OK):
|
||||
- msg = "Disk isn't accessible"
|
||||
+
|
||||
+ # domUloader requires '--entry=foo' in blargs, which is derived from
|
||||
+ # 'bootargs' entry in domain configuration file. Ensure it exists
|
||||
+ # here so a reasonable error message can be returned.
|
||||
+ if blexec.find('domUloader.py') != -1:
|
||||
+ if blargs.find('entry') == -1:
|
||||
+ msg = "domUloader requires specification of bootargs"
|
||||
+ log.error(msg)
|
||||
+ raise VmError(msg)
|
||||
+
|
||||
+ avail = False
|
||||
+ for i in xrange(1, 20):
|
||||
+ avail = os.access(disk, os.R_OK)
|
||||
+ if avail:
|
||||
+ break
|
||||
+ time.sleep(.05)
|
||||
+
|
||||
+ if not avail:
|
||||
+ msg = "Disk '%s' isn't accessible" % disk
|
||||
log.error(msg)
|
||||
raise VmError(msg)
|
||||
|
||||
@@ -185,3 +203,14 @@ def bootloader_tidy(dom):
|
||||
os.kill(pid, signal.SIGKILL)
|
||||
|
||||
|
||||
@ -29,7 +130,15 @@ Index: xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -42,7 +42,7 @@ from xen.xend import balloon, sxp, uuid,
|
||||
@@ -35,14 +35,14 @@ from types import StringTypes
|
||||
|
||||
import xen.lowlevel.xc
|
||||
from xen.util import asserts
|
||||
-from xen.util.blkif import blkdev_uname_to_file, blkdev_uname_to_taptype
|
||||
+from xen.util.blkif import parse_uname
|
||||
import xen.util.xsm.xsm as security
|
||||
|
||||
from xen.xend import balloon, sxp, uuid, image, arch, osdep
|
||||
from xen.xend import XendOptions, XendNode, XendConfig
|
||||
|
||||
from xen.xend.XendConfig import scrub_password
|
||||
@ -38,7 +147,18 @@ Index: xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
from xen.xend.XendError import XendError, VmError
|
||||
from xen.xend.XendDevices import XendDevices
|
||||
from xen.xend.XendTask import XendTask
|
||||
@@ -2009,8 +2009,11 @@ class XendDomainInfo:
|
||||
@@ -1484,6 +1484,10 @@ class XendDomainInfo:
|
||||
deviceClass, config = self.info['devices'].get(dev_uuid)
|
||||
self._waitForDevice(deviceClass, config['devid'])
|
||||
|
||||
+ def _waitForDeviceFrontUUID(self, dev_uuid):
|
||||
+ deviceClass, config = self.info['devices'].get(dev_uuid)
|
||||
+ self.getDeviceController(deviceClass).waitForFrontend(config['devid'])
|
||||
+
|
||||
def _waitForDevice_destroy(self, deviceClass, devid, backpath):
|
||||
return self.getDeviceController(deviceClass).waitForDevice_destroy(
|
||||
devid, backpath)
|
||||
@@ -2012,8 +2016,11 @@ class XendDomainInfo:
|
||||
blexec = osdep.pygrub_path
|
||||
|
||||
blcfg = None
|
||||
@ -52,3 +172,31 @@ Index: xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
|
||||
if not disks:
|
||||
msg = "Had a bootloader specified, but no disks are bootable"
|
||||
@@ -2024,13 +2031,10 @@ class XendDomainInfo:
|
||||
devtype = devinfo[0]
|
||||
disk = devinfo[1]['uname']
|
||||
|
||||
- fn = blkdev_uname_to_file(disk)
|
||||
- taptype = blkdev_uname_to_taptype(disk)
|
||||
- mounted = devtype == 'tap' and taptype != 'aio' and taptype != 'sync' and not os.stat(fn).st_rdev
|
||||
+ (fn, types) = parse_uname(disk)
|
||||
+ mounted = (types[0] not in ('file', 'phy'))
|
||||
if mounted:
|
||||
- # This is a file, not a device. pygrub can cope with a
|
||||
- # file if it's raw, but if it's QCOW or other such formats
|
||||
- # used through blktap, then we need to mount it first.
|
||||
+ # This is not a raw file or device, so we need to mount it first.
|
||||
|
||||
log.info("Mounting %s on %s." %
|
||||
(fn, BOOTLOADER_LOOPBACK_DEVICE))
|
||||
@@ -2042,7 +2046,9 @@ class XendDomainInfo:
|
||||
|
||||
from xen.xend import XendDomain
|
||||
dom0 = XendDomain.instance().privilegedDomain()
|
||||
- dom0._waitForDeviceUUID(dom0.create_vbd(vbd, disk))
|
||||
+ vbd_uuid = dom0.create_vbd(vbd, disk)
|
||||
+ dom0._waitForDeviceUUID(vbd_uuid)
|
||||
+ dom0._waitForDeviceFrontUUID(vbd_uuid)
|
||||
fn = BOOTLOADER_LOOPBACK_DEVICE
|
||||
|
||||
try:
|
||||
|
144
xen-fbback-resize.patch
Normal file
144
xen-fbback-resize.patch
Normal file
@ -0,0 +1,144 @@
|
||||
diff -r 15cfd1f8fa38 tools/ioemu/hw/xenfb.c
|
||||
--- a/tools/ioemu/hw/xenfb.c Tue Jan 08 16:45:08 2008 +0000
|
||||
+++ b/tools/ioemu/hw/xenfb.c Thu Jan 10 12:20:59 2008 -0700
|
||||
@@ -78,6 +78,7 @@ static void xenfb_invalidate(void *opaqu
|
||||
static void xenfb_invalidate(void *opaque);
|
||||
static void xenfb_screen_dump(void *opaque, const char *name);
|
||||
static int xenfb_register_console(struct xenfb *xenfb);
|
||||
+static int xenfb_send_resize(struct xenfb *xenfb, int width, int height);
|
||||
|
||||
/*
|
||||
* Tables to map from scancode to Linux input layer keycode.
|
||||
@@ -264,6 +265,9 @@ struct xenfb *xenfb_new(int domid, Displ
|
||||
xenfb->ds = ds;
|
||||
xenfb_device_set_domain(&xenfb->fb, domid);
|
||||
xenfb_device_set_domain(&xenfb->kbd, domid);
|
||||
+
|
||||
+ /* Indicate we have the frame buffer resize feature */
|
||||
+ xenfb_xs_printf(xenfb->xsh, xenfb->fb.nodename, "feature-resize", "1");
|
||||
|
||||
fprintf(stderr, "FB: Waiting for KBD backend creation\n");
|
||||
xenfb_wait_for_backend(&xenfb->kbd, xenfb_backend_created_kbd);
|
||||
@@ -510,6 +514,12 @@ static void xenfb_on_fb_event(struct xen
|
||||
}
|
||||
xenfb_guest_copy(xenfb, x, y, w, h);
|
||||
break;
|
||||
+ case XENFB_TYPE_RESIZE:
|
||||
+ xenfb->width = event->resize.width;
|
||||
+ xenfb->height = event->resize.height;
|
||||
+ dpy_resize(xenfb->ds, xenfb->width, xenfb->height);
|
||||
+ xenfb_send_resize(xenfb, xenfb->width, xenfb->height);
|
||||
+ break;
|
||||
}
|
||||
}
|
||||
mb(); /* ensure we're done with ring contents */
|
||||
@@ -601,6 +611,19 @@ static int xenfb_send_motion(struct xenf
|
||||
event.motion.rel_x = rel_x;
|
||||
event.motion.rel_y = rel_y;
|
||||
event.motion.rel_z = rel_z;
|
||||
+
|
||||
+ return xenfb_kbd_event(xenfb, &event);
|
||||
+}
|
||||
+
|
||||
+/* Send a resize event to kbd driver */
|
||||
+static int xenfb_send_resize(struct xenfb *xenfb, int width, int height)
|
||||
+{
|
||||
+ union xenkbd_in_event event;
|
||||
+
|
||||
+ memset(&event, 0, XENKBD_IN_EVENT_SIZE);
|
||||
+ event.type = XENKBD_TYPE_RESIZE;
|
||||
+ event.resize.width = width;
|
||||
+ event.resize.height = height;
|
||||
|
||||
return xenfb_kbd_event(xenfb, &event);
|
||||
}
|
||||
diff -r 15cfd1f8fa38 xen/include/public/io/fbif.h
|
||||
--- a/xen/include/public/io/fbif.h Tue Jan 08 16:45:08 2008 +0000
|
||||
+++ b/xen/include/public/io/fbif.h Thu Jan 10 11:00:13 2008 -0700
|
||||
@@ -50,12 +50,26 @@ struct xenfb_update
|
||||
int32_t height; /* rect height */
|
||||
};
|
||||
|
||||
+/*
|
||||
+ * Framebuffer resize notification event
|
||||
+ * Capable backend sets feature-resize in xenstore.
|
||||
+ */
|
||||
+#define XENFB_TYPE_RESIZE 3
|
||||
+
|
||||
+struct xenfb_resize
|
||||
+{
|
||||
+ uint8_t type; /* XENFB_TYPE_RESIZE */
|
||||
+ int32_t width; /* frame buffer width in pixels */
|
||||
+ int32_t height; /* frame buffer height in pixels */
|
||||
+};
|
||||
+
|
||||
#define XENFB_OUT_EVENT_SIZE 40
|
||||
|
||||
union xenfb_out_event
|
||||
{
|
||||
uint8_t type;
|
||||
struct xenfb_update update;
|
||||
+ struct xenfb_resize resize;
|
||||
char pad[XENFB_OUT_EVENT_SIZE];
|
||||
};
|
||||
|
||||
@@ -109,15 +123,18 @@ struct xenfb_page
|
||||
* Each directory page holds PAGE_SIZE / sizeof(*pd)
|
||||
* framebuffer pages, and can thus map up to PAGE_SIZE *
|
||||
* PAGE_SIZE / sizeof(*pd) bytes. With PAGE_SIZE == 4096 and
|
||||
- * sizeof(unsigned long) == 4, that's 4 Megs. Two directory
|
||||
- * pages should be enough for a while.
|
||||
+ * sizeof(unsigned long) == 4 on a 32 bit system that's 4 Megs
|
||||
+ * sizeof(unsigned long) == 8 on a 64 bit system that's 2 Megs
|
||||
+ * Will need 3 directory page entries to support a 5MB frame
|
||||
+ * buffer which is enough for a 1280x1024 display
|
||||
*/
|
||||
- unsigned long pd[2];
|
||||
+ unsigned long pd[3];
|
||||
};
|
||||
|
||||
/*
|
||||
- * Wart: xenkbd needs to know resolution. Put it here until a better
|
||||
- * solution is found, but don't leak it to the backend.
|
||||
+ * Wart: xenkbd needs to know resolution of initial frame buffer. Put
|
||||
+ * it here until a better solution is found, but don't leak it to
|
||||
+ * the backend.
|
||||
*/
|
||||
#ifdef __KERNEL__
|
||||
#define XENFB_WIDTH 800
|
||||
diff -r 15cfd1f8fa38 xen/include/public/io/kbdif.h
|
||||
--- a/xen/include/public/io/kbdif.h Tue Jan 08 16:45:08 2008 +0000
|
||||
+++ b/xen/include/public/io/kbdif.h Thu Jan 10 12:28:09 2008 -0700
|
||||
@@ -44,6 +44,11 @@
|
||||
* request-abs-update in xenstore.
|
||||
*/
|
||||
#define XENKBD_TYPE_POS 4
|
||||
+/*
|
||||
+ * Sent when frame buffer is resized. kbd adjusts absolute
|
||||
+ * max X and Y axis values in input ptr device.
|
||||
+ */
|
||||
+#define XENKBD_TYPE_RESIZE 5
|
||||
|
||||
struct xenkbd_motion
|
||||
{
|
||||
@@ -68,6 +73,12 @@ struct xenkbd_position
|
||||
int32_t abs_z; /* absolute Z position (wheel) */
|
||||
};
|
||||
|
||||
+struct xenkbd_resize
|
||||
+{
|
||||
+ uint8_t type; /* XENKBD_TYPE_RESIZE */
|
||||
+ int32_t width; /* frame buffer width in pixels */
|
||||
+ int32_t height; /* frame buffer height in pixels */
|
||||
+};
|
||||
#define XENKBD_IN_EVENT_SIZE 40
|
||||
|
||||
union xenkbd_in_event
|
||||
@@ -76,6 +87,7 @@ union xenkbd_in_event
|
||||
struct xenkbd_motion motion;
|
||||
struct xenkbd_key key;
|
||||
struct xenkbd_position pos;
|
||||
+ struct xenkbd_resize resize;
|
||||
char pad[XENKBD_IN_EVENT_SIZE];
|
||||
};
|
||||
|
@ -25,7 +25,7 @@ Index: xen-3.2-testing/tools/ioemu/vl.c
|
||||
#endif
|
||||
#ifdef __sun__
|
||||
#define SMBD_COMMAND "/usr/sfw/sbin/smbd"
|
||||
@@ -4131,10 +4129,10 @@ static int net_client_init(const char *s
|
||||
@@ -4129,10 +4127,10 @@ static int net_client_init(const char *s
|
||||
if (get_param_value(setup_script, sizeof(setup_script), "script", p) == 0) {
|
||||
pstrcpy(setup_script, sizeof(setup_script), DEFAULT_NETWORK_SCRIPT);
|
||||
}
|
||||
|
@ -185,19 +185,6 @@ Index: xen-3.2-testing/tools/xenstore/xsls.c
|
||||
fputs(" (", stdout);
|
||||
for (i = 0; i < nperms; i++) {
|
||||
if (i)
|
||||
Index: xen-3.2-testing/tools/blktap/drivers/tapaio.c
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/tools/blktap/drivers/tapaio.c
|
||||
+++ xen-3.2-testing/tools/blktap/drivers/tapaio.c
|
||||
@@ -150,7 +150,7 @@ tap_aio_get_events(tap_aio_context_t *ct
|
||||
nr_events = io_getevents(ctx->aio_ctx, 1,
|
||||
ctx->max_aio_events, ctx->aio_events, NULL);
|
||||
else
|
||||
- read(ctx->completion_fd[0], &nr_events, sizeof(nr_events));
|
||||
+ if (read(ctx->completion_fd[0], &nr_events, sizeof(nr_events)));
|
||||
|
||||
return nr_events;
|
||||
}
|
||||
Index: xen-3.2-testing/xen/arch/x86/x86_emulate.c
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/xen/arch/x86/x86_emulate.c
|
||||
|
@ -1,3 +1,8 @@
|
||||
-------------------------------------------------------------------
|
||||
Sat Jan 12 00:37:41 CET 2008 - carnold@suse.de
|
||||
|
||||
- Update to xen 3.2 RC5. Changeset 16701
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Dec 19 16:16:36 MST 2007 - carnold@novell.com
|
||||
|
||||
|
31
xen.spec
31
xen.spec
@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package xen (Version 3.2.0_16646)
|
||||
# spec file for package xen (Version 3.2.0_16701)
|
||||
#
|
||||
# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
# This file and all modifications and additions to the pristine
|
||||
# package are under the same license as the package itself.
|
||||
#
|
||||
@ -13,7 +13,7 @@
|
||||
Name: xen
|
||||
%define xvers 3.2
|
||||
%define xvermaj 3
|
||||
%define changeset 16646
|
||||
%define changeset 16701
|
||||
%define xen_build_dir xen-3.2-testing
|
||||
%if %sles_version
|
||||
%define with_kmp 1
|
||||
@ -32,7 +32,7 @@ BuildRequires: glibc-32bit glibc-devel-32bit
|
||||
%if %{?with_kmp}0
|
||||
BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11
|
||||
%endif
|
||||
Version: 3.2.0_16646
|
||||
Version: 3.2.0_16701
|
||||
Release: 1
|
||||
License: GPL v2 only
|
||||
Group: System/Kernel
|
||||
@ -104,11 +104,14 @@ Patch152: bridge-hostonly.diff
|
||||
Patch153: bridge-vlan.diff
|
||||
Patch154: keymap_nl-be.patch
|
||||
Patch155: svm-cr8-performance.diff
|
||||
Patch156: xen-fbback-resize.patch
|
||||
# Patches from Jan
|
||||
Patch240: svm-lmsl.patch
|
||||
Patch241: x86_emulate-eflags.patch
|
||||
Patch242: x86_emulate.patch
|
||||
Patch243: x86-extra-trap-info.patch
|
||||
Patch240: xenctx.patch
|
||||
Patch241: const-callback-arg.patch
|
||||
Patch242: const-set-trap-table-arg.patch
|
||||
Patch243: svm-lmsl.patch
|
||||
Patch244: x86_emulate.patch
|
||||
Patch245: x86-extra-trap-info.patch
|
||||
Patch290: x86_64-syscall-clear-df.patch
|
||||
Patch291: 32on64-extra-mem.patch
|
||||
Patch292: blktap.patch
|
||||
@ -523,17 +526,20 @@ Authors:
|
||||
%patch141 -p1
|
||||
%patch142 -p1
|
||||
%patch143 -p1
|
||||
#%patch144 -p1 # Pat, cdrom
|
||||
%patch144 -p1
|
||||
%patch150 -p1
|
||||
#%patch151 -p1 # dump if all goes well with defaulting to network-multinet
|
||||
#%patch152 -p1 # dump if all goes well with defaulting to network-multinet
|
||||
#%patch153 -p1 # dump if all goes well with defaulting to network-multinet
|
||||
%patch154 -p1
|
||||
#%patch155 -p1 # AMD CR8 Performance - not clean for unstable
|
||||
%patch156 -p1
|
||||
%patch240 -p1
|
||||
%patch241 -p1
|
||||
%patch242 -p1
|
||||
%patch243 -p1
|
||||
%patch244 -p1
|
||||
%patch245 -p1
|
||||
%patch290 -p1
|
||||
%patch291 -p1
|
||||
%patch292 -p1
|
||||
@ -624,7 +630,7 @@ done
|
||||
make -C docs install \
|
||||
DESTDIR=$RPM_BUILD_ROOT MANDIR=%{_mandir} \
|
||||
DOCDIR=%{_defaultdocdir}/xen
|
||||
for name in COPYING %SOURCE2 %SOURCE3 %SOURCE4 %SOURCE16; do
|
||||
for name in COPYING %SOURCE2 %SOURCE3 %SOURCE4; do
|
||||
install -m 644 $name $RPM_BUILD_ROOT/%{_defaultdocdir}/xen/
|
||||
done
|
||||
mkdir -p $RPM_BUILD_ROOT/%{_defaultdocdir}/xen/misc
|
||||
@ -645,7 +651,7 @@ install -m644 %SOURCE9 %SOURCE10 $RPM_BUILD_ROOT/etc/xen/examples/
|
||||
install -m644 %SOURCE17 $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.xend
|
||||
# scripts
|
||||
rm $RPM_BUILD_ROOT/etc/xen/scripts/block-*nbd
|
||||
install -m755 %SOURCE11 %SOURCE12 %SOURCE13 %SOURCE18 %SOURCE19 %SOURCE20 %SOURCE21 $RPM_BUILD_ROOT/etc/xen/scripts/
|
||||
install -m755 %SOURCE11 %SOURCE12 %SOURCE13 %SOURCE16 %SOURCE18 %SOURCE19 %SOURCE20 %SOURCE21 $RPM_BUILD_ROOT/etc/xen/scripts/
|
||||
# logrotate
|
||||
install -m644 -D %SOURCE7 $RPM_BUILD_ROOT/etc/logrotate.d/xen
|
||||
# directories
|
||||
@ -775,7 +781,6 @@ rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info
|
||||
%{_defaultdocdir}/xen/boot.local.xenU
|
||||
%{_defaultdocdir}/xen/boot.xen
|
||||
%{_defaultdocdir}/xen/misc
|
||||
%{_defaultdocdir}/xen/xmclone.sh
|
||||
%dir %pysite/xen
|
||||
%pysite/xen/*
|
||||
/usr/lib/xen/boot/domUloader.py
|
||||
@ -848,6 +853,8 @@ rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info
|
||||
/sbin/ldconfig
|
||||
|
||||
%changelog
|
||||
* Sat Jan 12 2008 - carnold@suse.de
|
||||
- Update to xen 3.2 RC5. Changeset 16701
|
||||
* Wed Dec 19 2007 - carnold@novell.com
|
||||
- Update to xen 3.2 RC2. Changeset 16646
|
||||
* Thu Nov 29 2007 - carnold@novell.com
|
||||
|
@ -2,7 +2,7 @@ Index: xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
===================================================================
|
||||
--- xen-3.2-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||
+++ xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||
@@ -2684,6 +2684,14 @@ class XendDomainInfo:
|
||||
@@ -2690,6 +2690,14 @@ class XendDomainInfo:
|
||||
if not config.has_key('backend'):
|
||||
config['backend'] = "00000000-0000-0000-0000-000000000000"
|
||||
|
||||
|
163
xenctx.patch
Normal file
163
xenctx.patch
Normal file
@ -0,0 +1,163 @@
|
||||
Index: 2007-12-10/tools/xentrace/xenctx.c
|
||||
===================================================================
|
||||
--- 2007-12-10.orig/tools/xentrace/xenctx.c 2007-11-26 16:57:02.000000000 +0100
|
||||
+++ 2007-12-10/tools/xentrace/xenctx.c 2007-12-10 09:19:27.000000000 +0100
|
||||
@@ -29,6 +29,7 @@ int xc_handle = 0;
|
||||
int domid = 0;
|
||||
int frame_ptrs = 0;
|
||||
int stack_trace = 0;
|
||||
+int disp_all = 0;
|
||||
|
||||
#if defined (__i386__)
|
||||
#if defined (__OpenBSD__)
|
||||
@@ -243,12 +244,23 @@ void print_flags(uint64_t flags)
|
||||
{
|
||||
int i;
|
||||
|
||||
- printf("flags: %08" PRIx64, flags);
|
||||
+ printf("\nflags: %08" PRIx64, flags);
|
||||
for (i = 21; i >= 0; i--) {
|
||||
char *s = flag_values[i][(flags >> i) & 1];
|
||||
if (s != NULL)
|
||||
printf(" %s", s);
|
||||
}
|
||||
+ printf("\n");
|
||||
+}
|
||||
+
|
||||
+void print_special(unsigned long *regs, const char *name, unsigned int mask)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ printf("\n");
|
||||
+ for (i = 0; mask; mask >>= 1, ++i)
|
||||
+ if (mask & 1)
|
||||
+ printf("%s%u: " FMT_SIZE_T "\n", name, i, (size_t)regs[i]);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -257,12 +269,10 @@ void print_ctx(vcpu_guest_context_t *ctx
|
||||
{
|
||||
struct cpu_user_regs *regs = &ctx1->user_regs;
|
||||
|
||||
- printf("eip: %08x ", regs->eip);
|
||||
+ printf("cs:eip: %04x:%08x ", regs->cs, regs->eip);
|
||||
print_symbol(regs->eip);
|
||||
print_flags(regs->eflags);
|
||||
- printf("\n");
|
||||
-
|
||||
- printf("esp: %08x\n", regs->esp);
|
||||
+ printf("ss:esp: %04x:%08x\n", regs->ss, regs->esp);
|
||||
|
||||
printf("eax: %08x\t", regs->eax);
|
||||
printf("ebx: %08x\t", regs->ebx);
|
||||
@@ -273,47 +283,59 @@ void print_ctx(vcpu_guest_context_t *ctx
|
||||
printf("edi: %08x\t", regs->edi);
|
||||
printf("ebp: %08x\n", regs->ebp);
|
||||
|
||||
- printf(" cs: %08x\t", regs->cs);
|
||||
- printf(" ds: %08x\t", regs->ds);
|
||||
- printf(" fs: %08x\t", regs->fs);
|
||||
- printf(" gs: %08x\n", regs->gs);
|
||||
+ printf(" ds: %04x\t", regs->ds);
|
||||
+ printf(" es: %04x\t", regs->es);
|
||||
+ printf(" fs: %04x\t", regs->fs);
|
||||
+ printf(" gs: %04x\n", regs->gs);
|
||||
|
||||
+ if (disp_all) {
|
||||
+ print_special(ctx1->ctrlreg, "cr", 0x1d);
|
||||
+ print_special(ctx1->debugreg, "dr", 0xcf);
|
||||
+ }
|
||||
}
|
||||
#elif defined(__x86_64__)
|
||||
void print_ctx(vcpu_guest_context_t *ctx1)
|
||||
{
|
||||
struct cpu_user_regs *regs = &ctx1->user_regs;
|
||||
|
||||
- printf("rip: %08lx ", regs->rip);
|
||||
+ printf("rip: %016lx ", regs->rip);
|
||||
print_symbol(regs->rip);
|
||||
print_flags(regs->rflags);
|
||||
- printf("\n");
|
||||
- printf("rsp: %08lx\n", regs->rsp);
|
||||
-
|
||||
- printf("rax: %08lx\t", regs->rax);
|
||||
- printf("rbx: %08lx\t", regs->rbx);
|
||||
- printf("rcx: %08lx\t", regs->rcx);
|
||||
- printf("rdx: %08lx\n", regs->rdx);
|
||||
-
|
||||
- printf("rsi: %08lx\t", regs->rsi);
|
||||
- printf("rdi: %08lx\t", regs->rdi);
|
||||
- printf("rbp: %08lx\n", regs->rbp);
|
||||
-
|
||||
- printf(" r8: %08lx\t", regs->r8);
|
||||
- printf(" r9: %08lx\t", regs->r9);
|
||||
- printf("r10: %08lx\t", regs->r10);
|
||||
- printf("r11: %08lx\n", regs->r11);
|
||||
-
|
||||
- printf("r12: %08lx\t", regs->r12);
|
||||
- printf("r13: %08lx\t", regs->r13);
|
||||
- printf("r14: %08lx\t", regs->r14);
|
||||
- printf("r15: %08lx\n", regs->r15);
|
||||
-
|
||||
- printf(" cs: %04x\t", regs->cs);
|
||||
- printf(" ds: %04x\t", regs->ds);
|
||||
- printf(" fs: %04x\t", regs->fs);
|
||||
- printf(" gs: %04x\n", regs->gs);
|
||||
+ printf("rsp: %016lx\n", regs->rsp);
|
||||
|
||||
+ printf("rax: %016lx\t", regs->rax);
|
||||
+ printf("rcx: %016lx\t", regs->rcx);
|
||||
+ printf("rdx: %016lx\n", regs->rdx);
|
||||
+
|
||||
+ printf("rbx: %016lx\t", regs->rbx);
|
||||
+ printf("rsi: %016lx\t", regs->rsi);
|
||||
+ printf("rdi: %016lx\n", regs->rdi);
|
||||
+
|
||||
+ printf("rbp: %016lx\t", regs->rbp);
|
||||
+ printf(" r8: %016lx\t", regs->r8);
|
||||
+ printf(" r9: %016lx\n", regs->r9);
|
||||
+
|
||||
+ printf("r10: %016lx\t", regs->r10);
|
||||
+ printf("r11: %016lx\t", regs->r11);
|
||||
+ printf("r12: %016lx\n", regs->r12);
|
||||
+
|
||||
+ printf("r13: %016lx\t", regs->r13);
|
||||
+ printf("r14: %016lx\t", regs->r14);
|
||||
+ printf("r15: %016lx\n", regs->r15);
|
||||
+
|
||||
+ printf(" cs: %04x\t", regs->cs);
|
||||
+ printf(" ss: %04x\t", regs->ss);
|
||||
+ printf(" ds: %04x\t", regs->ds);
|
||||
+ printf(" es: %04x\n", regs->es);
|
||||
+
|
||||
+ printf(" fs: %04x @ %016lx\n", regs->fs, ctx1->fs_base);
|
||||
+ printf(" gs: %04x @ %016lx/%016lx\n", regs->gs,
|
||||
+ ctx1->gs_base_kernel, ctx1->gs_base_user);
|
||||
+
|
||||
+ if (disp_all) {
|
||||
+ print_special(ctx1->ctrlreg, "cr", 0x1d);
|
||||
+ print_special(ctx1->debugreg, "dr", 0xcf);
|
||||
+ }
|
||||
}
|
||||
#elif defined(__ia64__)
|
||||
|
||||
@@ -742,6 +764,8 @@ void usage(void)
|
||||
#ifdef __ia64__
|
||||
printf(" -r LIST, --regs=LIST display more registers.\n");
|
||||
printf(" -a --all same as --regs=tlb,cr,ar,br,bk\n");
|
||||
+#else
|
||||
+ printf(" -a --all display more registers\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -811,6 +835,10 @@ int main(int argc, char **argv)
|
||||
disp_bank_regs = 1;
|
||||
disp_tlb = 1;
|
||||
break;
|
||||
+#else
|
||||
+ case 'a':
|
||||
+ disp_all = 1;
|
||||
+ break;
|
||||
#endif
|
||||
case 'h':
|
||||
usage();
|
@ -1,7 +1,7 @@
|
||||
Index: xen-3.1-testing/tools/examples/init.d/sysconfig.xendomains
|
||||
Index: xen-3.2-testing/tools/examples/init.d/sysconfig.xendomains
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/examples/init.d/sysconfig.xendomains
|
||||
+++ xen-3.1-testing/tools/examples/init.d/sysconfig.xendomains
|
||||
--- xen-3.2-testing.orig/tools/examples/init.d/sysconfig.xendomains
|
||||
+++ xen-3.2-testing/tools/examples/init.d/sysconfig.xendomains
|
||||
@@ -1,4 +1,4 @@
|
||||
-## Path: System/xen
|
||||
+## Path: System/Virtualization
|
||||
@ -27,10 +27,10 @@ Index: xen-3.1-testing/tools/examples/init.d/sysconfig.xendomains
|
||||
|
||||
## Type: integer
|
||||
## Default: 300
|
||||
Index: xen-3.1-testing/tools/examples/xend-config.sxp
|
||||
Index: xen-3.2-testing/tools/examples/xend-config.sxp
|
||||
===================================================================
|
||||
--- xen-3.1-testing.orig/tools/examples/xend-config.sxp
|
||||
+++ xen-3.1-testing/tools/examples/xend-config.sxp
|
||||
--- xen-3.2-testing.orig/tools/examples/xend-config.sxp
|
||||
+++ xen-3.2-testing/tools/examples/xend-config.sxp
|
||||
@@ -51,16 +51,19 @@
|
||||
#
|
||||
# (9367 pam '' /etc/xen/xen-api.key /etc/xen/xen-api.crt)
|
||||
@ -55,3 +55,57 @@ Index: xen-3.1-testing/tools/examples/xend-config.sxp
|
||||
|
||||
#(xend-unix-path /var/lib/xend/xend-socket)
|
||||
|
||||
@@ -138,7 +141,52 @@
|
||||
# two fake interfaces per guest domain. To do things like this, write
|
||||
# yourself a wrapper script, and call network-bridge from it, as appropriate.
|
||||
#
|
||||
-(network-script network-bridge)
|
||||
+#(network-script network-bridge)
|
||||
+
|
||||
+# network-multinet is a replacement for the Xen network-bridge, network-nat
|
||||
+# and network-route scripts. network-multinet allows for the creation of
|
||||
+# multiple networks, supporting the following types:
|
||||
+#
|
||||
+#
|
||||
+# bridged: -Networks that contain both a physical network device (ethX)
|
||||
+# and a virtual network device (vethX) from Dom0.
|
||||
+# -This is the traditional type of network created in xen by
|
||||
+# the basic network-bridge script.
|
||||
+# -VMs on these network(s) appear to be on the real network(s)
|
||||
+#
|
||||
+# nohost: -Networks that contain a physical network device but not a
|
||||
+# virtual network device from Dom0.
|
||||
+# -These can be used to allow virtual machines to communicate
|
||||
+# with the outside world but not with Dom0.
|
||||
+# (Usefull if you want to isolate traffic away from Dom0)
|
||||
+#
|
||||
+# hostonly: -Networks that contain only a virtual network device (vethX)
|
||||
+# from Dom0.
|
||||
+# -This type of network will allow VMs connected to it to
|
||||
+# access only Dom0 and other VMs connected to the network.
|
||||
+# -This type of network is similiar to a VMware "HOST ONLY"
|
||||
+# network.
|
||||
+#
|
||||
+# nat: -Networks that contain only a virtual network device (vethX)
|
||||
+# from Dom0.
|
||||
+# -This type of network will allow VMs connected to it to access
|
||||
+# Dom0,the "outside world" via NAT and other VMs connected to it.
|
||||
+# -This type of network is similiar to a VMware "NAT" network.
|
||||
+#
|
||||
+# routed: -Networks that contain only a virtual network device (vethX)
|
||||
+# from Dom0.
|
||||
+# -This type of network will allow VMs connected to it to access
|
||||
+# Dom0,the "outside world" via routing through Dom0 and other VMs
|
||||
+# connected to it.
|
||||
+#
|
||||
+# empty: -Networks that do not contain any physical or virtual network
|
||||
+# devices from Dom0.
|
||||
+# -These can be used to allow VMs in DomUs to communicate only
|
||||
+# with other DomUs and not Dom0.
|
||||
+#
|
||||
+# See /etc/xen/scripts/network-multinet for more details.
|
||||
+#
|
||||
+(network-script network-multinet)
|
||||
|
||||
# The script used to control virtual interfaces. This can be overridden on a
|
||||
# per-vif basis when creating a domain or a configuring a new vif. The
|
||||
|
995
xmclone.sh
995
xmclone.sh
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user