[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 1/3] cmdline_parse: Also pass bool_assert to OPT_CUSTOM so that parse_bool can be used correctly.



Based on:

commit 2fcb51bc7a4fcb7534265d7bb155c6ddf03952b8
Author: kfraser@xxxxxxxxxxxxxxxxxxxxx <kfraser@xxxxxxxxxxxxxxxxxxxxx>
Date:   Mon Jul 9 14:29:53 2007 +0100

    Also allow boolean cmdline params to be inverted in two other ways.

    Now, a standard boolean (e.g., watchdog) can be inverted in three
    ways:
     1. no-watchdog
     2. watchdog=no
     3. watchdog=off

    Stacked inversions cancel each other: no-watchdog=no turns on the
    watchdog.

bool_assert is needed to do stacked inversions with parse_bool.

Signed-off-by: Don Slutz <dslutz@xxxxxxxxxxx>
---
 xen/arch/arm/domain_build.c              |  2 +-
 xen/arch/x86/apic.c                      |  6 +++---
 xen/arch/x86/cpu/mcheck/mce.c            |  2 +-
 xen/arch/x86/domain_build.c              |  4 ++--
 xen/arch/x86/genapic/probe.c             |  2 +-
 xen/arch/x86/hvm/vpmu.c                  |  4 ++--
 xen/arch/x86/io_apic.c                   |  2 +-
 xen/arch/x86/irq.c                       |  4 ++--
 xen/arch/x86/microcode.c                 |  2 +-
 xen/arch/x86/nmi.c                       |  2 +-
 xen/arch/x86/numa.c                      |  4 ++--
 xen/arch/x86/oprofile/nmi_int.c          |  2 +-
 xen/arch/x86/setup.c                     |  4 ++--
 xen/arch/x86/shutdown.c                  |  2 +-
 xen/arch/x86/time.c                      |  2 +-
 xen/arch/x86/x86_64/mmconfig-shared.c    |  2 +-
 xen/common/core_parking.c                |  2 +-
 xen/common/domain.c                      |  2 +-
 xen/common/kernel.c                      |  4 ++--
 xen/common/kexec.c                       |  6 +++---
 xen/drivers/acpi/tables.c                |  2 +-
 xen/drivers/char/console.c               | 10 +++++-----
 xen/drivers/cpufreq/cpufreq.c            |  2 +-
 xen/drivers/passthrough/amd/iommu_acpi.c |  4 ++--
 xen/drivers/passthrough/iommu.c          |  4 ++--
 xen/drivers/passthrough/pci.c            |  4 ++--
 xen/drivers/video/vesa.c                 |  2 +-
 27 files changed, 44 insertions(+), 44 deletions(-)

diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index 23261e4..2be7a93 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -30,7 +30,7 @@ int dom0_11_mapping = 1;
 #define DOM0_MEM_DEFAULT 0x8000000 /* 128 MiB */
 static u64 __initdata dom0_mem = DOM0_MEM_DEFAULT;
 
-static void __init parse_dom0_mem(const char *s)
+static void __init parse_dom0_mem(const char *s, int bool_assert)
 {
     dom0_mem = parse_size_and_unit(s, &s);
     if ( dom0_mem == 0 )
diff --git a/xen/arch/x86/apic.c b/xen/arch/x86/apic.c
index bbcc0a1..e082ad1 100644
--- a/xen/arch/x86/apic.c
+++ b/xen/arch/x86/apic.c
@@ -809,20 +809,20 @@ int lapic_resume(void)
  * Original code written by Keir Fraser.
  */
 
-static void __init lapic_disable(char *str)
+static void __init lapic_disable(char *str, int bool_assert)
 {
     enable_local_apic = -1;
     setup_clear_cpu_cap(X86_FEATURE_APIC);
 }
 custom_param("nolapic", lapic_disable);
 
-static void __init lapic_enable(char *str)
+static void __init lapic_enable(char *str, int bool_assert)
 {
     enable_local_apic = 1;
 }
 custom_param("lapic", lapic_enable);
 
-static void __init apic_set_verbosity(char *str)
+static void __init apic_set_verbosity(char *str, int bool_assert)
 {
     if (strcmp("debug", str) == 0)
         apic_verbosity = APIC_DEBUG;
diff --git a/xen/arch/x86/cpu/mcheck/mce.c b/xen/arch/x86/cpu/mcheck/mce.c
index 812daf6..3d7b2e8 100644
--- a/xen/arch/x86/cpu/mcheck/mce.c
+++ b/xen/arch/x86/cpu/mcheck/mce.c
@@ -59,7 +59,7 @@ static int x86_mcerr(const char *msg, int err)
 #endif
 
 int mce_verbosity;
-static void __init mce_set_verbosity(char *str)
+static void __init mce_set_verbosity(char *str, int bool_assert)
 {
     if (strcmp("verbose", str) == 0)
         mce_verbosity = MCE_VERBOSE;
diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c
index d4473c1..c824623 100644
--- a/xen/arch/x86/domain_build.c
+++ b/xen/arch/x86/domain_build.c
@@ -68,7 +68,7 @@ static long __init parse_amt(const char *s, const char **ps)
     long pages = parse_size_and_unit((*s == '-') ? s+1 : s, ps) >> PAGE_SHIFT;
     return (*s == '-') ? -pages : pages;
 }
-static void __init parse_dom0_mem(const char *s)
+static void __init parse_dom0_mem(const char *s, int bool_assert)
 {
     do {
         if ( !strncmp(s, "min:", 4) )
@@ -86,7 +86,7 @@ custom_param("dom0_mem", parse_dom0_mem);
 static unsigned int __initdata opt_dom0_max_vcpus_min = 1;
 static unsigned int __initdata opt_dom0_max_vcpus_max = UINT_MAX;
 
-static void __init parse_dom0_max_vcpus(const char *s)
+static void __init parse_dom0_max_vcpus(const char *s, int bool_assert)
 {
     if (*s == '-')              /* -M */
         opt_dom0_max_vcpus_max = simple_strtoul(s + 1, &s, 0);
diff --git a/xen/arch/x86/genapic/probe.c b/xen/arch/x86/genapic/probe.c
index a5f2a24..35c8577 100644
--- a/xen/arch/x86/genapic/probe.c
+++ b/xen/arch/x86/genapic/probe.c
@@ -45,7 +45,7 @@ void __init generic_bigsmp_probe(void)
                }
 }
 
-static void __init genapic_apic_force(char *str)
+static void __init genapic_apic_force(char *str, int bool_assert)
 {
        int i;
        for (i = 0; apic_probe[i]; i++)
diff --git a/xen/arch/x86/hvm/vpmu.c b/xen/arch/x86/hvm/vpmu.c
index 63765fa..e02edcf 100644
--- a/xen/arch/x86/hvm/vpmu.c
+++ b/xen/arch/x86/hvm/vpmu.c
@@ -38,12 +38,12 @@
  * "vpmu=bts" : vpmu enabled and Intel BTS feature switched on.
  */
 static unsigned int __read_mostly opt_vpmu_enabled;
-static void parse_vpmu_param(char *s);
+static void parse_vpmu_param(char *s, int bool_assert);
 custom_param("vpmu", parse_vpmu_param);
 
 static DEFINE_PER_CPU(struct vcpu *, last_vcpu);
 
-static void __init parse_vpmu_param(char *s)
+static void __init parse_vpmu_param(char *s, int bool_assert)
 {
     switch ( parse_bool(s) )
     {
diff --git a/xen/arch/x86/io_apic.c b/xen/arch/x86/io_apic.c
index 4e6fe2b..a62f61b 100644
--- a/xen/arch/x86/io_apic.c
+++ b/xen/arch/x86/io_apic.c
@@ -1579,7 +1579,7 @@ static unsigned int startup_level_ioapic_irq(struct 
irq_desc *desc)
     return 0; /* don't check for pending */
 }
 
-static void __init setup_ioapic_ack(char *s)
+static void __init setup_ioapic_ack(char *s, int bool_assert)
 {
     if ( !strcmp(s, "old") )
     {
diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c
index dafd338..a514397 100644
--- a/xen/arch/x86/irq.c
+++ b/xen/arch/x86/irq.c
@@ -26,7 +26,7 @@
 #include <asm/mach-generic/mach_apic.h>
 #include <public/physdev.h>
 
-static void parse_irq_vector_map_param(char *s);
+static void parse_irq_vector_map_param(char *s, int bool_assert);
 
 /* opt_noirqbalance: If true, software IRQ balancing/affinity is disabled. */
 bool_t __read_mostly opt_noirqbalance = 0;
@@ -60,7 +60,7 @@ static struct timer irq_ratelimit_timer;
 static unsigned int __read_mostly irq_ratelimit_threshold = 10000;
 integer_param("irq_ratelimit", irq_ratelimit_threshold);
 
-static void __init parse_irq_vector_map_param(char *s)
+static void __init parse_irq_vector_map_param(char *s, int bool_assert)
 {
     char *ss;
 
diff --git a/xen/arch/x86/microcode.c b/xen/arch/x86/microcode.c
index 091d5d1..8619ae2 100644
--- a/xen/arch/x86/microcode.c
+++ b/xen/arch/x86/microcode.c
@@ -75,7 +75,7 @@ void __init microcode_set_module(unsigned int idx)
  * If the EFI has forced which of the multiboot payloads is to be used,
  * no parsing will be attempted.
  */
-static void __init parse_ucode(char *s)
+static void __init parse_ucode(char *s, int bool_assert)
 {
     if ( ucode_mod_forced ) /* Forced by EFI */
        return;
diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c
index c4427a6..09938fb 100644
--- a/xen/arch/x86/nmi.c
+++ b/xen/arch/x86/nmi.c
@@ -47,7 +47,7 @@ boolean_param("watchdog", opt_watchdog);
 
 /* opt_watchdog_timeout: Number of seconds to wait before panic. */
 static unsigned int opt_watchdog_timeout = 5;
-static void parse_watchdog_timeout(char * s)
+static void parse_watchdog_timeout(char * s, int bool_assert)
 {
     opt_watchdog_timeout = simple_strtoull(s, NULL, 0);
     opt_watchdog = !!opt_watchdog_timeout;
diff --git a/xen/arch/x86/numa.c b/xen/arch/x86/numa.c
index b141877..7bdb741 100644
--- a/xen/arch/x86/numa.c
+++ b/xen/arch/x86/numa.c
@@ -17,7 +17,7 @@
 #include <asm/acpi.h>
 #include <xen/sched.h>
 
-static int numa_setup(char *s);
+static int numa_setup(char *s, int bool_assert);
 custom_param("numa", numa_setup);
 
 #ifndef Dprintk
@@ -289,7 +289,7 @@ void __cpuinit numa_set_node(int cpu, int node)
 }
 
 /* [numa=off] */
-static __init int numa_setup(char *opt) 
+static __init int numa_setup(char *opt, int bool_assert)
 { 
        if (!strncmp(opt,"off",3))
                numa_off = 1;
diff --git a/xen/arch/x86/oprofile/nmi_int.c b/xen/arch/x86/oprofile/nmi_int.c
index eb12fcb..700e39c 100644
--- a/xen/arch/x86/oprofile/nmi_int.c
+++ b/xen/arch/x86/oprofile/nmi_int.c
@@ -323,7 +323,7 @@ static int __init p4_init(char ** cpu_type)
 
 
 static int force_arch_perfmon;
-static int force_cpu_type(const char *str)
+static int force_cpu_type(const char *str, int bool_assert)
 {
        if (!strcmp(str, "arch_perfmon")) {
                force_arch_perfmon = 1;
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index 599cf04..ec7328a 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -76,7 +76,7 @@ boolean_param("dom0pvh", opt_dom0pvh);
 /* "acpi=strict": Disables out-of-spec workarounds.                 */
 /* "acpi=ht":     Limit ACPI just to boot-time to enable HT.        */
 /* "acpi=noirq":  Disables ACPI interrupt routing.                  */
-static void parse_acpi_param(char *s);
+static void parse_acpi_param(char *s, int bool_assert);
 custom_param("acpi", parse_acpi_param);
 
 /* **** Linux config option: propagated to domain0. */
@@ -110,7 +110,7 @@ unsigned long __read_mostly mmu_cr4_features = 
XEN_MINIMAL_CR4;
 bool_t __initdata acpi_disabled;
 bool_t __initdata acpi_force;
 static char __initdata acpi_param[10] = "";
-static void __init parse_acpi_param(char *s)
+static void __init parse_acpi_param(char *s, int bool_assert)
 {
     /* Save the parameter so it can be propagated to domain0. */
     safe_strcpy(acpi_param, s);
diff --git a/xen/arch/x86/shutdown.c b/xen/arch/x86/shutdown.c
index 81dfadf..588d902 100644
--- a/xen/arch/x86/shutdown.c
+++ b/xen/arch/x86/shutdown.c
@@ -46,7 +46,7 @@ static int reboot_mode;
  * pci    Use the so-called "PCI reset register", CF9
  */
 static enum reboot_type reboot_type = BOOT_ACPI;
-static void __init set_reboot_type(char *str)
+static void __init set_reboot_type(char *str, int bool_assert)
 {
     for ( ; ; )
     {
diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c
index a4e1656..efe8ef0 100644
--- a/xen/arch/x86/time.c
+++ b/xen/arch/x86/time.c
@@ -1680,7 +1680,7 @@ struct tm wallclock_time(uint64_t *ns)
  * tsc=unstable: Override all tests; assume TSC is unreliable.
  * tsc=skewed: Assume TSCs are individually reliable, but skewed across CPUs.
  */
-static void __init tsc_parse(const char *s)
+static void __init tsc_parse(const char *s, int bool_assert)
 {
     if ( !strcmp(s, "unstable") )
     {
diff --git a/xen/arch/x86/x86_64/mmconfig-shared.c 
b/xen/arch/x86/x86_64/mmconfig-shared.c
index 742bc18..8fa38b4 100644
--- a/xen/arch/x86/x86_64/mmconfig-shared.c
+++ b/xen/arch/x86/x86_64/mmconfig-shared.c
@@ -29,7 +29,7 @@
 
 unsigned int pci_probe = PCI_PROBE_CONF1 | PCI_PROBE_MMCONF;
 
-static void __init parse_mmcfg(char *s)
+static void __init parse_mmcfg(char *s, int bool_assert)
 {
     char *ss;
 
diff --git a/xen/common/core_parking.c b/xen/common/core_parking.c
index 3190fb7..43c16cf 100644
--- a/xen/common/core_parking.c
+++ b/xen/common/core_parking.c
@@ -41,7 +41,7 @@ static enum core_parking_controller {
     PERFORMANCE_FIRST
 } core_parking_controller = POWER_FIRST;
 
-static void __init setup_core_parking_option(char *str)
+static void __init setup_core_parking_option(char *str, int bool_assert)
 {
     if ( !strcmp(str, "power") )
         core_parking_controller = POWER_FIRST;
diff --git a/xen/common/domain.c b/xen/common/domain.c
index d7a84cf..ac36d83 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -232,7 +232,7 @@ static int late_hwdom_init(struct domain *d)
 
 static unsigned int __read_mostly extra_dom0_irqs = 256;
 static unsigned int __read_mostly extra_domU_irqs = 32;
-static void __init parse_extra_guest_irqs(const char *s)
+static void __init parse_extra_guest_irqs(const char *s, int bool_assert)
 {
     if ( isdigit(*s) )
         extra_domU_irqs = simple_strtoul(s, &s, 0);
diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index 7e83353..0b1919b 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -105,7 +105,7 @@ void __init cmdline_parse(const char *cmdline)
                      !strncmp(param->name, opt, q + 1 - opt) )
                 {
                     optval[-1] = '=';
-                    ((void (*)(const char *))param->var)(q);
+                    ((void (*)(const char *, int))param->var)(q, bool_assert);
                     optval[-1] = '\0';
                 }
                 continue;
@@ -135,7 +135,7 @@ void __init cmdline_parse(const char *cmdline)
                     parse_size_and_unit(optval, NULL));
                 break;
             case OPT_CUSTOM:
-                ((void (*)(const char *))param->var)(optval);
+                ((void (*)(const char *, int))param->var)(optval, bool_assert);
                 break;
             default:
                 BUG();
diff --git a/xen/common/kexec.c b/xen/common/kexec.c
index 2239ee8..4afb358 100644
--- a/xen/common/kexec.c
+++ b/xen/common/kexec.c
@@ -96,7 +96,7 @@ static void *crash_heap_current = NULL, *crash_heap_end = 
NULL;
  *
  *   crashkernel=<size>[@<offset>]
  */
-static void __init parse_crashkernel(const char *str)
+static void __init parse_crashkernel(const char *str, int bool_assert)
 {
     const char *cur;
 
@@ -171,7 +171,7 @@ custom_param("crashkernel", parse_crashkernel);
  * - all will allocate additional structures such as domain and vcpu structs
  *       low so the crash kernel can perform an extended analysis of state.
  */
-static void __init parse_low_crashinfo(const char * str)
+static void __init parse_low_crashinfo(const char * str, int bool_assert)
 {
 
     if ( !strlen(str) )
@@ -197,7 +197,7 @@ custom_param("low_crashinfo", parse_low_crashinfo);
  *
  * <addr> will be rounded down to the nearest power of two.  Defaults to 64G
  */
-static void __init parse_crashinfo_maxaddr(const char * str)
+static void __init parse_crashinfo_maxaddr(const char * str, int bool_assert)
 {
     u64 addr;
 
diff --git a/xen/drivers/acpi/tables.c b/xen/drivers/acpi/tables.c
index 1beca79..d201f50 100644
--- a/xen/drivers/acpi/tables.c
+++ b/xen/drivers/acpi/tables.c
@@ -332,7 +332,7 @@ int __init acpi_table_init(void)
        return 0;
 }
 
-static int __init acpi_parse_apic_instance(char *str)
+static int __init acpi_parse_apic_instance(char *str, int bool_assert)
 {
 
        acpi_apic_instance = simple_strtoul(str, NULL, 0);
diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index 2f6c090..ec871c0 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -60,7 +60,7 @@ enum con_timestamp_mode
 
 static enum con_timestamp_mode __read_mostly opt_con_timestamp_mode = TSM_NONE;
 
-static void parse_console_timestamps(char *s);
+static void parse_console_timestamps(char *s, int bool_assert);
 custom_param("console_timestamps", parse_console_timestamps);
 
 /* conring_size: allows a large console ring than default (16kB). */
@@ -116,8 +116,8 @@ static int __read_mostly xenlog_guest_upper_thresh =
 static int __read_mostly xenlog_guest_lower_thresh =
     XENLOG_GUEST_LOWER_THRESHOLD;
 
-static void parse_loglvl(char *s);
-static void parse_guest_loglvl(char *s);
+static void parse_loglvl(char *s, int bool_assert);
+static void parse_guest_loglvl(char *s, int bool_assert);
 
 /*
  * <lvl> := none|error|warning|info|debug|all
@@ -158,12 +158,12 @@ static void __init _parse_loglvl(char *s, int *lower, int 
*upper)
         *upper = *lower;
 }
 
-static void __init parse_loglvl(char *s)
+static void __init parse_loglvl(char *s, int bool_assert)
 {
     _parse_loglvl(s, &xenlog_lower_thresh, &xenlog_upper_thresh);
 }
 
-static void __init parse_guest_loglvl(char *s)
+static void __init parse_guest_loglvl(char *s, int bool_assert)
 {
     _parse_loglvl(s, &xenlog_guest_lower_thresh, &xenlog_guest_upper_thresh);
 }
diff --git a/xen/drivers/cpufreq/cpufreq.c b/xen/drivers/cpufreq/cpufreq.c
index ab66884..fe9e08c 100644
--- a/xen/drivers/cpufreq/cpufreq.c
+++ b/xen/drivers/cpufreq/cpufreq.c
@@ -63,7 +63,7 @@ LIST_HEAD_READ_MOSTLY(cpufreq_governor_list);
 /* set xen as default cpufreq */
 enum cpufreq_controller cpufreq_controller = FREQCTL_xen;
 
-static void __init setup_cpufreq_option(char *str)
+static void __init setup_cpufreq_option(char *str, int bool_assert)
 {
     char *arg;
 
diff --git a/xen/drivers/passthrough/amd/iommu_acpi.c 
b/xen/drivers/passthrough/amd/iommu_acpi.c
index 5634eac..568e47f 100644
--- a/xen/drivers/passthrough/amd/iommu_acpi.c
+++ b/xen/drivers/passthrough/amd/iommu_acpi.c
@@ -636,7 +636,7 @@ static u16 __init parse_ivhd_device_extended_range(
 
 static DECLARE_BITMAP(ioapic_cmdline, ARRAY_SIZE(ioapic_sbdf)) __initdata;
 
-static void __init parse_ivrs_ioapic(char *str)
+static void __init parse_ivrs_ioapic(char *str, int bool_assert)
 {
     const char *s = str;
     unsigned long id;
@@ -657,7 +657,7 @@ static void __init parse_ivrs_ioapic(char *str)
 }
 custom_param("ivrs_ioapic[", parse_ivrs_ioapic);
 
-static void __init parse_ivrs_hpet(char *str)
+static void __init parse_ivrs_hpet(char *str, int bool_assert)
 {
     const char *s = str;
     unsigned long id;
diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c
index cc12735..2e04e47 100644
--- a/xen/drivers/passthrough/iommu.c
+++ b/xen/drivers/passthrough/iommu.c
@@ -23,7 +23,7 @@
 #include <xen/keyhandler.h>
 #include <xsm/xsm.h>
 
-static void parse_iommu_param(char *s);
+static void parse_iommu_param(char *s, int bool_assert);
 static void iommu_dump_p2m_table(unsigned char key);
 
 /*
@@ -67,7 +67,7 @@ static struct keyhandler iommu_p2m_table = {
     .desc = "dump iommu p2m table"
 };
 
-static void __init parse_iommu_param(char *s)
+static void __init parse_iommu_param(char *s, int bool_assert)
 {
     char *ss;
     int val;
diff --git a/xen/drivers/passthrough/pci.c b/xen/drivers/passthrough/pci.c
index 1eba833..afa9a1a 100644
--- a/xen/drivers/passthrough/pci.c
+++ b/xen/drivers/passthrough/pci.c
@@ -129,7 +129,7 @@ static struct phantom_dev {
 } phantom_devs[8];
 static unsigned int nr_phantom_devs;
 
-static void __init parse_phantom_dev(char *str) {
+static void __init parse_phantom_dev(char *str, int bool_assert) {
     const char *s = str;
     unsigned int seg, bus, slot;
     struct phantom_dev phantom;
@@ -169,7 +169,7 @@ static u16 __read_mostly bridge_ctl_mask;
  *   perr                       don't suppress parity errors (default)
  *   no-perr                    suppress parity errors
  */
-static void __init parse_pci_param(char *s)
+static void __init parse_pci_param(char *s, int bool_assert)
 {
     char *ss;
 
diff --git a/xen/drivers/video/vesa.c b/xen/drivers/video/vesa.c
index 575db62..5a591ae 100644
--- a/xen/drivers/video/vesa.c
+++ b/xen/drivers/video/vesa.c
@@ -30,7 +30,7 @@ static unsigned int vram_remap;
 integer_param("vesa-map", vram_remap);
 
 static int font_height;
-static void __init parse_font_height(const char *s)
+static void __init parse_font_height(const char *s, int bool_assert)
 {
     if ( simple_strtoul(s, &s, 10) == 8 && (*s++ == 'x') )
         font_height = simple_strtoul(s, &s, 10);
-- 
1.8.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.