diff options
author | William Lee Irwin III <wli@holomorphy.com> | 2007-03-12 20:08:25 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-03-12 20:08:25 -0400 |
commit | 54f565ea895b383b67a2d6e31d2e2fcac5e6c345 (patch) | |
tree | 82c9a38af3f9912ca3a4cb60e243a53151be5ac7 /arch/sparc/kernel/process.c | |
parent | c0a79b229ac0e3a96fc00d5be65a498ceb06ef63 (diff) |
[SPARC]: Fix TIF_USEDFPU flag atomicity
From: William Lee Irwin III <wli@holomorphy.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/kernel/process.c')
-rw-r--r-- | arch/sparc/kernel/process.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c index 113bd48a89bd..fc874e63a499 100644 --- a/arch/sparc/kernel/process.c +++ b/arch/sparc/kernel/process.c | |||
@@ -348,7 +348,7 @@ void exit_thread(void) | |||
348 | #ifndef CONFIG_SMP | 348 | #ifndef CONFIG_SMP |
349 | if(last_task_used_math == current) { | 349 | if(last_task_used_math == current) { |
350 | #else | 350 | #else |
351 | if(current_thread_info()->flags & _TIF_USEDFPU) { | 351 | if (test_thread_flag(TIF_USEDFPU)) { |
352 | #endif | 352 | #endif |
353 | /* Keep process from leaving FPU in a bogon state. */ | 353 | /* Keep process from leaving FPU in a bogon state. */ |
354 | put_psr(get_psr() | PSR_EF); | 354 | put_psr(get_psr() | PSR_EF); |
@@ -357,7 +357,7 @@ void exit_thread(void) | |||
357 | #ifndef CONFIG_SMP | 357 | #ifndef CONFIG_SMP |
358 | last_task_used_math = NULL; | 358 | last_task_used_math = NULL; |
359 | #else | 359 | #else |
360 | current_thread_info()->flags &= ~_TIF_USEDFPU; | 360 | clear_thread_flag(TIF_USEDFPU); |
361 | #endif | 361 | #endif |
362 | } | 362 | } |
363 | } | 363 | } |
@@ -371,7 +371,7 @@ void flush_thread(void) | |||
371 | #ifndef CONFIG_SMP | 371 | #ifndef CONFIG_SMP |
372 | if(last_task_used_math == current) { | 372 | if(last_task_used_math == current) { |
373 | #else | 373 | #else |
374 | if(current_thread_info()->flags & _TIF_USEDFPU) { | 374 | if (test_thread_flag(TIF_USEDFPU)) { |
375 | #endif | 375 | #endif |
376 | /* Clean the fpu. */ | 376 | /* Clean the fpu. */ |
377 | put_psr(get_psr() | PSR_EF); | 377 | put_psr(get_psr() | PSR_EF); |
@@ -380,7 +380,7 @@ void flush_thread(void) | |||
380 | #ifndef CONFIG_SMP | 380 | #ifndef CONFIG_SMP |
381 | last_task_used_math = NULL; | 381 | last_task_used_math = NULL; |
382 | #else | 382 | #else |
383 | current_thread_info()->flags &= ~_TIF_USEDFPU; | 383 | clear_thread_flag(TIF_USEDFPU); |
384 | #endif | 384 | #endif |
385 | } | 385 | } |
386 | 386 | ||
@@ -466,13 +466,13 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp, | |||
466 | #ifndef CONFIG_SMP | 466 | #ifndef CONFIG_SMP |
467 | if(last_task_used_math == current) { | 467 | if(last_task_used_math == current) { |
468 | #else | 468 | #else |
469 | if(current_thread_info()->flags & _TIF_USEDFPU) { | 469 | if (test_thread_flag(TIF_USEDFPU)) { |
470 | #endif | 470 | #endif |
471 | put_psr(get_psr() | PSR_EF); | 471 | put_psr(get_psr() | PSR_EF); |
472 | fpsave(&p->thread.float_regs[0], &p->thread.fsr, | 472 | fpsave(&p->thread.float_regs[0], &p->thread.fsr, |
473 | &p->thread.fpqueue[0], &p->thread.fpqdepth); | 473 | &p->thread.fpqueue[0], &p->thread.fpqdepth); |
474 | #ifdef CONFIG_SMP | 474 | #ifdef CONFIG_SMP |
475 | current_thread_info()->flags &= ~_TIF_USEDFPU; | 475 | clear_thread_flag(TIF_USEDFPU); |
476 | #endif | 476 | #endif |
477 | } | 477 | } |
478 | 478 | ||
@@ -609,13 +609,13 @@ int dump_fpu (struct pt_regs * regs, elf_fpregset_t * fpregs) | |||
609 | return 1; | 609 | return 1; |
610 | } | 610 | } |
611 | #ifdef CONFIG_SMP | 611 | #ifdef CONFIG_SMP |
612 | if (current_thread_info()->flags & _TIF_USEDFPU) { | 612 | if (test_thread_flag(TIF_USEDFPU)) { |
613 | put_psr(get_psr() | PSR_EF); | 613 | put_psr(get_psr() | PSR_EF); |
614 | fpsave(¤t->thread.float_regs[0], ¤t->thread.fsr, | 614 | fpsave(¤t->thread.float_regs[0], ¤t->thread.fsr, |
615 | ¤t->thread.fpqueue[0], ¤t->thread.fpqdepth); | 615 | ¤t->thread.fpqueue[0], ¤t->thread.fpqdepth); |
616 | if (regs != NULL) { | 616 | if (regs != NULL) { |
617 | regs->psr &= ~(PSR_EF); | 617 | regs->psr &= ~(PSR_EF); |
618 | current_thread_info()->flags &= ~(_TIF_USEDFPU); | 618 | clear_thread_flag(TIF_USEDFPU); |
619 | } | 619 | } |
620 | } | 620 | } |
621 | #else | 621 | #else |