diff options
Diffstat (limited to 'arch/arm/kernel/process.c')
| -rw-r--r-- | arch/arm/kernel/process.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index a4a9cc88bec7..aaf51159203a 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/utsname.h> | 29 | #include <linux/utsname.h> |
| 30 | #include <linux/uaccess.h> | 30 | #include <linux/uaccess.h> |
| 31 | 31 | ||
| 32 | #include <asm/cacheflush.h> | ||
| 32 | #include <asm/leds.h> | 33 | #include <asm/leds.h> |
| 33 | #include <asm/processor.h> | 34 | #include <asm/processor.h> |
| 34 | #include <asm/system.h> | 35 | #include <asm/system.h> |
| @@ -84,10 +85,9 @@ __setup("hlt", hlt_setup); | |||
| 84 | 85 | ||
| 85 | void arm_machine_restart(char mode, const char *cmd) | 86 | void arm_machine_restart(char mode, const char *cmd) |
| 86 | { | 87 | { |
| 87 | /* | 88 | /* Disable interrupts first */ |
| 88 | * Clean and disable cache, and turn off interrupts | 89 | local_irq_disable(); |
| 89 | */ | 90 | local_fiq_disable(); |
| 90 | cpu_proc_fin(); | ||
| 91 | 91 | ||
| 92 | /* | 92 | /* |
| 93 | * Tell the mm system that we are going to reboot - | 93 | * Tell the mm system that we are going to reboot - |
| @@ -96,6 +96,15 @@ void arm_machine_restart(char mode, const char *cmd) | |||
| 96 | */ | 96 | */ |
| 97 | setup_mm_for_reboot(mode); | 97 | setup_mm_for_reboot(mode); |
| 98 | 98 | ||
| 99 | /* Clean and invalidate caches */ | ||
| 100 | flush_cache_all(); | ||
| 101 | |||
| 102 | /* Turn off caching */ | ||
| 103 | cpu_proc_fin(); | ||
| 104 | |||
| 105 | /* Push out any further dirty data, and ensure cache is empty */ | ||
| 106 | flush_cache_all(); | ||
| 107 | |||
| 99 | /* | 108 | /* |
| 100 | * Now call the architecture specific reboot code. | 109 | * Now call the architecture specific reboot code. |
| 101 | */ | 110 | */ |
