aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Chiang <achiang@hp.com>2008-05-08 16:03:23 -0400
committerTony Luck <tony.luck@intel.com>2008-05-14 18:42:07 -0400
commitf13ae30e1397e3bfb38feb3b6e889af5d021f13d (patch)
tree4b82d1ee1e8bbb5f21d5f81bb0a73cf3daa8efb4
parent8a3360f06cd4d3b1d57f73e029f2f8b6057fdcba (diff)
[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: Alex Chiang <achiang@hp.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
-rw-r--r--Documentation/kernel-parameters.txt6
-rw-r--r--arch/ia64/kernel/sal.c11
2 files changed, 17 insertions, 0 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index cdd5b934f43e..654d630f6751 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -689,6 +689,12 @@ and is between 256 and 4096 characters. It is defined in the file
689 floppy= [HW] 689 floppy= [HW]
690 See Documentation/floppy.txt. 690 See Documentation/floppy.txt.
691 691
692 force_pal_cache_flush
693 [IA-64] Avoid check_sal_cache_flush which may hang on
694 buggy SAL_CACHE_FLUSH implementations. Using this
695 parameter will force ia64_sal_cache_flush to call
696 ia64_pal_cache_flush instead of SAL_CACHE_FLUSH.
697
692 gamecon.map[2|3]= 698 gamecon.map[2|3]=
693 [HW,JOY] Multisystem joystick and NES/SNES/PSX pad 699 [HW,JOY] Multisystem joystick and NES/SNES/PSX pad
694 support via parallel port (up to 5 devices per port) 700 support via parallel port (up to 5 devices per port)
diff --git a/arch/ia64/kernel/sal.c b/arch/ia64/kernel/sal.c
index a3022dc48ef8..7e0259709c04 100644
--- a/arch/ia64/kernel/sal.c
+++ b/arch/ia64/kernel/sal.c
@@ -229,6 +229,14 @@ static void __init sal_desc_ap_wakeup(void *p) { }
229 */ 229 */
230static int sal_cache_flush_drops_interrupts; 230static int sal_cache_flush_drops_interrupts;
231 231
232static int __init
233force_pal_cache_flush(char *str)
234{
235 sal_cache_flush_drops_interrupts = 1;
236 return 0;
237}
238early_param("force_pal_cache_flush", force_pal_cache_flush);
239
232void __init 240void __init
233check_sal_cache_flush (void) 241check_sal_cache_flush (void)
234{ 242{
@@ -237,6 +245,9 @@ check_sal_cache_flush (void)
237 u64 vector, cache_type = 3; 245 u64 vector, cache_type = 3;
238 struct ia64_sal_retval isrv; 246 struct ia64_sal_retval isrv;
239 247
248 if (sal_cache_flush_drops_interrupts)
249 return;
250
240 cpu = get_cpu(); 251 cpu = get_cpu();
241 local_irq_save(flags); 252 local_irq_save(flags);
242 253