Blackfin arch: Fix random crash issue found by Michael.
This is fixes a problem where we could jump to the wrong address. By doing a "p0 = reti; jump (p0)". If a different, higher level interrupt came in, just before, rather than returning to the calling function, we would return to a random place in the kernel. This very elegant fix from Bernd grabs the return location off the stack, and places it into P0, so when we do a return, it goes to the correct place. Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Bryan Wu <bryan.wu@analog.com>
This commit is contained in:
parent
7728ec33fa
commit
aa770aa790
|
@ -54,9 +54,11 @@ ENTRY(_ret_from_fork)
|
|||
[sp + PT_IPEND] = r0;
|
||||
/* do a 'fake' RTI by jumping to [RETI]
|
||||
* to avoid clearing supervisor mode in child
|
||||
*/
|
||||
*/
|
||||
r0 = [sp + PT_PC];
|
||||
[sp + PT_P0] = r0;
|
||||
|
||||
RESTORE_ALL_SYS
|
||||
p0 = reti;
|
||||
jump (p0);
|
||||
ENDPROC(_ret_from_fork)
|
||||
|
||||
|
|
Loading…
Reference in New Issue