* [PATCH v1 1/8]: PVH basic and hader file changes
@ 2012-09-21 19:15 Mukesh Rathor
2012-09-24 11:26 ` Stefano Stabellini
` (5 more replies)
0 siblings, 6 replies; 11+ messages in thread
From: Mukesh Rathor @ 2012-09-21 19:15 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk, Xen-devel@lists.xensource.com,
Ian Campbell, stefano.stabellini@eu.citrix.com
---
arch/x86/include/asm/xen/interface.h | 8 +++++++-
arch/x86/include/asm/xen/page.h | 3 +++
arch/x86/xen/irq.c | 5 ++++-
arch/x86/xen/p2m.c | 2 +-
drivers/xen/cpu_hotplug.c | 4 +++-
drivers/xen/events.c | 12 ++++++++----
drivers/xen/xenbus/xenbus_client.c | 2 +-
drivers/xen/xenbus/xenbus_probe.c | 6 +++++-
include/xen/interface/memory.h | 27 +++++++++++++++++++++++++++
include/xen/interface/physdev.h | 10 ++++++++++
10 files changed, 69 insertions(+), 10 deletions(-)
diff --git a/arch/x86/include/asm/xen/interface.h b/arch/x86/include/asm/xen/interface.h
index cbf0c9d..1d22131 100644
--- a/arch/x86/include/asm/xen/interface.h
+++ b/arch/x86/include/asm/xen/interface.h
@@ -136,7 +136,13 @@ struct vcpu_guest_context {
struct cpu_user_regs user_regs; /* User-level CPU registers */
struct trap_info trap_ctxt[256]; /* Virtual IDT */
unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents) */
- unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
+ union {
+ struct {
+ /* PV: GDT (machine frames, # ents).*/
+ unsigned long gdt_frames[16], gdt_ents;
+ };
+ unsigned long gdtaddr, gdtsz; /* PVH: GDTR addr and size */
+ };
unsigned long kernel_ss, kernel_sp; /* Virtual TSS (only SS1/SP1) */
/* NB. User pagetable on x86/64 is placed in ctrlreg[1]. */
unsigned long ctrlreg[8]; /* CR0-CR7 (control registers) */
diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h
index 93971e8..d1cfb96 100644
--- a/arch/x86/include/asm/xen/page.h
+++ b/arch/x86/include/asm/xen/page.h
@@ -158,6 +158,9 @@ static inline xpaddr_t machine_to_phys(xmaddr_t machine)
static inline unsigned long mfn_to_local_pfn(unsigned long mfn)
{
unsigned long pfn = mfn_to_pfn(mfn);
+
+ if (xen_feature(XENFEAT_auto_translated_physmap))
+ return mfn;
if (get_phys_to_machine(pfn) != mfn)
return -1; /* force !pfn_valid() */
return pfn;
diff --git a/arch/x86/xen/irq.c b/arch/x86/xen/irq.c
index 1573376..31959a7 100644
--- a/arch/x86/xen/irq.c
+++ b/arch/x86/xen/irq.c
@@ -5,6 +5,7 @@
#include <xen/interface/xen.h>
#include <xen/interface/sched.h>
#include <xen/interface/vcpu.h>
+#include <xen/features.h>
#include <asm/xen/hypercall.h>
#include <asm/xen/hypervisor.h>
@@ -128,6 +129,8 @@ static const struct pv_irq_ops xen_irq_ops __initconst = {
void __init xen_init_irq_ops(void)
{
- pv_irq_ops = xen_irq_ops;
+ /* For PVH we use default pv_irq_ops settings */
+ if (!xen_feature(XENFEAT_hvm_callback_vector))
+ pv_irq_ops = xen_irq_ops;
x86_init.irqs.intr_init = xen_init_IRQ;
}
diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
index 64effdc..a954f83 100644
--- a/arch/x86/xen/p2m.c
+++ b/arch/x86/xen/p2m.c
@@ -626,7 +626,7 @@ bool __set_phys_to_machine(unsigned long pfn, unsigned long mfn)
{
unsigned topidx, mididx, idx;
- if (unlikely(xen_feature(XENFEAT_auto_translated_physmap))) {
+ if (xen_feature(XENFEAT_auto_translated_physmap)) {
BUG_ON(pfn != mfn && mfn != INVALID_P2M_ENTRY);
return true;
}
diff --git a/drivers/xen/cpu_hotplug.c b/drivers/xen/cpu_hotplug.c
index 4dcfced..de6bcf9 100644
--- a/drivers/xen/cpu_hotplug.c
+++ b/drivers/xen/cpu_hotplug.c
@@ -2,6 +2,7 @@
#include <xen/xen.h>
#include <xen/xenbus.h>
+#include <xen/features.h>
#include <asm/xen/hypervisor.h>
#include <asm/cpu.h>
@@ -100,7 +101,8 @@ static int __init setup_vcpu_hotplug_event(void)
static struct notifier_block xsn_cpu = {
.notifier_call = setup_cpu_watcher };
- if (!xen_pv_domain())
+ /* PVH TBD/FIXME: future work */
+ if (!xen_pv_domain() || xen_feature(XENFEAT_auto_translated_physmap))
return -ENODEV;
register_xenstore_notifier(&xsn_cpu);
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index 7595581..f656791 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -1755,7 +1755,7 @@ int xen_set_callback_via(uint64_t via)
}
EXPORT_SYMBOL_GPL(xen_set_callback_via);
-#ifdef CONFIG_XEN_PVHVM
+
/* Vector callbacks are better than PCI interrupts to receive event
* channel notifications because we can receive vector callbacks on any
* vcpu and we don't need PCI support or APIC interactions. */
@@ -1779,9 +1779,6 @@ void xen_callback_vector(void)
alloc_intr_gate(XEN_HVM_EVTCHN_CALLBACK, xen_hvm_callback_vector);
}
}
-#else
-void xen_callback_vector(void) {}
-#endif
void __init xen_init_IRQ(void)
{
@@ -1814,6 +1811,13 @@ void __init xen_init_IRQ(void)
if (xen_initial_domain())
pci_xen_initial_domain();
+ if (xen_feature(XENFEAT_hvm_callback_vector)) {
+ xen_callback_vector();
+ return;
+ }
+
+ /* PVH: TBD/FIXME: debug and fix eio map to work with pvh */
+
pirq_eoi_map = (void *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
eoi_gmfn.gmfn = virt_to_mfn(pirq_eoi_map);
rc = HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_gmfn_v2, &eoi_gmfn);
diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c
index b3e146e..a81e66b 100644
--- a/drivers/xen/xenbus/xenbus_client.c
+++ b/drivers/xen/xenbus/xenbus_client.c
@@ -743,7 +743,7 @@ static const struct xenbus_ring_ops ring_ops_hvm = {
void __init xenbus_ring_ops_init(void)
{
- if (xen_pv_domain())
+ if (xen_pv_domain() && !xen_feature(XENFEAT_auto_translated_physmap))
ring_ops = &ring_ops_pv;
else
ring_ops = &ring_ops_hvm;
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index b793723..481dc72 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -749,7 +749,11 @@ static int __init xenbus_init(void)
if (err)
goto out_error;
}
- xen_store_interface = mfn_to_virt(xen_store_mfn);
+ if (xen_feature(XENFEAT_auto_translated_physmap))
+ /* mfn is actually a pfn */
+ xen_store_interface = __va(xen_store_mfn<<PAGE_SHIFT);
+ else
+ xen_store_interface = mfn_to_virt(xen_store_mfn);
}
/* Initialize the interface to xenstore. */
diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h
index eac3ce1..f150fa1c 100644
--- a/include/xen/interface/memory.h
+++ b/include/xen/interface/memory.h
@@ -163,11 +163,22 @@ struct xen_add_to_physmap {
/* Which domain to change the mapping for. */
domid_t domid;
+ union {
+ /* Number of pages to go through for gmfn_range */
+ uint16_t size;
+ /* IFF XENMAPSPACE_gmfn_foreign */
+ domid_t foreign_domid;
+ } u;
/* Source mapping space. */
#define XENMAPSPACE_shared_info 0 /* shared info page */
#define XENMAPSPACE_grant_table 1 /* grant table page */
+#define XENMAPSPACE_gmfn 2 /* GMFN */
+#define XENMAPSPACE_gmfn_range 3 /* GMFN range */
+#define XENMAPSPACE_gmfn_foreign 4 /* GMFN from another guest */
unsigned int space;
+#define XENMAPIDX_grant_table_status 0x80000000
+
/* Index into source mapping space. */
unsigned long idx;
@@ -234,4 +245,20 @@ DEFINE_GUEST_HANDLE_STRUCT(xen_memory_map);
* during a driver critical region.
*/
extern spinlock_t xen_reservation_lock;
+
+/*
+ * Unmaps the page appearing at a particular GPFN from the specified guest's
+ * pseudophysical address space.
+ * arg == addr of xen_remove_from_physmap_t.
+ */
+#define XENMEM_remove_from_physmap 15
+struct xen_remove_from_physmap {
+ /* Which domain to change the mapping for. */
+ domid_t domid;
+
+ /* GPFN of the current mapping of the page. */
+ unsigned long gpfn;
+};
+DEFINE_GUEST_HANDLE_STRUCT(xen_remove_from_physmap);
+
#endif /* __XEN_PUBLIC_MEMORY_H__ */
diff --git a/include/xen/interface/physdev.h b/include/xen/interface/physdev.h
index 9ce788d..80f792e 100644
--- a/include/xen/interface/physdev.h
+++ b/include/xen/interface/physdev.h
@@ -258,6 +258,16 @@ struct physdev_pci_device {
uint8_t devfn;
};
+#define PHYSDEVOP_pvh_map_iomem 29
+struct physdev_map_iomem {
+ /* IN */
+ uint64_t first_gfn;
+ uint64_t first_mfn;
+ uint32_t nr_mfns;
+ uint32_t add_mapping; /* 1 == add mapping; 0 == unmap */
+
+};
+
/*
* Notify that some PIRQ-bound event channels have been unmasked.
* ** This command is obsolete since interface version 0x00030202 and is **
--
1.7.2.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/8]: PVH basic and hader file changes
2012-09-21 19:15 [PATCH v1 1/8]: PVH basic and hader file changes Mukesh Rathor
@ 2012-09-24 11:26 ` Stefano Stabellini
2012-09-24 11:29 ` Ian Campbell
2012-09-24 18:19 ` Mukesh Rathor
2012-09-26 13:42 ` Ian Campbell
` (4 subsequent siblings)
5 siblings, 2 replies; 11+ messages in thread
From: Stefano Stabellini @ 2012-09-24 11:26 UTC (permalink / raw)
To: Mukesh Rathor
Cc: Xen-devel@lists.xensource.com, Ian Campbell, Stefano Stabellini,
Konrad Rzeszutek Wilk
On Fri, 21 Sep 2012, Mukesh Rathor wrote:
> ---
> arch/x86/include/asm/xen/interface.h | 8 +++++++-
> arch/x86/include/asm/xen/page.h | 3 +++
> arch/x86/xen/irq.c | 5 ++++-
> arch/x86/xen/p2m.c | 2 +-
> drivers/xen/cpu_hotplug.c | 4 +++-
> drivers/xen/events.c | 12 ++++++++----
> drivers/xen/xenbus/xenbus_client.c | 2 +-
> drivers/xen/xenbus/xenbus_probe.c | 6 +++++-
> include/xen/interface/memory.h | 27 +++++++++++++++++++++++++++
> include/xen/interface/physdev.h | 10 ++++++++++
> 10 files changed, 69 insertions(+), 10 deletions(-)
>
> diff --git a/arch/x86/include/asm/xen/interface.h b/arch/x86/include/asm/xen/interface.h
> index cbf0c9d..1d22131 100644
> --- a/arch/x86/include/asm/xen/interface.h
> +++ b/arch/x86/include/asm/xen/interface.h
> @@ -136,7 +136,13 @@ struct vcpu_guest_context {
> struct cpu_user_regs user_regs; /* User-level CPU registers */
> struct trap_info trap_ctxt[256]; /* Virtual IDT */
> unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents) */
> - unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
> + union {
> + struct {
> + /* PV: GDT (machine frames, # ents).*/
> + unsigned long gdt_frames[16], gdt_ents;
> + };
> + unsigned long gdtaddr, gdtsz; /* PVH: GDTR addr and size */
> + };
> unsigned long kernel_ss, kernel_sp; /* Virtual TSS (only SS1/SP1) */
> /* NB. User pagetable on x86/64 is placed in ctrlreg[1]. */
> unsigned long ctrlreg[8]; /* CR0-CR7 (control registers) */
I think I'll be fully able to understand what these are for only after I
read the Xen side patches...
> diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h
> index 93971e8..d1cfb96 100644
> --- a/arch/x86/include/asm/xen/page.h
> +++ b/arch/x86/include/asm/xen/page.h
> @@ -158,6 +158,9 @@ static inline xpaddr_t machine_to_phys(xmaddr_t machine)
> static inline unsigned long mfn_to_local_pfn(unsigned long mfn)
> {
> unsigned long pfn = mfn_to_pfn(mfn);
> +
> + if (xen_feature(XENFEAT_auto_translated_physmap))
> + return mfn;
> if (get_phys_to_machine(pfn) != mfn)
> return -1; /* force !pfn_valid() */
> return pfn;
> diff --git a/arch/x86/xen/irq.c b/arch/x86/xen/irq.c
> index 1573376..31959a7 100644
> --- a/arch/x86/xen/irq.c
> +++ b/arch/x86/xen/irq.c
> @@ -5,6 +5,7 @@
> #include <xen/interface/xen.h>
> #include <xen/interface/sched.h>
> #include <xen/interface/vcpu.h>
> +#include <xen/features.h>
>
> #include <asm/xen/hypercall.h>
> #include <asm/xen/hypervisor.h>
> @@ -128,6 +129,8 @@ static const struct pv_irq_ops xen_irq_ops __initconst = {
>
> void __init xen_init_irq_ops(void)
> {
> - pv_irq_ops = xen_irq_ops;
> + /* For PVH we use default pv_irq_ops settings */
> + if (!xen_feature(XENFEAT_hvm_callback_vector))
> + pv_irq_ops = xen_irq_ops;
> x86_init.irqs.intr_init = xen_init_IRQ;
> }
> diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
> index 64effdc..a954f83 100644
> --- a/arch/x86/xen/p2m.c
> +++ b/arch/x86/xen/p2m.c
> @@ -626,7 +626,7 @@ bool __set_phys_to_machine(unsigned long pfn, unsigned long mfn)
> {
> unsigned topidx, mididx, idx;
>
> - if (unlikely(xen_feature(XENFEAT_auto_translated_physmap))) {
> + if (xen_feature(XENFEAT_auto_translated_physmap)) {
> BUG_ON(pfn != mfn && mfn != INVALID_P2M_ENTRY);
> return true;
> }
> diff --git a/drivers/xen/cpu_hotplug.c b/drivers/xen/cpu_hotplug.c
> index 4dcfced..de6bcf9 100644
> --- a/drivers/xen/cpu_hotplug.c
> +++ b/drivers/xen/cpu_hotplug.c
> @@ -2,6 +2,7 @@
>
> #include <xen/xen.h>
> #include <xen/xenbus.h>
> +#include <xen/features.h>
>
> #include <asm/xen/hypervisor.h>
> #include <asm/cpu.h>
> @@ -100,7 +101,8 @@ static int __init setup_vcpu_hotplug_event(void)
> static struct notifier_block xsn_cpu = {
> .notifier_call = setup_cpu_watcher };
>
> - if (!xen_pv_domain())
> + /* PVH TBD/FIXME: future work */
> + if (!xen_pv_domain() || xen_feature(XENFEAT_auto_translated_physmap))
> return -ENODEV;
Didn't we say that a PVH domain is actually a pv guest?
In that case shouldn't the test
if (!xen_pv_domain())
be sufficient?
> register_xenstore_notifier(&xsn_cpu);
> diff --git a/drivers/xen/events.c b/drivers/xen/events.c
> index 7595581..f656791 100644
> --- a/drivers/xen/events.c
> +++ b/drivers/xen/events.c
> @@ -1755,7 +1755,7 @@ int xen_set_callback_via(uint64_t via)
> }
> EXPORT_SYMBOL_GPL(xen_set_callback_via);
>
> -#ifdef CONFIG_XEN_PVHVM
> +
> /* Vector callbacks are better than PCI interrupts to receive event
> * channel notifications because we can receive vector callbacks on any
> * vcpu and we don't need PCI support or APIC interactions. */
> @@ -1779,9 +1779,6 @@ void xen_callback_vector(void)
> alloc_intr_gate(XEN_HVM_EVTCHN_CALLBACK, xen_hvm_callback_vector);
> }
> }
> -#else
> -void xen_callback_vector(void) {}
> -#endif
>
> void __init xen_init_IRQ(void)
> {
> @@ -1814,6 +1811,13 @@ void __init xen_init_IRQ(void)
> if (xen_initial_domain())
> pci_xen_initial_domain();
>
> + if (xen_feature(XENFEAT_hvm_callback_vector)) {
> + xen_callback_vector();
> + return;
> + }
> +
> + /* PVH: TBD/FIXME: debug and fix eio map to work with pvh */
> +
> pirq_eoi_map = (void *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
> eoi_gmfn.gmfn = virt_to_mfn(pirq_eoi_map);
> rc = HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_gmfn_v2, &eoi_gmfn);
> diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c
> index b3e146e..a81e66b 100644
> --- a/drivers/xen/xenbus/xenbus_client.c
> +++ b/drivers/xen/xenbus/xenbus_client.c
> @@ -743,7 +743,7 @@ static const struct xenbus_ring_ops ring_ops_hvm = {
>
> void __init xenbus_ring_ops_init(void)
> {
> - if (xen_pv_domain())
> + if (xen_pv_domain() && !xen_feature(XENFEAT_auto_translated_physmap))
> ring_ops = &ring_ops_pv;
> else
> ring_ops = &ring_ops_hvm;
> diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
> index b793723..481dc72 100644
> --- a/drivers/xen/xenbus/xenbus_probe.c
> +++ b/drivers/xen/xenbus/xenbus_probe.c
> @@ -749,7 +749,11 @@ static int __init xenbus_init(void)
> if (err)
> goto out_error;
> }
> - xen_store_interface = mfn_to_virt(xen_store_mfn);
> + if (xen_feature(XENFEAT_auto_translated_physmap))
small code style issue here
> + /* mfn is actually a pfn */
> + xen_store_interface = __va(xen_store_mfn<<PAGE_SHIFT);
> + else
> + xen_store_interface = mfn_to_virt(xen_store_mfn);
> }
I think that mfn_to_virt should work for PVH too: mfn_to_virt is:
(__va(mfn_to_pfn(m) << PAGE_SHIFT))
and mfn_to_pfn just return mfn when XENFEAT_auto_translated_physmap is
set
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/8]: PVH basic and hader file changes
2012-09-24 11:26 ` Stefano Stabellini
@ 2012-09-24 11:29 ` Ian Campbell
2012-09-24 18:19 ` Mukesh Rathor
1 sibling, 0 replies; 11+ messages in thread
From: Ian Campbell @ 2012-09-24 11:29 UTC (permalink / raw)
To: Stefano Stabellini; +Cc: Xen-devel@lists.xensource.com, Konrad Rzeszutek Wilk
On Mon, 2012-09-24 at 12:26 +0100, Stefano Stabellini wrote:
> > diff --git a/arch/x86/include/asm/xen/interface.h b/arch/x86/include/asm/xen/interface.h
> > index cbf0c9d..1d22131 100644
> > --- a/arch/x86/include/asm/xen/interface.h
> > +++ b/arch/x86/include/asm/xen/interface.h
> > @@ -136,7 +136,13 @@ struct vcpu_guest_context {
> > struct cpu_user_regs user_regs; /* User-level CPU registers */
> > struct trap_info trap_ctxt[256]; /* Virtual IDT */
> > unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents) */
> > - unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
> > + union {
> > + struct {
> > + /* PV: GDT (machine frames, # ents).*/
> > + unsigned long gdt_frames[16], gdt_ents;
> > + };
> > + unsigned long gdtaddr, gdtsz; /* PVH: GDTR addr and size */
> > + };
> > unsigned long kernel_ss, kernel_sp; /* Virtual TSS (only SS1/SP1) */
> > /* NB. User pagetable on x86/64 is placed in ctrlreg[1]. */
> > unsigned long ctrlreg[8]; /* CR0-CR7 (control registers) */
>
> I think I'll be fully able to understand what these are for only after I
> read the Xen side patches...
Also won't this cause gdtaddr and gdtsz to share the same storage, since
they are immediately inside a union -- I suspect that isn't what was
wanted!
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/8]: PVH basic and hader file changes
2012-09-24 11:26 ` Stefano Stabellini
2012-09-24 11:29 ` Ian Campbell
@ 2012-09-24 18:19 ` Mukesh Rathor
1 sibling, 0 replies; 11+ messages in thread
From: Mukesh Rathor @ 2012-09-24 18:19 UTC (permalink / raw)
To: Stefano Stabellini
Cc: Xen-devel@lists.xensource.com, Ian Campbell,
Konrad Rzeszutek Wilk
On Mon, 24 Sep 2012 12:26:57 +0100
Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote:
> On Fri, 21 Sep 2012, Mukesh Rathor wrote:
> > ---
> > arch/x86/include/asm/xen/interface.h | 8 +++++++-
> > arch/x86/include/asm/xen/page.h | 3 +++
> > arch/x86/xen/irq.c | 5 ++++-
> > arch/x86/xen/p2m.c | 2 +-
> > drivers/xen/cpu_hotplug.c | 4 +++-
> > drivers/xen/events.c | 12 ++++++++----
> > drivers/xen/xenbus/xenbus_client.c | 2 +-
> > drivers/xen/xenbus/xenbus_probe.c | 6 +++++-
> > include/xen/interface/memory.h | 27
> > +++++++++++++++++++++++++++ include/xen/interface/physdev.h
> > | 10 ++++++++++ 10 files changed, 69 insertions(+), 10
> > deletions(-)
> >
> > diff --git a/arch/x86/include/asm/xen/interface.h
> > b/arch/x86/include/asm/xen/interface.h index cbf0c9d..1d22131 100644
> > --- a/arch/x86/include/asm/xen/interface.h
> > +++ b/arch/x86/include/asm/xen/interface.h
> > @@ -136,7 +136,13 @@ struct vcpu_guest_context {
> > struct cpu_user_regs user_regs; /* User-level CPU
> > registers */ struct trap_info trap_ctxt[256]; /* Virtual
> > IDT */ unsigned long ldt_base, ldt_ents; /*
> > LDT (linear address, # ents) */
> > - unsigned long gdt_frames[16], gdt_ents; /* GDT (machine
> > frames, # ents) */
> > + union {
> > + struct {
> > + /* PV: GDT (machine frames, # ents).*/
> > + unsigned long gdt_frames[16], gdt_ents;
> > + };
> > + unsigned long gdtaddr, gdtsz; /* PVH: GDTR addr
> > and size */
> > + };
> > unsigned long kernel_ss, kernel_sp; /* Virtual TSS (only
> > SS1/SP1) */ /* NB. User pagetable on x86/64 is placed in
> > ctrlreg[1]. */ unsigned long ctrlreg[8]; /* CR0-CR7
> > (control registers) */
>
> I think I'll be fully able to understand what these are for only
> after I read the Xen side patches...
When we are bringup up smp vcpu, we just need to send down gdtaddr and
gdt size for vcpu context. You had suggested doing it during the
code review, remember :). I had originally in xen. Anyways, earlier
I was just using gdt_frames[0] for addr and gdt_ents for size. But Ian
suggested I change it to union.
>
>
> > #include <xen/xenbus.h>
> > +#include <xen/features.h>
> >
> > #include <asm/xen/hypervisor.h>
> > #include <asm/cpu.h>
> > @@ -100,7 +101,8 @@ static int __init setup_vcpu_hotplug_event(void)
> > static struct notifier_block xsn_cpu = {
> > .notifier_call = setup_cpu_watcher };
> >
> > - if (!xen_pv_domain())
> > + /* PVH TBD/FIXME: future work */
> > + if (!xen_pv_domain() ||
> > xen_feature(XENFEAT_auto_translated_physmap)) return -ENODEV;
>
> Didn't we say that a PVH domain is actually a pv guest?
> In that case shouldn't the test
>
> if (!xen_pv_domain())
>
> be sufficient?
No, for HVM and PVH, we want to return -ENODEV.
>
> > register_xenstore_notifier(&xsn_cpu);
> > diff --git a/drivers/xen/events.c b/drivers/xen/events.c
> > index 7595581..f656791 100644
> > --- a/drivers/xen/events.c
> > +++ b/drivers/xen/events.c
> > @@ -1755,7 +1755,7 @@ int xen_set_callback_via(uint64_t via)
> > }
> > EXPORT_SYMBOL_GPL(xen_set_callback_via);
> >
> > -#ifdef CONFIG_XEN_PVHVM
> > +
> > /* Vector callbacks are better than PCI interrupts to receive event
> > * channel notifications because we can receive vector callbacks
> > on any
> > * vcpu and we don't need PCI support or APIC interactions. */
> > @@ -1779,9 +1779,6 @@ void xen_callback_vector(void)
> > alloc_intr_gate(XEN_HVM_EVTCHN_CALLBACK,
> > xen_hvm_callback_vector); }
> > }
> > -#else
> > -void xen_callback_vector(void) {}
> > -#endif
> >
> > void __init xen_init_IRQ(void)
> > {
> > @@ -1814,6 +1811,13 @@ void __init xen_init_IRQ(void)
> > if (xen_initial_domain())
> > pci_xen_initial_domain();
> >
> > + if (xen_feature(XENFEAT_hvm_callback_vector)) {
> > + xen_callback_vector();
> > + return;
> > + }
> > +
> > + /* PVH: TBD/FIXME: debug and fix eio map to work
> > with pvh */ +
> > pirq_eoi_map = (void
> > __va(xen_store_mfn<<PAGE_SHIFT);
> > + else
> > + xen_store_interface =
> > mfn_to_virt(xen_store_mfn); }
>
> I think that mfn_to_virt should work for PVH too: mfn_to_virt is:
>
> (__va(mfn_to_pfn(m) << PAGE_SHIFT))
>
> and mfn_to_pfn just return mfn when XENFEAT_auto_translated_physmap is
> set
You are right. Testing it out.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/8]: PVH basic and hader file changes
2012-09-21 19:15 [PATCH v1 1/8]: PVH basic and hader file changes Mukesh Rathor
2012-09-24 11:26 ` Stefano Stabellini
@ 2012-09-26 13:42 ` Ian Campbell
2012-09-26 13:45 ` Ian Campbell
` (3 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Ian Campbell @ 2012-09-26 13:42 UTC (permalink / raw)
To: Mukesh Rathor
Cc: Xen-devel@lists.xensource.com, Stefano Stabellini,
Konrad Rzeszutek Wilk
NB typo in the subject line.
On Fri, 2012-09-21 at 20:15 +0100, Mukesh Rathor wrote:
> drivers/xen/xenbus/xenbus_client.c | 2 +-
I needed this fixup to build on ARM after this patch:
8<----------------------------------------------
>From f4d7d3ea58d1cb673632d8e65fc40a4c84a1d213 Mon Sep 17 00:00:00 2001
From: Ian Campbell <ian.campbell@citrix.com>
Date: Wed, 26 Sep 2012 14:35:39 +0100
Subject: [PATCH] xenbus: include features header.
Fixes:
drivers/xen/xenbus/xenbus_probe.c: In function 'xenbus_init':
drivers/xen/xenbus/xenbus_probe.c:760:3: error: implicit declaration of function 'xen_feature' [-Werror=implicit-function-declaration]
drivers/xen/xenbus/xenbus_probe.c:760:19: error: 'XENFEAT_auto_translated_physmap' undeclared (first use in this function)
drivers/xen/xenbus/xenbus_probe.c:760:19: note: each undeclared identifier is reported only once for each function it appears in
cc1: some warnings being treated as errors
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
drivers/xen/xenbus/xenbus_probe.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index b92c024..974bea0 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -56,6 +56,7 @@
#include <xen/xenbus.h>
#include <xen/events.h>
#include <xen/page.h>
+#include <xen/features.h>
#include <xen/hvm.h>
--
1.7.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/8]: PVH basic and hader file changes
2012-09-21 19:15 [PATCH v1 1/8]: PVH basic and hader file changes Mukesh Rathor
2012-09-24 11:26 ` Stefano Stabellini
2012-09-26 13:42 ` Ian Campbell
@ 2012-09-26 13:45 ` Ian Campbell
2012-09-26 14:33 ` Konrad Rzeszutek Wilk
` (2 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Ian Campbell @ 2012-09-26 13:45 UTC (permalink / raw)
To: Mukesh Rathor
Cc: Xen-devel@lists.xensource.com, Stefano Stabellini,
Konrad Rzeszutek Wilk
On Fri, 2012-09-21 at 20:15 +0100, Mukesh Rathor wrote:
> diff --git a/drivers/xen/events.c b/drivers/xen/events.c
> index 7595581..f656791 100644
> --- a/drivers/xen/events.c
> +++ b/drivers/xen/events.c
> @@ -1755,7 +1755,7 @@ int xen_set_callback_via(uint64_t via)
> }
> EXPORT_SYMBOL_GPL(xen_set_callback_via);
>
> -#ifdef CONFIG_XEN_PVHVM
> +
> /* Vector callbacks are better than PCI interrupts to receive event
> * channel notifications because we can receive vector callbacks on
> any
> * vcpu and we don't need PCI support or APIC interactions. */
> @@ -1779,9 +1779,6 @@ void xen_callback_vector(void)
> alloc_intr_gate(XEN_HVM_EVTCHN_CALLBACK,
> xen_hvm_callback_vector);
> }
> }
> -#else
> -void xen_callback_vector(void) {}
> -#endif
>
> void __init xen_init_IRQ(void)
> {
This breaks on ARM because this like XEN_HVM_EVTCHN_CALLBACK, which are
inside this ifdef, are actually X86 specific.
I suspect that xen_callback_vector needs to be moved in to an arch
specific file so that we can supply a suitably different implementation
on ARM -- Stefano what do you think?
Ian.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/8]: PVH basic and hader file changes
2012-09-21 19:15 [PATCH v1 1/8]: PVH basic and hader file changes Mukesh Rathor
` (2 preceding siblings ...)
2012-09-26 13:45 ` Ian Campbell
@ 2012-09-26 14:33 ` Konrad Rzeszutek Wilk
2012-10-02 10:48 ` Stefano Stabellini
2012-10-04 10:00 ` Ian Campbell
5 siblings, 0 replies; 11+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-09-26 14:33 UTC (permalink / raw)
To: Mukesh Rathor
Cc: Xen-devel@lists.xensource.com, Ian Campbell,
stefano.stabellini@eu.citrix.com
> diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h
> index eac3ce1..f150fa1c 100644
> --- a/include/xen/interface/memory.h
> +++ b/include/xen/interface/memory.h
> @@ -163,11 +163,22 @@ struct xen_add_to_physmap {
> /* Which domain to change the mapping for. */
> domid_t domid;
>
> + union {
> + /* Number of pages to go through for gmfn_range */
> + uint16_t size;
> + /* IFF XENMAPSPACE_gmfn_foreign */
> + domid_t foreign_domid;
> + } u;
> /* Source mapping space. */
So found out why it crashed on PVHVM. If you rebase your patch
on top of b58aaa4b0b3506c094308342d746f600468c63d9
Author: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Date: Mon Aug 6 15:27:24 2012 +0100
xen: update xen_add_to_physmap interface
Update struct xen_add_to_physmap to be in sync with Xen's version of the
structure.
The size field was introduced by:
changeset: 24164:707d27fe03e7
user: Jean Guyader <jean.guyader@eu.citrix.com>
date: Fri Nov 18 13:42:08 2011 +0000
summary: mm: New XENMEM space, XENMAPSPACE_gmfn_range
According to the comment:
"This new field .size is located in the 16 bits padding between .domid
and .space in struct xen_add_to_physmap to stay compatible with older
versions."
Changes in v2:
- remove erroneous comment in the commit message.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
the merge ends up looking like this:
@ -166,11 +166,22 @@ struct xen_add_to_physmap {
/* Number of pages to go through for gmfn_range */
uint16_t size;
+ union {
+ /* Number of pages to go through for gmfn_range */
+ uint16_t size;
+ /* IFF XENMAPSPACE_gmfn_foreign */
+ domid_t foreign_domid;
+ } u;
Grrrr..
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/8]: PVH basic and hader file changes
2012-09-21 19:15 [PATCH v1 1/8]: PVH basic and hader file changes Mukesh Rathor
` (3 preceding siblings ...)
2012-09-26 14:33 ` Konrad Rzeszutek Wilk
@ 2012-10-02 10:48 ` Stefano Stabellini
2012-10-02 13:04 ` Konrad Rzeszutek Wilk
2012-10-04 10:00 ` Ian Campbell
5 siblings, 1 reply; 11+ messages in thread
From: Stefano Stabellini @ 2012-10-02 10:48 UTC (permalink / raw)
To: Mukesh Rathor
Cc: Xen-devel@lists.xensource.com, Ian Campbell, Stefano Stabellini,
Konrad Rzeszutek Wilk
On Fri, 21 Sep 2012, Mukesh Rathor wrote:
> ---
> arch/x86/include/asm/xen/interface.h | 8 +++++++-
> arch/x86/include/asm/xen/page.h | 3 +++
> arch/x86/xen/irq.c | 5 ++++-
> arch/x86/xen/p2m.c | 2 +-
> drivers/xen/cpu_hotplug.c | 4 +++-
> drivers/xen/events.c | 12 ++++++++----
> drivers/xen/xenbus/xenbus_client.c | 2 +-
> drivers/xen/xenbus/xenbus_probe.c | 6 +++++-
> include/xen/interface/memory.h | 27 +++++++++++++++++++++++++++
> include/xen/interface/physdev.h | 10 ++++++++++
> 10 files changed, 69 insertions(+), 10 deletions(-)
>
> diff --git a/arch/x86/include/asm/xen/interface.h b/arch/x86/include/asm/xen/interface.h
> index cbf0c9d..1d22131 100644
> --- a/arch/x86/include/asm/xen/interface.h
> +++ b/arch/x86/include/asm/xen/interface.h
> @@ -136,7 +136,13 @@ struct vcpu_guest_context {
> struct cpu_user_regs user_regs; /* User-level CPU registers */
> struct trap_info trap_ctxt[256]; /* Virtual IDT */
> unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents) */
> - unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
> + union {
> + struct {
> + /* PV: GDT (machine frames, # ents).*/
> + unsigned long gdt_frames[16], gdt_ents;
> + };
> + unsigned long gdtaddr, gdtsz; /* PVH: GDTR addr and size */
> + };
> unsigned long kernel_ss, kernel_sp; /* Virtual TSS (only SS1/SP1) */
> /* NB. User pagetable on x86/64 is placed in ctrlreg[1]. */
> unsigned long ctrlreg[8]; /* CR0-CR7 (control registers) */
> diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h
> index 93971e8..d1cfb96 100644
> --- a/arch/x86/include/asm/xen/page.h
> +++ b/arch/x86/include/asm/xen/page.h
> @@ -158,6 +158,9 @@ static inline xpaddr_t machine_to_phys(xmaddr_t machine)
> static inline unsigned long mfn_to_local_pfn(unsigned long mfn)
> {
> unsigned long pfn = mfn_to_pfn(mfn);
> +
> + if (xen_feature(XENFEAT_auto_translated_physmap))
> + return mfn;
> if (get_phys_to_machine(pfn) != mfn)
> return -1; /* force !pfn_valid() */
> return pfn;
> diff --git a/arch/x86/xen/irq.c b/arch/x86/xen/irq.c
> index 1573376..31959a7 100644
> --- a/arch/x86/xen/irq.c
> +++ b/arch/x86/xen/irq.c
> @@ -5,6 +5,7 @@
> #include <xen/interface/xen.h>
> #include <xen/interface/sched.h>
> #include <xen/interface/vcpu.h>
> +#include <xen/features.h>
>
> #include <asm/xen/hypercall.h>
> #include <asm/xen/hypervisor.h>
> @@ -128,6 +129,8 @@ static const struct pv_irq_ops xen_irq_ops __initconst = {
>
> void __init xen_init_irq_ops(void)
> {
> - pv_irq_ops = xen_irq_ops;
> + /* For PVH we use default pv_irq_ops settings */
> + if (!xen_feature(XENFEAT_hvm_callback_vector))
> + pv_irq_ops = xen_irq_ops;
> x86_init.irqs.intr_init = xen_init_IRQ;
> }
> diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
> index 64effdc..a954f83 100644
> --- a/arch/x86/xen/p2m.c
> +++ b/arch/x86/xen/p2m.c
> @@ -626,7 +626,7 @@ bool __set_phys_to_machine(unsigned long pfn, unsigned long mfn)
> {
> unsigned topidx, mididx, idx;
>
> - if (unlikely(xen_feature(XENFEAT_auto_translated_physmap))) {
> + if (xen_feature(XENFEAT_auto_translated_physmap)) {
> BUG_ON(pfn != mfn && mfn != INVALID_P2M_ENTRY);
> return true;
> }
> diff --git a/drivers/xen/cpu_hotplug.c b/drivers/xen/cpu_hotplug.c
> index 4dcfced..de6bcf9 100644
> --- a/drivers/xen/cpu_hotplug.c
> +++ b/drivers/xen/cpu_hotplug.c
> @@ -2,6 +2,7 @@
>
> #include <xen/xen.h>
> #include <xen/xenbus.h>
> +#include <xen/features.h>
>
> #include <asm/xen/hypervisor.h>
> #include <asm/cpu.h>
> @@ -100,7 +101,8 @@ static int __init setup_vcpu_hotplug_event(void)
> static struct notifier_block xsn_cpu = {
> .notifier_call = setup_cpu_watcher };
>
> - if (!xen_pv_domain())
> + /* PVH TBD/FIXME: future work */
> + if (!xen_pv_domain() || xen_feature(XENFEAT_auto_translated_physmap))
> return -ENODEV;
>
> register_xenstore_notifier(&xsn_cpu);
> diff --git a/drivers/xen/events.c b/drivers/xen/events.c
> index 7595581..f656791 100644
> --- a/drivers/xen/events.c
> +++ b/drivers/xen/events.c
> @@ -1755,7 +1755,7 @@ int xen_set_callback_via(uint64_t via)
> }
> EXPORT_SYMBOL_GPL(xen_set_callback_via);
>
> -#ifdef CONFIG_XEN_PVHVM
> +
> /* Vector callbacks are better than PCI interrupts to receive event
> * channel notifications because we can receive vector callbacks on any
> * vcpu and we don't need PCI support or APIC interactions. */
> @@ -1779,9 +1779,6 @@ void xen_callback_vector(void)
> alloc_intr_gate(XEN_HVM_EVTCHN_CALLBACK, xen_hvm_callback_vector);
> }
> }
> -#else
> -void xen_callback_vector(void) {}
> -#endif
>
> void __init xen_init_IRQ(void)
> {
> @@ -1814,6 +1811,13 @@ void __init xen_init_IRQ(void)
> if (xen_initial_domain())
> pci_xen_initial_domain();
>
> + if (xen_feature(XENFEAT_hvm_callback_vector)) {
> + xen_callback_vector();
> + return;
> + }
> +
> + /* PVH: TBD/FIXME: debug and fix eio map to work with pvh */
> +
> pirq_eoi_map = (void *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
> eoi_gmfn.gmfn = virt_to_mfn(pirq_eoi_map);
> rc = HYPERVISOR_physdev_op(PHYSDEVOP_pirq_eoi_gmfn_v2, &eoi_gmfn);
> diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c
> index b3e146e..a81e66b 100644
> --- a/drivers/xen/xenbus/xenbus_client.c
> +++ b/drivers/xen/xenbus/xenbus_client.c
> @@ -743,7 +743,7 @@ static const struct xenbus_ring_ops ring_ops_hvm = {
>
> void __init xenbus_ring_ops_init(void)
> {
> - if (xen_pv_domain())
> + if (xen_pv_domain() && !xen_feature(XENFEAT_auto_translated_physmap))
> ring_ops = &ring_ops_pv;
> else
> ring_ops = &ring_ops_hvm;
> diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
> index b793723..481dc72 100644
> --- a/drivers/xen/xenbus/xenbus_probe.c
> +++ b/drivers/xen/xenbus/xenbus_probe.c
> @@ -749,7 +749,11 @@ static int __init xenbus_init(void)
> if (err)
> goto out_error;
> }
> - xen_store_interface = mfn_to_virt(xen_store_mfn);
> + if (xen_feature(XENFEAT_auto_translated_physmap))
code style: spaces vs tabs
> + /* mfn is actually a pfn */
> + xen_store_interface = __va(xen_store_mfn<<PAGE_SHIFT);
> + else
> + xen_store_interface = mfn_to_virt(xen_store_mfn);
> }
>
> /* Initialize the interface to xenstore. */
> diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h
> index eac3ce1..f150fa1c 100644
> --- a/include/xen/interface/memory.h
> +++ b/include/xen/interface/memory.h
> @@ -163,11 +163,22 @@ struct xen_add_to_physmap {
> /* Which domain to change the mapping for. */
> domid_t domid;
>
> + union {
> + /* Number of pages to go through for gmfn_range */
> + uint16_t size;
> + /* IFF XENMAPSPACE_gmfn_foreign */
> + domid_t foreign_domid;
> + } u;
code style: mixed spaces and tabs
> /* Source mapping space. */
> #define XENMAPSPACE_shared_info 0 /* shared info page */
> #define XENMAPSPACE_grant_table 1 /* grant table page */
> +#define XENMAPSPACE_gmfn 2 /* GMFN */
> +#define XENMAPSPACE_gmfn_range 3 /* GMFN range */
> +#define XENMAPSPACE_gmfn_foreign 4 /* GMFN from another guest */
> unsigned int space;
>
> +#define XENMAPIDX_grant_table_status 0x80000000
> +
> /* Index into source mapping space. */
> unsigned long idx;
>
> @@ -234,4 +245,20 @@ DEFINE_GUEST_HANDLE_STRUCT(xen_memory_map);
> * during a driver critical region.
> */
> extern spinlock_t xen_reservation_lock;
> +
> +/*
> + * Unmaps the page appearing at a particular GPFN from the specified guest's
> + * pseudophysical address space.
> + * arg == addr of xen_remove_from_physmap_t.
> + */
> +#define XENMEM_remove_from_physmap 15
> +struct xen_remove_from_physmap {
> + /* Which domain to change the mapping for. */
> + domid_t domid;
> +
> + /* GPFN of the current mapping of the page. */
> + unsigned long gpfn;
> +};
> +DEFINE_GUEST_HANDLE_STRUCT(xen_remove_from_physmap);
> +
> #endif /* __XEN_PUBLIC_MEMORY_H__ */
> diff --git a/include/xen/interface/physdev.h b/include/xen/interface/physdev.h
> index 9ce788d..80f792e 100644
> --- a/include/xen/interface/physdev.h
> +++ b/include/xen/interface/physdev.h
> @@ -258,6 +258,16 @@ struct physdev_pci_device {
> uint8_t devfn;
> };
>
> +#define PHYSDEVOP_pvh_map_iomem 29
> +struct physdev_map_iomem {
> + /* IN */
> + uint64_t first_gfn;
> + uint64_t first_mfn;
> + uint32_t nr_mfns;
> + uint32_t add_mapping; /* 1 == add mapping; 0 == unmap */
> +
> +};
> +
> /*
> * Notify that some PIRQ-bound event channels have been unmasked.
> * ** This command is obsolete since interface version 0x00030202 and is **
> --
> 1.7.2.3
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/8]: PVH basic and hader file changes
2012-10-02 10:48 ` Stefano Stabellini
@ 2012-10-02 13:04 ` Konrad Rzeszutek Wilk
0 siblings, 0 replies; 11+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-10-02 13:04 UTC (permalink / raw)
To: Stefano Stabellini; +Cc: Xen-devel@lists.xensource.com, Ian Campbell
The title says ' hader' - it should say 'header'.
Also there is a missing description of what it does, and how
this works. For an example check out:
f4cec35b0d4b90d96e3770a3d1e68ea882e7a7c8
(which added the 1-1 P2M notion), or:
357a3cfb147ee8e97c6f9cdc51e9a33aa56f7d99
(for the > 128gb support).
It needs to be verbose with lots of details.
On Tue, Oct 02, 2012 at 11:48:13AM +0100, Stefano Stabellini wrote:
> On Fri, 21 Sep 2012, Mukesh Rathor wrote:
> > ---
> > arch/x86/include/asm/xen/interface.h | 8 +++++++-
> > arch/x86/include/asm/xen/page.h | 3 +++
> > arch/x86/xen/irq.c | 5 ++++-
> > arch/x86/xen/p2m.c | 2 +-
> > drivers/xen/cpu_hotplug.c | 4 +++-
> > drivers/xen/events.c | 12 ++++++++----
> > drivers/xen/xenbus/xenbus_client.c | 2 +-
> > drivers/xen/xenbus/xenbus_probe.c | 6 +++++-
> > include/xen/interface/memory.h | 27 +++++++++++++++++++++++++++
> > include/xen/interface/physdev.h | 10 ++++++++++
> > 10 files changed, 69 insertions(+), 10 deletions(-)
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/8]: PVH basic and hader file changes
2012-09-21 19:15 [PATCH v1 1/8]: PVH basic and hader file changes Mukesh Rathor
` (4 preceding siblings ...)
2012-10-02 10:48 ` Stefano Stabellini
@ 2012-10-04 10:00 ` Ian Campbell
2012-10-04 12:44 ` Konrad Rzeszutek Wilk
5 siblings, 1 reply; 11+ messages in thread
From: Ian Campbell @ 2012-10-04 10:00 UTC (permalink / raw)
To: Mukesh Rathor
Cc: Xen-devel@lists.xensource.com, Stefano Stabellini,
Konrad Rzeszutek Wilk
On Fri, 2012-09-21 at 20:15 +0100, Mukesh Rathor wrote:
> @@ -234,4 +245,20 @@ DEFINE_GUEST_HANDLE_STRUCT(xen_memory_map);
> * during a driver critical region.
> */
> extern spinlock_t xen_reservation_lock;
> +
> +/*
> + * Unmaps the page appearing at a particular GPFN from the specified
> guest's
> + * pseudophysical address space.
> + * arg == addr of xen_remove_from_physmap_t.
> + */
> +#define XENMEM_remove_from_physmap 15
> +struct xen_remove_from_physmap {
> + /* Which domain to change the mapping for. */
> + domid_t domid;
> +
> + /* GPFN of the current mapping of the page. */
> + unsigned long gpfn;
> +};
> +DEFINE_GUEST_HANDLE_STRUCT(xen_remove_from_physmap);
I needed this fixup in a tree with both the ARM and PVH stuff:
8<------------------------------------
>From d56a302734180171855e0ee07571ac0cee69b3e5 Mon Sep 17 00:00:00 2001
From: Ian Campbell <ian.campbell@citrix.com>
Date: Thu, 4 Oct 2012 10:45:52 +0100
Subject: [PATCH] xen: use xen_pft_t in struct xen_remove_from_physmap
4a6c2b4 "PVH basic and hader file changes" and bd3f79b "xen: Introduce
xen_pfn_t for pfn and mfn types" passed like ships in the night.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
include/xen/interface/memory.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h
index 6d74c47..d38bdc1 100644
--- a/include/xen/interface/memory.h
+++ b/include/xen/interface/memory.h
@@ -258,7 +258,7 @@ struct xen_remove_from_physmap {
domid_t domid;
/* GPFN of the current mapping of the page. */
- unsigned long gpfn;
+ xen_pfn_t gpfn;
};
DEFINE_GUEST_HANDLE_STRUCT(xen_remove_from_physmap);
--
1.7.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/8]: PVH basic and hader file changes
2012-10-04 10:00 ` Ian Campbell
@ 2012-10-04 12:44 ` Konrad Rzeszutek Wilk
0 siblings, 0 replies; 11+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-10-04 12:44 UTC (permalink / raw)
To: Ian Campbell
Cc: Xen-devel@lists.xensource.com, Konrad Rzeszutek Wilk,
Stefano Stabellini
On Thu, Oct 4, 2012 at 6:00 AM, Ian Campbell <Ian.Campbell@citrix.com> wrote:
> On Fri, 2012-09-21 at 20:15 +0100, Mukesh Rathor wrote:
>> @@ -234,4 +245,20 @@ DEFINE_GUEST_HANDLE_STRUCT(xen_memory_map);
>> * during a driver critical region.
>> */
>> extern spinlock_t xen_reservation_lock;
>> +
>> +/*
>> + * Unmaps the page appearing at a particular GPFN from the specified
>> guest's
>> + * pseudophysical address space.
>> + * arg == addr of xen_remove_from_physmap_t.
>> + */
>> +#define XENMEM_remove_from_physmap 15
>> +struct xen_remove_from_physmap {
>> + /* Which domain to change the mapping for. */
>> + domid_t domid;
>> +
>> + /* GPFN of the current mapping of the page. */
>> + unsigned long gpfn;
>> +};
>> +DEFINE_GUEST_HANDLE_STRUCT(xen_remove_from_physmap);
>
> I needed this fixup in a tree with both the ARM and PVH stuff:
>
> 8<------------------------------------
>
> >From d56a302734180171855e0ee07571ac0cee69b3e5 Mon Sep 17 00:00:00 2001
> From: Ian Campbell <ian.campbell@citrix.com>
> Date: Thu, 4 Oct 2012 10:45:52 +0100
> Subject: [PATCH] xen: use xen_pft_t in struct xen_remove_from_physmap
>
> 4a6c2b4 "PVH basic and hader file changes" and bd3f79b "xen: Introduce
> xen_pfn_t for pfn and mfn types" passed like ships in the night.
.. and at least they did not collide with each other :-)
>
> Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
> ---
> include/xen/interface/memory.h | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h
> index 6d74c47..d38bdc1 100644
> --- a/include/xen/interface/memory.h
> +++ b/include/xen/interface/memory.h
> @@ -258,7 +258,7 @@ struct xen_remove_from_physmap {
> domid_t domid;
>
> /* GPFN of the current mapping of the page. */
> - unsigned long gpfn;
> + xen_pfn_t gpfn;
> };
> DEFINE_GUEST_HANDLE_STRUCT(xen_remove_from_physmap);
>
> --
> 1.7.2.5
>
>
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
>
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2012-10-04 12:44 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-21 19:15 [PATCH v1 1/8]: PVH basic and hader file changes Mukesh Rathor
2012-09-24 11:26 ` Stefano Stabellini
2012-09-24 11:29 ` Ian Campbell
2012-09-24 18:19 ` Mukesh Rathor
2012-09-26 13:42 ` Ian Campbell
2012-09-26 13:45 ` Ian Campbell
2012-09-26 14:33 ` Konrad Rzeszutek Wilk
2012-10-02 10:48 ` Stefano Stabellini
2012-10-02 13:04 ` Konrad Rzeszutek Wilk
2012-10-04 10:00 ` Ian Campbell
2012-10-04 12:44 ` Konrad Rzeszutek Wilk
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).