diff options
Diffstat (limited to 'drivers/s390/char/sclp.c')
| -rw-r--r-- | drivers/s390/char/sclp.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c index 3c8b25e6c34..1fd8f2193ed 100644 --- a/drivers/s390/char/sclp.c +++ b/drivers/s390/char/sclp.c | |||
| @@ -399,6 +399,7 @@ sclp_tod_from_jiffies(unsigned long jiffies) | |||
| 399 | void | 399 | void |
| 400 | sclp_sync_wait(void) | 400 | sclp_sync_wait(void) |
| 401 | { | 401 | { |
| 402 | unsigned long long old_tick; | ||
| 402 | unsigned long flags; | 403 | unsigned long flags; |
| 403 | unsigned long cr0, cr0_sync; | 404 | unsigned long cr0, cr0_sync; |
| 404 | u64 timeout; | 405 | u64 timeout; |
| @@ -419,11 +420,12 @@ sclp_sync_wait(void) | |||
| 419 | if (!irq_context) | 420 | if (!irq_context) |
| 420 | local_bh_disable(); | 421 | local_bh_disable(); |
| 421 | /* Enable service-signal interruption, disable timer interrupts */ | 422 | /* Enable service-signal interruption, disable timer interrupts */ |
| 423 | old_tick = local_tick_disable(); | ||
| 422 | trace_hardirqs_on(); | 424 | trace_hardirqs_on(); |
| 423 | __ctl_store(cr0, 0, 0); | 425 | __ctl_store(cr0, 0, 0); |
| 424 | cr0_sync = cr0; | 426 | cr0_sync = cr0; |
| 427 | cr0_sync &= 0xffff00a0; | ||
| 425 | cr0_sync |= 0x00000200; | 428 | cr0_sync |= 0x00000200; |
| 426 | cr0_sync &= 0xFFFFF3AC; | ||
| 427 | __ctl_load(cr0_sync, 0, 0); | 429 | __ctl_load(cr0_sync, 0, 0); |
| 428 | __raw_local_irq_stosm(0x01); | 430 | __raw_local_irq_stosm(0x01); |
| 429 | /* Loop until driver state indicates finished request */ | 431 | /* Loop until driver state indicates finished request */ |
| @@ -439,9 +441,9 @@ sclp_sync_wait(void) | |||
| 439 | __ctl_load(cr0, 0, 0); | 441 | __ctl_load(cr0, 0, 0); |
| 440 | if (!irq_context) | 442 | if (!irq_context) |
| 441 | _local_bh_enable(); | 443 | _local_bh_enable(); |
| 444 | local_tick_enable(old_tick); | ||
| 442 | local_irq_restore(flags); | 445 | local_irq_restore(flags); |
| 443 | } | 446 | } |
| 444 | |||
| 445 | EXPORT_SYMBOL(sclp_sync_wait); | 447 | EXPORT_SYMBOL(sclp_sync_wait); |
| 446 | 448 | ||
| 447 | /* Dispatch changes in send and receive mask to registered listeners. */ | 449 | /* Dispatch changes in send and receive mask to registered listeners. */ |
