X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fs390%2Fchar%2Fsclp.c;h=4138564402b8c2ee27b3bf04731bebe1c3caf35e;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=985d1613baaa59235d5c6a6edcb76e91f5fa9b0c;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c index 985d1613b..413856440 100644 --- a/drivers/s390/char/sclp.c +++ b/drivers/s390/char/sclp.c @@ -383,7 +383,6 @@ void sclp_sync_wait(void) { unsigned long psw_mask; - unsigned long flags; unsigned long cr0, cr0_sync; u64 timeout; @@ -396,11 +395,9 @@ sclp_sync_wait(void) 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; @@ -418,10 +415,11 @@ sclp_sync_wait(void) 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);