WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-ia64-devel

Re: [Xen-ia64-devel] [patch 10/12] ia64: kexec: Use a separate RID for E

To: Simon Horman <horms@xxxxxxxxxxxx>
Subject: Re: [Xen-ia64-devel] [patch 10/12] ia64: kexec: Use a separate RID for EFI
From: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
Date: Mon, 14 Jul 2008 12:01:46 +0900
Cc: Aron Griffis <aron@xxxxxx>, Alex Williamson <alex.williamson@xxxxxx>, xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Sun, 13 Jul 2008 20:01:51 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <20080423012936.062152124@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-id: Discussion of the ia64 port of Xen <xen-ia64-devel.lists.xensource.com>
List-post: <mailto:xen-ia64-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
References: <20080423012200.632155842@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <20080423012936.062152124@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.6i
Hi Simon-san.

Just a minor nit.
Could you  move sal.h under xen/include/asm-ia64/linux-xen/asm/sal.h
update README.origin because sal.h isn't same as Linux's any more.


On Thu, Mar 20, 2008 at 05:52:58PM +1100, Simon Horman wrote:
> This activates the use of the EFI RID.
> 
> The basic idea is to switch to this RID, which is in the range reserved
> for the hypervisor, before making EFI, PAL or SAL calls. The page fault
> handler where the identity mapping checks for this RID, if present it
> does the identity mapping, else it just follows the normal mapping
> rules. In this way, VMX domains should not be able to access this
> memory, and they should be able to use the virtual addresses that are
> used by EFI for their own purposes.
> 
> Subsequent patches move EFI memory such that faults to it will
> be protected by the EFI RID.
> 
> Cc: Tristan Gingold <tgingold@xxxxxxx>
> Cc: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
> Cc: Alex Williamson <alex.williamson@xxxxxx>
> Cc: Aron Griffis <aron@xxxxxx>
> Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>
> 
> ---
> Tue, 23 Oct 2007 15:47:27 +0900
> 
> * Don't use #ifndef XEN to denote changes to SAL, PAL and EFI macros,
>   as this means that the macros have to be duplicated which leads to
>   a very bulky patch. Instead, define the new functionality as
>   XEN_EFI_RR_SAVE and XEN_EFI_RR_RESTORE (previously EFI_RR_SAV and
>   EFI_RR_RESTOR) and put these macros straight into the existing macros -
>   this should be obvious enough for future up-porters.
> 
>   As suggested by Alex Williamson.
> 
> * Break header changes out into a separate patch
> 
> * Break macro definitions out into a separate patch and
>   put them in efi.h instead of pal.h. Documentation of how the
>   EFI RID is selected is included in this new patch.
> 
> * Use a uniform defineition of XEN_EFI_RID in assembly and C code
> 
> Mon, 29 Oct 2007 13:43:33 +0900
> 
> * Put assembly code into a separate patch
> 
> * C code is no longer needed with the new assembly code
> 
> Mon, 12 Nov 2007 12:02:59 +0900
> 
> * Trivial upport to ia64/xen-unstable.hg 16287:b235b68a0f4f
> 
> Thu, 22 Nov 2007 00:19:38 -0700
> 
> * Make use of XEN_EFI_RR_DECLARE for consistency
>   - There were instances of rr6 and rr7 that were declared as int
>     instead of unsigned long which caused compiler warnings
> 
> Fri, 07 Dec 2007 13:44:35 +0900
> * Remove stray use of ia64_set_rr
> * Relplace stray declaration of rr6 and rr7 with XEN_EFI_RR_DECLARE
> 
> Index: xen-unstable.hg/xen/include/asm-ia64/linux/asm/sal.h
> ===================================================================
> --- xen-unstable.hg.orig/xen/include/asm-ia64/linux/asm/sal.h 2008-02-05 
> 16:18:41.000000000 +0900
> +++ xen-unstable.hg/xen/include/asm-ia64/linux/asm/sal.h      2008-02-05 
> 16:18:53.000000000 +0900
> @@ -52,9 +52,12 @@ extern spinlock_t sal_lock;
>  # define SAL_CALL(result,args...) do {                               \
>       unsigned long __ia64_sc_flags;                          \
>       struct ia64_fpreg __ia64_sc_fr[6];                      \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                           \
>       ia64_save_scratch_fpregs(__ia64_sc_fr);                 \
>       spin_lock_irqsave(&sal_lock, __ia64_sc_flags);          \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                              \
>       __SAL_CALL(result, args);                               \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                           \
>       spin_unlock_irqrestore(&sal_lock, __ia64_sc_flags);     \
>       ia64_load_scratch_fpregs(__ia64_sc_fr);                 \
>  } while (0)
> @@ -62,18 +65,24 @@ extern spinlock_t sal_lock;
>  # define SAL_CALL_NOLOCK(result,args...) do {                \
>       unsigned long __ia64_scn_flags;                 \
>       struct ia64_fpreg __ia64_scn_fr[6];             \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                   \
>       ia64_save_scratch_fpregs(__ia64_scn_fr);        \
>       local_irq_save(__ia64_scn_flags);               \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                      \
>       __SAL_CALL(result, args);                       \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                   \
>       local_irq_restore(__ia64_scn_flags);            \
>       ia64_load_scratch_fpregs(__ia64_scn_fr);        \
>  } while (0)
>  
>  # define SAL_CALL_REENTRANT(result,args...) do {     \
>       struct ia64_fpreg __ia64_scs_fr[6];             \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                   \
>       ia64_save_scratch_fpregs(__ia64_scs_fr);        \
>       preempt_disable();                              \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                      \
>       __SAL_CALL(result, args);                       \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                   \
>       preempt_enable();                               \
>       ia64_load_scratch_fpregs(__ia64_scs_fr);        \
>  } while (0)
> Index: xen-unstable.hg/xen/arch/ia64/linux-xen/efi.c
> ===================================================================
> --- xen-unstable.hg.orig/xen/arch/ia64/linux-xen/efi.c        2008-02-05 
> 16:18:41.000000000 +0900
> +++ xen-unstable.hg/xen/arch/ia64/linux-xen/efi.c     2008-02-05 
> 16:18:53.000000000 +0900
> @@ -65,11 +65,14 @@ prefix##_get_time (efi_time_t *tm, efi_t
>       struct ia64_fpreg fr[6];                                                
>                   \
>       efi_time_cap_t *atc = NULL;                                             
>                   \
>       efi_status_t ret;                                                       
>                   \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                                           
>                   \
>                                                                               
>                   \
>       if (tc)                                                                 
>                   \
>               atc = adjust_arg(tc);                                           
>                   \
>       ia64_save_scratch_fpregs(fr);                                           
>                   \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                                              
>                   \
>       ret = efi_call_##prefix((efi_get_time_t *) __va(runtime->get_time), 
> adjust_arg(tm), atc); \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                                           
>                   \
>       ia64_load_scratch_fpregs(fr);                                           
>                   \
>       return ret;                                                             
>                   \
>  }
> @@ -80,9 +83,12 @@ prefix##_set_time (efi_time_t *tm)                         
>                 
>  {                                                                            
>                 \
>       struct ia64_fpreg fr[6];                                                
>                 \
>       efi_status_t ret;                                                       
>                 \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                                           
>                   \
>                                                                               
>                 \
>       ia64_save_scratch_fpregs(fr);                                           
>                 \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                                              
>                   \
>       ret = efi_call_##prefix((efi_set_time_t *) __va(runtime->set_time), 
> adjust_arg(tm));    \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                                           
>                   \
>       ia64_load_scratch_fpregs(fr);                                           
>                 \
>       return ret;                                                             
>                 \
>  }
> @@ -93,10 +99,13 @@ prefix##_get_wakeup_time (efi_bool_t *en
>  {                                                                            
>                 \
>       struct ia64_fpreg fr[6];                                                
>                 \
>       efi_status_t ret;                                                       
>                 \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                                           
>                   \
>                                                                               
>                 \
>       ia64_save_scratch_fpregs(fr);                                           
>                 \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                                              
>                   \
>       ret = efi_call_##prefix((efi_get_wakeup_time_t *) 
> __va(runtime->get_wakeup_time),       \
>                               adjust_arg(enabled), adjust_arg(pending), 
> adjust_arg(tm));      \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                                           
>                   \
>       ia64_load_scratch_fpregs(fr);                                           
>                 \
>       return ret;                                                             
>                 \
>  }
> @@ -108,12 +117,15 @@ prefix##_set_wakeup_time (efi_bool_t ena
>       struct ia64_fpreg fr[6];                                                
>                 \
>       efi_time_t *atm = NULL;                                                 
>                 \
>       efi_status_t ret;                                                       
>                 \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                                           
>                   \
>                                                                               
>                 \
>       if (tm)                                                                 
>                 \
>               atm = adjust_arg(tm);                                           
>                 \
>       ia64_save_scratch_fpregs(fr);                                           
>                 \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                                              
>                   \
>       ret = efi_call_##prefix((efi_set_wakeup_time_t *) 
> __va(runtime->set_wakeup_time),       \
>                               enabled, atm);                                  
>                 \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                                           
>                   \
>       ia64_load_scratch_fpregs(fr);                                           
>                 \
>       return ret;                                                             
>                 \
>  }
> @@ -126,13 +138,16 @@ prefix##_get_variable (efi_char16_t *nam
>       struct ia64_fpreg fr[6];                                                
>         \
>       u32 *aattr = NULL;                                                      
>                 \
>       efi_status_t ret;                                                       
>         \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                                           
>                   \
>                                                                               
>         \
>       if (attr)                                                               
>         \
>               aattr = adjust_arg(attr);                                       
>         \
>       ia64_save_scratch_fpregs(fr);                                           
>         \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                                              
>                   \
>       ret = efi_call_##prefix((efi_get_variable_t *) 
> __va(runtime->get_variable),     \
>                               adjust_arg(name), adjust_arg(vendor), aattr,    
>         \
>                               adjust_arg(data_size), adjust_arg(data));       
>         \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                                           
>                   \
>       ia64_load_scratch_fpregs(fr);                                           
>         \
>       return ret;                                                             
>         \
>  }
> @@ -143,10 +158,13 @@ prefix##_get_next_variable (unsigned lon
>  {                                                                            
>                 \
>       struct ia64_fpreg fr[6];                                                
>                 \
>       efi_status_t ret;                                                       
>                 \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                                           
>                   \
>                                                                               
>                 \
>       ia64_save_scratch_fpregs(fr);                                           
>                 \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                                              
>                   \
>       ret = efi_call_##prefix((efi_get_next_variable_t *) 
> __va(runtime->get_next_variable),   \
>                               adjust_arg(name_size), adjust_arg(name), 
> adjust_arg(vendor));   \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                                           
>                   \
>       ia64_load_scratch_fpregs(fr);                                           
>                 \
>       return ret;                                                             
>                 \
>  }
> @@ -158,11 +176,14 @@ prefix##_set_variable (efi_char16_t *nam
>  {                                                                            
>         \
>       struct ia64_fpreg fr[6];                                                
>         \
>       efi_status_t ret;                                                       
>         \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                                           
>                   \
>                                                                               
>         \
>       ia64_save_scratch_fpregs(fr);                                           
>         \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                                              
>                   \
>       ret = efi_call_##prefix((efi_set_variable_t *) 
> __va(runtime->set_variable),     \
>                               adjust_arg(name), adjust_arg(vendor), attr, 
> data_size,  \
>                               adjust_arg(data));                              
>         \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                                           
>                   \
>       ia64_load_scratch_fpregs(fr);                                           
>         \
>       return ret;                                                             
>         \
>  }
> @@ -173,10 +194,13 @@ prefix##_get_next_high_mono_count (u32 *
>  {                                                                            
>                 \
>       struct ia64_fpreg fr[6];                                                
>                 \
>       efi_status_t ret;                                                       
>                 \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                                           
>                   \
>                                                                               
>                 \
>       ia64_save_scratch_fpregs(fr);                                           
>                 \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                                              
>                   \
>       ret = efi_call_##prefix((efi_get_next_high_mono_count_t *)              
>                 \
>                               __va(runtime->get_next_high_mono_count), 
> adjust_arg(count));    \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                                           
>                   \
>       ia64_load_scratch_fpregs(fr);                                           
>                 \
>       return ret;                                                             
>                 \
>  }
> @@ -188,14 +212,17 @@ prefix##_reset_system (int reset_type, e
>  {                                                                            
> \
>       struct ia64_fpreg fr[6];                                                
> \
>       efi_char16_t *adata = NULL;                                             
> \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                                           
>                   \
>                                                                               
> \
>       if (data)                                                               
> \
>               adata = adjust_arg(data);                                       
> \
>                                                                               
> \
>       ia64_save_scratch_fpregs(fr);                                           
> \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                                              
> \
>       efi_call_##prefix((efi_reset_system_t *) __va(runtime->reset_system),   
> \
>                         reset_type, status, data_size, adata);                
> \
>       /* should not return, but just in case... */                            
> \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                                           
>                   \
>       ia64_load_scratch_fpregs(fr);                                           
> \
>  }
>  
> Index: xen-unstable.hg/xen/include/asm-ia64/linux-xen/asm/pal.h
> ===================================================================
> --- xen-unstable.hg.orig/xen/include/asm-ia64/linux-xen/asm/pal.h     
> 2008-02-05 16:18:41.000000000 +0900
> +++ xen-unstable.hg/xen/include/asm-ia64/linux-xen/asm/pal.h  2008-02-05 
> 16:18:53.000000000 +0900
> @@ -93,6 +93,9 @@
>  
>  #include <linux/types.h>
>  #include <asm/fpu.h>
> +#ifdef XEN
> +#include <linux/efi.h>
> +#endif
>  
>  /*
>   * Data types needed to pass information into PAL procedures and
> @@ -791,29 +794,41 @@ extern void ia64_load_scratch_fpregs (st
>  
>  #define PAL_CALL(iprv,a0,a1,a2,a3) do {                      \
>       struct ia64_fpreg fr[6];                        \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                   \
>       ia64_save_scratch_fpregs(fr);                   \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                      \
>       iprv = ia64_pal_call_static(a0, a1, a2, a3);    \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                   \
>       ia64_load_scratch_fpregs(fr);                   \
>  } while (0)
>  
>  #define PAL_CALL_STK(iprv,a0,a1,a2,a3) do {          \
>       struct ia64_fpreg fr[6];                        \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                   \
>       ia64_save_scratch_fpregs(fr);                   \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                      \
>       iprv = ia64_pal_call_stacked(a0, a1, a2, a3);   \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                   \
>       ia64_load_scratch_fpregs(fr);                   \
>  } while (0)
>  
>  #define PAL_CALL_PHYS(iprv,a0,a1,a2,a3) do {                 \
>       struct ia64_fpreg fr[6];                                \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                           \
>       ia64_save_scratch_fpregs(fr);                           \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                              \
>       iprv = ia64_pal_call_phys_static(a0, a1, a2, a3);       \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                           \
>       ia64_load_scratch_fpregs(fr);                           \
>  } while (0)
>  
>  #define PAL_CALL_PHYS_STK(iprv,a0,a1,a2,a3) do {             \
>       struct ia64_fpreg fr[6];                                \
> +     XEN_EFI_RR_DECLARE(rr6, rr7);                           \
>       ia64_save_scratch_fpregs(fr);                           \
> +     XEN_EFI_RR_SAVE(rr6, rr7);                              \
>       iprv = ia64_pal_call_phys_stacked(a0, a1, a2, a3);      \
> +     XEN_EFI_RR_RESTORE(rr6, rr7);                           \
>       ia64_load_scratch_fpregs(fr);                           \
>  } while (0)
>  
> 

-- 
yamahata

_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel

<Prev in Thread] Current Thread [Next in Thread>
  • Re: [Xen-ia64-devel] [patch 10/12] ia64: kexec: Use a separate RID for EFI, Isaku Yamahata <=