From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH 1/4] x86/HVM: replace plain number in hvm_combine_hw_exceptions() Date: Thu, 22 Jan 2015 14:12:44 +0000 Message-ID: <54C1055C.4030604@citrix.com> References: <54C10EE1020000780005827E@mail.emea.novell.com> <54C10FCD0200007800058291@mail.emea.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta4.messagelabs.com ([85.158.143.247]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1YEIV6-0006R2-NH for xen-devel@lists.xenproject.org; Thu, 22 Jan 2015 14:12:48 +0000 In-Reply-To: <54C10FCD0200007800058291@mail.emea.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich , xen-devel Cc: Keir Fraser List-Id: xen-devel@lists.xenproject.org On 22/01/15 13:57, Jan Beulich wrote: > While doing so also take care of #VE here (even if we don't make use of > it yet). > > Signed-off-by: Jan Beulich > > --- a/xen/arch/x86/hvm/hvm.c > +++ b/xen/arch/x86/hvm/hvm.c > @@ -205,6 +205,16 @@ int hvm_event_needs_reinjection(uint8_t > */ > uint8_t hvm_combine_hw_exceptions(uint8_t vec1, uint8_t vec2) > { > + const unsigned int contributory_exceptions = > + (1 << TRAP_divide_error) | > + (1 << TRAP_invalid_tss) | > + (1 << TRAP_no_segment) | > + (1 << TRAP_stack_error) | > + (1 << TRAP_gp_fault); > + const unsigned int page_faults = > + (1 << TRAP_page_fault) | > + (1 << TRAP_virtualisation); static as an extra hint? I frankly hope that any decent compiler would turn these into instruction immediate data. Either way, Reviewed-by: Andrew Cooper (FWIW the 0x7c01 constant was the inspiration for my vlapic patch, although I felt that constructing the map at compile time was better than an opaque number.) > + > /* Exception during double-fault delivery always causes a triple fault. */ > if ( vec1 == TRAP_double_fault ) > { > @@ -213,11 +223,12 @@ uint8_t hvm_combine_hw_exceptions(uint8_ > } > > /* Exception during page-fault delivery always causes a double fault. */ > - if ( vec1 == TRAP_page_fault ) > + if ( (1u << vec1) & page_faults ) > return TRAP_double_fault; > > /* Discard the first exception if it's benign or if we now have a #PF. */ > - if ( !((1u << vec1) & 0x7c01u) || (vec2 == TRAP_page_fault) ) > + if ( !((1u << vec1) & contributory_exceptions) || > + ((1u << vec2) & page_faults) ) > return vec2; > > /* Cannot combine the exceptions: double fault. */ > > >