linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / s390 / char / sclp.c
index 985d161..4138564 100644 (file)
@@ -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);