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. But
cpu_pda[].dcplb_fault_addr will be wrong in trap_c.

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

Reply via email to