- bnc#651822 - xm snapshot-xxx scripts lead to an XP SP3 HVM domU
to chkdsk snapshot-xend.patch snapshot-ioemu-restore.patch - bnc#651957 - Xen: vm-install failed to start xenpaging.enabled.patch - fate#310510 - fix xenpaging xenpaging.signal_handling.patch - unlink pagefile in signal handler OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=84
This commit is contained in:
parent
a12433a7fb
commit
64f5943c90
@ -2,7 +2,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
+++ xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
+++ xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
@@ -237,6 +237,7 @@ static int open_disk(struct td_state *s,
|
@@ -235,6 +235,7 @@ static int open_disk(struct td_state *s,
|
||||||
BlockDriver* drv;
|
BlockDriver* drv;
|
||||||
char* devname;
|
char* devname;
|
||||||
static int devnumber = 0;
|
static int devnumber = 0;
|
||||||
@ -10,7 +10,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
DPRINTF("Opening %s as blktap%d\n", path, devnumber);
|
DPRINTF("Opening %s as blktap%d\n", path, devnumber);
|
||||||
@@ -259,7 +260,7 @@ static int open_disk(struct td_state *s,
|
@@ -257,7 +258,7 @@ static int open_disk(struct td_state *s,
|
||||||
DPRINTF("%s driver specified\n", drv ? drv->format_name : "No");
|
DPRINTF("%s driver specified\n", drv ? drv->format_name : "No");
|
||||||
|
|
||||||
/* Open the image */
|
/* Open the image */
|
||||||
|
@ -741,7 +741,7 @@ Index: xen-4.0.1-testing/tools/blktap/lib/blktaplib.h
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.1-testing.orig/tools/blktap/lib/blktaplib.h
|
--- xen-4.0.1-testing.orig/tools/blktap/lib/blktaplib.h
|
||||||
+++ xen-4.0.1-testing/tools/blktap/lib/blktaplib.h
|
+++ xen-4.0.1-testing/tools/blktap/lib/blktaplib.h
|
||||||
@@ -225,6 +225,7 @@ typedef struct msg_pid {
|
@@ -224,6 +224,7 @@ typedef struct msg_pid {
|
||||||
#define DISK_TYPE_RAM 3
|
#define DISK_TYPE_RAM 3
|
||||||
#define DISK_TYPE_QCOW 4
|
#define DISK_TYPE_QCOW 4
|
||||||
#define DISK_TYPE_QCOW2 5
|
#define DISK_TYPE_QCOW2 5
|
||||||
|
@ -2,7 +2,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
+++ xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
+++ xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
@@ -259,8 +259,11 @@ static int open_disk(struct td_state *s,
|
@@ -257,8 +257,11 @@ static int open_disk(struct td_state *s,
|
||||||
drv = blktap_drivers[i].drv;
|
drv = blktap_drivers[i].drv;
|
||||||
DPRINTF("%s driver specified\n", drv ? drv->format_name : "No");
|
DPRINTF("%s driver specified\n", drv ? drv->format_name : "No");
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
+++ xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
+++ xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
@@ -360,6 +360,15 @@ static void qemu_send_responses(void* op
|
@@ -358,6 +358,15 @@ static void qemu_send_responses(void* op
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -18,7 +18,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
* Callback function for the IO message pipe. Reads requests from the ring
|
* Callback function for the IO message pipe. Reads requests from the ring
|
||||||
* and processes them (call qemu read/write functions).
|
* and processes them (call qemu read/write functions).
|
||||||
*
|
*
|
||||||
@@ -378,6 +387,7 @@ static void handle_blktap_iomsg(void* pr
|
@@ -376,6 +385,7 @@ static void handle_blktap_iomsg(void* pr
|
||||||
blkif_t *blkif = s->blkif;
|
blkif_t *blkif = s->blkif;
|
||||||
tapdev_info_t *info = s->ring_info;
|
tapdev_info_t *info = s->ring_info;
|
||||||
int page_size = getpagesize();
|
int page_size = getpagesize();
|
||||||
@ -26,7 +26,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
|
|
||||||
struct aiocb_info *aiocb_info;
|
struct aiocb_info *aiocb_info;
|
||||||
|
|
||||||
@@ -410,7 +420,7 @@ static void handle_blktap_iomsg(void* pr
|
@@ -408,7 +418,7 @@ static void handle_blktap_iomsg(void* pr
|
||||||
|
|
||||||
/* Don't allow writes on readonly devices */
|
/* Don't allow writes on readonly devices */
|
||||||
if ((s->flags & TD_RDONLY) &&
|
if ((s->flags & TD_RDONLY) &&
|
||||||
@ -35,7 +35,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
blkif->pending_list[idx].status = BLKIF_RSP_ERROR;
|
blkif->pending_list[idx].status = BLKIF_RSP_ERROR;
|
||||||
goto send_response;
|
goto send_response;
|
||||||
}
|
}
|
||||||
@@ -431,7 +441,7 @@ static void handle_blktap_iomsg(void* pr
|
@@ -429,7 +439,7 @@ static void handle_blktap_iomsg(void* pr
|
||||||
DPRINTF("Sector request failed:\n");
|
DPRINTF("Sector request failed:\n");
|
||||||
DPRINTF("%s request, idx [%d,%d] size [%llu], "
|
DPRINTF("%s request, idx [%d,%d] size [%llu], "
|
||||||
"sector [%llu,%llu]\n",
|
"sector [%llu,%llu]\n",
|
||||||
@ -44,7 +44,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
"WRITE" : "READ"),
|
"WRITE" : "READ"),
|
||||||
idx,i,
|
idx,i,
|
||||||
(long long unsigned)
|
(long long unsigned)
|
||||||
@@ -444,8 +454,14 @@ static void handle_blktap_iomsg(void* pr
|
@@ -442,8 +452,14 @@ static void handle_blktap_iomsg(void* pr
|
||||||
|
|
||||||
blkif->pending_list[idx].secs_pending += nsects;
|
blkif->pending_list[idx].secs_pending += nsects;
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
case BLKIF_OP_WRITE:
|
case BLKIF_OP_WRITE:
|
||||||
aiocb_info = malloc(sizeof(*aiocb_info));
|
aiocb_info = malloc(sizeof(*aiocb_info));
|
||||||
|
|
||||||
@@ -465,6 +481,10 @@ static void handle_blktap_iomsg(void* pr
|
@@ -463,6 +479,10 @@ static void handle_blktap_iomsg(void* pr
|
||||||
DPRINTF("ERROR: bdrv_write() == NULL\n");
|
DPRINTF("ERROR: bdrv_write() == NULL\n");
|
||||||
goto send_response;
|
goto send_response;
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
+++ xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
+++ xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
@@ -230,9 +230,10 @@ static int map_new_dev(struct td_state *
|
@@ -228,9 +228,10 @@ static int map_new_dev(struct td_state *
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
char* devname;
|
char* devname;
|
||||||
static int devnumber = 0;
|
static int devnumber = 0;
|
||||||
int i;
|
int i;
|
||||||
@@ -242,7 +243,22 @@ static int open_disk(struct td_state *s,
|
@@ -240,7 +241,22 @@ static int open_disk(struct td_state *s,
|
||||||
bs = bdrv_new(devname);
|
bs = bdrv_new(devname);
|
||||||
free(devname);
|
free(devname);
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
fprintf(stderr, "Could not open image file %s\n", path);
|
fprintf(stderr, "Could not open image file %s\n", path);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
@@ -525,7 +541,7 @@ static void handle_blktap_ctrlmsg(void*
|
@@ -519,7 +535,7 @@ static void handle_blktap_ctrlmsg(void*
|
||||||
s = state_init();
|
s = state_init();
|
||||||
|
|
||||||
/*Open file*/
|
/*Open file*/
|
||||||
|
@ -16,7 +16,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
+++ xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
+++ xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
@@ -268,6 +268,12 @@ static int open_disk(struct td_state *s,
|
@@ -266,6 +266,12 @@ static int open_disk(struct td_state *s,
|
||||||
s->size = bs->total_sectors;
|
s->size = bs->total_sectors;
|
||||||
s->sector_size = 512;
|
s->sector_size = 512;
|
||||||
|
|
||||||
|
@ -1,92 +1,3 @@
|
|||||||
Index: xen-4.0.1-testing/tools/blktap/drivers/blktapctrl.c
|
|
||||||
===================================================================
|
|
||||||
--- xen-4.0.1-testing.orig/tools/blktap/drivers/blktapctrl.c
|
|
||||||
+++ xen-4.0.1-testing/tools/blktap/drivers/blktapctrl.c
|
|
||||||
@@ -348,6 +348,7 @@ static int write_msg(int fd, int msgtype
|
|
||||||
msg_dev = (msg_newdev_t *)(buf + sizeof(msg_hdr_t));
|
|
||||||
msg_dev->devnum = blkif->minor;
|
|
||||||
msg_dev->domid = blkif->domid;
|
|
||||||
+ msg_dev->be_id = blkif->be_id;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
Index: xen-4.0.1-testing/tools/blktap/lib/blktaplib.h
|
|
||||||
===================================================================
|
|
||||||
--- xen-4.0.1-testing.orig/tools/blktap/lib/blktaplib.h
|
|
||||||
+++ xen-4.0.1-testing/tools/blktap/lib/blktaplib.h
|
|
||||||
@@ -189,6 +189,7 @@ typedef struct msg_hdr {
|
|
||||||
typedef struct msg_newdev {
|
|
||||||
uint8_t devnum;
|
|
||||||
uint16_t domid;
|
|
||||||
+ uint32_t be_id;
|
|
||||||
} msg_newdev_t;
|
|
||||||
|
|
||||||
typedef struct msg_pid {
|
|
||||||
Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|
||||||
===================================================================
|
|
||||||
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|
||||||
+++ xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|
||||||
@@ -67,6 +67,8 @@ int write_fd;
|
|
||||||
static pid_t process;
|
|
||||||
fd_list_entry_t *fd_start = NULL;
|
|
||||||
|
|
||||||
+extern char* get_snapshot_name(int devid);
|
|
||||||
+
|
|
||||||
static void handle_blktap_iomsg(void* private);
|
|
||||||
|
|
||||||
struct aiocb_info {
|
|
||||||
@@ -500,6 +502,10 @@ static void handle_blktap_ctrlmsg(void*
|
|
||||||
|
|
||||||
char buf[MSG_SIZE];
|
|
||||||
|
|
||||||
+#ifndef QEMU_TOOL
|
|
||||||
+ char *snapshot;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
length = read(read_fd, buf, MSG_SIZE);
|
|
||||||
|
|
||||||
if (length > 0 && length >= sizeof(msg_hdr_t))
|
|
||||||
@@ -555,7 +561,39 @@ static void handle_blktap_ctrlmsg(void*
|
|
||||||
if (s != NULL) {
|
|
||||||
ret = ((map_new_dev(s, msg_dev->devnum)
|
|
||||||
== msg_dev->devnum ? 0: -1));
|
|
||||||
- }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+#ifndef QEMU_TOOL
|
|
||||||
+ fprintf(stderr, "Reading snapshot name for %d\n", msg_dev->be_id);
|
|
||||||
+ snapshot = get_snapshot_name(msg_dev->be_id);
|
|
||||||
+ if (snapshot) {
|
|
||||||
+ fprintf(stderr, "Using snapshot %s\n", snapshot);
|
|
||||||
+ ret = bdrv_snapshot_goto(s->bs, snapshot);
|
|
||||||
+ switch (ret) {
|
|
||||||
+ case 0:
|
|
||||||
+ /* Success */
|
|
||||||
+ break;
|
|
||||||
+ case -ENOTSUP:
|
|
||||||
+ if (s->flags & TD_RDONLY) {
|
|
||||||
+ fprintf(stderr, "Snapshots not supported for "
|
|
||||||
+ "image format of a read-only image\n");
|
|
||||||
+ } else {
|
|
||||||
+ fprintf(stderr, "Snapshots not supported "
|
|
||||||
+ "for this image format");
|
|
||||||
+ ret = -1;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ case -ENOENT:
|
|
||||||
+ fprintf(stderr, "No such snapshot");
|
|
||||||
+ ret = -1;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ fprintf(stderr, "Could not load snapshot");
|
|
||||||
+ ret = -1;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
memset(buf, 0x00, MSG_SIZE);
|
|
||||||
msglen = sizeof(msg_hdr_t);
|
|
||||||
Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/xenstore.c
|
Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/xenstore.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/xenstore.c
|
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/xenstore.c
|
||||||
|
@ -18,11 +18,11 @@ Signed-off-by: Li Dongyang <lidongyang@novell.com>
|
|||||||
tools/ioemu-qemu-xen/hw/xen_blktap.c | 49 +++++++++++++++-----
|
tools/ioemu-qemu-xen/hw/xen_blktap.c | 49 +++++++++++++++-----
|
||||||
5 files changed, 213 insertions(+), 14 deletions(-)
|
5 files changed, 213 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
diff --git a/tools/blktap/drivers/blktapctrl.c b/tools/blktap/drivers/blktapctrl.c
|
Index: xen-4.0.1-testing/tools/blktap/drivers/blktapctrl.c
|
||||||
index bcc3152..8b58e3e 100644
|
===================================================================
|
||||||
--- a/tools/blktap/drivers/blktapctrl.c
|
--- xen-4.0.1-testing.orig/tools/blktap/drivers/blktapctrl.c
|
||||||
+++ b/tools/blktap/drivers/blktapctrl.c
|
+++ xen-4.0.1-testing/tools/blktap/drivers/blktapctrl.c
|
||||||
@@ -381,7 +381,22 @@ static int write_msg(int fd, int msgtype, void *ptr, void *ptr2)
|
@@ -380,7 +380,22 @@ static int write_msg(int fd, int msgtype
|
||||||
msg->cookie = blkif->cookie;
|
msg->cookie = blkif->cookie;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -46,7 +46,7 @@ index bcc3152..8b58e3e 100644
|
|||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -476,6 +491,12 @@ static int read_msg(int fd, int msgtype, void *ptr)
|
@@ -475,6 +490,12 @@ static int read_msg(int fd, int msgtype,
|
||||||
DPRINTF("\tPID: [%d]\n",blkif->tappid);
|
DPRINTF("\tPID: [%d]\n",blkif->tappid);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -59,7 +59,7 @@ index bcc3152..8b58e3e 100644
|
|||||||
default:
|
default:
|
||||||
DPRINTF("UNKNOWN MESSAGE TYPE RECEIVED\n");
|
DPRINTF("UNKNOWN MESSAGE TYPE RECEIVED\n");
|
||||||
ret = 0;
|
ret = 0;
|
||||||
@@ -758,6 +779,63 @@ static int unmap_blktapctrl(blkif_t *blkif)
|
@@ -757,6 +778,63 @@ static int unmap_blktapctrl(blkif_t *blk
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ index bcc3152..8b58e3e 100644
|
|||||||
int open_ctrl_socket(char *devname)
|
int open_ctrl_socket(char *devname)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@@ -854,6 +932,7 @@ int main(int argc, char *argv[])
|
@@ -853,6 +931,7 @@ int main(int argc, char *argv[])
|
||||||
register_new_blkif_hook(blktapctrl_new_blkif);
|
register_new_blkif_hook(blktapctrl_new_blkif);
|
||||||
register_new_devmap_hook(map_new_blktapctrl);
|
register_new_devmap_hook(map_new_blktapctrl);
|
||||||
register_new_unmap_hook(unmap_blktapctrl);
|
register_new_unmap_hook(unmap_blktapctrl);
|
||||||
@ -131,11 +131,11 @@ index bcc3152..8b58e3e 100644
|
|||||||
|
|
||||||
ctlfd = blktap_interface_open();
|
ctlfd = blktap_interface_open();
|
||||||
if (ctlfd < 0) {
|
if (ctlfd < 0) {
|
||||||
diff --git a/tools/blktap/lib/blkif.c b/tools/blktap/lib/blkif.c
|
Index: xen-4.0.1-testing/tools/blktap/lib/blkif.c
|
||||||
index 9a19596..11b63dc 100644
|
===================================================================
|
||||||
--- a/tools/blktap/lib/blkif.c
|
--- xen-4.0.1-testing.orig/tools/blktap/lib/blkif.c
|
||||||
+++ b/tools/blktap/lib/blkif.c
|
+++ xen-4.0.1-testing/tools/blktap/lib/blkif.c
|
||||||
@@ -89,6 +89,11 @@ void register_new_blkif_hook(int (*fn)(blkif_t *blkif))
|
@@ -89,6 +89,11 @@ void register_new_blkif_hook(int (*fn)(b
|
||||||
{
|
{
|
||||||
new_blkif_hook = fn;
|
new_blkif_hook = fn;
|
||||||
}
|
}
|
||||||
@ -172,10 +172,10 @@ index 9a19596..11b63dc 100644
|
|||||||
void __init_blkif(void)
|
void __init_blkif(void)
|
||||||
{
|
{
|
||||||
memset(blkif_hash, 0, sizeof(blkif_hash));
|
memset(blkif_hash, 0, sizeof(blkif_hash));
|
||||||
diff --git a/tools/blktap/lib/blktaplib.h b/tools/blktap/lib/blktaplib.h
|
Index: xen-4.0.1-testing/tools/blktap/lib/blktaplib.h
|
||||||
index 733b924..2a6a078 100644
|
===================================================================
|
||||||
--- a/tools/blktap/lib/blktaplib.h
|
--- xen-4.0.1-testing.orig/tools/blktap/lib/blktaplib.h
|
||||||
+++ b/tools/blktap/lib/blktaplib.h
|
+++ xen-4.0.1-testing/tools/blktap/lib/blktaplib.h
|
||||||
@@ -38,6 +38,7 @@
|
@@ -38,6 +38,7 @@
|
||||||
#include <xen/xen.h>
|
#include <xen/xen.h>
|
||||||
#include <xen/io/blkif.h>
|
#include <xen/io/blkif.h>
|
||||||
@ -198,7 +198,7 @@ index 733b924..2a6a078 100644
|
|||||||
void __init_blkif(void);
|
void __init_blkif(void);
|
||||||
|
|
||||||
typedef struct busy_state {
|
typedef struct busy_state {
|
||||||
@@ -210,6 +213,8 @@ typedef struct msg_pid {
|
@@ -209,6 +212,8 @@ typedef struct msg_pid {
|
||||||
#define CTLMSG_CLOSE_RSP 8
|
#define CTLMSG_CLOSE_RSP 8
|
||||||
#define CTLMSG_PID 9
|
#define CTLMSG_PID 9
|
||||||
#define CTLMSG_PID_RSP 10
|
#define CTLMSG_PID_RSP 10
|
||||||
@ -207,11 +207,11 @@ index 733b924..2a6a078 100644
|
|||||||
|
|
||||||
/* disk driver types */
|
/* disk driver types */
|
||||||
#define MAX_DISK_TYPES 20
|
#define MAX_DISK_TYPES 20
|
||||||
diff --git a/tools/blktap/lib/xenbus.c b/tools/blktap/lib/xenbus.c
|
Index: xen-4.0.1-testing/tools/blktap/lib/xenbus.c
|
||||||
index 53db3c8..96f75a5 100644
|
===================================================================
|
||||||
--- a/tools/blktap/lib/xenbus.c
|
--- xen-4.0.1-testing.orig/tools/blktap/lib/xenbus.c
|
||||||
+++ b/tools/blktap/lib/xenbus.c
|
+++ xen-4.0.1-testing/tools/blktap/lib/xenbus.c
|
||||||
@@ -318,6 +318,72 @@ static int check_image(struct xs_handle *h, struct backend_info *be,
|
@@ -318,6 +318,72 @@ static int check_image(struct xs_handle
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,7 +284,7 @@ index 53db3c8..96f75a5 100644
|
|||||||
static void ueblktap_setup(struct xs_handle *h, char *bepath)
|
static void ueblktap_setup(struct xs_handle *h, char *bepath)
|
||||||
{
|
{
|
||||||
struct backend_info *be;
|
struct backend_info *be;
|
||||||
@@ -512,6 +578,9 @@ static void ueblktap_probe(struct xs_handle *h, struct xenbus_watch *w,
|
@@ -512,6 +578,9 @@ static void ueblktap_probe(struct xs_han
|
||||||
|
|
||||||
be->backpath = bepath;
|
be->backpath = bepath;
|
||||||
be->frontpath = frontend;
|
be->frontpath = frontend;
|
||||||
@ -294,11 +294,11 @@ index 53db3c8..96f75a5 100644
|
|||||||
|
|
||||||
list_add(&be->list, &belist);
|
list_add(&be->list, &belist);
|
||||||
|
|
||||||
diff --git a/tools/ioemu-qemu-xen/hw/xen_blktap.c b/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
index c2236fd..c925283 100644
|
===================================================================
|
||||||
--- a/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
--- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
+++ b/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
+++ xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
||||||
@@ -83,8 +83,18 @@ static void unmap_disk(struct td_state *s)
|
@@ -81,8 +81,18 @@ static void unmap_disk(struct td_state *
|
||||||
{
|
{
|
||||||
tapdev_info_t *info = s->ring_info;
|
tapdev_info_t *info = s->ring_info;
|
||||||
fd_list_entry_t *entry;
|
fd_list_entry_t *entry;
|
||||||
@ -317,7 +317,7 @@ index c2236fd..c925283 100644
|
|||||||
|
|
||||||
if (info != NULL && info->mem > 0)
|
if (info != NULL && info->mem > 0)
|
||||||
munmap(info->mem, getpagesize() * BLKTAP_MMAP_REGION_SIZE);
|
munmap(info->mem, getpagesize() * BLKTAP_MMAP_REGION_SIZE);
|
||||||
@@ -244,18 +254,6 @@ static int open_disk(struct td_state *s, char *path, int readonly)
|
@@ -242,18 +252,6 @@ static int open_disk(struct td_state *s,
|
||||||
|
|
||||||
s->info = ((s->flags & TD_RDONLY) ? VDISK_READONLY : 0);
|
s->info = ((s->flags & TD_RDONLY) ? VDISK_READONLY : 0);
|
||||||
|
|
||||||
@ -336,7 +336,7 @@ index c2236fd..c925283 100644
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,7 +494,7 @@ static void handle_blktap_ctrlmsg(void* private)
|
@@ -494,7 +492,7 @@ static void handle_blktap_ctrlmsg(void*
|
||||||
msg_hdr_t *msg;
|
msg_hdr_t *msg;
|
||||||
msg_newdev_t *msg_dev;
|
msg_newdev_t *msg_dev;
|
||||||
msg_pid_t *msg_pid;
|
msg_pid_t *msg_pid;
|
||||||
@ -345,7 +345,7 @@ index c2236fd..c925283 100644
|
|||||||
struct td_state *s = NULL;
|
struct td_state *s = NULL;
|
||||||
fd_list_entry_t *entry;
|
fd_list_entry_t *entry;
|
||||||
|
|
||||||
@@ -622,6 +620,31 @@ static void handle_blktap_ctrlmsg(void* private)
|
@@ -584,6 +582,31 @@ static void handle_blktap_ctrlmsg(void*
|
||||||
len = write(write_fd, buf, msglen);
|
len = write(write_fd, buf, msglen);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -115,7 +115,16 @@ Index: xen-4.0.1-testing/tools/python/xen/xend/XendCheckpoint.py
|
|||||||
from xen.xend import XendDomain
|
from xen.xend import XendDomain
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -112,52 +112,61 @@ def save(fd, dominfo, network, live, dst
|
@@ -78,6 +78,8 @@ def save(fd, dominfo, network, live, dst
|
||||||
|
write_exact(fd, SIGNATURE, "could not write guest state file: signature")
|
||||||
|
|
||||||
|
sxprep = dominfo.sxpr()
|
||||||
|
+ if name:
|
||||||
|
+ sxprep.append(['snapshotname', name])
|
||||||
|
|
||||||
|
if node > -1:
|
||||||
|
insert_after(sxprep,'vcpus',['node', str(node)])
|
||||||
|
@@ -112,52 +114,61 @@ def save(fd, dominfo, network, live, dst
|
||||||
image_cfg = dominfo.info.get('image', {})
|
image_cfg = dominfo.info.get('image', {})
|
||||||
hvm = dominfo.info.is_hvm()
|
hvm = dominfo.info.is_hvm()
|
||||||
|
|
||||||
@ -223,7 +232,7 @@ Index: xen-4.0.1-testing/tools/python/xen/xend/XendCheckpoint.py
|
|||||||
|
|
||||||
if checkpoint:
|
if checkpoint:
|
||||||
dominfo.resumeDomain()
|
dominfo.resumeDomain()
|
||||||
@@ -221,6 +230,71 @@ def restore(xd, fd, dominfo = None, paus
|
@@ -221,6 +232,71 @@ def restore(xd, fd, dominfo = None, paus
|
||||||
if othervm is not None and othervm.domid is not None:
|
if othervm is not None and othervm.domid is not None:
|
||||||
raise VmError("Domain '%s' already exists with ID '%d'" % (domconfig["name_label"], othervm.domid))
|
raise VmError("Domain '%s' already exists with ID '%d'" % (domconfig["name_label"], othervm.domid))
|
||||||
|
|
||||||
@ -295,7 +304,7 @@ Index: xen-4.0.1-testing/tools/python/xen/xend/XendCheckpoint.py
|
|||||||
if dominfo:
|
if dominfo:
|
||||||
dominfo.resume()
|
dominfo.resume()
|
||||||
else:
|
else:
|
||||||
@@ -329,24 +403,7 @@ def restore(xd, fd, dominfo = None, paus
|
@@ -329,24 +405,7 @@ def restore(xd, fd, dominfo = None, paus
|
||||||
|
|
||||||
dominfo.completeRestore(handler.store_mfn, handler.console_mfn)
|
dominfo.completeRestore(handler.store_mfn, handler.console_mfn)
|
||||||
|
|
||||||
|
@ -27,8 +27,8 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
+int connected_disks = 0;
|
+int connected_disks = 0;
|
||||||
fd_list_entry_t *fd_start = NULL;
|
fd_list_entry_t *fd_start = NULL;
|
||||||
|
|
||||||
extern char* get_snapshot_name(int devid);
|
static void handle_blktap_iomsg(void* private);
|
||||||
@@ -545,6 +546,7 @@ static void handle_blktap_ctrlmsg(void*
|
@@ -539,6 +540,7 @@ static void handle_blktap_ctrlmsg(void*
|
||||||
|
|
||||||
/* Allocate the disk structs */
|
/* Allocate the disk structs */
|
||||||
s = state_init();
|
s = state_init();
|
||||||
@ -36,7 +36,7 @@ Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c
|
|||||||
|
|
||||||
/*Open file*/
|
/*Open file*/
|
||||||
if (s == NULL || open_disk(s, path, msg->drivertype, msg->readonly)) {
|
if (s == NULL || open_disk(s, path, msg->drivertype, msg->readonly)) {
|
||||||
@@ -627,7 +629,8 @@ static void handle_blktap_ctrlmsg(void*
|
@@ -589,7 +591,8 @@ static void handle_blktap_ctrlmsg(void*
|
||||||
case CTLMSG_CLOSE:
|
case CTLMSG_CLOSE:
|
||||||
s = get_state(msg->cookie);
|
s = get_state(msg->cookie);
|
||||||
if (s) unmap_disk(s);
|
if (s) unmap_disk(s);
|
||||||
|
21
xen.changes
21
xen.changes
@ -1,3 +1,24 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Nov 19 11:48:43 CST 2010 - lidongyang@novell.com
|
||||||
|
|
||||||
|
- bnc#651822 - xm snapshot-xxx scripts lead to an XP SP3 HVM domU
|
||||||
|
to chkdsk
|
||||||
|
snapshot-xend.patch
|
||||||
|
snapshot-ioemu-restore.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Nov 17 15:20:02 MST 2010 - carnold@novell.com
|
||||||
|
|
||||||
|
- bnc#651957 - Xen: vm-install failed to start
|
||||||
|
xenpaging.enabled.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Nov 17 10:35:52 CET 2010 - ohering@suse.de
|
||||||
|
|
||||||
|
- fate#310510 - fix xenpaging
|
||||||
|
xenpaging.signal_handling.patch
|
||||||
|
- unlink pagefile in signal handler
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Nov 12 09:48:14 MST 2010 - carnold@novell.com
|
Fri Nov 12 09:48:14 MST 2010 - carnold@novell.com
|
||||||
|
|
||||||
|
101
xen.spec
101
xen.spec
@ -25,35 +25,35 @@ ExclusiveArch: %ix86 x86_64
|
|||||||
%define changeset 21326
|
%define changeset 21326
|
||||||
%define xen_build_dir xen-4.0.1-testing
|
%define xen_build_dir xen-4.0.1-testing
|
||||||
%define with_kmp 1
|
%define with_kmp 1
|
||||||
BuildRequires: LibVNCServer-devel
|
BuildRequires: LibVNCServer-devel
|
||||||
BuildRequires: SDL-devel
|
BuildRequires: SDL-devel
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
BuildRequires: bin86
|
BuildRequires: bin86
|
||||||
BuildRequires: curl-devel
|
BuildRequires: curl-devel
|
||||||
BuildRequires: dev86
|
BuildRequires: dev86
|
||||||
BuildRequires: graphviz
|
BuildRequires: graphviz
|
||||||
BuildRequires: latex2html
|
BuildRequires: latex2html
|
||||||
BuildRequires: libjpeg-devel
|
BuildRequires: libjpeg-devel
|
||||||
BuildRequires: libxml2-devel
|
BuildRequires: libxml2-devel
|
||||||
BuildRequires: ncurses-devel
|
BuildRequires: ncurses-devel
|
||||||
BuildRequires: openssl
|
BuildRequires: openssl
|
||||||
BuildRequires: openssl-devel
|
BuildRequires: openssl-devel
|
||||||
BuildRequires: pciutils-devel
|
BuildRequires: pciutils-devel
|
||||||
BuildRequires: python-devel
|
BuildRequires: python-devel
|
||||||
BuildRequires: texinfo
|
BuildRequires: texinfo
|
||||||
BuildRequires: transfig
|
BuildRequires: transfig
|
||||||
%if %suse_version <= 1110
|
%if %suse_version <= 1110
|
||||||
BuildRequires: pmtools
|
BuildRequires: pmtools
|
||||||
%else
|
%else
|
||||||
BuildRequires: acpica
|
BuildRequires: acpica
|
||||||
%endif
|
%endif
|
||||||
%if %suse_version >= 1030
|
%if %suse_version >= 1030
|
||||||
BuildRequires: texlive
|
BuildRequires: texlive
|
||||||
BuildRequires: texlive-latex
|
BuildRequires: texlive-latex
|
||||||
%else
|
%else
|
||||||
BuildRequires: te_ams
|
BuildRequires: te_ams
|
||||||
BuildRequires: te_latex
|
BuildRequires: te_latex
|
||||||
BuildRequires: tetex
|
BuildRequires: tetex
|
||||||
%endif
|
%endif
|
||||||
%ifarch x86_64
|
%ifarch x86_64
|
||||||
BuildRequires: glibc-32bit glibc-devel-32bit
|
BuildRequires: glibc-32bit glibc-devel-32bit
|
||||||
@ -273,31 +273,32 @@ Patch704: hv_apic.patch
|
|||||||
# Build patch
|
# Build patch
|
||||||
Patch999: tmp_build.patch
|
Patch999: tmp_build.patch
|
||||||
# FATE 310510
|
# FATE 310510
|
||||||
Patch10001: xenpaging.tools_xenpaging_cleanup.patch
|
Patch10001: xenpaging.tools_xenpaging_cleanup.patch
|
||||||
Patch10002: xenpaging.pageout_policy.patch
|
Patch10002: xenpaging.pageout_policy.patch
|
||||||
Patch10003: xenpaging.xs_daemon_close.patch
|
Patch10003: xenpaging.xs_daemon_close.patch
|
||||||
Patch10004: xenpaging.get_paged_frame.patch
|
Patch10004: xenpaging.get_paged_frame.patch
|
||||||
Patch10005: xenpaging.makefile.patch
|
Patch10005: xenpaging.makefile.patch
|
||||||
Patch10010: xenpaging.policy_linear.patch
|
Patch10010: xenpaging.policy_linear.patch
|
||||||
Patch10011: xenpaging.pagefile.patch
|
Patch10011: xenpaging.pagefile.patch
|
||||||
Patch10012: xenpaging.xenpaging_init.patch
|
Patch10012: xenpaging.xenpaging_init.patch
|
||||||
Patch10013: xenpaging.mem_paging_tool_qemu_flush_cache.patch
|
Patch10013: xenpaging.mem_paging_tool_qemu_flush_cache.patch
|
||||||
Patch10014: xenpaging.machine_to_phys_mapping.patch
|
Patch10014: xenpaging.machine_to_phys_mapping.patch
|
||||||
Patch10015: xenpaging.populate_only_if_paged.patch
|
Patch10015: xenpaging.populate_only_if_paged.patch
|
||||||
Patch10017: xenpaging.autostart.patch
|
Patch10017: xenpaging.autostart.patch
|
||||||
Patch10018: xenpaging.signal_handling.patch
|
Patch10018: xenpaging.signal_handling.patch
|
||||||
Patch10019: xenpaging.MRU_SIZE.patch
|
Patch10019: xenpaging.MRU_SIZE.patch
|
||||||
Patch10020: xenpaging.guest_remove_page.patch
|
Patch10020: xenpaging.guest_remove_page.patch
|
||||||
Patch10021: xenpaging.mem_event_check_ring-free_requests.patch
|
Patch10021: xenpaging.mem_event_check_ring-free_requests.patch
|
||||||
Patch10022: xenpaging.blacklist.patch
|
Patch10022: xenpaging.blacklist.patch
|
||||||
Patch10023: xenpaging.autostart_delay.patch
|
Patch10023: xenpaging.autostart_delay.patch
|
||||||
Patch10024: xenpaging.page_already_populated.patch
|
Patch10024: xenpaging.page_already_populated.patch
|
||||||
Patch10025: xenpaging.notify_policy_only_once.patch
|
Patch10025: xenpaging.notify_policy_only_once.patch
|
||||||
Patch10026: xenpaging.num_pages_equal_max_pages.patch
|
Patch10026: xenpaging.num_pages_equal_max_pages.patch
|
||||||
Patch10027: xenpaging.p2m_mem_paging_populate_if_p2m_ram_paged.patch
|
Patch10027: xenpaging.p2m_mem_paging_populate_if_p2m_ram_paged.patch
|
||||||
Patch10028: xenpaging.HVMCOPY_gfn_paged_out.patch
|
Patch10028: xenpaging.HVMCOPY_gfn_paged_out.patch
|
||||||
Patch10029: xenpaging.optimize_p2m_mem_paging_populate.patch
|
Patch10029: xenpaging.optimize_p2m_mem_paging_populate.patch
|
||||||
Patch10040: xenpaging.doc.patch
|
Patch10030: xenpaging.enabled.patch
|
||||||
|
Patch10040: xenpaging.doc.patch
|
||||||
Url: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/
|
Url: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
#%define pysite %(python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib()")
|
#%define pysite %(python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib()")
|
||||||
@ -811,8 +812,10 @@ Authors:
|
|||||||
%patch10027 -p1
|
%patch10027 -p1
|
||||||
%patch10028 -p1
|
%patch10028 -p1
|
||||||
%patch10029 -p1
|
%patch10029 -p1
|
||||||
|
%patch10030 -p1
|
||||||
%patch10040 -p1
|
%patch10040 -p1
|
||||||
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
XEN_EXTRAVERSION=%version-%release
|
XEN_EXTRAVERSION=%version-%release
|
||||||
XEN_EXTRAVERSION=${XEN_EXTRAVERSION#%{xvers}}
|
XEN_EXTRAVERSION=${XEN_EXTRAVERSION#%{xvers}}
|
||||||
|
@ -232,7 +232,7 @@ Index: xen-4.0.1-testing/tools/python/xen/xend/XendCheckpoint.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- xen-4.0.1-testing.orig/tools/python/xen/xend/XendCheckpoint.py
|
--- xen-4.0.1-testing.orig/tools/python/xen/xend/XendCheckpoint.py
|
||||||
+++ xen-4.0.1-testing/tools/python/xen/xend/XendCheckpoint.py
|
+++ xen-4.0.1-testing/tools/python/xen/xend/XendCheckpoint.py
|
||||||
@@ -131,6 +131,7 @@ def save(fd, dominfo, network, live, dst
|
@@ -133,6 +133,7 @@ def save(fd, dominfo, network, live, dst
|
||||||
dominfo.shutdown('suspend')
|
dominfo.shutdown('suspend')
|
||||||
dominfo.waitForSuspend()
|
dominfo.waitForSuspend()
|
||||||
if line in ('suspend', 'suspended'):
|
if line in ('suspend', 'suspended'):
|
||||||
@ -240,7 +240,7 @@ Index: xen-4.0.1-testing/tools/python/xen/xend/XendCheckpoint.py
|
|||||||
dominfo.migrateDevices(network, dst, DEV_MIGRATE_STEP2,
|
dominfo.migrateDevices(network, dst, DEV_MIGRATE_STEP2,
|
||||||
domain_name)
|
domain_name)
|
||||||
log.info("Domain %d suspended.", dominfo.getDomid())
|
log.info("Domain %d suspended.", dominfo.getDomid())
|
||||||
@@ -408,6 +409,7 @@ def restore(xd, fd, dominfo = None, paus
|
@@ -410,6 +411,7 @@ def restore(xd, fd, dominfo = None, paus
|
||||||
if not paused:
|
if not paused:
|
||||||
dominfo.unpause()
|
dominfo.unpause()
|
||||||
|
|
||||||
|
@ -13,8 +13,8 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
|
|
||||||
---
|
---
|
||||||
xen/arch/x86/hvm/hvm.c | 4 ++++
|
xen/arch/x86/hvm/hvm.c | 4 ++++
|
||||||
xen/common/memory.c | 43 ++++++++++++++++++++++++++++++++++++++-----
|
xen/common/memory.c | 44 +++++++++++++++++++++++++++++++++++++++-----
|
||||||
2 files changed, 42 insertions(+), 5 deletions(-)
|
2 files changed, 43 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
--- xen-4.0.1-testing.orig/xen/arch/x86/hvm/hvm.c
|
--- xen-4.0.1-testing.orig/xen/arch/x86/hvm/hvm.c
|
||||||
+++ xen-4.0.1-testing/xen/arch/x86/hvm/hvm.c
|
+++ xen-4.0.1-testing/xen/arch/x86/hvm/hvm.c
|
||||||
@ -66,7 +66,7 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
{
|
{
|
||||||
struct page_info *page;
|
struct page_info *page;
|
||||||
unsigned long i, j;
|
unsigned long i, j;
|
||||||
+ unsigned long ctg_ret;
|
+ unsigned long cftg_ret;
|
||||||
xen_pfn_t gpfn, mfn;
|
xen_pfn_t gpfn, mfn;
|
||||||
struct domain *d = a->domain;
|
struct domain *d = a->domain;
|
||||||
|
|
||||||
@ -75,10 +75,10 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
}
|
}
|
||||||
|
|
||||||
- if ( unlikely(__copy_from_guest_offset(&gpfn, a->extent_list, i, 1)) )
|
- if ( unlikely(__copy_from_guest_offset(&gpfn, a->extent_list, i, 1)) )
|
||||||
+ j = __copy_from_guest_offset(&gpfn, a->extent_list, i, 1);
|
+ cftg_ret = __copy_from_guest_offset(&gpfn, a->extent_list, i, 1);
|
||||||
+ if ( unlikely(j) )
|
+ if ( unlikely(cftg_ret) )
|
||||||
+ {
|
+ {
|
||||||
+ if ( (long)j == -EAGAIN )
|
+ if ( (long)cftg_ret == -EAGAIN )
|
||||||
+ a->preempted = 1;
|
+ a->preempted = 1;
|
||||||
goto out;
|
goto out;
|
||||||
+ }
|
+ }
|
||||||
@ -90,36 +90,44 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
|
|
||||||
/* Inform the domain of the new page's machine address. */
|
/* Inform the domain of the new page's machine address. */
|
||||||
- if ( unlikely(__copy_to_guest_offset(a->extent_list, i, &mfn, 1)) )
|
- if ( unlikely(__copy_to_guest_offset(a->extent_list, i, &mfn, 1)) )
|
||||||
+ ctg_ret = __copy_to_guest_offset(a->extent_list, i, &mfn, 1);
|
+ cftg_ret = __copy_to_guest_offset(a->extent_list, i, &mfn, 1);
|
||||||
+ if ( unlikely(ctg_ret) )
|
+ if ( unlikely(cftg_ret) )
|
||||||
+ {
|
+ {
|
||||||
+ for ( j = 0; j < (1 << a->extent_order); j++ )
|
+ for ( j = 0; j < (1 << a->extent_order); j++ )
|
||||||
+ set_gpfn_from_mfn(mfn + j, INVALID_M2P_ENTRY);
|
+ set_gpfn_from_mfn(mfn + j, INVALID_M2P_ENTRY);
|
||||||
+ guest_physmap_remove_page(d, gpfn, mfn, a->extent_order);
|
+ guest_physmap_remove_page(d, gpfn, mfn, a->extent_order);
|
||||||
+ free_domheap_pages(page, a->extent_order);
|
+ free_domheap_pages(page, a->extent_order);
|
||||||
+ if ( (long)ctg_ret == -EAGAIN )
|
+ if ( (long)cftg_ret == -EAGAIN )
|
||||||
+ a->preempted = 1;
|
+ a->preempted = 1;
|
||||||
goto out;
|
goto out;
|
||||||
+ }
|
+ }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -226,8 +248,13 @@ static void decrease_reservation(struct
|
@@ -212,6 +234,7 @@ int guest_remove_page(struct domain *d,
|
||||||
|
static void decrease_reservation(struct memop_args *a)
|
||||||
|
{
|
||||||
|
unsigned long i, j;
|
||||||
|
+ unsigned long cfg_ret;
|
||||||
|
xen_pfn_t gmfn;
|
||||||
|
|
||||||
|
if ( !guest_handle_subrange_okay(a->extent_list, a->nr_done,
|
||||||
|
@@ -226,8 +249,13 @@ static void decrease_reservation(struct
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
- if ( unlikely(__copy_from_guest_offset(&gmfn, a->extent_list, i, 1)) )
|
- if ( unlikely(__copy_from_guest_offset(&gmfn, a->extent_list, i, 1)) )
|
||||||
+ j = __copy_from_guest_offset(&gmfn, a->extent_list, i, 1);
|
+ cfg_ret = __copy_from_guest_offset(&gmfn, a->extent_list, i, 1);
|
||||||
+ if ( unlikely(j) )
|
+ if ( unlikely(cfg_ret) )
|
||||||
+ {
|
+ {
|
||||||
+ if ( (long)j == -EAGAIN )
|
+ if ( (long)cfg_ret == -EAGAIN )
|
||||||
+ a->preempted = 1;
|
+ a->preempted = 1;
|
||||||
goto out;
|
goto out;
|
||||||
+ }
|
+ }
|
||||||
|
|
||||||
if ( tb_init_done )
|
if ( tb_init_done )
|
||||||
{
|
{
|
||||||
@@ -511,6 +538,7 @@ long do_memory_op(unsigned long cmd, XEN
|
@@ -511,6 +539,7 @@ long do_memory_op(unsigned long cmd, XEN
|
||||||
int rc, op;
|
int rc, op;
|
||||||
unsigned int address_bits;
|
unsigned int address_bits;
|
||||||
unsigned long start_extent;
|
unsigned long start_extent;
|
||||||
@ -127,7 +135,7 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
struct xen_memory_reservation reservation;
|
struct xen_memory_reservation reservation;
|
||||||
struct memop_args args;
|
struct memop_args args;
|
||||||
domid_t domid;
|
domid_t domid;
|
||||||
@@ -524,8 +552,13 @@ long do_memory_op(unsigned long cmd, XEN
|
@@ -524,8 +553,13 @@ long do_memory_op(unsigned long cmd, XEN
|
||||||
case XENMEM_populate_physmap:
|
case XENMEM_populate_physmap:
|
||||||
start_extent = cmd >> MEMOP_EXTENT_SHIFT;
|
start_extent = cmd >> MEMOP_EXTENT_SHIFT;
|
||||||
|
|
||||||
|
@ -9,6 +9,10 @@ TODO: parse config values like 42K, 42M, 42G, 42%
|
|||||||
Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
v2:
|
||||||
|
unlink logfile instead of truncating it.
|
||||||
|
allows hardlinking for further inspection
|
||||||
|
|
||||||
tools/examples/xmexample.hvm | 3 +
|
tools/examples/xmexample.hvm | 3 +
|
||||||
tools/python/README.XendConfig | 1
|
tools/python/README.XendConfig | 1
|
||||||
tools/python/README.sxpcfg | 1
|
tools/python/README.sxpcfg | 1
|
||||||
@ -19,8 +23,6 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
tools/python/xen/xm/xenapi_create.py | 1
|
tools/python/xen/xm/xenapi_create.py | 1
|
||||||
8 files changed, 111 insertions(+)
|
8 files changed, 111 insertions(+)
|
||||||
|
|
||||||
Index: xen-4.0.1-testing/tools/examples/xmexample.hvm
|
|
||||||
===================================================================
|
|
||||||
--- xen-4.0.1-testing.orig/tools/examples/xmexample.hvm
|
--- xen-4.0.1-testing.orig/tools/examples/xmexample.hvm
|
||||||
+++ xen-4.0.1-testing/tools/examples/xmexample.hvm
|
+++ xen-4.0.1-testing/tools/examples/xmexample.hvm
|
||||||
@@ -127,6 +127,9 @@ disk = [ 'file:/var/lib/xen/images/disk.
|
@@ -127,6 +127,9 @@ disk = [ 'file:/var/lib/xen/images/disk.
|
||||||
@ -33,8 +35,6 @@ Index: xen-4.0.1-testing/tools/examples/xmexample.hvm
|
|||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# boot on floppy (a), hard disk (c), Network (n) or CD-ROM (d)
|
# boot on floppy (a), hard disk (c), Network (n) or CD-ROM (d)
|
||||||
# default: hard disk, cd-rom, floppy
|
# default: hard disk, cd-rom, floppy
|
||||||
Index: xen-4.0.1-testing/tools/python/README.XendConfig
|
|
||||||
===================================================================
|
|
||||||
--- xen-4.0.1-testing.orig/tools/python/README.XendConfig
|
--- xen-4.0.1-testing.orig/tools/python/README.XendConfig
|
||||||
+++ xen-4.0.1-testing/tools/python/README.XendConfig
|
+++ xen-4.0.1-testing/tools/python/README.XendConfig
|
||||||
@@ -120,6 +120,7 @@ otherConfig
|
@@ -120,6 +120,7 @@ otherConfig
|
||||||
@ -45,8 +45,6 @@ Index: xen-4.0.1-testing/tools/python/README.XendConfig
|
|||||||
image.hvm.display
|
image.hvm.display
|
||||||
image.hvm.xauthority
|
image.hvm.xauthority
|
||||||
image.hvm.vncconsole
|
image.hvm.vncconsole
|
||||||
Index: xen-4.0.1-testing/tools/python/README.sxpcfg
|
|
||||||
===================================================================
|
|
||||||
--- xen-4.0.1-testing.orig/tools/python/README.sxpcfg
|
--- xen-4.0.1-testing.orig/tools/python/README.sxpcfg
|
||||||
+++ xen-4.0.1-testing/tools/python/README.sxpcfg
|
+++ xen-4.0.1-testing/tools/python/README.sxpcfg
|
||||||
@@ -51,6 +51,7 @@ image
|
@@ -51,6 +51,7 @@ image
|
||||||
@ -57,8 +55,6 @@ Index: xen-4.0.1-testing/tools/python/README.sxpcfg
|
|||||||
- display
|
- display
|
||||||
- xauthority
|
- xauthority
|
||||||
- vncconsole
|
- vncconsole
|
||||||
Index: xen-4.0.1-testing/tools/python/xen/xend/XendConfig.py
|
|
||||||
===================================================================
|
|
||||||
--- xen-4.0.1-testing.orig/tools/python/xen/xend/XendConfig.py
|
--- xen-4.0.1-testing.orig/tools/python/xen/xend/XendConfig.py
|
||||||
+++ xen-4.0.1-testing/tools/python/xen/xend/XendConfig.py
|
+++ xen-4.0.1-testing/tools/python/xen/xend/XendConfig.py
|
||||||
@@ -145,6 +145,7 @@ XENAPI_PLATFORM_CFG_TYPES = {
|
@@ -145,6 +145,7 @@ XENAPI_PLATFORM_CFG_TYPES = {
|
||||||
@ -78,8 +74,6 @@ Index: xen-4.0.1-testing/tools/python/xen/xend/XendConfig.py
|
|||||||
if 'timer_mode' not in self['platform']:
|
if 'timer_mode' not in self['platform']:
|
||||||
self['platform']['timer_mode'] = 1
|
self['platform']['timer_mode'] = 1
|
||||||
if 'viridian' not in self['platform']:
|
if 'viridian' not in self['platform']:
|
||||||
Index: xen-4.0.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
||||||
===================================================================
|
|
||||||
--- xen-4.0.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
--- xen-4.0.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
||||||
+++ xen-4.0.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
+++ xen-4.0.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
||||||
@@ -2442,6 +2442,7 @@ class XendDomainInfo:
|
@@ -2442,6 +2442,7 @@ class XendDomainInfo:
|
||||||
@ -102,8 +96,6 @@ Index: xen-4.0.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
|||||||
else:
|
else:
|
||||||
log.debug("No device model")
|
log.debug("No device model")
|
||||||
|
|
||||||
Index: xen-4.0.1-testing/tools/python/xen/xend/image.py
|
|
||||||
===================================================================
|
|
||||||
--- xen-4.0.1-testing.orig/tools/python/xen/xend/image.py
|
--- xen-4.0.1-testing.orig/tools/python/xen/xend/image.py
|
||||||
+++ xen-4.0.1-testing/tools/python/xen/xend/image.py
|
+++ xen-4.0.1-testing/tools/python/xen/xend/image.py
|
||||||
@@ -122,12 +122,14 @@ class ImageHandler:
|
@@ -122,12 +122,14 @@ class ImageHandler:
|
||||||
@ -217,8 +209,6 @@ Index: xen-4.0.1-testing/tools/python/xen/xend/image.py
|
|||||||
def createDeviceModel(self, restore = False):
|
def createDeviceModel(self, restore = False):
|
||||||
if self.device_model is None:
|
if self.device_model is None:
|
||||||
return
|
return
|
||||||
Index: xen-4.0.1-testing/tools/python/xen/xm/create.py
|
|
||||||
===================================================================
|
|
||||||
--- xen-4.0.1-testing.orig/tools/python/xen/xm/create.py
|
--- xen-4.0.1-testing.orig/tools/python/xen/xm/create.py
|
||||||
+++ xen-4.0.1-testing/tools/python/xen/xm/create.py
|
+++ xen-4.0.1-testing/tools/python/xen/xm/create.py
|
||||||
@@ -495,6 +495,10 @@ gopts.var('nfs_root', val="PATH",
|
@@ -495,6 +495,10 @@ gopts.var('nfs_root', val="PATH",
|
||||||
@ -240,8 +230,6 @@ Index: xen-4.0.1-testing/tools/python/xen/xm/create.py
|
|||||||
'device_model', 'display',
|
'device_model', 'display',
|
||||||
'fda', 'fdb',
|
'fda', 'fdb',
|
||||||
'gfx_passthru', 'guest_os_type',
|
'gfx_passthru', 'guest_os_type',
|
||||||
Index: xen-4.0.1-testing/tools/python/xen/xm/xenapi_create.py
|
|
||||||
===================================================================
|
|
||||||
--- xen-4.0.1-testing.orig/tools/python/xen/xm/xenapi_create.py
|
--- xen-4.0.1-testing.orig/tools/python/xen/xm/xenapi_create.py
|
||||||
+++ xen-4.0.1-testing/tools/python/xen/xm/xenapi_create.py
|
+++ xen-4.0.1-testing/tools/python/xen/xm/xenapi_create.py
|
||||||
@@ -1086,6 +1086,7 @@ class sxp2xml:
|
@@ -1086,6 +1086,7 @@ class sxp2xml:
|
||||||
|
36
xenpaging.enabled.patch
Normal file
36
xenpaging.enabled.patch
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
Index: xen-4.0.1-testing/tools/python/xen/xend/image.py
|
||||||
|
===================================================================
|
||||||
|
--- xen-4.0.1-testing.orig/tools/python/xen/xend/image.py
|
||||||
|
+++ xen-4.0.1-testing/tools/python/xen/xend/image.py
|
||||||
|
@@ -123,18 +123,19 @@ class ImageHandler:
|
||||||
|
|
||||||
|
self.device_model = vmConfig['platform'].get('device_model')
|
||||||
|
self.xenpaging = vmConfig['platform'].get('xenpaging')
|
||||||
|
- self.xenpaging_delay = xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay" % self.vm.info['name_label'])
|
||||||
|
- if self.xenpaging_delay == None:
|
||||||
|
- log.warn("XXX creating /local/domain/0/xenpaging/%s" % self.vm.info['name_label'])
|
||||||
|
- xstransact.Mkdir("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'])
|
||||||
|
- xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay', '7.0'))
|
||||||
|
- xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay_inc', '0.1'))
|
||||||
|
- xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay_use', '5'))
|
||||||
|
- xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay_used', '0'))
|
||||||
|
- self.xenpaging_delay = float(xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay" % self.vm.info['name_label']))
|
||||||
|
- self.xenpaging_delay_inc = float(xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay_inc" % self.vm.info['name_label']))
|
||||||
|
- self.xenpaging_delay_use = int(xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay_use" % self.vm.info['name_label']))
|
||||||
|
- self.xenpaging_delay_used = int(xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay_used" % self.vm.info['name_label']))
|
||||||
|
+ if self.xenpaging:
|
||||||
|
+ self.xenpaging_delay = xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay" % self.vm.info['name_label'])
|
||||||
|
+ if self.xenpaging_delay == None:
|
||||||
|
+ log.warn("XXX creating /local/domain/0/xenpaging/%s" % self.vm.info['name_label'])
|
||||||
|
+ xstransact.Mkdir("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'])
|
||||||
|
+ xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay', '7.0'))
|
||||||
|
+ xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay_inc', '0.1'))
|
||||||
|
+ xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay_use', '5'))
|
||||||
|
+ xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay_used', '0'))
|
||||||
|
+ self.xenpaging_delay = float(xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay" % self.vm.info['name_label']))
|
||||||
|
+ self.xenpaging_delay_inc = float(xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay_inc" % self.vm.info['name_label']))
|
||||||
|
+ self.xenpaging_delay_use = int(xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay_use" % self.vm.info['name_label']))
|
||||||
|
+ self.xenpaging_delay_used = int(xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay_used" % self.vm.info['name_label']))
|
||||||
|
|
||||||
|
self.display = vmConfig['platform'].get('display')
|
||||||
|
self.xauthority = vmConfig['platform'].get('xauthority')
|
@ -5,6 +5,9 @@ drop reference to the gfn.
|
|||||||
|
|
||||||
Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
||||||
---
|
---
|
||||||
|
v2:
|
||||||
|
resume dropped page to unpause vcpus
|
||||||
|
|
||||||
tools/xenpaging/xenpaging.c | 17 +++++++---
|
tools/xenpaging/xenpaging.c | 17 +++++++---
|
||||||
xen/arch/x86/mm/p2m.c | 65 +++++++++++++++++++++++++++++++----------
|
xen/arch/x86/mm/p2m.c | 65 +++++++++++++++++++++++++++++++----------
|
||||||
xen/common/memory.c | 6 +++
|
xen/common/memory.c | 6 +++
|
||||||
@ -14,7 +17,7 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
|
|
||||||
--- xen-4.0.1-testing.orig/tools/xenpaging/xenpaging.c
|
--- xen-4.0.1-testing.orig/tools/xenpaging/xenpaging.c
|
||||||
+++ xen-4.0.1-testing/tools/xenpaging/xenpaging.c
|
+++ xen-4.0.1-testing/tools/xenpaging/xenpaging.c
|
||||||
@@ -598,12 +598,19 @@ int main(int argc, char *argv[])
|
@@ -600,12 +600,19 @@ int main(int argc, char *argv[])
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,8 +115,8 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
- set_gpfn_from_mfn(mfn_x(mfn), rsp.gfn);
|
- set_gpfn_from_mfn(mfn_x(mfn), rsp.gfn);
|
||||||
- p2m_unlock(d->arch.p2m);
|
- p2m_unlock(d->arch.p2m);
|
||||||
- } else {
|
- } else {
|
||||||
- gdprintk(XENLOG_ERR, "invalid mfn %lx for gfn %lx p2mt %x\n",
|
- gdprintk(XENLOG_ERR, "invalid mfn %lx for gfn %lx p2mt %x flags %lx\n",
|
||||||
- mfn_x(mfn), rsp.gfn, p2mt);
|
- mfn_x(mfn), rsp.gfn, p2mt, (unsigned long)rsp.flags);
|
||||||
+ /* Fix p2m entry */
|
+ /* Fix p2m entry */
|
||||||
+ mfn = gfn_to_mfn(d, rsp.gfn, &p2mt);
|
+ mfn = gfn_to_mfn(d, rsp.gfn, &p2mt);
|
||||||
+ if (mfn_valid(mfn))
|
+ if (mfn_valid(mfn))
|
||||||
@ -123,8 +126,8 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
+ set_gpfn_from_mfn(mfn_x(mfn), rsp.gfn);
|
+ set_gpfn_from_mfn(mfn_x(mfn), rsp.gfn);
|
||||||
+ p2m_unlock(d->arch.p2m);
|
+ p2m_unlock(d->arch.p2m);
|
||||||
+ } else {
|
+ } else {
|
||||||
+ gdprintk(XENLOG_ERR, "invalid mfn %lx for gfn %lx p2mt %x\n",
|
+ gdprintk(XENLOG_ERR, "invalid mfn %lx for gfn %lx p2mt %x flags %lx\n",
|
||||||
+ mfn_x(mfn), rsp.gfn, p2mt);
|
+ mfn_x(mfn), rsp.gfn, p2mt, (unsigned long)rsp.flags);
|
||||||
+ }
|
+ }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,8 @@ passed gfn.
|
|||||||
Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
||||||
|
|
||||||
---
|
---
|
||||||
v2: check wether mfn is valid
|
v2:
|
||||||
|
call set_gpfn_from_mfn only if mfn is valid
|
||||||
xen/arch/x86/mm/p2m.c | 14 +++++++++++---
|
xen/arch/x86/mm/p2m.c | 14 +++++++++++---
|
||||||
1 file changed, 11 insertions(+), 3 deletions(-)
|
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
@ -54,8 +55,8 @@ v2: check wether mfn is valid
|
|||||||
+ set_gpfn_from_mfn(mfn_x(mfn), rsp.gfn);
|
+ set_gpfn_from_mfn(mfn_x(mfn), rsp.gfn);
|
||||||
+ p2m_unlock(d->arch.p2m);
|
+ p2m_unlock(d->arch.p2m);
|
||||||
+ } else {
|
+ } else {
|
||||||
+ gdprintk(XENLOG_ERR, "invalid mfn %lx for gfn %lx p2mt %x\n",
|
+ gdprintk(XENLOG_ERR, "invalid mfn %lx for gfn %lx p2mt %x flags %lx\n",
|
||||||
+ mfn_x(mfn), rsp.gfn, p2mt);
|
+ mfn_x(mfn), rsp.gfn, p2mt, (unsigned long)rsp.flags);
|
||||||
+ }
|
+ }
|
||||||
|
|
||||||
/* Unpause domain */
|
/* Unpause domain */
|
||||||
|
@ -6,8 +6,12 @@ Remove paging file on exit.
|
|||||||
Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
||||||
|
|
||||||
---
|
---
|
||||||
tools/xenpaging/xenpaging.c | 39 +++++++++++++++++++++++++++++++--------
|
v2:
|
||||||
1 file changed, 31 insertions(+), 8 deletions(-)
|
unlink pagefile in signal handler to avoid stale pagefiles if xenpaging is
|
||||||
|
stuck in some loop
|
||||||
|
|
||||||
|
tools/xenpaging/xenpaging.c | 42 +++++++++++++++++++++++++++++++++---------
|
||||||
|
1 file changed, 33 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
--- xen-4.0.1-testing.orig/tools/xenpaging/xenpaging.c
|
--- xen-4.0.1-testing.orig/tools/xenpaging/xenpaging.c
|
||||||
+++ xen-4.0.1-testing/tools/xenpaging/xenpaging.c
|
+++ xen-4.0.1-testing/tools/xenpaging/xenpaging.c
|
||||||
@ -19,19 +23,22 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
#include <xc_private.h>
|
#include <xc_private.h>
|
||||||
|
|
||||||
#include <xen/mem_event.h>
|
#include <xen/mem_event.h>
|
||||||
@@ -40,6 +41,11 @@
|
@@ -40,6 +41,14 @@
|
||||||
#define DPRINTF(...) ((void)0)
|
#define DPRINTF(...) ((void)0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
+static char filename[80];
|
||||||
+static int interrupted;
|
+static int interrupted;
|
||||||
+static void close_handler(int sig)
|
+static void close_handler(int sig)
|
||||||
+{
|
+{
|
||||||
+ interrupted = sig;
|
+ interrupted = sig;
|
||||||
|
+ if ( filename[0] )
|
||||||
|
+ unlink(filename);
|
||||||
+}
|
+}
|
||||||
|
|
||||||
static void *init_page(void)
|
static void *init_page(void)
|
||||||
{
|
{
|
||||||
@@ -244,7 +250,6 @@ int xenpaging_teardown(xenpaging_t *pagi
|
@@ -244,7 +253,6 @@ int xenpaging_teardown(xenpaging_t *pagi
|
||||||
if ( rc != 0 )
|
if ( rc != 0 )
|
||||||
{
|
{
|
||||||
ERROR("Error tearing down domain paging in xen");
|
ERROR("Error tearing down domain paging in xen");
|
||||||
@ -39,7 +46,7 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Unbind VIRQ */
|
/* Unbind VIRQ */
|
||||||
@@ -252,7 +257,6 @@ int xenpaging_teardown(xenpaging_t *pagi
|
@@ -252,7 +260,6 @@ int xenpaging_teardown(xenpaging_t *pagi
|
||||||
if ( rc != 0 )
|
if ( rc != 0 )
|
||||||
{
|
{
|
||||||
ERROR("Error unbinding event port");
|
ERROR("Error unbinding event port");
|
||||||
@ -47,7 +54,7 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
}
|
}
|
||||||
paging->mem_event.port = -1;
|
paging->mem_event.port = -1;
|
||||||
|
|
||||||
@@ -261,7 +265,6 @@ int xenpaging_teardown(xenpaging_t *pagi
|
@@ -261,7 +268,6 @@ int xenpaging_teardown(xenpaging_t *pagi
|
||||||
if ( rc != 0 )
|
if ( rc != 0 )
|
||||||
{
|
{
|
||||||
ERROR("Error closing event channel");
|
ERROR("Error closing event channel");
|
||||||
@ -55,7 +62,7 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
}
|
}
|
||||||
paging->mem_event.xce_handle = -1;
|
paging->mem_event.xce_handle = -1;
|
||||||
|
|
||||||
@@ -270,7 +273,6 @@ int xenpaging_teardown(xenpaging_t *pagi
|
@@ -270,7 +276,6 @@ int xenpaging_teardown(xenpaging_t *pagi
|
||||||
if ( rc != 0 )
|
if ( rc != 0 )
|
||||||
{
|
{
|
||||||
ERROR("Error closing connection to xen");
|
ERROR("Error closing connection to xen");
|
||||||
@ -63,7 +70,7 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
}
|
}
|
||||||
paging->xc_handle = -1;
|
paging->xc_handle = -1;
|
||||||
|
|
||||||
@@ -375,7 +377,7 @@ int xenpaging_evict_page(xenpaging_t *pa
|
@@ -375,7 +380,7 @@ int xenpaging_evict_page(xenpaging_t *pa
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,7 +79,7 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -455,6 +457,11 @@ static int evict_victim(xenpaging_t *pag
|
@@ -455,6 +460,11 @@ static int evict_victim(xenpaging_t *pag
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +91,7 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
ret = xc_mem_paging_nominate(paging->xc_handle,
|
ret = xc_mem_paging_nominate(paging->xc_handle,
|
||||||
paging->mem_event.domain_id, victim->gfn);
|
paging->mem_event.domain_id, victim->gfn);
|
||||||
if ( ret == 0 )
|
if ( ret == 0 )
|
||||||
@@ -479,6 +486,7 @@ static int evict_victim(xenpaging_t *pag
|
@@ -479,6 +489,7 @@ static int evict_victim(xenpaging_t *pag
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@ -92,7 +99,15 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
domid_t domain_id;
|
domid_t domain_id;
|
||||||
int num_pages;
|
int num_pages;
|
||||||
xenpaging_t *paging;
|
xenpaging_t *paging;
|
||||||
@@ -513,7 +521,7 @@ int main(int argc, char *argv[])
|
@@ -491,7 +502,6 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
|
int open_flags = O_CREAT | O_TRUNC | O_RDWR;
|
||||||
|
mode_t open_mode = S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR | S_IWGRP | S_IWOTH;
|
||||||
|
- char filename[80];
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
if ( argc != 3 )
|
||||||
|
@@ -513,7 +523,7 @@ int main(int argc, char *argv[])
|
||||||
if ( paging == NULL )
|
if ( paging == NULL )
|
||||||
{
|
{
|
||||||
ERROR("Error initialising paging");
|
ERROR("Error initialising paging");
|
||||||
@ -101,7 +116,7 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Open file */
|
/* Open file */
|
||||||
@@ -522,9 +530,18 @@ int main(int argc, char *argv[])
|
@@ -522,9 +532,18 @@ int main(int argc, char *argv[])
|
||||||
if ( fd < 0 )
|
if ( fd < 0 )
|
||||||
{
|
{
|
||||||
perror("failed to open file");
|
perror("failed to open file");
|
||||||
@ -121,7 +136,7 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
/* Evict pages */
|
/* Evict pages */
|
||||||
memset(victims, 0, sizeof(xenpaging_victim_t) * num_pages);
|
memset(victims, 0, sizeof(xenpaging_victim_t) * num_pages);
|
||||||
for ( i = 0; i < num_pages; i++ )
|
for ( i = 0; i < num_pages; i++ )
|
||||||
@@ -532,6 +549,8 @@ int main(int argc, char *argv[])
|
@@ -532,6 +551,8 @@ int main(int argc, char *argv[])
|
||||||
rc = evict_victim(paging, domain_id, &victims[i], fd, i);
|
rc = evict_victim(paging, domain_id, &victims[i], fd, i);
|
||||||
if ( rc == -ENOSPC )
|
if ( rc == -ENOSPC )
|
||||||
break;
|
break;
|
||||||
@ -130,7 +145,7 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
if ( i % 100 == 0 )
|
if ( i % 100 == 0 )
|
||||||
DPRINTF("%d pages evicted\n", i);
|
DPRINTF("%d pages evicted\n", i);
|
||||||
}
|
}
|
||||||
@@ -539,7 +558,7 @@ int main(int argc, char *argv[])
|
@@ -539,7 +560,7 @@ int main(int argc, char *argv[])
|
||||||
DPRINTF("pages evicted\n");
|
DPRINTF("pages evicted\n");
|
||||||
|
|
||||||
/* Swap pages in and out */
|
/* Swap pages in and out */
|
||||||
@ -139,19 +154,18 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
|||||||
{
|
{
|
||||||
/* Wait for Xen to signal that a page needs paged in */
|
/* Wait for Xen to signal that a page needs paged in */
|
||||||
rc = xc_wait_for_event_or_timeout(paging->mem_event.xce_handle, 100);
|
rc = xc_wait_for_event_or_timeout(paging->mem_event.xce_handle, 100);
|
||||||
@@ -630,8 +649,11 @@ int main(int argc, char *argv[])
|
@@ -630,8 +651,10 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+ DPRINTF("xenpaging got signal %d\n", interrupted);
|
+ DPRINTF("xenpaging got signal %d\n", interrupted);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
+ unlink(filename);
|
|
||||||
+ close(fd);
|
+ close(fd);
|
||||||
free(victims);
|
free(victims);
|
||||||
|
|
||||||
/* Tear down domain paging */
|
/* Tear down domain paging */
|
||||||
@@ -642,6 +664,7 @@ int main(int argc, char *argv[])
|
@@ -642,6 +665,7 @@ int main(int argc, char *argv[])
|
||||||
if ( rc == 0 )
|
if ( rc == 0 )
|
||||||
rc = rc1;
|
rc = rc1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user