SEQSTAT  in level 3 is the same as that in consequent software raised
level 5. So, it is on the stack frame.

Graf is trying a better solution to avoid cplb missing by load missing
cplb of current kernel stack into cplb table before raise level 5 in
level 3.


Sonic



-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of
Robin Getz
Sent: Wednesday, July 22, 2009 9:47 PM
To: [email protected]
Cc: [email protected]
Subject: Re: [Linux-kernel-commits] [7059] trunk/arch/blackfin: Bug
[#5153],fix mmap05 fail, the SAVE_ALL_SYS cause seqstat changed,so send
a wrong signal.

On Wed 22 Jul 2009 07:56, [email protected] pondered:
>       Revision
>       7059
<http://blackfin.uclinux.org/gf/project/linux-kernel/scmsvn/?action=brow
se&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.

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

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

Reply via email to