[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>

authored by Alex Chiang and committed by Tony Luck f13ae30e 8a3360f0

+17
+6
Documentation/kernel-parameters.txt
··· 689 689 floppy= [HW] 690 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 698 gamecon.map[2|3]= 693 699 [HW,JOY] Multisystem joystick and NES/SNES/PSX pad 694 700 support via parallel port (up to 5 devices per port)
+11
arch/ia64/kernel/sal.c
··· 229 229 */ 230 230 static int sal_cache_flush_drops_interrupts; 231 231 232 + static int __init 233 + force_pal_cache_flush(char *str) 234 + { 235 + sal_cache_flush_drops_interrupts = 1; 236 + return 0; 237 + } 238 + early_param("force_pal_cache_flush", force_pal_cache_flush); 239 + 232 240 void __init 233 241 check_sal_cache_flush (void) 234 242 { ··· 244 236 int cpu; 245 237 u64 vector, cache_type = 3; 246 238 struct ia64_sal_retval isrv; 239 + 240 + if (sal_cache_flush_drops_interrupts) 241 + return; 247 242 248 243 cpu = get_cpu(); 249 244 local_irq_save(flags);