|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
diff --git a/block-raw-posix.c b/block-raw-posix.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
index 2364175..085f38f 100644
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
--- a/block-raw-posix.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+++ b/block-raw-posix.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -55,6 +55,7 @@
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#include <sys/ioctl.h>
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#include <linux/cdrom.h>
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#include <linux/fd.h>
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#include <sys/mount.h>
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#endif
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#ifdef __FreeBSD__
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#include <sys/disk.h>
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -125,6 +126,10 @@ static int raw_open(BlockDriverState *bs, const char *filename, int flags)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
return ret;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
s->fd = fd;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#ifndef CONFIG_STUBDOM
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Invalidate buffer cache for this device. */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ ioctl(s->fd, BLKFLSBUF, 0);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
return 0;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -505,6 +510,10 @@ static void raw_close(BlockDriverState *bs)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
BDRVRawState *s = bs->opaque;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
if (s->fd >= 0) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#ifndef CONFIG_STUBDOM
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Invalidate buffer cache for this device. */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ ioctl(s->fd, BLKFLSBUF, 0);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
close(s->fd);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
s->fd = -1;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
diff --git a/hw/ide.c b/hw/ide.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
index dae6e7f..235f5f1 100644
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
--- a/hw/ide.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+++ b/hw/ide.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -484,6 +484,7 @@ typedef struct PCIIDEState {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
int type; /* see IDE_TYPE_xxx */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
} PCIIDEState;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static PCIIDEState *principal_ide_controller;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#if defined(__ia64__)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#include <xen/hvm/ioreq.h>
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -2778,6 +2779,47 @@ static void ide_reset(IDEState *s)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
s->media_changed = 0;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+/* Unplug all of the IDE hard disks, starting at index @start in the
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ table. */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static void _ide_unplug_harddisks(int start)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ IDEState *s;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ int i, j;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (!principal_ide_controller) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(stderr, "No principal controller?\n");
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ return;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ for (i = start; i < 4; i++) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ s = principal_ide_controller->ide_if + i;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (!s->bs)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ continue; /* drive not present */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (s->is_cdrom)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ continue; /* cdrom */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Is a hard disk, unplug it. */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ for (j = 0; j < nb_drives; j++)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (drives_table[j].bdrv == s->bs)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ drives_table[j].bdrv = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ bdrv_close(s->bs);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ s->bs = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ ide_reset(s);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+/* Unplug all hard disks except for the primary master (which will
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ almost always be the boot device). */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+void ide_unplug_aux_harddisks(void)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ _ide_unplug_harddisks(1);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+/* Unplug all hard disks, including the boot device. */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+void ide_unplug_harddisks(void)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ _ide_unplug_harddisks(0);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
struct partition {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
uint8_t boot_ind; /* 0x80 - active */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
uint8_t head; /* starting head */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -3290,6 +3332,9 @@ void pci_cmd646_ide_init(PCIBus *bus, BlockDriverState **hd_table,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
sizeof(PCIIDEState),
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
-1,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
NULL, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (principal_ide_controller)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ abort();
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ principal_ide_controller = d;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
d->type = IDE_TYPE_CMD646;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
pci_conf = d->dev.config;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
pci_conf[0x00] = 0x95; // CMD646
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -3419,6 +3464,9 @@ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
sizeof(PCIIDEState),
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
devfn,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
NULL, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (principal_ide_controller)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ abort();
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ principal_ide_controller = d;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
d->type = IDE_TYPE_PIIX3;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
pci_conf = d->dev.config;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
diff --git a/hw/pc.h b/hw/pc.h
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
index a78e039..3d46046 100644
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
--- a/hw/pc.h
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+++ b/hw/pc.h
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -146,6 +146,8 @@ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
qemu_irq *pic);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
void pci_piix4_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
qemu_irq *pic);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+void ide_unplug_harddisks(void);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+void ide_unplug_aux_harddisks(void);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
/* ne2000.c */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
diff --git a/hw/pci.c b/hw/pci.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
index 1de68fd..aace3a4 100644
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
--- a/hw/pci.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+++ b/hw/pci.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -26,6 +26,9 @@
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#include "console.h"
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#include "net.h"
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#include "exec-all.h"
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#include "qemu-xen.h"
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
//#define DEBUG_PCI
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
struct PCIBus {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -648,6 +651,46 @@ void pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+void pci_unplug_netifs(void)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ PCIBus *bus;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ PCIDevice *dev;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ PCIIORegion *region;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ int x;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ int i;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* We only support one PCI bus */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ for (bus = first_bus; bus; bus = NULL) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ for (x = 0; x < 256; x++) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ dev = bus->devices[x];
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (dev &&
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ dev->config[0xa] == 0 &&
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ dev->config[0xb] == 2) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Found a netif. Remove it from the bus. Note that
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ we don't free it here, since there could still be
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ references to it floating around. There are only
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ ever one or two structures leaked, and it's not
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ worth finding them all. */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ bus->devices[x] = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ for (i = 0; i < PCI_NUM_REGIONS; i++) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ region = &dev->io_regions[i];
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (region->addr == (uint32_t)-1 ||
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ region->size == 0)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ continue;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile, "region type %d at [%x,%x).\n",
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ region->type, region->addr,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ region->addr+region->size);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (region->type == PCI_ADDRESS_SPACE_IO) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ isa_unassign_ioport(region->addr, region->size);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ } else if (region->type == PCI_ADDRESS_SPACE_MEM) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ unregister_iomem(region->addr);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
typedef struct {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
PCIDevice dev;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
PCIBus *bus;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
diff --git a/hw/xen_platform.c b/hw/xen_platform.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
index 430e603..36df8f8 100644
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
--- a/hw/xen_platform.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+++ b/hw/xen_platform.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -24,12 +24,20 @@
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
*/
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#include "hw.h"
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#include "pc.h"
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#include "pci.h"
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#include "irq.h"
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#include "../qemu-xen.h"
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#include <assert.h>
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#include <xenguest.h>
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static int drivers_blacklisted;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static uint16_t driver_product_version;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static int throttling_disabled;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
extern FILE *logfile;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static char log_buffer[4096];
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static int log_buffer_off;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#define PFFLAG_ROM_LOCK 1 /* Sets whether ROM memory area is RW or RO */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -39,6 +47,88 @@ typedef struct PCIXenPlatformState
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
uint8_t platform_flags;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
} PCIXenPlatformState;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+/* We throttle access to dom0 syslog, to avoid DOS attacks. This is
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ modelled as a token bucket, with one token for every byte of log.
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ The bucket size is 128KB (->1024 lines of 128 bytes each) and
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ refills at 256B/s. It starts full. The guest is blocked if no
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ tokens are available when it tries to generate a log message. */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#define BUCKET_MAX_SIZE (128*1024)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#define BUCKET_FILL_RATE 256
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static void throttle(unsigned count)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ static unsigned available;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ static struct timespec last_refil;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ static int started;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ static int warned;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ struct timespec waiting_for, now;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ double delay;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ struct timespec ts;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (throttling_disabled)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ return;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (!started) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ clock_gettime(CLOCK_MONOTONIC, &last_refil);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ available = BUCKET_MAX_SIZE;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ started = 1;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (count > BUCKET_MAX_SIZE) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile, "tried to get %d tokens, but bucket size is %d\n",
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ BUCKET_MAX_SIZE, count);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ exit(1);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (available < count) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* The bucket is empty. Refil it */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* When will it be full enough to handle this request? */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ delay = (double)(count - available) / BUCKET_FILL_RATE;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ waiting_for = last_refil;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ waiting_for.tv_sec += delay;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ waiting_for.tv_nsec += (delay - (int)delay) * 1e9;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (waiting_for.tv_nsec >= 1000000000) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ waiting_for.tv_nsec -= 1000000000;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ waiting_for.tv_sec++;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* How long do we have to wait? (might be negative) */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ clock_gettime(CLOCK_MONOTONIC, &now;;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ ts.tv_sec = waiting_for.tv_sec - now.tv_sec;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ ts.tv_nsec = waiting_for.tv_nsec - now.tv_nsec;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (ts.tv_nsec < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ ts.tv_sec--;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ ts.tv_nsec += 1000000000;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Wait for it. */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (ts.tv_sec > 0 ||
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ (ts.tv_sec == 0 && ts.tv_nsec > 0)) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (!warned) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile, "throttling guest access to syslog");
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ warned = 1;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ while (nanosleep(&ts, &ts) < 0 && errno == EINTR)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ ;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Refil */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ clock_gettime(CLOCK_MONOTONIC, &now;;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ delay = (now.tv_sec - last_refil.tv_sec) +
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ (now.tv_nsec - last_refil.tv_nsec) * 1.0e-9;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ available += BUCKET_FILL_RATE * delay;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (available > BUCKET_MAX_SIZE)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ available = BUCKET_MAX_SIZE;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ last_refil = now;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ assert(available >= count);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ available -= count;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
static uint32_t xen_platform_ioport_readb(void *opaque, uint32_t addr)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
PCIXenPlatformState *s = opaque;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -66,6 +156,19 @@ static void xen_platform_ioport_writeb(void *opaque, uint32_t addr, uint32_t val
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
d->platform_flags = val & PFFLAG_ROM_LOCK;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ case 8:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (val == '\n' || log_buffer_off == sizeof(log_buffer) - 1) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Flush buffer */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ log_buffer[log_buffer_off] = 0;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ throttle(log_buffer_off);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile, "%s\n", log_buffer);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ log_buffer_off = 0;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ log_buffer[log_buffer_off++] = val;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
default:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -126,6 +229,116 @@ static void platform_mmio_map(PCIDevice *d, int region_num,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
cpu_register_physical_memory(addr, 0x1000000, mmio_io_addr);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#define UNPLUG_ALL_IDE_DISKS 1
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#define UNPLUG_ALL_NICS 2
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+#define UNPLUG_AUX_IDE_DISKS 4
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static void platform_fixed_ioport_write2(void *opaque, uint32_t addr, uint32_t val)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ switch (addr - 0x10) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ case 0:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Unplug devices. Value is a bitmask of which devices to
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ unplug, with bit 0 the IDE devices, bit 1 the network
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ devices, and bit 2 the non-primary-master IDE devices. */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (val & UNPLUG_ALL_IDE_DISKS)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ ide_unplug_harddisks();
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (val & UNPLUG_ALL_NICS) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ pci_unplug_netifs();
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ net_tap_shutdown_all();
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (val & UNPLUG_AUX_IDE_DISKS) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ ide_unplug_aux_harddisks();
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ case 2:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ switch (val) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ case 1:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile, "Citrix Windows PV drivers loaded in guest\n");
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ case 2:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile, "GPLPV drivers loaded in guest\n");
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ case 0:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile, "Guest claimed to be running PV product 0?\n");
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ default:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile, "Unknown PV product %d loaded in guest\n", val);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ driver_product_version = val;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static void platform_fixed_ioport_write4(void *opaque, uint32_t addr,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ uint32_t val)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ switch (addr - 0x10) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ case 0:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* PV driver version */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (driver_product_version == 0) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ "Drivers tried to set their version number (%d) before setting the product number?\n",
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ val);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ return;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile, "PV driver build %d\n", val);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (xenstore_pv_driver_build_blacklisted(driver_product_version,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ val)) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile, "Drivers are blacklisted!\n");
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ drivers_blacklisted = 1;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static void platform_fixed_ioport_write1(void *opaque, uint32_t addr, uint32_t val)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ switch (addr - 0x10) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ case 2:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Send bytes to syslog */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (val == '\n' || log_buffer_off == sizeof(log_buffer) - 1) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Flush buffer */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ log_buffer[log_buffer_off] = 0;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ throttle(log_buffer_off);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile, "%s\n", log_buffer);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ log_buffer_off = 0;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ log_buffer[log_buffer_off++] = val;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static uint32_t platform_fixed_ioport_read2(void *opaque, uint32_t addr)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ switch (addr - 0x10) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ case 0:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (drivers_blacklisted) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* The drivers will recognise this magic number and refuse
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ * to do anything. */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ return 0xd249;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Magic value so that you can identify the interface. */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ return 0x49d2;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ default:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ return 0xffff;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static uint32_t platform_fixed_ioport_read1(void *opaque, uint32_t addr)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ switch (addr - 0x10) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ case 2:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Version number */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ return 1;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ default:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ return 0xff;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
struct pci_config_header {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
uint16_t vendor_id;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
uint16_t device_id;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -185,6 +398,7 @@ void pci_xen_platform_init(PCIBus *bus)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
PCIXenPlatformState *d;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
struct pci_config_header *pch;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ struct stat stbuf;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
printf("Register xen platform.\n");
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
d = (PCIXenPlatformState *)pci_register_device(
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -216,4 +430,13 @@ void pci_xen_platform_init(PCIBus *bus)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
register_savevm("platform", 0, 2, xen_pci_save, xen_pci_load, d);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
printf("Done register platform.\n");
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ register_ioport_write(0x10, 16, 4, platform_fixed_ioport_write4, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ register_ioport_write(0x10, 16, 2, platform_fixed_ioport_write2, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ register_ioport_write(0x10, 16, 1, platform_fixed_ioport_write1, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ register_ioport_read(0x10, 16, 2, platform_fixed_ioport_read2, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ register_ioport_read(0x10, 16, 1, platform_fixed_ioport_read1, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (stat("/etc/disable-guest-log-throttle", &stbuf) == 0)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ throttling_disabled = 1;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
diff --git a/i386-dm/exec-dm.c b/i386-dm/exec-dm.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
index d511021..283f225 100644
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
--- a/i386-dm/exec-dm.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+++ b/i386-dm/exec-dm.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -267,7 +267,7 @@ void cpu_abort(CPUState *env, const char *fmt, ...)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
/* XXX: Simple implementation. Fix later */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#define MAX_MMIO 32
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
-struct mmio_space {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static struct mmio_space {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
target_phys_addr_t start;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
unsigned long size;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
unsigned long io_index;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -413,6 +413,17 @@ int iomem_index(target_phys_addr_t addr)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
return 0;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+void unregister_iomem(target_phys_addr_t start)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ int index = iomem_index(start);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (index) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(logfile, "squash iomem [%lx, %lx).\n", mmio[index].start,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ mmio[index].start + mmio[index].size);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ mmio[index].start = mmio[index].size = 0;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#if defined(__i386__) || defined(__x86_64__)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#define phys_ram_addr(x) (qemu_map_cache(x))
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#elif defined(__ia64__)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
diff --git a/qemu-xen.h b/qemu-xen.h
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
index 06d8ec9..86f646a 100644
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
--- a/qemu-xen.h
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+++ b/qemu-xen.h
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -23,8 +23,11 @@ void timeoffset_get(void);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
void pci_xen_platform_init(PCIBus *bus);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#endif
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
-
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+void ide_unplug_harddisks(void);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+void net_tap_shutdown_all(void);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+void pci_unplug_netifs(void);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
void destroy_hvm_domain(void);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+void unregister_iomem(target_phys_addr_t start);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#ifdef __ia64__
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
static inline void xc_domain_shutdown_hook(int xc_handle, uint32_t domid)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -69,4 +72,8 @@ int xenstore_unsubscribe_from_hotplug_status(struct xs_handle *handle,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
int xenstore_vm_write(int domid, char *key, char *val);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
char *xenstore_vm_read(int domid, char *key, unsigned int *len);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+int xenstore_pv_driver_build_blacklisted(uint16_t product_number,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ uint32_t build_nr);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#endif /*QEMU_XEN_H*/
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
diff --git a/vl.c b/vl.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
index 57b88f3..a6c7dff 100644
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
--- a/vl.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+++ b/vl.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -259,6 +259,20 @@ static int event_pending = 1;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#include "xen-vl-extra.c"
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+typedef struct IOHandlerRecord {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ int fd;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ IOCanRWHandler *fd_read_poll;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ IOHandler *fd_read;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ IOHandler *fd_write;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ int deleted;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ void *opaque;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* temporary data */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ struct pollfd *ufd;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ struct IOHandlerRecord *next;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+} IOHandlerRecord;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static IOHandlerRecord *first_io_handler;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
/***********************************************************/
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
/* x86 ISA bus support */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -4052,6 +4066,7 @@ void do_info_slirp(void)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
typedef struct TAPState {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
VLANClientState *vc;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
int fd;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ struct TAPState *next;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
char down_script[1024];
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
char script_arg[1024];
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
} TAPState;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -4089,6 +4104,34 @@ static void tap_send(void *opaque)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+static TAPState *head_net_tap;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+void net_tap_shutdown_all(void)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ struct IOHandlerRecord **pioh, *ioh;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ while (head_net_tap) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ pioh = &first_io_handler;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ for (;;) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ ioh = *pioh;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (ioh == NULL)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (ioh->fd == head_net_tap->fd) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ *pioh = ioh->next;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ qemu_free(ioh);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ pioh = &ioh->next;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (!ioh)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ fprintf(stderr,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ "warning: can't find iohandler for %d to close it properly.\n",
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ head_net_tap->fd);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ close(head_net_tap->fd);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ head_net_tap = head_net_tap->next;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
/* fd support */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
static TAPState *net_tap_fd_init(VLANState *vlan, int fd)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -4100,6 +4143,8 @@ static TAPState *net_tap_fd_init(VLANState *vlan, int fd)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
s->fd = fd;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ s->next = head_net_tap;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ head_net_tap = s;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
qemu_set_fd_handler(s->fd, tap_send, NULL, s);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
snprintf(s->vc->info_str, sizeof(s->vc->info_str), "tap: fd=%d", fd);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
return s;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -5662,20 +5707,6 @@ static void dumb_display_init(DisplayState *ds)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
#define MAX_IO_HANDLERS 64
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
-typedef struct IOHandlerRecord {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
- int fd;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
- IOCanRWHandler *fd_read_poll;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
- IOHandler *fd_read;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
- IOHandler *fd_write;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
- int deleted;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
- void *opaque;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
- /* temporary data */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
- struct pollfd *ufd;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
- struct IOHandlerRecord *next;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
-} IOHandlerRecord;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
-
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
-static IOHandlerRecord *first_io_handler;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
-
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
/* XXX: fd_read_poll should be suppressed, but an API change is
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
necessary in the character devices to suppress fd_can_read(). */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
int qemu_set_fd_handler2(int fd,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
diff --git a/xenstore.c b/xenstore.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
index dd487dd..d76e42b 100644
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
--- a/xenstore.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+++ b/xenstore.c
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
@@ -626,6 +626,34 @@ void xenstore_record_dm(char *subpath, char *state)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
free(path);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+int
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+xenstore_pv_driver_build_blacklisted(uint16_t product_nr,
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ uint32_t build_nr)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ char *buf = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ char *tmp;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ const char *product;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ switch (product_nr) {
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ case 1:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ product = "xensource-windows";
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ default:
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ /* Don't know what product this is -> we can't blacklist
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ * it. */
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (asprintf(&buf, "/mh/driver-blacklist/%s/%d", product, build_nr) < 0)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ tmp = xs_read(xsh, XBT_NULL, buf, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ free(tmp);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ free(buf);
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ if (tmp == NULL)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+ return 1;
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+}
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
+
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
void xenstore_record_dm_state(char *state)
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
{
|
|
![](https://seccdn.libravatar.org/avatar/c32ec1a119427418ae84009f1d6f7c38c7fa1842c4342d255c9a595caeb3bdee?s=16&d=retro) |
5b4649f |
xenstore_record_dm("state", state);
|