[patch] ia64: make PA() work for both physical identity-mapped virtual addresses
Simon Horman
horms at verge.net.au
Mon Oct 6 17:32:10 EDT 2008
On Mon, Oct 06, 2008 at 09:24:03AM -0600, Bjorn Helgaas wrote:
> The EFI Runtime Services Table contains pointers to ia64 function
> descriptors. On existing, pre-Tiano, firmware, SetVirtualAddressMap()
> converts *all* these pointers from physical to virtual. On Tiano-based
> firmware, the pointer to the SetVirtualAddressMap() function descriptor
> is not converted, so it remains a physical pointer.
>
> The ia64 kexec purgatory patches the SetVirtualAddressMap() function
> descriptor so that when the new kernel calls SetVirtualAddressMap(), it
> never reaches firmware. Instead, it calls a dummy function that just
> returns success.
>
> Purgatory runs in physical mode, so it must convert the pointer from the
> RuntimeServicesTable to a physical address. This patch makes that
> conversion work both for old firmware (where the pointer is an identity-
> mapped virtual address) and new Tiano firmware (where the pointer is a
> physical address).
>
> Without this patch, kexec on Tiano firmware causes an MCA because
> ia64_env_setup() subtracts PAGE_OFFSET from a physical address and ends
> up with an invalid physical address. Referencing that address causes
> the MCA.
>
> Signed-off-by: Bjorn Helgaas <bjorn.helgaas at hp.com>
Thanks Bjorn, applied.
--
Simon Horman
VA Linux Systems Japan K.K., Sydney, Australia Satellite Office
H: www.vergenet.net/~horms/ W: www.valinux.co.jp/en
More information about the kexec
mailing list