diff options
author | Maxim Uvarov <maxim.uvarov@oracle.com> | 2012-01-15 23:02:50 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-03-12 13:32:40 -0400 |
commit | 645507f2e948f022a30f1bc8811ca3b516c6c9bf (patch) | |
tree | e9f87cdfe611f10de1352b6ed66052ec01b10296 | |
parent | bb3b47ceebd8a5b8a8684fde8e2ba0b8f0127d05 (diff) |
watchdog: hpwdt: clean up set_memory_x call for 32 bit
commit 97d2a10d5804d585ab0b58efbd710948401b886a upstream.
1. address has to be page aligned.
2. set_memory_x uses page size argument, not size.
Bug causes with following commit:
commit da28179b4e90dda56912ee825c7eaa62fc103797
Author: Mingarelli, Thomas <Thomas.Mingarelli@hp.com>
Date: Mon Nov 7 10:59:00 2011 +0100
watchdog: hpwdt: Changes to handle NX secure bit in 32bit path
commit e67d668e147c3b4fec638c9e0ace04319f5ceccd upstream.
This patch makes use of the set_memory_x() kernel API in order
to make necessary BIOS calls to source NMIs.
Signed-off-by: Maxim Uvarov <maxim.uvarov@oracle.com>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/watchdog/hpwdt.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c index 9cb60dfbb59..d4ab797cf75 100644 --- a/drivers/watchdog/hpwdt.c +++ b/drivers/watchdog/hpwdt.c | |||
@@ -216,7 +216,7 @@ static int __devinit cru_detect(unsigned long map_entry, | |||
216 | 216 | ||
217 | cmn_regs.u1.reax = CRU_BIOS_SIGNATURE_VALUE; | 217 | cmn_regs.u1.reax = CRU_BIOS_SIGNATURE_VALUE; |
218 | 218 | ||
219 | set_memory_x((unsigned long)bios32_entrypoint, (2 * PAGE_SIZE)); | 219 | set_memory_x((unsigned long)bios32_map, 2); |
220 | asminline_call(&cmn_regs, bios32_entrypoint); | 220 | asminline_call(&cmn_regs, bios32_entrypoint); |
221 | 221 | ||
222 | if (cmn_regs.u1.ral != 0) { | 222 | if (cmn_regs.u1.ral != 0) { |
@@ -235,7 +235,8 @@ static int __devinit cru_detect(unsigned long map_entry, | |||
235 | cru_rom_addr = | 235 | cru_rom_addr = |
236 | ioremap(cru_physical_address, cru_length); | 236 | ioremap(cru_physical_address, cru_length); |
237 | if (cru_rom_addr) { | 237 | if (cru_rom_addr) { |
238 | set_memory_x((unsigned long)cru_rom_addr, cru_length); | 238 | set_memory_x((unsigned long)cru_rom_addr & PAGE_MASK, |
239 | (cru_length + PAGE_SIZE - 1) >> PAGE_SHIFT); | ||
239 | retval = 0; | 240 | retval = 0; |
240 | } | 241 | } |
241 | } | 242 | } |