diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-31 23:41:53 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-31 23:41:53 -0400 |
commit | d6dd9e93c7531fa31370e27d053a3940d8d662fb (patch) | |
tree | afab573031b3f0b9bbe5e417a890f7cae09a7224 /arch/mips/kernel/machine_kexec.c | |
parent | dd9cd6d4351076c78bb8c0f9146d1904b481fdbb (diff) | |
parent | b4b2917cc8babe8eaf4bc133bca31b11ed7dac13 (diff) |
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (50 commits)
[MIPS] Add smp_call_function_single()
[MIPS] thread_info.h: kmalloc + memset conversion to kzalloc
[MIPS] Kexec: Fix several 64-bit bugs.
[MIPS] Kexec: Fix several warnings.
[MIPS] DDB5477: Remove support
[MIPS] Fulong: Remove unneeded header file
[MIPS] Cobalt: Enable UART on RaQ1
[MIPS] Remove unused GROUP_TOSHIBA_NAMES
[MIPS] remove some duplicate includes
[MIPS] Oprofile: Fix rm9000 performance counter handler
[MIPS] Use -Werror on subdirectories which build cleanly.
[MIPS] Yosemite: Fix warning.
[MIPS] PMON: Fix cpustart declaration.
[MIPS] Yosemite: Only build ll_ht_smp_irq_handler() if HYPERTRANSPORT.
[MIPS] Yosemite: Fix build error due to undeclared titan_mailbox_irq().
[MIPS] Yosemite: Don't declare titan_mailbox_irq() as asmlinkage.
[MIPS] Yosemite: Fix warnings in i2c-yoesmite by deleting the unused code.
[MIPS] Delete unused arch/mips/gt64120/common/
[MIPS] Fix build warning in unaligned load/store emulator.
[MIPS] IP32: Don't ignore request_irq's return value.
...
Diffstat (limited to 'arch/mips/kernel/machine_kexec.c')
-rw-r--r-- | arch/mips/kernel/machine_kexec.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/arch/mips/kernel/machine_kexec.c b/arch/mips/kernel/machine_kexec.c index 8f42fa85ac9e..22960d67cf07 100644 --- a/arch/mips/kernel/machine_kexec.c +++ b/arch/mips/kernel/machine_kexec.c | |||
@@ -14,7 +14,7 @@ | |||
14 | #include <asm/page.h> | 14 | #include <asm/page.h> |
15 | 15 | ||
16 | extern const unsigned char relocate_new_kernel[]; | 16 | extern const unsigned char relocate_new_kernel[]; |
17 | extern const unsigned int relocate_new_kernel_size; | 17 | extern const size_t relocate_new_kernel_size; |
18 | 18 | ||
19 | extern unsigned long kexec_start_address; | 19 | extern unsigned long kexec_start_address; |
20 | extern unsigned long kexec_indirection_page; | 20 | extern unsigned long kexec_indirection_page; |
@@ -40,6 +40,8 @@ machine_crash_shutdown(struct pt_regs *regs) | |||
40 | { | 40 | { |
41 | } | 41 | } |
42 | 42 | ||
43 | typedef void (*noretfun_t)(void) __attribute__((noreturn)); | ||
44 | |||
43 | void | 45 | void |
44 | machine_kexec(struct kimage *image) | 46 | machine_kexec(struct kimage *image) |
45 | { | 47 | { |
@@ -51,7 +53,8 @@ machine_kexec(struct kimage *image) | |||
51 | (unsigned long)page_address(image->control_code_page); | 53 | (unsigned long)page_address(image->control_code_page); |
52 | 54 | ||
53 | kexec_start_address = image->start; | 55 | kexec_start_address = image->start; |
54 | kexec_indirection_page = phys_to_virt(image->head & PAGE_MASK); | 56 | kexec_indirection_page = |
57 | (unsigned long) phys_to_virt(image->head & PAGE_MASK); | ||
55 | 58 | ||
56 | memcpy((void*)reboot_code_buffer, relocate_new_kernel, | 59 | memcpy((void*)reboot_code_buffer, relocate_new_kernel, |
57 | relocate_new_kernel_size); | 60 | relocate_new_kernel_size); |
@@ -67,7 +70,7 @@ machine_kexec(struct kimage *image) | |||
67 | phys_to_virt(entry & PAGE_MASK) : ptr + 1) { | 70 | phys_to_virt(entry & PAGE_MASK) : ptr + 1) { |
68 | if (*ptr & IND_SOURCE || *ptr & IND_INDIRECTION || | 71 | if (*ptr & IND_SOURCE || *ptr & IND_INDIRECTION || |
69 | *ptr & IND_DESTINATION) | 72 | *ptr & IND_DESTINATION) |
70 | *ptr = phys_to_virt(*ptr); | 73 | *ptr = (unsigned long) phys_to_virt(*ptr); |
71 | } | 74 | } |
72 | 75 | ||
73 | /* | 76 | /* |
@@ -78,8 +81,8 @@ machine_kexec(struct kimage *image) | |||
78 | flush_icache_range(reboot_code_buffer, | 81 | flush_icache_range(reboot_code_buffer, |
79 | reboot_code_buffer + KEXEC_CONTROL_CODE_SIZE); | 82 | reboot_code_buffer + KEXEC_CONTROL_CODE_SIZE); |
80 | 83 | ||
81 | printk("Will call new kernel at %08x\n", image->start); | 84 | printk("Will call new kernel at %08lx\n", image->start); |
82 | printk("Bye ...\n"); | 85 | printk("Bye ...\n"); |
83 | flush_cache_all(); | 86 | flush_cache_all(); |
84 | ((void (*)(void))reboot_code_buffer)(); | 87 | ((noretfun_t) reboot_code_buffer)(); |
85 | } | 88 | } |