diff options
Diffstat (limited to 'arch/powerpc/kernel/process.c')
-rw-r--r-- | arch/powerpc/kernel/process.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index bfdd783e3916..5acb5a176dbe 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
@@ -1569,16 +1569,22 @@ void arch_release_task_struct(struct task_struct *t) | |||
1569 | */ | 1569 | */ |
1570 | int set_thread_tidr(struct task_struct *t) | 1570 | int set_thread_tidr(struct task_struct *t) |
1571 | { | 1571 | { |
1572 | int rc; | ||
1573 | |||
1572 | if (!cpu_has_feature(CPU_FTR_ARCH_300)) | 1574 | if (!cpu_has_feature(CPU_FTR_ARCH_300)) |
1573 | return -EINVAL; | 1575 | return -EINVAL; |
1574 | 1576 | ||
1575 | if (t != current) | 1577 | if (t != current) |
1576 | return -EINVAL; | 1578 | return -EINVAL; |
1577 | 1579 | ||
1578 | t->thread.tidr = assign_thread_tidr(); | 1580 | if (t->thread.tidr) |
1579 | if (t->thread.tidr < 0) | 1581 | return 0; |
1580 | return t->thread.tidr; | 1582 | |
1583 | rc = assign_thread_tidr(); | ||
1584 | if (rc < 0) | ||
1585 | return rc; | ||
1581 | 1586 | ||
1587 | t->thread.tidr = rc; | ||
1582 | mtspr(SPRN_TIDR, t->thread.tidr); | 1588 | mtspr(SPRN_TIDR, t->thread.tidr); |
1583 | 1589 | ||
1584 | return 0; | 1590 | return 0; |