Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Jan 2013 15:49:17 +0900 (JST)
From:      Kohji Okuno <okuno.kohji@jp.panasonic.com>
To:        arm@freebsd.org
Subject:   I-cache maintenance fault in armv6 and armv7.
Message-ID:  <20130129.154917.323234014148633556.okuno.kohji@jp.panasonic.com>

next in thread | raw e-mail | index | archive | help
Hi,

I think that we need following linux fix.
Would you check this?

Regards,
 Kohji Okuno

<< src/sys/arm/arm/trap.c >>
+#if defined(CPU_ARMV6) || defined(CPU_ARMV7) || defined(CPU_CORTEXA)
+	{NULL,		"I-cache maintenance fault"},
+#else
 	{dab_buserr,	"External Linefetch Abort (S)"},
+#endif


<< linux commit >>
>From 8c0b742ca7a7d21de0ddc87eda6ef0b282e4de18 Mon Sep 17 00:00:00 2001
From: "Kirill A. Shutemov" <kirill@shutemov.name>
Date: Sat, 15 May 2010 09:57:06 +0100
Subject: [PATCH] ARM: 6134/1: Handle instruction cache maintenance fault
 properly

Between "clean D line..." and "invalidate I line" operations in
v7_coherent_user_range(), the memory page may get swapped out.
And the fault on "invalidate I line" could not be properly handled
causing the oops.

In ARMv6 "external abort on linefetch" replaced by "instruction cache
maintenance fault". Let's handle it as translation fault. It fixes the
issue.

I'm not sure if it's reasonable to check arch version in run-time.
Let's do it in compile time for now.

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Siarhei Siamashka <siarhei.siamashka@nokia.com>
Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
---
 arch/arm/mm/fault.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
index 9d40c34..92f5801 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -463,7 +463,12 @@ static struct fsr_info {
 	{ do_bad,		SIGILL,	 BUS_ADRALN,	"alignment exception"		   },
 	{ do_bad,		SIGKILL, 0,		"terminal exception"		   },
 	{ do_bad,		SIGILL,	 BUS_ADRALN,	"alignment exception"		   },
+/* Do we need runtime check ? */
+#if __LINUX_ARM_ARCH__ < 6
 	{ do_bad,		SIGBUS,	 0,		"external abort on linefetch"	   },
+#else
+	{ do_translation_fault,	SIGSEGV, SEGV_MAPERR,	"I-cache maintenance fault"	   },
+#endif
 	{ do_translation_fault,	SIGSEGV, SEGV_MAPERR,	"section translation fault"	   },
 	{ do_bad,		SIGBUS,	 0,		"external abort on linefetch"	   },
 	{ do_page_fault,	SIGSEGV, SEGV_MAPERR,	"page translation fault"	   },
-- 
1.7.7.6



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130129.154917.323234014148633556.okuno.kohji>