From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Egger Subject: [PATCH 2/15] Nested Virtualization: localevent Date: Thu, 3 Jun 2010 18:05:38 +0200 Message-ID: <201006031805.38305.Christoph.Egger@amd.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary-00=_SL9BMY/c5vx8XPD" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --Boundary-00=_SL9BMY/c5vx8XPD Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Signed-off-by: Christoph Egger -- ---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85609 Dornach b. Muenchen Geschaeftsfuehrer: Andrew Bowd, Thomas M. McCoy, Giuliano Meroni Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632 --Boundary-00=_SL9BMY/c5vx8XPD Content-Type: text/x-diff; charset="iso 8859-15"; name="xen_nh02_localevent.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xen_nh02_localevent.diff" # HG changeset patch # User cegger # Date 1274771180 -7200 Change local_event_delivery_* to take vcpu argument. This is needed as 'current' is not accessable on guest shutdown/destroy. This fixes spurious xen crashes on shutdown/destroy with nestedhvm enabled. diff -r 357c949c1dcc -r 8dd8474427c6 xen/arch/ia64/xen/hypercall.c --- a/xen/arch/ia64/xen/hypercall.c +++ b/xen/arch/ia64/xen/hypercall.c @@ -309,13 +309,13 @@ ia64_hypercall(struct pt_regs *regs) do_softirq(); stop_timer(&v->arch.hlt_timer); /* do_block() calls - * local_event_delivery_enable(), + * local_event_delivery_enable(v), * but PAL CALL must be called with * psr.i = 0 and psr.i is unchanged. * SDM vol.2 Part I 11.10.2 * PAL Calling Conventions. */ - local_event_delivery_disable(); + local_event_delivery_disable(v); } regs->r8 = 0; regs->r9 = 0; diff -r 357c949c1dcc -r 8dd8474427c6 xen/common/schedule.c --- a/xen/common/schedule.c +++ b/xen/common/schedule.c @@ -547,7 +547,7 @@ static long do_block(void) { struct vcpu *v = current; - local_event_delivery_enable(); + local_event_delivery_enable(v); set_bit(_VPF_blocked, &v->pause_flags); /* Check for events /after/ blocking: avoids wakeup waiting race. */ diff -r 357c949c1dcc -r 8dd8474427c6 xen/include/asm-ia64/event.h --- a/xen/include/asm-ia64/event.h +++ b/xen/include/asm-ia64/event.h @@ -48,19 +48,19 @@ static inline int local_events_need_deli return event_pending(current); } -static inline int local_event_delivery_is_enabled(void) +static inline int local_event_delivery_is_enabled(struct vcpu *v) { - return !current->vcpu_info->evtchn_upcall_mask; + return !v->vcpu_info->evtchn_upcall_mask; } -static inline void local_event_delivery_disable(void) +static inline void local_event_delivery_disable(struct vcpu *v) { - current->vcpu_info->evtchn_upcall_mask = 1; + v->vcpu_info->evtchn_upcall_mask = 1; } -static inline void local_event_delivery_enable(void) +static inline void local_event_delivery_enable(struct vcpu *v) { - current->vcpu_info->evtchn_upcall_mask = 0; + v->vcpu_info->evtchn_upcall_mask = 0; } static inline int arch_virq_is_global(int virq) diff -r 357c949c1dcc -r 8dd8474427c6 xen/include/asm-x86/event.h --- a/xen/include/asm-x86/event.h +++ b/xen/include/asm-x86/event.h @@ -23,19 +23,19 @@ static inline int local_events_need_deli !vcpu_info(v, evtchn_upcall_mask))); } -static inline int local_event_delivery_is_enabled(void) +static inline int local_event_delivery_is_enabled(struct vcpu *v) { - return !vcpu_info(current, evtchn_upcall_mask); + return !vcpu_info(v, evtchn_upcall_mask); } -static inline void local_event_delivery_disable(void) +static inline void local_event_delivery_disable(struct vcpu *v) { - vcpu_info(current, evtchn_upcall_mask) = 1; + vcpu_info(v, evtchn_upcall_mask) = 1; } -static inline void local_event_delivery_enable(void) +static inline void local_event_delivery_enable(struct vcpu *v) { - vcpu_info(current, evtchn_upcall_mask) = 0; + vcpu_info(v, evtchn_upcall_mask) = 0; } /* No arch specific virq definition now. Default to global. */ --Boundary-00=_SL9BMY/c5vx8XPD Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --Boundary-00=_SL9BMY/c5vx8XPD--