On Tue, 2011-03-01 at 11:50 +0100, Kolja Waschk wrote:
> Hi,
> 
> >> http://www.ixo.de/tmp/till20110228.tgz
> 
> After verifying that no one yet checked, I updated the code in the archive to 
> even better reflect the "real" situation. The main thread emits a number on 
> stdout every second endlessly, waiting for SIGINT. To trigger the fault, it 
> is necessary to contact the net server (with wget as I described) in a fast 
> loop and after some time (about 2 seconds in my setup) the kernel fault 
> occurs.
> 
> Parameters to tune the load on the system are the frame size (MODT_BUFLEN in 
> modt.h) and a nop loop in till.c rtdm_loop() (line 84). The BF537 here is 
> running with 133 MHz bus clock, 533 MHz system clock.
> 

100% reproducible here as well. Does this fix help?

diff --git a/arch/blackfin/mach-common/entry.S 
b/arch/blackfin/mach-common/entry.S
index a5847f5..a7650ce 100644
--- a/arch/blackfin/mach-common/entry.S
+++ b/arch/blackfin/mach-common/entry.S
@@ -892,8 +892,17 @@ ENDPROC(_ret_from_exception)
 #ifdef CONFIG_IPIPE
 
 _resume_kernel_from_int:
+       r1 = LO(~0x8000) (Z);
+       r1 = r0 & r1;
+       r0 = 1;
+       r0 = r1 - r0;
+       r2 = r1 & r0;
+       cc = r2 == 0;
+       /* Sync the root stage only from the outer interrupt level. */
+       if !cc jump .Lnosync;
        r0.l = ___ipipe_sync_root;
        r0.h = ___ipipe_sync_root;
+       [--sp] = reti;
        [--sp] = rets;
        [--sp] = ( r7:4, p5:3 );
        SP += -12;
@@ -901,6 +910,8 @@ _resume_kernel_from_int:
        SP += 12;
        ( r7:4, p5:3 ) = [sp++];
        rets = [sp++];
+       reti = [sp++];
+.Lnosync:
        rts
 #else
 #define _resume_kernel_from_int         2f

-- 
Philippe.



_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to