{
unsigned long mask, cr0, cr0_saved;
u64 clock_saved;
- u64 end;
- mask = psw_kernel_bits | PSW_MASK_WAIT | PSW_MASK_EXT;
- end = get_clock() + (usecs << 12);
clock_saved = local_tick_disable();
+ set_clock_comparator(get_clock() + (usecs << 12));
__ctl_store(cr0_saved, 0, 0);
cr0 = (cr0_saved & 0xffff00e0) | 0x00000800;
__ctl_load(cr0 , 0, 0);
+ mask = psw_kernel_bits | PSW_MASK_WAIT | PSW_MASK_EXT;
lockdep_off();
- do {
- set_clock_comparator(end);
- trace_hardirqs_on();
- __load_psw_mask(mask);
- local_irq_disable();
- } while (get_clock() < end);
+ trace_hardirqs_on();
+ __load_psw_mask(mask);
+ local_irq_disable();
lockdep_on();
__ctl_load(cr0_saved, 0, 0);
local_tick_enable(clock_saved);