Commit f13ae30e authored by Alex Chiang's avatar Alex Chiang Committed by Tony Luck

[IA64] allow user to force_pal_cache_flush

The sequence executed in check_sal_cache_flush:

	- pend a timer interrupt
	- call SAL_CACHE_FLUSH
	- see if interrupt is still pending

can hang HP machines with buggy SAL_CACHE_FLUSH implementations.

Provide a kernel command-line argument to allow users skip this
check if desired. Using this parameter will force ia64_sal_cache_flush
to call ia64_pal_cache_flush() instead of SAL_CACHE_FLUSH.
Signed-off-by: default avatarAlex Chiang <achiang@hp.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 8a3360f0
...@@ -689,6 +689,12 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -689,6 +689,12 @@ and is between 256 and 4096 characters. It is defined in the file
floppy= [HW] floppy= [HW]
See Documentation/floppy.txt. See Documentation/floppy.txt.
force_pal_cache_flush
[IA-64] Avoid check_sal_cache_flush which may hang on
buggy SAL_CACHE_FLUSH implementations. Using this
parameter will force ia64_sal_cache_flush to call
ia64_pal_cache_flush instead of SAL_CACHE_FLUSH.
gamecon.map[2|3]= gamecon.map[2|3]=
[HW,JOY] Multisystem joystick and NES/SNES/PSX pad [HW,JOY] Multisystem joystick and NES/SNES/PSX pad
support via parallel port (up to 5 devices per port) support via parallel port (up to 5 devices per port)
......
...@@ -229,6 +229,14 @@ static void __init sal_desc_ap_wakeup(void *p) { } ...@@ -229,6 +229,14 @@ static void __init sal_desc_ap_wakeup(void *p) { }
*/ */
static int sal_cache_flush_drops_interrupts; static int sal_cache_flush_drops_interrupts;
static int __init
force_pal_cache_flush(char *str)
{
sal_cache_flush_drops_interrupts = 1;
return 0;
}
early_param("force_pal_cache_flush", force_pal_cache_flush);
void __init void __init
check_sal_cache_flush (void) check_sal_cache_flush (void)
{ {
...@@ -237,6 +245,9 @@ check_sal_cache_flush (void) ...@@ -237,6 +245,9 @@ check_sal_cache_flush (void)
u64 vector, cache_type = 3; u64 vector, cache_type = 3;
struct ia64_sal_retval isrv; struct ia64_sal_retval isrv;
if (sal_cache_flush_drops_interrupts)
return;
cpu = get_cpu(); cpu = get_cpu();
local_irq_save(flags); local_irq_save(flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment