diff options
| -rw-r--r-- | arch/powerpc/kernel/smp-tbsync.c | 5 | ||||
| -rw-r--r-- | arch/ppc/kernel/smp-tbsync.c | 7 |
2 files changed, 7 insertions, 5 deletions
diff --git a/arch/powerpc/kernel/smp-tbsync.c b/arch/powerpc/kernel/smp-tbsync.c index f19e2e0e61e7..de59c6c31a5b 100644 --- a/arch/powerpc/kernel/smp-tbsync.c +++ b/arch/powerpc/kernel/smp-tbsync.c | |||
| @@ -45,8 +45,9 @@ void __devinit smp_generic_take_timebase(void) | |||
| 45 | { | 45 | { |
| 46 | int cmd; | 46 | int cmd; |
| 47 | u64 tb; | 47 | u64 tb; |
| 48 | unsigned long flags; | ||
| 48 | 49 | ||
| 49 | local_irq_disable(); | 50 | local_irq_save(flags); |
| 50 | while (!running) | 51 | while (!running) |
| 51 | barrier(); | 52 | barrier(); |
| 52 | rmb(); | 53 | rmb(); |
| @@ -70,7 +71,7 @@ void __devinit smp_generic_take_timebase(void) | |||
| 70 | set_tb(tb >> 32, tb & 0xfffffffful); | 71 | set_tb(tb >> 32, tb & 0xfffffffful); |
| 71 | enter_contest(tbsync->mark, -1); | 72 | enter_contest(tbsync->mark, -1); |
| 72 | } | 73 | } |
| 73 | local_irq_enable(); | 74 | local_irq_restore(flags); |
| 74 | } | 75 | } |
| 75 | 76 | ||
| 76 | static int __devinit start_contest(int cmd, long offset, int num) | 77 | static int __devinit start_contest(int cmd, long offset, int num) |
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 |
