diff options
| author | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-01-06 17:31:35 -0500 |
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-01-06 17:32:03 -0500 |
| commit | 4ec3eb13634529c0bc7466658d84d0bbe3244aea (patch) | |
| tree | b491daac2ccfc7b8ca88e171a43f66888463568a /arch/s390/lib | |
| parent | 24056f525051a9e186af28904b396320e18bf9a0 (diff) | |
| parent | 15095bb0fe779c0403091bda7adce5fb3bb9ca35 (diff) | |
Merge branch 'smp' into misc
Conflicts:
arch/arm/kernel/entry-armv.S
arch/arm/mm/ioremap.c
Diffstat (limited to 'arch/s390/lib')
| -rw-r--r-- | arch/s390/lib/delay.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/arch/s390/lib/delay.c b/arch/s390/lib/delay.c index 752b362bf651..7c37ec359ec2 100644 --- a/arch/s390/lib/delay.c +++ b/arch/s390/lib/delay.c | |||
| @@ -29,17 +29,21 @@ static void __udelay_disabled(unsigned long long usecs) | |||
| 29 | { | 29 | { |
| 30 | unsigned long mask, cr0, cr0_saved; | 30 | unsigned long mask, cr0, cr0_saved; |
| 31 | u64 clock_saved; | 31 | u64 clock_saved; |
| 32 | u64 end; | ||
| 32 | 33 | ||
| 34 | mask = psw_kernel_bits | PSW_MASK_WAIT | PSW_MASK_EXT; | ||
| 35 | end = get_clock() + (usecs << 12); | ||
| 33 | clock_saved = local_tick_disable(); | 36 | clock_saved = local_tick_disable(); |
| 34 | set_clock_comparator(get_clock() + (usecs << 12)); | ||
| 35 | __ctl_store(cr0_saved, 0, 0); | 37 | __ctl_store(cr0_saved, 0, 0); |
| 36 | cr0 = (cr0_saved & 0xffff00e0) | 0x00000800; | 38 | cr0 = (cr0_saved & 0xffff00e0) | 0x00000800; |
| 37 | __ctl_load(cr0 , 0, 0); | 39 | __ctl_load(cr0 , 0, 0); |
| 38 | mask = psw_kernel_bits | PSW_MASK_WAIT | PSW_MASK_EXT; | ||
| 39 | lockdep_off(); | 40 | lockdep_off(); |
| 40 | trace_hardirqs_on(); | 41 | do { |
| 41 | __load_psw_mask(mask); | 42 | set_clock_comparator(end); |
| 42 | local_irq_disable(); | 43 | trace_hardirqs_on(); |
| 44 | __load_psw_mask(mask); | ||
| 45 | local_irq_disable(); | ||
| 46 | } while (get_clock() < end); | ||
| 43 | lockdep_on(); | 47 | lockdep_on(); |
| 44 | __ctl_load(cr0_saved, 0, 0); | 48 | __ctl_load(cr0_saved, 0, 0); |
| 45 | local_tick_enable(clock_saved); | 49 | local_tick_enable(clock_saved); |
