projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[cascardo/linux.git]
/
arch
/
mips
/
kernel
/
machine_kexec.c
diff --git
a/arch/mips/kernel/machine_kexec.c
b/arch/mips/kernel/machine_kexec.c
index
e0ad754
..
85beb9b
100644
(file)
--- a/
arch/mips/kernel/machine_kexec.c
+++ b/
arch/mips/kernel/machine_kexec.c
@@
-13,8
+13,8
@@
#include <asm/cacheflush.h>
#include <asm/page.h>
#include <asm/cacheflush.h>
#include <asm/page.h>
-
const extern
unsigned char relocate_new_kernel[];
-
const extern unsigned in
t relocate_new_kernel_size;
+
extern const
unsigned char relocate_new_kernel[];
+
extern const size_
t relocate_new_kernel_size;
extern unsigned long kexec_start_address;
extern unsigned long kexec_indirection_page;
extern unsigned long kexec_start_address;
extern unsigned long kexec_indirection_page;
@@
-40,6
+40,8
@@
machine_crash_shutdown(struct pt_regs *regs)
{
}
{
}
+typedef void (*noretfun_t)(void) __attribute__((noreturn));
+
void
machine_kexec(struct kimage *image)
{
void
machine_kexec(struct kimage *image)
{
@@
-51,7
+53,8
@@
machine_kexec(struct kimage *image)
(unsigned long)page_address(image->control_code_page);
kexec_start_address = image->start;
(unsigned long)page_address(image->control_code_page);
kexec_start_address = image->start;
- kexec_indirection_page = phys_to_virt(image->head & PAGE_MASK);
+ kexec_indirection_page =
+ (unsigned long) phys_to_virt(image->head & PAGE_MASK);
memcpy((void*)reboot_code_buffer, relocate_new_kernel,
relocate_new_kernel_size);
memcpy((void*)reboot_code_buffer, relocate_new_kernel,
relocate_new_kernel_size);
@@
-67,7
+70,7
@@
machine_kexec(struct kimage *image)
phys_to_virt(entry & PAGE_MASK) : ptr + 1) {
if (*ptr & IND_SOURCE || *ptr & IND_INDIRECTION ||
*ptr & IND_DESTINATION)
phys_to_virt(entry & PAGE_MASK) : ptr + 1) {
if (*ptr & IND_SOURCE || *ptr & IND_INDIRECTION ||
*ptr & IND_DESTINATION)
- *ptr = phys_to_virt(*ptr);
+ *ptr =
(unsigned long)
phys_to_virt(*ptr);
}
/*
}
/*
@@
-75,11
+78,8
@@
machine_kexec(struct kimage *image)
*/
local_irq_disable();
*/
local_irq_disable();
- flush_icache_range(reboot_code_buffer,
- reboot_code_buffer + KEXEC_CONTROL_CODE_SIZE);
-
- printk("Will call new kernel at %08x\n", image->start);
+ printk("Will call new kernel at %08lx\n", image->start);
printk("Bye ...\n");
printk("Bye ...\n");
- flush_cache_all();
- ((
void (*)(void))
reboot_code_buffer)();
+
__
flush_cache_all();
+ ((
noretfun_t)
reboot_code_buffer)();
}
}