summaryrefslogtreecommitdiffstats
path: root/purgatory
diff options
context:
space:
mode:
authorSimon Horman <horms@verge.net.au>2006-09-22 16:45:33 +0900
committerSimon Horman <horms@verge.net.au>2006-10-06 12:46:16 +0900
commit46ecc6c6c77b1fab20b08286209631a00eb1049e (patch)
treef935cf425d8a65c2bf54743ddeb58f29b551cc56 /purgatory
parentf7c2909515bd0080d9adf3e7923874bbc0ecc033 (diff)
downloadkexec-tools-46ecc6c6c77b1fab20b08286209631a00eb1049e.tar.gz
kexec-tools: Explain dummy set_virtual_address_map more clearly
Add a more verbose comment to explain why set_virtual_address_map is replaced why a dummy function Signed-Off-By: Simon Horman <horms@verge.net.au>
Diffstat (limited to 'purgatory')
-rw-r--r--purgatory/arch/ia64/purgatory-ia64.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/purgatory/arch/ia64/purgatory-ia64.c b/purgatory/arch/ia64/purgatory-ia64.c
index 661ab324..312cdcca 100644
--- a/purgatory/arch/ia64/purgatory-ia64.c
+++ b/purgatory/arch/ia64/purgatory-ia64.c
@@ -240,7 +240,22 @@ ia64_env_setup(struct ia64_boot_param *boot_param,
struct ia64_boot_param *new_boot_param =
(struct ia64_boot_param *) params->boot_param_base;
memcpy(new_boot_param, boot_param, 4096);
- /* patch efi_runtime->set_virtual_address_map to a dummy function */
+
+ /*
+ * patch efi_runtime->set_virtual_address_map to a dummy function
+ *
+ * The EFI specification mandates that set_virtual_address_map only
+ * takes effect the first time that it is called, and that
+ * subsequent calls will return error. By replacing it with a
+ * dummy function the new OS can think it is calling it again
+ * without either the OS or any buggy EFI implementations getting
+ * upset.
+ *
+ * Note: as the EFI specification says that set_virtual_address_map
+ * will only take affect the first time it is called, the mapping
+ * can't be updated, and thus mapping of the old and new OS really
+ * needs to be the same.
+ */
len = __dummy_efi_function_end - __dummy_efi_function;
memcpy(command_line + command_line_len,
__dummy_efi_function, len);