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
|