NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

port-evbarm/51990: Regression data_abort_handler: data_aborts fsr=0x406 far=0xbfffeff5 on copyout in init



>Number:         51990
>Category:       port-evbarm
>Synopsis:       Regression data_abort_handler: data_aborts fsr=0x406 far=0xbfffeff5  on copyout in init
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    port-evbarm-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Feb 21 19:55:00 +0000 2017
>Originator:     Stephan Meisinger
>Release:        NetBSD 7.0 (and higher)
>Organization:
>Environment:
NetBSD  7.99.60 NetBSD 7.99.60 (GUMSTIX) #47: Tue Feb 21 20:23:40 CET 2017  root@netbsd:/usr/obj/sys/arch/evbarm/compile/GUMSTIX evbarm
>Description:
Booting a recent Gumstix fails with an data_abort_handler
Regression data_abort_handler: data_aborts fsr=0x406 far=0xbfffeff5

According to mailing list the issue was also detected on another Xscale board, but afaik not fixed:
https://mail-index.netbsd.org/port-arm/2015/03/13/msg002946.html

After going down the history. The data_aborts starting at 2012-09-22 01:00 UTC

this part of the commit changes the MMU code for all Xscale processors:
http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/arm/include/arm32/pmap.h.diff?r1=1.111&r2=1.112&f=h&only_with_tag=MAIN

from 
 #define PMAP_NEEDS_PTE_SYNC     0
to
 fallback behaviour


Restoring the behaviour solves the problem with the old build and also with current builds. Even through an additional fix is needed - introduced by this commit:
http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/arm/arm32/pmap.c.diff?r1=1.261&r2=1.262&only_with_tag=MAIN&f=h

Maybe this could also cause isses for other MMU configurations not supporting ARMV6 or ARMV7. 

Please also pull up fix on NetBSD 7 branch.
>How-To-Repeat:
boot Xscale Gumstix board from compact flash and select /sbin/init from SD-card
>Fix:
Index: sys/arch/arm/arm32/pmap.c
===================================================================
RCS file: /cvsroot/src/sys/arch/arm/arm32/pmap.c,v
retrieving revision 1.342
diff -u -r1.342 pmap.c
--- sys/arch/arm/arm32/pmap.c	23 Dec 2016 07:15:27 -0000	1.342
+++ sys/arch/arm/arm32/pmap.c	21 Feb 2017 19:33:40 -0000
@@ -1694,7 +1694,7 @@
 			/*
 			 * Page tables must have the cache-mode set correctly.
 			 */
-			const pt_entry_t npte = (pte & ~L2_S_CACHE_MASK)
+			const pt_entry_t npte = (opte & ~L2_S_CACHE_MASK)
 			    | pte_l2_s_cache_mode_pt;
 			l2pte_set(ptep, npte, opte);
 			PTE_SYNC(ptep);
Index: sys/arch/arm/include/arm32/pmap.h
===================================================================
RCS file: /cvsroot/src/sys/arch/arm/include/arm32/pmap.h,v
retrieving revision 1.144
diff -u -r1.144 pmap.h
--- sys/arch/arm/include/arm32/pmap.h	14 Jul 2016 05:00:51 -0000	1.144
+++ sys/arch/arm/include/arm32/pmap.h	21 Feb 2017 19:33:40 -0000
@@ -491,6 +491,8 @@
 #elif (ARM_MMU_SA1 == 0)
 #define	PMAP_NEEDS_PTE_SYNC	0
 #endif
+#elif (ARM_MMU_XSCALE > 0)
+#define PMAP_NEEDS_PTE_SYNC	0
 #endif
 #endif /* _KERNEL_OPT */



Home | Main Index | Thread Index | Old Index