On Fri, Aug 08, 2008 at 03:41:17PM +0900, SUZUKI Kazuhiro wrote:
> I think gp passed from SAL is changed to a virtual address by
> DATA_PA_TO_VA() in VIRTUAL_MODE_ENTER().
>
> #define DATA_PA_TO_VA(addr,temp) \
> mov temp = 0xf ;; \
> dep addr = temp, addr, 60, 4
>
> Could you please explain the issue a little more in detail?
The xen vmm image was made relocatable so that
xen text and data are located at the area starting at
#define KERNEL_START 0xf400000004000000
wherever the image is loaded.
So __gp is a value of 0xf400000004000000 + offset
and it's impossible to calculate __gp from the physical address
of __gp.
On the other hand the macro, DATA_PA_TO_VA(), gives
a value of 0xf000000000000000 + physical address.
The value points to the same physical memory location pointed
by __gp, so possibly the current code may just work.
But it worried me much so that I checked the linux
code to find the c/s f5a3f3dc189485d607fbd42678cc23958acc0a6e.
Yes, it's easy for me (and you) to port the following hunk of the c/s,
however it's difficult for me to test the handler.
thanks,
diff --git a/include/asm-ia64/mca_asm.h b/include/asm-ia64/mca_asm.h
index 27c9203..76203f9 100644
--- a/include/asm-ia64/mca_asm.h
+++ b/include/asm-ia64/mca_asm.h
@@ -197,9 +197,9 @@
movl temp2 = start_addr; \
;; \
mov cr.iip = temp2; \
+ movl gp = __gp \
;; \
DATA_PA_TO_VA(sp, temp1); \
- DATA_PA_TO_VA(gp, temp2); \
srlz.i; \
;; \
nop 1; \
--
yamahata
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|