diff options
author | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2012-01-28 13:45:13 +0000 |
---|---|---|
committer | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2012-01-28 13:45:13 +0000 |
commit | 0057a949dea2d22b1d9be884a7bd9912aa7f03cc (patch) | |
tree | 020b270ccdf54a2c545649511785e3466af3fc61 /xen/arch/x86/physdev.c | |
parent | 68e1fbf3db5ed49b05214064a5516154ca0bf842 (diff) | |
download | xen-0057a949dea2d22b1d9be884a7bd9912aa7f03cc.tar.gz xen-0057a949dea2d22b1d9be884a7bd9912aa7f03cc.tar.bz2 xen-0057a949dea2d22b1d9be884a7bd9912aa7f03cc.zip |
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@eu.citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/arch/x86/physdev.c')
-rw-r--r-- | xen/arch/x86/physdev.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/xen/arch/x86/physdev.c b/xen/arch/x86/physdev.c index f280c28c6f..df92cc7fdc 100644 --- a/xen/arch/x86/physdev.c +++ b/xen/arch/x86/physdev.c @@ -271,7 +271,7 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg) 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 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg) 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_t do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg) 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; |