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

[Xen-ia64-devel] per hypervisor IVT table vs. global IVT table

To: "xen-ia64-devel" <xen-ia64-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-ia64-devel] per hypervisor IVT table vs. global IVT table
From: "Dong, Eddie" <eddie.dong@xxxxxxxxx>
Date: Wed, 6 Feb 2008 15:32:37 +0800
Cc: "Luck, Tony" <tony.luck@xxxxxxxxx>
Delivery-date: Tue, 05 Feb 2008 23:39:26 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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/cgi-bin/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AchoknJD5PFZNlpgS/WOFNHG3uIAdw==
Thread-topic: per hypervisor IVT table vs. global IVT table
All:
        If we use single IVT table, the pv_ops code will look like:

ALT0:
        breg0 = pv_ops base
        breg0 += offset for this pv_ops
        breg1 = return address;
        br  breg0.              /* pv_ops clobbered breg0/breg1 */

        That means we have to use 2 BR clobber register.

        Or we can use X86 hypercall page like technique to copy those
hooks
to a common page to avoid breg0. This make ALT0 same with following
ALT1.

        If we use per hypervisor IVT table at compile time. We could do:

ALT1:
#define ASM_READ_IVR
#if XEN
        breg1 = return address
        br    pv_ops_api_readivr
#endif
        When pv_ops_api_readivr is hooked, it do read_ivr_code.

        Or we can just do:

ALT2:
#define ASM_READ_IVR
#ifdef XEN
        read_ivr_code
#endif

        ALT1 is more like X86 pv_ops that some initialization code will
hook,
ALT2 can save an additional br register, and thus probably less change
to Linux
IVT code.
        In terms of former approach, binary patching can patch ALT1 code
back
to ALT2 solutuon to avoid the indirection call cost if we follow same
approach 
with X86.
        Which ALT should we pursue first?
thx, eddie

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

<Prev in Thread] Current Thread [Next in Thread>