* [PATCH 02/11] early PV on HVM
@ 2010-05-10 14:20 Stefano Stabellini
2010-05-10 15:46 ` Konrad Rzeszutek Wilk
0 siblings, 1 reply; 4+ messages in thread
From: Stefano Stabellini @ 2010-05-10 14:20 UTC (permalink / raw)
To: xen-devel; +Cc: Stefano Stabellini, Yaozu (Eddie) Dong, Sheng Yang
From: Sheng Yang <sheng@linux.intel.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Sheng Yang <sheng@linux.intel.com>
Signed-off-by: Yaozu (Eddie) Dong <eddie.dong@intel.com>
---
arch/x86/include/asm/xen/hypervisor.h | 2 +
arch/x86/kernel/setup.c | 2 +
arch/x86/xen/enlighten.c | 87 +++++++++++++++++++++++++++++++++
drivers/input/xen-kbdfront.c | 2 +-
drivers/video/xen-fbfront.c | 2 +-
drivers/xen/xenbus/xenbus_probe.c | 14 ++++-
6 files changed, 104 insertions(+), 5 deletions(-)
diff --git a/arch/x86/include/asm/xen/hypervisor.h b/arch/x86/include/asm/xen/hypervisor.h
index d5b7e90..128bc14 100644
--- a/arch/x86/include/asm/xen/hypervisor.h
+++ b/arch/x86/include/asm/xen/hypervisor.h
@@ -45,8 +45,10 @@ enum xen_domain_type {
#ifdef CONFIG_XEN
extern enum xen_domain_type xen_domain_type;
+extern void xen_guest_init(void);
#else
#define xen_domain_type XEN_NATIVE
+#define xen_guest_init() do { } while (0)
#endif
#define xen_domain() (xen_domain_type != XEN_NATIVE)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 2a34f9c..cd38ca0 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -102,6 +102,7 @@
#include <asm/paravirt.h>
#include <asm/hypervisor.h>
+#include <asm/xen/hypervisor.h>
#include <asm/percpu.h>
#include <asm/topology.h>
@@ -1014,6 +1015,7 @@ void __init setup_arch(char **cmdline_p)
probe_nr_irqs_gsi();
kvm_guest_init();
+ xen_guest_init();
e820_reserve_resources();
e820_mark_nosave_regions(max_low_pfn);
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index dfbf70e..723f53c 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -32,6 +32,8 @@
#include <xen/interface/version.h>
#include <xen/interface/physdev.h>
#include <xen/interface/vcpu.h>
+#include <xen/interface/memory.h>
+#include <xen/interface/hvm/hvm_op.h>
#include <xen/features.h>
#include <xen/page.h>
#include <xen/hvc-console.h>
@@ -1189,3 +1191,88 @@ asmlinkage void __init xen_start_kernel(void)
x86_64_start_reservations((char *)__pa_symbol(&boot_params));
#endif
}
+
+static uint32_t xen_cpuid_base(void)
+{
+ uint32_t base, eax, ebx, ecx, edx;
+ char signature[13];
+
+ for (base = 0x40000000; base < 0x40010000; base += 0x100) {
+ cpuid(base, &eax, &ebx, &ecx, &edx);
+ *(uint32_t*)(signature + 0) = ebx;
+ *(uint32_t*)(signature + 4) = ecx;
+ *(uint32_t*)(signature + 8) = edx;
+ signature[12] = 0;
+
+ if (!strcmp("XenVMMXenVMM", signature) && ((eax - base) >= 2))
+ return base;
+ }
+
+ return 0;
+}
+
+static int init_hvm_pv_info(int *major, int *minor)
+{
+ uint32_t eax, ebx, ecx, edx, pages, msr, base;
+ u64 pfn;
+
+ base = xen_cpuid_base();
+ if (!base)
+ return -EINVAL;
+
+ cpuid(base + 1, &eax, &ebx, &ecx, &edx);
+
+ *major = eax >> 16;
+ *minor = eax & 0xffff;
+ printk(KERN_INFO "Xen version %d.%d.\n", *major, *minor);
+
+ cpuid(base + 2, &pages, &msr, &ecx, &edx);
+
+ pfn = __pa(hypercall_page);
+ wrmsr_safe(msr, (u32)pfn, (u32)(pfn >> 32));
+
+ xen_setup_features();
+
+ pv_info = xen_info;
+ pv_info.kernel_rpl = 0;
+
+ xen_domain_type = XEN_HVM_DOMAIN;
+
+ return 0;
+}
+
+static void __init init_shared_info(void)
+{
+ struct xen_add_to_physmap xatp;
+ struct shared_info *shared_info_page;
+
+ shared_info_page = (struct shared_info *) alloc_bootmem_pages(PAGE_SIZE);
+ xatp.domid = DOMID_SELF;
+ xatp.idx = 0;
+ xatp.space = XENMAPSPACE_shared_info;
+ xatp.gpfn = __pa(shared_info_page) >> PAGE_SHIFT;
+ if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp))
+ BUG();
+
+ HYPERVISOR_shared_info = (struct shared_info *)shared_info_page;
+
+ /* Don't do the full vcpu_info placement stuff until we have a
+ possible map and a non-dummy shared_info. */
+ per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0];
+}
+
+void __init xen_guest_init(void)
+{
+ int r;
+ int major, minor;
+
+ if (xen_pv_domain())
+ return;
+
+ r = init_hvm_pv_info(&major, &minor);
+ if (r < 0)
+ return;
+
+ init_shared_info();
+}
+
diff --git a/drivers/input/xen-kbdfront.c b/drivers/input/xen-kbdfront.c
index b115726..e1376e0 100644
--- a/drivers/input/xen-kbdfront.c
+++ b/drivers/input/xen-kbdfront.c
@@ -335,7 +335,7 @@ static struct xenbus_driver xenkbd_driver = {
static int __init xenkbd_init(void)
{
- if (!xen_domain())
+ if (!xen_domain() || xen_hvm_domain())
return -ENODEV;
/* Nothing to do if running in dom0. */
diff --git a/drivers/video/xen-fbfront.c b/drivers/video/xen-fbfront.c
index 54cd916..4b99913 100644
--- a/drivers/video/xen-fbfront.c
+++ b/drivers/video/xen-fbfront.c
@@ -680,7 +680,7 @@ static struct xenbus_driver xenfb_driver = {
static int __init xenfb_init(void)
{
- if (!xen_domain())
+ if (!xen_domain() || xen_hvm_domain())
return -ENODEV;
/* Nothing to do if running in dom0. */
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index d42e25d..0fa7ccf 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -53,6 +53,8 @@
#include <xen/events.h>
#include <xen/page.h>
+#include <xen/hvm.h>
+
#include "xenbus_comms.h"
#include "xenbus_probe.h"
@@ -803,10 +805,16 @@ static int __init xenbus_probe_init(void)
/* dom0 not yet supported */
} else {
xenstored_ready = 1;
- xen_store_evtchn = xen_start_info->store_evtchn;
- xen_store_mfn = xen_start_info->store_mfn;
+ if (xen_hvm_domain()) {
+ xen_store_evtchn = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN);
+ xen_store_mfn = hvm_get_parameter(HVM_PARAM_STORE_PFN);
+ xen_store_interface = ioremap(xen_store_mfn << PAGE_SHIFT, PAGE_SIZE);
+ } else {
+ xen_store_evtchn = xen_start_info->store_evtchn;
+ xen_store_mfn = xen_start_info->store_mfn;
+ xen_store_interface = mfn_to_virt(xen_store_mfn);
+ }
}
- xen_store_interface = mfn_to_virt(xen_store_mfn);
/* Initialize the interface to xenstore. */
err = xs_init();
--
1.5.4.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 02/11] early PV on HVM
2010-05-10 14:20 [PATCH 02/11] early PV on HVM Stefano Stabellini
@ 2010-05-10 15:46 ` Konrad Rzeszutek Wilk
2010-05-11 11:23 ` Stefano Stabellini
0 siblings, 1 reply; 4+ messages in thread
From: Konrad Rzeszutek Wilk @ 2010-05-10 15:46 UTC (permalink / raw)
To: Stefano Stabellini; +Cc: xen-devel, Yaozu (Eddie) Dong, Sheng Yang
On Mon, May 10, 2010 at 03:20:38PM +0100, Stefano Stabellini wrote:
> From: Sheng Yang <sheng@linux.intel.com>
>
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> Signed-off-by: Sheng Yang <sheng@linux.intel.com>
> Signed-off-by: Yaozu (Eddie) Dong <eddie.dong@intel.com>
> ---
> arch/x86/include/asm/xen/hypervisor.h | 2 +
> arch/x86/kernel/setup.c | 2 +
> arch/x86/xen/enlighten.c | 87 +++++++++++++++++++++++++++++++++
> drivers/input/xen-kbdfront.c | 2 +-
> drivers/video/xen-fbfront.c | 2 +-
> drivers/xen/xenbus/xenbus_probe.c | 14 ++++-
> 6 files changed, 104 insertions(+), 5 deletions(-)
>
> diff --git a/arch/x86/include/asm/xen/hypervisor.h b/arch/x86/include/asm/xen/hypervisor.h
> index d5b7e90..128bc14 100644
> --- a/arch/x86/include/asm/xen/hypervisor.h
> +++ b/arch/x86/include/asm/xen/hypervisor.h
> @@ -45,8 +45,10 @@ enum xen_domain_type {
>
> #ifdef CONFIG_XEN
> extern enum xen_domain_type xen_domain_type;
> +extern void xen_guest_init(void);
> #else
> #define xen_domain_type XEN_NATIVE
> +#define xen_guest_init() do { } while (0)
> #endif
>
> #define xen_domain() (xen_domain_type != XEN_NATIVE)
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index 2a34f9c..cd38ca0 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -102,6 +102,7 @@
>
> #include <asm/paravirt.h>
> #include <asm/hypervisor.h>
> +#include <asm/xen/hypervisor.h>
>
> #include <asm/percpu.h>
> #include <asm/topology.h>
> @@ -1014,6 +1015,7 @@ void __init setup_arch(char **cmdline_p)
> probe_nr_irqs_gsi();
>
> kvm_guest_init();
> + xen_guest_init();
Upstream has this new mechanism for detecting hypervisors with a fancy
data structure that makes '->detect' and other things. You might want to
take that under consideration as when you post this patch upstream
upstream they are going to ask why you aren't using it.
>
> e820_reserve_resources();
> e820_mark_nosave_regions(max_low_pfn);
> diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
> index dfbf70e..723f53c 100644
> --- a/arch/x86/xen/enlighten.c
> +++ b/arch/x86/xen/enlighten.c
> @@ -32,6 +32,8 @@
> #include <xen/interface/version.h>
> #include <xen/interface/physdev.h>
> #include <xen/interface/vcpu.h>
> +#include <xen/interface/memory.h>
> +#include <xen/interface/hvm/hvm_op.h>
> #include <xen/features.h>
> #include <xen/page.h>
> #include <xen/hvc-console.h>
> @@ -1189,3 +1191,88 @@ asmlinkage void __init xen_start_kernel(void)
> x86_64_start_reservations((char *)__pa_symbol(&boot_params));
> #endif
> }
> +
> +static uint32_t xen_cpuid_base(void)
> +{
> + uint32_t base, eax, ebx, ecx, edx;
> + char signature[13];
> +
> + for (base = 0x40000000; base < 0x40010000; base += 0x100) {
> + cpuid(base, &eax, &ebx, &ecx, &edx);
> + *(uint32_t*)(signature + 0) = ebx;
> + *(uint32_t*)(signature + 4) = ecx;
> + *(uint32_t*)(signature + 8) = edx;
> + signature[12] = 0;
> +
> + if (!strcmp("XenVMMXenVMM", signature) && ((eax - base) >= 2))
> + return base;
> + }
> +
> + return 0;
> +}
And this seems to be used by the VMWare/HyperV detection engine too.
Maybe make another patch that makes a generic cpuid function that can be
shared with VMWAre/HyperV/Xen?
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 02/11] early PV on HVM
2010-05-10 15:46 ` Konrad Rzeszutek Wilk
@ 2010-05-11 11:23 ` Stefano Stabellini
0 siblings, 0 replies; 4+ messages in thread
From: Stefano Stabellini @ 2010-05-11 11:23 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk
Cc: xen-devel@lists.xensource.com, Yaozu (Eddie) Dong, Sheng Yang,
Stefano Stabellini
On Mon, 10 May 2010, Konrad Rzeszutek Wilk wrote:
> > @@ -1014,6 +1015,7 @@ void __init setup_arch(char **cmdline_p)
> > probe_nr_irqs_gsi();
> >
> > kvm_guest_init();
> > + xen_guest_init();
>
> Upstream has this new mechanism for detecting hypervisors with a fancy
> data structure that makes '->detect' and other things. You might want to
> take that under consideration as when you post this patch upstream
> upstream they are going to ask why you aren't using it.
>
> > @@ -1189,3 +1191,88 @@ asmlinkage void __init xen_start_kernel(void)
> > x86_64_start_reservations((char *)__pa_symbol(&boot_params));
> > #endif
> > }
> > +
> > +static uint32_t xen_cpuid_base(void)
> > +{
> > + uint32_t base, eax, ebx, ecx, edx;
> > + char signature[13];
> > +
> > + for (base = 0x40000000; base < 0x40010000; base += 0x100) {
> > + cpuid(base, &eax, &ebx, &ecx, &edx);
> > + *(uint32_t*)(signature + 0) = ebx;
> > + *(uint32_t*)(signature + 4) = ecx;
> > + *(uint32_t*)(signature + 8) = edx;
> > + signature[12] = 0;
> > +
> > + if (!strcmp("XenVMMXenVMM", signature) && ((eax - base) >= 2))
> > + return base;
> > + }
> > +
> > + return 0;
> > +}
>
> And this seems to be used by the VMWare/HyperV detection engine too.
>
> Maybe make another patch that makes a generic cpuid function that can be
> shared with VMWAre/HyperV/Xen?
>
When I rebased to upstream before sending the series to LKML I'll
keep this in mind.
I am pretty sure I can at least avoid adding the call to xen_guest_init
in setup.c, using init_hypervisor_platform instead.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 02/11] early PV on HVM
2010-05-24 18:25 [PATCH 0 of 12] PV on HVM Xen Stefano Stabellini
@ 2010-05-24 18:27 ` Stefano Stabellini
0 siblings, 0 replies; 4+ messages in thread
From: Stefano Stabellini @ 2010-05-24 18:27 UTC (permalink / raw)
To: linux-kernel
Cc: xen-devel, Don Dutile, Stefano Stabellini, Jeremy Fitzhardinge,
Sheng Yang, Stefano Stabellini, Yaozu (Eddie) Dong
From: Sheng Yang <sheng@linux.intel.com>
Initialize basic pv on hvm features in xen_guest_init.
The hook in arch/x86/kernel/setup.c can easily be removed using the new
generic hypervisor independent initialization infrastructure present in
the linux-2.6-tip tree.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Sheng Yang <sheng@linux.intel.com>
Signed-off-by: Yaozu (Eddie) Dong <eddie.dong@intel.com>
---
arch/x86/kernel/setup.c | 2 +
arch/x86/xen/enlighten.c | 86 +++++++++++++++++++++++++++++++++++++
drivers/input/xen-kbdfront.c | 2 +-
drivers/video/xen-fbfront.c | 2 +-
drivers/xen/xenbus/xenbus_probe.c | 21 ++++++++-
include/xen/xen.h | 2 +
6 files changed, 110 insertions(+), 5 deletions(-)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index c4851ef..ae9b6cb 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -69,6 +69,7 @@
#include <linux/tboot.h>
#include <video/edid.h>
+#include <xen/xen.h>
#include <asm/mtrr.h>
#include <asm/apic.h>
@@ -1032,6 +1033,7 @@ void __init setup_arch(char **cmdline_p)
probe_nr_irqs_gsi();
kvm_guest_init();
+ xen_guest_init();
e820_reserve_resources();
e820_mark_nosave_regions(max_low_pfn);
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 65d8d79..c1f6545 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -35,6 +35,7 @@
#include <xen/interface/version.h>
#include <xen/interface/physdev.h>
#include <xen/interface/vcpu.h>
+#include <xen/interface/memory.h>
#include <xen/features.h>
#include <xen/page.h>
#include <xen/hvc-console.h>
@@ -56,6 +57,7 @@
#include <asm/tlbflush.h>
#include <asm/reboot.h>
#include <asm/stackprotector.h>
+#include <asm/hypervisor.h>
#include "xen-ops.h"
#include "mmu.h"
@@ -1206,3 +1208,87 @@ asmlinkage void __init xen_start_kernel(void)
x86_64_start_reservations((char *)__pa_symbol(&boot_params));
#endif
}
+
+static uint32_t xen_cpuid_base(void)
+{
+ uint32_t base, eax, ebx, ecx, edx;
+ char signature[13];
+
+ for (base = 0x40000000; base < 0x40010000; base += 0x100) {
+ cpuid(base, &eax, &ebx, &ecx, &edx);
+ *(uint32_t*)(signature + 0) = ebx;
+ *(uint32_t*)(signature + 4) = ecx;
+ *(uint32_t*)(signature + 8) = edx;
+ signature[12] = 0;
+
+ if (!strcmp("XenVMMXenVMM", signature) && ((eax - base) >= 2))
+ return base;
+ }
+
+ return 0;
+}
+
+static int init_hvm_pv_info(int *major, int *minor)
+{
+ uint32_t eax, ebx, ecx, edx, pages, msr, base;
+ u64 pfn;
+
+ base = xen_cpuid_base();
+ if (!base)
+ return -EINVAL;
+
+ cpuid(base + 1, &eax, &ebx, &ecx, &edx);
+
+ *major = eax >> 16;
+ *minor = eax & 0xffff;
+ printk(KERN_INFO "Xen version %d.%d.\n", *major, *minor);
+
+ cpuid(base + 2, &pages, &msr, &ecx, &edx);
+
+ pfn = __pa(hypercall_page);
+ wrmsr_safe(msr, (u32)pfn, (u32)(pfn >> 32));
+
+ xen_setup_features();
+
+ pv_info = xen_info;
+ pv_info.kernel_rpl = 0;
+
+ xen_domain_type = XEN_HVM_DOMAIN;
+
+ return 0;
+}
+
+static void __init init_shared_info(void)
+{
+ struct xen_add_to_physmap xatp;
+ struct shared_info *shared_info_page;
+
+ shared_info_page = (struct shared_info *) alloc_bootmem_pages(PAGE_SIZE);
+ xatp.domid = DOMID_SELF;
+ xatp.idx = 0;
+ xatp.space = XENMAPSPACE_shared_info;
+ xatp.gpfn = __pa(shared_info_page) >> PAGE_SHIFT;
+ if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp))
+ BUG();
+
+ HYPERVISOR_shared_info = (struct shared_info *)shared_info_page;
+
+ /* Don't do the full vcpu_info placement stuff until we have a
+ possible map and a non-dummy shared_info. */
+ per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0];
+}
+
+void __init xen_guest_init(void)
+{
+ int r;
+ int major, minor;
+
+ if (xen_pv_domain())
+ return;
+
+ r = init_hvm_pv_info(&major, &minor);
+ if (r < 0)
+ return;
+
+ init_shared_info();
+}
diff --git a/drivers/input/xen-kbdfront.c b/drivers/input/xen-kbdfront.c
index e140816..7451d78 100644
--- a/drivers/input/xen-kbdfront.c
+++ b/drivers/input/xen-kbdfront.c
@@ -339,7 +339,7 @@ static struct xenbus_driver xenkbd_driver = {
static int __init xenkbd_init(void)
{
- if (!xen_domain())
+ if (!xen_domain() || xen_hvm_domain())
return -ENODEV;
/* Nothing to do if running in dom0. */
diff --git a/drivers/video/xen-fbfront.c b/drivers/video/xen-fbfront.c
index fa97d3e..a105a19 100644
--- a/drivers/video/xen-fbfront.c
+++ b/drivers/video/xen-fbfront.c
@@ -684,7 +684,7 @@ static struct xenbus_driver xenfb_driver = {
static int __init xenfb_init(void)
{
- if (!xen_domain())
+ if (!xen_domain() || xen_hvm_domain())
return -ENODEV;
/* Nothing to do if running in dom0. */
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index 3479332..0b05b62 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -56,6 +56,8 @@
#include <xen/events.h>
#include <xen/page.h>
+#include <xen/hvm.h>
+
#include "xenbus_comms.h"
#include "xenbus_probe.h"
@@ -806,10 +808,23 @@ static int __init xenbus_probe_init(void)
/* dom0 not yet supported */
} else {
xenstored_ready = 1;
- xen_store_evtchn = xen_start_info->store_evtchn;
- xen_store_mfn = xen_start_info->store_mfn;
+ if (xen_hvm_domain()) {
+ uint64_t v = 0;
+ err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v);
+ if (err)
+ goto out_error;
+ xen_store_evtchn = (int)v;
+ err = hvm_get_parameter(HVM_PARAM_STORE_PFN, &v);
+ if (err)
+ goto out_error;
+ xen_store_mfn = (unsigned long)v;
+ xen_store_interface = ioremap(xen_store_mfn << PAGE_SHIFT, PAGE_SIZE);
+ } else {
+ xen_store_evtchn = xen_start_info->store_evtchn;
+ xen_store_mfn = xen_start_info->store_mfn;
+ xen_store_interface = mfn_to_virt(xen_store_mfn);
+ }
}
- xen_store_interface = mfn_to_virt(xen_store_mfn);
/* Initialize the interface to xenstore. */
err = xs_init();
diff --git a/include/xen/xen.h b/include/xen/xen.h
index a164024..cb8c48b 100644
--- a/include/xen/xen.h
+++ b/include/xen/xen.h
@@ -9,8 +9,10 @@ enum xen_domain_type {
#ifdef CONFIG_XEN
extern enum xen_domain_type xen_domain_type;
+extern void xen_guest_init(void);
#else
#define xen_domain_type XEN_NATIVE
+#define xen_guest_init() do { } while (0)
#endif
#define xen_domain() (xen_domain_type != XEN_NATIVE)
--
1.5.4.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-05-24 18:26 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-10 14:20 [PATCH 02/11] early PV on HVM Stefano Stabellini
2010-05-10 15:46 ` Konrad Rzeszutek Wilk
2010-05-11 11:23 ` Stefano Stabellini
-- strict thread matches above, loose matches on Subject: below --
2010-05-24 18:25 [PATCH 0 of 12] PV on HVM Xen Stefano Stabellini
2010-05-24 18:27 ` [PATCH 02/11] early PV on HVM Stefano Stabellini
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.