sclp_sync_wait(void)
{
unsigned long psw_mask;
- unsigned long flags;
unsigned long cr0, cr0_sync;
u64 timeout;
sclp_tod_from_jiffies(sclp_request_timer.expires -
jiffies);
}
- local_irq_save(flags);
/* Prevent bottom half from executing once we force interrupts open */
local_bh_disable();
/* Enable service-signal interruption, disable timer interrupts */
- trace_hardirqs_on();
__ctl_store(cr0, 0, 0);
cr0_sync = cr0;
cr0_sync |= 0x00000200;
barrier();
cpu_relax();
}
- local_irq_disable();
+ /* Restore interrupt settings */
+ asm volatile ("SSM 0(%0)"
+ : : "a" (&psw_mask) : "memory");
__ctl_load(cr0, 0, 0);
- _local_bh_enable();
- local_irq_restore(flags);
+ __local_bh_enable();
}
EXPORT_SYMBOL(sclp_sync_wait);