[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xen: introduce PHYSDEVOP_pirq_eoi_gmfn_v2
# HG changeset patch # User Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> # Date 1327758313 0 # Node ID 3bd3949854efa13ef1a9874711b558169408f61d # Parent ac9f32525376922fdf5b9efac7a1fe0ff866cc76 xen: introduce PHYSDEVOP_pirq_eoi_gmfn_v2 PHYSDEVOP_pirq_eoi_gmfn changes the semantics of PHYSDEVOP_eoi. In order to improve the interface this patch: - renames PHYSDEVOP_pirq_eoi_gmfn to PHYSDEVOP_pirq_eoi_gmfn_v1; - introduces PHYSDEVOP_pirq_eoi_gmfn_v2, that is like PHYSDEVOP_pirq_eoi_gmfn_v1 but it doesn't modify the behaviour of another hypercall; - bump __XEN_LATEST_INTERFACE_VERSION__; - #define PHYSDEVOP_pirq_eoi_gmfn to PHYSDEVOP_pirq_eoi_gmfn_v1 or PHYSDEVOP_pirq_eoi_gmfn_v2 depending on the __XEN_INTERFACE_VERSION. Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> Committed-by: Keir Fraser <keir@xxxxxxx> --- diff -r ac9f32525376 -r 3bd3949854ef xen/arch/ia64/xen/domain.c --- a/xen/arch/ia64/xen/domain.c Sat Jan 28 13:42:25 2012 +0000 +++ b/xen/arch/ia64/xen/domain.c Sat Jan 28 13:45:13 2012 +0000 @@ -1731,6 +1731,7 @@ if (d->arch.pirq_eoi_map != NULL) { put_page(virt_to_page(d->arch.pirq_eoi_map)); d->arch.pirq_eoi_map = NULL; + d->arch.auto_unmask = 0; } /* Tear down shadow mode stuff. */ diff -r ac9f32525376 -r 3bd3949854ef xen/arch/ia64/xen/hypercall.c --- a/xen/arch/ia64/xen/hypercall.c Sat Jan 28 13:42:25 2012 +0000 +++ b/xen/arch/ia64/xen/hypercall.c Sat Jan 28 13:45:13 2012 +0000 @@ -65,7 +65,7 @@ { if ( pirq < 0 || pirq >= NR_IRQS ) return -EINVAL; - if ( d->arch.pirq_eoi_map ) { + if ( d->arch.auto_unmask ) { spin_lock(&d->event_lock); evtchn_unmask(pirq_to_evtchn(d, pirq)); spin_unlock(&d->event_lock); @@ -508,7 +508,8 @@ break; } - case PHYSDEVOP_pirq_eoi_gmfn: { + case PHYSDEVOP_pirq_eoi_gmfn_v1: + case PHYSDEVOP_pirq_eoi_gmfn_v2: { struct physdev_pirq_eoi_gmfn info; unsigned long mfn; @@ -531,6 +532,8 @@ } current->domain->arch.pirq_eoi_map = mfn_to_virt(mfn); + if ( cmd == PHYSDEVOP_pirq_eoi_gmfn_v1 ) + current->domain->arch.auto_unmask = 1; ret = 0; break; } diff -r ac9f32525376 -r 3bd3949854ef xen/arch/x86/domain.c --- a/xen/arch/x86/domain.c Sat Jan 28 13:42:25 2012 +0000 +++ b/xen/arch/x86/domain.c Sat Jan 28 13:45:13 2012 +0000 @@ -2125,6 +2125,7 @@ put_page_and_type( mfn_to_page(d->arch.pv_domain.pirq_eoi_map_mfn)); d->arch.pv_domain.pirq_eoi_map = NULL; + d->arch.pv_domain.auto_unmask = 0; } } diff -r ac9f32525376 -r 3bd3949854ef xen/arch/x86/physdev.c --- a/xen/arch/x86/physdev.c Sat Jan 28 13:42:25 2012 +0000 +++ b/xen/arch/x86/physdev.c Sat Jan 28 13:45:13 2012 +0000 @@ -271,7 +271,7 @@ break; } if ( !is_hvm_domain(v->domain) && - v->domain->arch.pv_domain.pirq_eoi_map ) + v->domain->arch.pv_domain.auto_unmask ) evtchn_unmask(pirq->evtchn); if ( !is_hvm_domain(v->domain) || domain_pirq_to_irq(v->domain, eoi.irq) > 0 ) @@ -293,7 +293,8 @@ break; } - case PHYSDEVOP_pirq_eoi_gmfn: { + case PHYSDEVOP_pirq_eoi_gmfn_v2: + case PHYSDEVOP_pirq_eoi_gmfn_v1: { struct physdev_pirq_eoi_gmfn info; unsigned long mfn; @@ -329,6 +330,8 @@ ret = -ENOSPC; break; } + if ( cmd == PHYSDEVOP_pirq_eoi_gmfn_v1 ) + v->domain->arch.pv_domain.auto_unmask = 1; put_gfn(current->domain, info.gmfn); ret = 0; diff -r ac9f32525376 -r 3bd3949854ef xen/include/asm-ia64/domain.h --- a/xen/include/asm-ia64/domain.h Sat Jan 28 13:42:25 2012 +0000 +++ b/xen/include/asm-ia64/domain.h Sat Jan 28 13:45:13 2012 +0000 @@ -186,6 +186,9 @@ /* Shared page for notifying that explicit PIRQ EOI is required. */ unsigned long *pirq_eoi_map; unsigned long pirq_eoi_map_mfn; + /* set auto_unmask to 1 if you want PHYSDEVOP_eoi to automatically + * unmask the event channel */ + bool_t auto_unmask; /* Address of efi_runtime_services_t (placed in domain memory) */ void *efi_runtime; diff -r ac9f32525376 -r 3bd3949854ef xen/include/asm-x86/domain.h --- a/xen/include/asm-x86/domain.h Sat Jan 28 13:42:25 2012 +0000 +++ b/xen/include/asm-x86/domain.h Sat Jan 28 13:45:13 2012 +0000 @@ -231,6 +231,9 @@ /* Shared page for notifying that explicit PIRQ EOI is required. */ unsigned long *pirq_eoi_map; unsigned long pirq_eoi_map_mfn; + /* set auto_unmask to 1 if you want PHYSDEVOP_eoi to automatically + * unmask the event channel */ + bool_t auto_unmask; /* Pseudophysical e820 map (XENMEM_memory_map). */ spinlock_t e820_lock; diff -r ac9f32525376 -r 3bd3949854ef xen/include/public/physdev.h --- a/xen/include/public/physdev.h Sat Jan 28 13:42:25 2012 +0000 +++ b/xen/include/public/physdev.h Sat Jan 28 13:45:13 2012 +0000 @@ -49,7 +49,15 @@ * will automatically get unmasked. The page registered is used as a bit * array indexed by Xen's PIRQ value. */ -#define PHYSDEVOP_pirq_eoi_gmfn 17 +#define PHYSDEVOP_pirq_eoi_gmfn_v1 17 +/* + * Register a shared page for the hypervisor to indicate whether the + * guest must issue PHYSDEVOP_eoi. This hypercall is very similar to + * PHYSDEVOP_pirq_eoi_gmfn_v1 but it doesn't change the semantics of + * PHYSDEVOP_eoi. The page registered is used as a bit array indexed by + * Xen's PIRQ value. + */ +#define PHYSDEVOP_pirq_eoi_gmfn_v2 28 struct physdev_pirq_eoi_gmfn { /* IN */ xen_pfn_t gmfn; @@ -325,6 +333,12 @@ #define PHYSDEVOP_IRQ_NEEDS_UNMASK_NOTIFY XENIRQSTAT_needs_eoi #define PHYSDEVOP_IRQ_SHARED XENIRQSTAT_shared +#if __XEN_INTERFACE_VERSION < 0x00040200 +#define PHYSDEVOP_pirq_eoi_gmfn PHYSDEVOP_pirq_eoi_gmfn_v1 +#else +#define PHYSDEVOP_pirq_eoi_gmfn PHYSDEVOP_pirq_eoi_gmfn_v2 +#endif + #endif /* __XEN_PUBLIC_PHYSDEV_H__ */ /* diff -r ac9f32525376 -r 3bd3949854ef xen/include/public/xen-compat.h --- a/xen/include/public/xen-compat.h Sat Jan 28 13:42:25 2012 +0000 +++ b/xen/include/public/xen-compat.h Sat Jan 28 13:45:13 2012 +0000 @@ -27,7 +27,7 @@ #ifndef __XEN_PUBLIC_XEN_COMPAT_H__ #define __XEN_PUBLIC_XEN_COMPAT_H__ -#define __XEN_LATEST_INTERFACE_VERSION__ 0x0003020a +#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040200 #if defined(__XEN__) || defined(__XEN_TOOLS__) /* Xen is built with matching headers and implements the latest interface. */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |