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
