Skip to contentSkip to conversation

nds32:Renaming file and fixing the unaligned access handler

PATCH In review Nickhu 2 participants 5 messages May 7, 2018 – May 8, 2018

lore
Share & tools
lore

Nickhu

author
#0 lore raw

cover nds32:Renaming file and fixing the unaligned access handler

The name of /proc/sys/nds32/unaligned_acess spelled wrong, so we renaming it to /proc/sys/nds32/unaligned_access.

The unaligned access handler in nds32 goes wrong when the immediate field of load/store instruction is negative. We fix it by recongnizing whether the immediate field is positive or negative and then change the value of immediate filed to unsigned integer number.

Nickhu (2):
nds32: Renaming the file for unaligned access
nds32: Fix the unaligned access handler

 arch/nds32/mm/alignment.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
Signature · 1 line
2.17.0
author
#1 lore raw

PATCH 1/2 nds32: Renaming the file for unaligned access

Change the name of the file '/proc/sys/nds32/unaligned_acess' to '/proc/sys/nds32/unaligned_access'

---
 arch/nds32/mm/alignment.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/nds32/mm/alignment.c +1 -1
index b96a01b10ca7..e515f6f3d247 100644
@@ -552,7 +552,7 @@ static struct ctl_table alignment_tbl[3] = {
 
 static struct ctl_table nds32_sysctl_table[2] = {
 	{
-	 .procname = "unaligned_acess",
+	 .procname = "unaligned_access",
 	 .mode = 0555,
 	 .child = alignment_tbl},
 	{}
Signature · 1 line
2.17.0
author
#3 lore raw

PATCH 2/2 nds32: Fix the unaligned access handler

In reply to Nickhu

If the kernel config 'CONFIG_ALIGNMENT_TRAP' and the file '/proc/sys/nds32/unaligned_access/enable' are set, the kernel unaligned access handler does not handle correctly when the value of immediate field is negative. This commit fixes the unaligned access handler in kernel.

---
 arch/nds32/mm/alignment.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
arch/nds32/mm/alignment.c +5 -2
index e515f6f3d247..e1aed9dc692d 100644
@@ -19,7 +19,7 @@
 #define RA(inst)	(((inst) >> 15) & 0x1FUL)
 #define RB(inst)	(((inst) >> 10) & 0x1FUL)
 #define SV(inst)	(((inst) >> 8) & 0x3UL)
-#define IMM(inst)	(((inst) >> 0) & 0x3FFFUL)
+#define IMM(inst)	(((inst) >> 0) & 0x7FFFUL)
 
 #define RA3(inst)	(((inst) >> 3) & 0x7UL)
 #define RT3(inst)	(((inst) >> 6) & 0x7UL)
@@ -28,6 +28,9 @@
 #define RA5(inst)	(((inst) >> 0) & 0x1FUL)
 #define RT4(inst)	(((inst) >> 5) & 0xFUL)
 
+#define GET_IMMSVAL(imm_value) \
+	(((imm_value >> 14) & 0x1) ? (imm_value - 0x8000) : imm_value)
+
 #define __get8_data(val,addr,err)	\
 	__asm__(					\
 	"1:	lbi.bi	%1, [%2], #1\n"			\
@@ -467,7 +470,7 @@ static inline int do_32(unsigned long inst, struct pt_regs *regs)
 	}
 
 	if (imm)
-		shift = IMM(inst) * len;
+		shift = GET_IMMSVAL(IMM(inst)) * len;
 	else
 		shift = *idx_to_addr(regs, RB(inst)) << SV(inst);
 
Signature · 1 line
2.17.0
Reviewed-by on v1 2/2
#4 lore raw

Re: [PATCH 2/2] nds32: Fix the unaligned access handler

2018-05-07 14:45 GMT+08:00 Nickhu <[email protected]>:

Quoted 7 lines

If the kernel config 'CONFIG_ALIGNMENT_TRAP' and the file '/proc/sys/nds32/unaligned_access/enable' are set, the kernel unaligned access handler does not handle correctly when the value of immediate field is negative. This commit fixes the unaligned access handler in kernel.

Thank you, Nick.