[xtensa-cvscommit] linux/arch/xtensa/kernel process.c,1.12,1.13 signal.c,1.9,1.10
Brought to you by:
zankel
|
From: <joe...@us...> - 2003-06-10 20:20:21
|
Update of /cvsroot/xtensa/linux/arch/xtensa/kernel
In directory sc8-pr-cvs1:/tmp/cvs-serv25089/arch/xtensa/kernel
Modified Files:
process.c signal.c
Log Message:
Cleanup #if statements. Turn coprocessor-state-management code into critical section. Remove buggy and redundant discard_my_cpstate().
Index: process.c
===================================================================
RCS file: /cvsroot/xtensa/linux/arch/xtensa/kernel/process.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** process.c 16 Apr 2003 00:44:22 -0000 1.12
--- process.c 10 Jun 2003 20:20:08 -0000 1.13
***************
*** 62,69 ****
asmlinkage void ret_from_fork(void);
- #if XCHAL_CP_NUM
void release_all_cp (struct task_struct *tsk)
{
int i;
for (i = 0; i < XCHAL_CP_MAX; i++) {
if (tsk == coproc_owners[i]) {
--- 62,71 ----
asmlinkage void ret_from_fork(void);
void release_all_cp (struct task_struct *tsk)
{
+ #if XCHAL_CP_NUM
int i;
+ unsigned long flags;
+ save_and_cli(flags);
for (i = 0; i < XCHAL_CP_MAX; i++) {
if (tsk == coproc_owners[i]) {
***************
*** 72,77 ****
}
}
}
- #endif /* XCHAL_HAVE_CP */
/*
--- 74,80 ----
}
}
+ restore_flags(flags);
+ #endif
}
/*
***************
*** 80,86 ****
void exit_thread(void)
{
- #if XCHAL_CP_NUM
release_all_cp(current);
- #endif
}
--- 83,87 ----
***************
*** 89,95 ****
/* Now, this task is no longer a kernel thread. */
current->thread.current_ds = USER_DS;
- #if XCHAL_CP_NUM
release_all_cp(current);
- #endif
}
--- 90,94 ----
***************
*** 358,361 ****
--- 357,361 ----
extern unsigned _xtensa_reginfo_table_size;
int i;
+ unsigned long flags;
/*
***************
*** 364,367 ****
--- 364,368 ----
* task are first saved to memory:
*/
+ save_and_cli(flags);
for (i = 0; i < XCHAL_CP_MAX; i++) {
if (tsk == coproc_owners[i]) {
***************
*** 372,375 ****
--- 373,377 ----
}
}
+ restore_flags(flags);
/* Now dump coprocessor & extra state: */
***************
*** 389,392 ****
--- 391,395 ----
extern unsigned _xtensa_reginfo_table_size;
int i;
+ unsigned long flags;
/* Make sure save area layouts match.
***************
*** 407,410 ****
--- 410,414 ----
* task are first invalidated.
*/
+ save_and_cli(flags);
for (i = 0; i < XCHAL_CP_MAX; i++) {
if (tsk == coproc_owners[i]) {
***************
*** 415,418 ****
--- 419,423 ----
}
}
+ restore_flags(flags);
/* Now restore coprocessor & extra state: */
Index: signal.c
===================================================================
RCS file: /cvsroot/xtensa/linux/arch/xtensa/kernel/signal.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** signal.c 2 May 2003 17:16:37 -0000 1.9
--- signal.c 10 Jun 2003 20:20:09 -0000 1.10
***************
*** 190,203 ****
};
! static inline void
! discard_my_cpstate(struct task_struct *tsk)
! {
! int i;
! for (i = 0; i < XCHAL_CP_NUM; i++)
! if (tsk == coproc_owners[i]) {
! xthal_invalidate_cp(i);
! coproc_owners[i] = 0;
! }
! }
static inline int
--- 190,194 ----
};
! extern void release_all_cp (struct task_struct *);
static inline int
***************
*** 212,216 ****
struct task_struct *tsk = current;
! discard_my_cpstate(tsk);
return __copy_from_user(tsk->thread.cpextra, buf, TOTAL_CPEXTRA_SIZE);
}
--- 203,207 ----
struct task_struct *tsk = current;
! release_all_cp(tsk);
return __copy_from_user(tsk->thread.cpextra, buf, TOTAL_CPEXTRA_SIZE);
}
***************
*** 299,302 ****
--- 290,296 ----
{
int i;
+ unsigned long flags;
+ save_and_cli(flags);
+
for (i = 0; i < XCHAL_CP_NUM; i++) {
if (tsk == coproc_owners[i]) {
***************
*** 312,315 ****
--- 306,310 ----
}
}
+ restore_flags(flags);
}
|