Message ID | 1367893978.3083.13.camel@ThinkPad-T5421 (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On Tue, 2013-05-07 at 10:32 +0800, Li Zhong wrote: > Saw this warning again, and this time from the ret_from_fork path. > > It seems we could clear the back chain earlier in copy_thread(), which > could cover both path, and also fix potential lockdep usage in > schedule_tail(), or exception occurred before we clear the back chain. Sorry, I made some mistake, please ignore this patch... It seems clearing the back chain shouldn't use kregs->gpr[1] below, it should be ((unsigned long*)sp)[0]. I'll send an updated version. Thanks, Zhong > > Signed-off-by: Li Zhong <zhong@linux.vnet.ibm.com> > --- > arch/powerpc/kernel/entry_32.S | 2 -- > arch/powerpc/kernel/entry_64.S | 2 -- > arch/powerpc/kernel/process.c | 1 + > 3 files changed, 1 insertions(+), 4 deletions(-) > > diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S > index e514de5..d22e73e 100644 > --- a/arch/powerpc/kernel/entry_32.S > +++ b/arch/powerpc/kernel/entry_32.S > @@ -439,8 +439,6 @@ ret_from_fork: > ret_from_kernel_thread: > REST_NVGPRS(r1) > bl schedule_tail > - li r3,0 > - stw r3,0(r1) > mtlr r14 > mr r3,r15 > PPC440EP_ERR42 > diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S > index 3fe5259..48e8a86 100644 > --- a/arch/powerpc/kernel/entry_64.S > +++ b/arch/powerpc/kernel/entry_64.S > @@ -376,8 +376,6 @@ _GLOBAL(ret_from_fork) > _GLOBAL(ret_from_kernel_thread) > bl .schedule_tail > REST_NVGPRS(r1) > - li r3,0 > - std r3,0(r1) > ld r14, 0(r14) > mtlr r14 > mr r3,r15 > diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c > index ceb4e7b..2c9fc5e 100644 > --- a/arch/powerpc/kernel/process.c > +++ b/arch/powerpc/kernel/process.c > @@ -973,6 +973,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, > */ > sp -= sizeof(struct pt_regs); > kregs = (struct pt_regs *) sp; > + kregs->gpr[1] = 0; > sp -= STACK_FRAME_OVERHEAD; > p->thread.ksp = sp; > p->thread.ksp_limit = (unsigned long)task_stack_page(p) +
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index e514de5..d22e73e 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S @@ -439,8 +439,6 @@ ret_from_fork: ret_from_kernel_thread: REST_NVGPRS(r1) bl schedule_tail - li r3,0 - stw r3,0(r1) mtlr r14 mr r3,r15 PPC440EP_ERR42 diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 3fe5259..48e8a86 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S @@ -376,8 +376,6 @@ _GLOBAL(ret_from_fork) _GLOBAL(ret_from_kernel_thread) bl .schedule_tail REST_NVGPRS(r1) - li r3,0 - std r3,0(r1) ld r14, 0(r14) mtlr r14 mr r3,r15 diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index ceb4e7b..2c9fc5e 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c @@ -973,6 +973,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, */ sp -= sizeof(struct pt_regs); kregs = (struct pt_regs *) sp; + kregs->gpr[1] = 0; sp -= STACK_FRAME_OVERHEAD; p->thread.ksp = sp; p->thread.ksp_limit = (unsigned long)task_stack_page(p) +
Saw this warning again, and this time from the ret_from_fork path. It seems we could clear the back chain earlier in copy_thread(), which could cover both path, and also fix potential lockdep usage in schedule_tail(), or exception occurred before we clear the back chain. Signed-off-by: Li Zhong <zhong@linux.vnet.ibm.com> --- arch/powerpc/kernel/entry_32.S | 2 -- arch/powerpc/kernel/entry_64.S | 2 -- arch/powerpc/kernel/process.c | 1 + 3 files changed, 1 insertions(+), 4 deletions(-)