diff options
Diffstat (limited to 'arch/ppc/kernel/smp-tbsync.c')
-rw-r--r-- | arch/ppc/kernel/smp-tbsync.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/ppc/kernel/smp-tbsync.c b/arch/ppc/kernel/smp-tbsync.c index 1576758debaf..d0cf3f86931d 100644 --- a/arch/ppc/kernel/smp-tbsync.c +++ b/arch/ppc/kernel/smp-tbsync.c | |||
@@ -47,8 +47,9 @@ void __devinit | |||
47 | smp_generic_take_timebase( void ) | 47 | smp_generic_take_timebase( void ) |
48 | { | 48 | { |
49 | int cmd, tbl, tbu; | 49 | int cmd, tbl, tbu; |
50 | unsigned long flags; | ||
50 | 51 | ||
51 | local_irq_disable(); | 52 | local_irq_save(flags); |
52 | while( !running ) | 53 | while( !running ) |
53 | ; | 54 | ; |
54 | rmb(); | 55 | rmb(); |
@@ -64,7 +65,7 @@ smp_generic_take_timebase( void ) | |||
64 | tbu = tbsync->tbu; | 65 | tbu = tbsync->tbu; |
65 | tbsync->ack = 0; | 66 | tbsync->ack = 0; |
66 | if( cmd == kExit ) | 67 | if( cmd == kExit ) |
67 | return; | 68 | break; |
68 | 69 | ||
69 | if( cmd == kSetAndTest ) { | 70 | if( cmd == kSetAndTest ) { |
70 | while( tbsync->handshake ) | 71 | while( tbsync->handshake ) |
@@ -77,7 +78,7 @@ smp_generic_take_timebase( void ) | |||
77 | } | 78 | } |
78 | enter_contest( tbsync->mark, -1 ); | 79 | enter_contest( tbsync->mark, -1 ); |
79 | } | 80 | } |
80 | local_irq_enable(); | 81 | local_irq_restore(flags); |
81 | } | 82 | } |
82 | 83 | ||
83 | static int __devinit | 84 | static int __devinit |