On Thu, 2009-07-23 at 01:25 -0400, Mike Frysinger wrote:
> On Thu, Jul 23, 2009 at 00:02, gyang wrote:
> > On Wed, 2009-07-22 at 09:47 -0400, Robin Getz wrote:
> >> On Wed 22 Jul 2009 07:56, [email protected] pondered:
> >> >     Revision
> >> >     7059 
> >> > <http://blackfin.uclinux.org/gf/project/linux-kernel/scmsvn/?action=browse&path=/&view=rev&root=linux-kernel&revision=7059>
> >> >     Author
> >> >     gyang <http://blackfin.uclinux.org/gf/user/gyang/>
> >> >     Date
> >> >     2009-07-22 06:56:24 -0500 (Wed, 22 Jul 2009)
> >> >
> >> >
> >> > Log Message
> >> >
> >> > Bug [#5153] <http://blackfin.uclinux.org/gf/tracker/5153> , fix mmap05 
> >> > fail, the SAVE_ALL_SYS cause seqstat changed, so send a wrong signal.
> >> >
> >> > Modified Paths
> >> >
> >> >
> >> > *   trunk/arch/blackfin/include/asm/pda.h
> >> > *   trunk/arch/blackfin/kernel/asm-offsets.c
> >> > *   trunk/arch/blackfin/mach-common/entry.S
> >> >
> >> >
> >> > Diff
> >> >
> >> >
> >> > Modified: trunk/arch/blackfin/include/asm/pda.h (7058 => 7059)
> >> >
> >> >
> >> > --- trunk/arch/blackfin/include/asm/pda.h   2009-07-22 11:56:09 UTC (rev 
> >> > 7058)
> >> > +++ trunk/arch/blackfin/include/asm/pda.h   2009-07-22 11:56:24 UTC (rev 
> >> > 7059)
> >> > @@ -60,6 +60,7 @@
> >> >     unsigned long icplb_fault_addr;
> >> >     unsigned long retx;
> >> >     unsigned long seqstat;
> >> > +   unsigned long seqstat_l5;       /* saved seqstat in 
> >> > _exception_to_level5 */
> >> >     unsigned int __nmi_count;       /* number of times NMI asserted on 
> >> > this CPU */
> >> >  };
> >> >
> >> >
> >> >
> >> > Modified: trunk/arch/blackfin/kernel/asm-offsets.c (7058 => 7059)
> >> >
> >> >
> >> > --- trunk/arch/blackfin/kernel/asm-offsets.c        2009-07-22 11:56:09 
> >> > UTC (rev 7058)
> >> > +++ trunk/arch/blackfin/kernel/asm-offsets.c        2009-07-22 11:56:24 
> >> > UTC (rev 7059)
> >> > @@ -153,6 +153,7 @@
> >> >     DEFINE(PDA_ICPLB, offsetof(struct blackfin_pda, icplb_fault_addr));
> >> >     DEFINE(PDA_RETX, offsetof(struct blackfin_pda, retx));
> >> >     DEFINE(PDA_SEQSTAT, offsetof(struct blackfin_pda, seqstat));
> >> > +   DEFINE(PDA_SEQSTAT_L5, offsetof(struct blackfin_pda, seqstat_l5));
> >> >  #ifdef CONFIG_SMP
> >> >     /* Inter-core lock (in L2 SRAM) */
> >> >     DEFINE(SIZEOF_CORELOCK, sizeof(struct corelock_slot));
> >> >
> >> >
> >> > Modified: trunk/arch/blackfin/mach-common/entry.S (7058 => 7059)
> >> >
> >> >
> >> > --- trunk/arch/blackfin/mach-common/entry.S 2009-07-22 11:56:09 UTC (rev 
> >> > 7058)
> >> > +++ trunk/arch/blackfin/mach-common/entry.S 2009-07-22 11:56:24 UTC (rev 
> >> > 7059)
> >> > @@ -435,6 +435,22 @@
> >> >  ENDPROC(_double_fault)
> >> >
> >> >  ENTRY(_exception_to_level5)
> >> > +   /*
> >> > +    * The call of SAVE_ALL_SYS may cause cplb exceptions,
> >> > +    * the seqstat then be changed, so we save the seqstat to pda.
> >> > +    */
> >> > +   EX_SCRATCH_REG = sp;
> >> > +   GET_PDA_SAFE(sp);
> >> > +   sp = [sp + PDA_EXSTACK];
> >> > +   [--sp] = (r7:7,p5:5);
> >> > +
> >> > +   GET_PDA(p5, r7);
> >> > +   r7 = SEQSTAT;
> >> > +   [p5 + PDA_SEQSTAT_L5] = r7;
> >> > +
> >> > +   (r7:7,p5:5) = [sp++];
> >> > +   sp = EX_SCRATCH_REG;
> >> > +
> >> >     SAVE_ALL_SYS
> >> >
> >> >     GET_PDA(p5, r7);        /* Fetch current PDA */
> >> > @@ -444,6 +460,9 @@
> >> >     r6 = [p5 + PDA_SYSCFG];
> >> >     [sp + PT_SYSCFG] = r6;
> >> >
> >> > +   r6 = [p5 + PDA_SEQSTAT_L5]; /* Read back the seqstat */
> >> > +   [sp + PT_SEQSTAT] = r6;
> >>
> >> ?
> >>
> >> Don't you want the Level3 SEQSTAT on the frame? otherwise - it will print 
> >> out the wrong seqstat when the traps_c code is run.
> >
> > I now find that the SEQSTAT is not a problem.
> 
> so you'll revert this change ?
I'm trying another method.
Can we load the cplb entry that covered the SP, before lowering to EVT5?
It's a little ugly, because the frame by SAVE_ALL_SYS may across pages.
It means we may need setting 2 entries together, which is not the
thought of MPU.

> 
> > But cpu_pda[].dcplb_fault_addr will be wrong in trap_c.
> 
> why ?  because after lowering to EVT5 we took a miss and that then
> clobbered the fault addr that was stored before lowering ?
> -mike
Yes. 
Is there any other concern about this patch?
-Graff

_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to