On Thu, 7 Sep 2006 21:01:17 +0800, "Yu, Luming" wrote: >>>Did saved Os gp in SAL OS state somehow get overridden before >>>ia64_set_kernel_registers prior to invocation of ia64_init_handler? >>> >>>I assume the following code (in ia64_set_kernel_registers ) >>should restore >>>correct GP value. >>> >>>ia64_set_kernel_registers: >>> ... >>> ;; >>> ld8 r1=[temp4] // OS GP from SAL OS state >> >>Yes, but this gp value is physical address. >>In the next line, gp is changed to virtual address. >> >>DATA_PA_TO_VA(r1,temp1) >> >>This macro just sets region7 bit, so gp value becomes region7 address. > >Ok, could you please confirm what is the value of r1 before >DATA_PA_TO_VA(r1, temp1)? >I guess we need to set r1 = __gp in ia64_set_kernel_registers. >If not, this is a bug. Am I right? In the ia64_mca_init, the value of ia64_tpa(ia64_getreg(_IA64_REG_GP) is registered as gp value. When cpu comes into the above code, r1 is set to this value, I think. Therefore, r1 has physical address of __gp before DATA_PA_TO_VA(r1, temp1). How do you think? I think you are right, I also think r1 has to be set to __gp before calling ia64_init_handler. Regards, Takao Indoh - To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |