All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] MIPS: Fix build warning about "PTR_STR" redefinition
@ 2020-05-29  8:22 Huacai Chen
  2020-05-29  8:34 ` WANG Xuerui
  2020-05-29 11:18 ` Thomas Bogendoerfer
  0 siblings, 2 replies; 8+ messages in thread
From: Huacai Chen @ 2020-05-29  8:22 UTC (permalink / raw)
  To: Thomas Bogendoerfer
  Cc: linux-mips, Fuxin Zhang, Zhangjin Wu, Huacai Chen, Jiaxun Yang,
	Huacai Chen, Maciej W . Rozycki

PTR_STR is redefined when CONFIG_TEST_PRINTF is set. This causes the
following build warning:

  CC      lib/test_printf.o
lib/test_printf.c:214:0: warning: "PTR_STR" redefined
 #define PTR_STR "ffff0123456789ab"
 ^
In file included from ./arch/mips/include/asm/dsemul.h:11:0,
                 from ./arch/mips/include/asm/processor.h:22,
                 from ./arch/mips/include/asm/thread_info.h:16,
                 from ./include/linux/thread_info.h:38,
                 from ./include/asm-generic/preempt.h:5,
                 from ./arch/mips/include/generated/asm/preempt.h:1,
                 from ./include/linux/preempt.h:78,
                 from ./include/linux/spinlock.h:51,
                 from ./include/linux/seqlock.h:36,
                 from ./include/linux/time.h:6,
                 from ./include/linux/stat.h:19,
                 from ./include/linux/module.h:13,
                 from lib/test_printf.c:10:
./arch/mips/include/asm/inst.h:20:0: note: this is the location of the previous definition
 #define PTR_STR  ".dword"
 ^

Instead of renaming PTR_STR again and again, it is better to move the
unaligned load/store helpers from inst.h to unaligned.h, suggested by
Maciej W. Rozycki.

Fixes: e701656ec4db ("MIPS: inst.h: Stop including asm.h to avoid various build failures")
Cc: Maciej W. Rozycki" <macro@linux-mips.org>
Reported-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Signed-off-by: Huacai Chen <chenhc@lemote.com>
---
 arch/mips/include/asm/inst.h      | 779 ------------------------------------
 arch/mips/include/asm/unaligned.h | 802 ++++++++++++++++++++++++++++++++++++++
 arch/mips/kernel/unaligned.c      |   1 +
 arch/mips/loongson64/cop2-ex.c    |   1 +
 4 files changed, 804 insertions(+), 779 deletions(-)
 create mode 100644 arch/mips/include/asm/unaligned.h

diff --git a/arch/mips/include/asm/inst.h b/arch/mips/include/asm/inst.h
index 6d74ba3..22912f7 100644
--- a/arch/mips/include/asm/inst.h
+++ b/arch/mips/include/asm/inst.h
@@ -13,13 +13,6 @@
 
 #include <uapi/asm/inst.h>
 
-#if (_MIPS_SZPTR == 32)
-#define PTR_STR		".word"
-#endif
-#if (_MIPS_SZPTR == 64)
-#define PTR_STR		".dword"
-#endif
-
 /* HACHACHAHCAHC ...  */
 
 /* In case some other massaging is needed, keep MIPSInst as wrapper */
@@ -92,776 +85,4 @@ struct mm_decoded_insn {
 /* Recode table from 16-bit register notation to 32-bit GPR. Do NOT export!!! */
 extern const int reg16to32[];
 
-#ifdef __BIG_ENDIAN
-#define  _LoadHW(addr, value, res, type)  \
-do {                                                \
-	__asm__ __volatile__ (".set\tnoat\n"        \
-		"1:\t"type##_lb("%0", "0(%2)")"\n"  \
-		"2:\t"type##_lbu("$1", "1(%2)")"\n\t"\
-		"sll\t%0, 0x8\n\t"                  \
-		"or\t%0, $1\n\t"                    \
-		"li\t%1, 0\n"                       \
-		"3:\t.set\tat\n\t"                  \
-		".insn\n\t"                         \
-		".section\t.fixup,\"ax\"\n\t"       \
-		"4:\tli\t%1, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=&r" (value), "=r" (res)         \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#ifndef CONFIG_CPU_NO_LOAD_STORE_LR
-#define  _LoadW(addr, value, res, type)   \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		"1:\t"type##_lwl("%0", "(%2)")"\n"   \
-		"2:\t"type##_lwr("%0", "3(%2)")"\n\t"\
-		"li\t%1, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		".section\t.fixup,\"ax\"\n\t"       \
-		"4:\tli\t%1, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=&r" (value), "=r" (res)         \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#else /* CONFIG_CPU_NO_LOAD_STORE_LR */
-/* For CPUs without lwl instruction */
-#define  _LoadW(addr, value, res, type) \
-do {                                                \
-	__asm__ __volatile__ (			    \
-		".set\tpush\n"			    \
-		".set\tnoat\n\t"		    \
-		"1:"type##_lb("%0", "0(%2)")"\n\t"  \
-		"2:"type##_lbu("$1", "1(%2)")"\n\t" \
-		"sll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"3:"type##_lbu("$1", "2(%2)")"\n\t" \
-		"sll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"4:"type##_lbu("$1", "3(%2)")"\n\t" \
-		"sll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"li\t%1, 0\n"			    \
-		".set\tpop\n"			    \
-		"10:\n\t"			    \
-		".insn\n\t"			    \
-		".section\t.fixup,\"ax\"\n\t"	    \
-		"11:\tli\t%1, %3\n\t"		    \
-		"j\t10b\n\t"			    \
-		".previous\n\t"			    \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 11b\n\t"		    \
-		PTR_STR"\t2b, 11b\n\t"		    \
-		PTR_STR"\t3b, 11b\n\t"		    \
-		PTR_STR"\t4b, 11b\n\t"		    \
-		".previous"			    \
-		: "=&r" (value), "=r" (res)	    \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */
-
-#define  _LoadHWU(addr, value, res, type) \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		".set\tnoat\n"                      \
-		"1:\t"type##_lbu("%0", "0(%2)")"\n" \
-		"2:\t"type##_lbu("$1", "1(%2)")"\n\t"\
-		"sll\t%0, 0x8\n\t"                  \
-		"or\t%0, $1\n\t"                    \
-		"li\t%1, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		".set\tat\n\t"                      \
-		".section\t.fixup,\"ax\"\n\t"       \
-		"4:\tli\t%1, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=&r" (value), "=r" (res)         \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#ifndef CONFIG_CPU_NO_LOAD_STORE_LR
-#define  _LoadWU(addr, value, res, type)  \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		"1:\t"type##_lwl("%0", "(%2)")"\n"  \
-		"2:\t"type##_lwr("%0", "3(%2)")"\n\t"\
-		"dsll\t%0, %0, 32\n\t"              \
-		"dsrl\t%0, %0, 32\n\t"              \
-		"li\t%1, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		"\t.section\t.fixup,\"ax\"\n\t"     \
-		"4:\tli\t%1, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=&r" (value), "=r" (res)         \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#define  _LoadDW(addr, value, res)  \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		"1:\tldl\t%0, (%2)\n"               \
-		"2:\tldr\t%0, 7(%2)\n\t"            \
-		"li\t%1, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		"\t.section\t.fixup,\"ax\"\n\t"     \
-		"4:\tli\t%1, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=&r" (value), "=r" (res)         \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#else /* CONFIG_CPU_NO_LOAD_STORE_LR */
-/* For CPUs without lwl and ldl instructions */
-#define  _LoadWU(addr, value, res, type) \
-do {                                                \
-	__asm__ __volatile__ (			    \
-		".set\tpush\n\t"		    \
-		".set\tnoat\n\t"		    \
-		"1:"type##_lbu("%0", "0(%2)")"\n\t" \
-		"2:"type##_lbu("$1", "1(%2)")"\n\t" \
-		"sll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"3:"type##_lbu("$1", "2(%2)")"\n\t" \
-		"sll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"4:"type##_lbu("$1", "3(%2)")"\n\t" \
-		"sll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"li\t%1, 0\n"			    \
-		".set\tpop\n"			    \
-		"10:\n\t"			    \
-		".insn\n\t"			    \
-		".section\t.fixup,\"ax\"\n\t"	    \
-		"11:\tli\t%1, %3\n\t"		    \
-		"j\t10b\n\t"			    \
-		".previous\n\t"			    \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 11b\n\t"		    \
-		PTR_STR"\t2b, 11b\n\t"		    \
-		PTR_STR"\t3b, 11b\n\t"		    \
-		PTR_STR"\t4b, 11b\n\t"		    \
-		".previous"			    \
-		: "=&r" (value), "=r" (res)	    \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#define  _LoadDW(addr, value, res)  \
-do {                                                \
-	__asm__ __volatile__ (			    \
-		".set\tpush\n\t"		    \
-		".set\tnoat\n\t"		    \
-		"1:lb\t%0, 0(%2)\n\t"		    \
-		"2:lbu\t $1, 1(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"3:lbu\t$1, 2(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"4:lbu\t$1, 3(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"5:lbu\t$1, 4(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"6:lbu\t$1, 5(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"7:lbu\t$1, 6(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"8:lbu\t$1, 7(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"li\t%1, 0\n"			    \
-		".set\tpop\n\t"			    \
-		"10:\n\t"			    \
-		".insn\n\t"			    \
-		".section\t.fixup,\"ax\"\n\t"	    \
-		"11:\tli\t%1, %3\n\t"		    \
-		"j\t10b\n\t"			    \
-		".previous\n\t"			    \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 11b\n\t"		    \
-		PTR_STR"\t2b, 11b\n\t"		    \
-		PTR_STR"\t3b, 11b\n\t"		    \
-		PTR_STR"\t4b, 11b\n\t"		    \
-		PTR_STR"\t5b, 11b\n\t"		    \
-		PTR_STR"\t6b, 11b\n\t"		    \
-		PTR_STR"\t7b, 11b\n\t"		    \
-		PTR_STR"\t8b, 11b\n\t"		    \
-		".previous"			    \
-		: "=&r" (value), "=r" (res)	    \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */
-
-
-#define  _StoreHW(addr, value, res, type) \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		".set\tnoat\n"                      \
-		"1:\t"type##_sb("%1", "1(%2)")"\n"  \
-		"srl\t$1, %1, 0x8\n"                \
-		"2:\t"type##_sb("$1", "0(%2)")"\n"  \
-		".set\tat\n\t"                      \
-		"li\t%0, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		".section\t.fixup,\"ax\"\n\t"       \
-		"4:\tli\t%0, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"              \
-		PTR_STR"\t2b, 4b\n\t"              \
-		".previous"                         \
-		: "=r" (res)                        \
-		: "r" (value), "r" (addr), "i" (-EFAULT));\
-} while (0)
-
-#ifndef CONFIG_CPU_NO_LOAD_STORE_LR
-#define  _StoreW(addr, value, res, type)  \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		"1:\t"type##_swl("%1", "(%2)")"\n"  \
-		"2:\t"type##_swr("%1", "3(%2)")"\n\t"\
-		"li\t%0, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		".section\t.fixup,\"ax\"\n\t"       \
-		"4:\tli\t%0, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=r" (res)                                \
-		: "r" (value), "r" (addr), "i" (-EFAULT));  \
-} while (0)
-
-#define  _StoreDW(addr, value, res) \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		"1:\tsdl\t%1,(%2)\n"                \
-		"2:\tsdr\t%1, 7(%2)\n\t"            \
-		"li\t%0, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		".section\t.fixup,\"ax\"\n\t"       \
-		"4:\tli\t%0, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=r" (res)                                \
-		: "r" (value), "r" (addr), "i" (-EFAULT));  \
-} while (0)
-
-#else /* CONFIG_CPU_NO_LOAD_STORE_LR */
-#define  _StoreW(addr, value, res, type)  \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		".set\tpush\n\t"		    \
-		".set\tnoat\n\t"		    \
-		"1:"type##_sb("%1", "3(%2)")"\n\t"  \
-		"srl\t$1, %1, 0x8\n\t"		    \
-		"2:"type##_sb("$1", "2(%2)")"\n\t"  \
-		"srl\t$1, $1,  0x8\n\t"		    \
-		"3:"type##_sb("$1", "1(%2)")"\n\t"  \
-		"srl\t$1, $1, 0x8\n\t"		    \
-		"4:"type##_sb("$1", "0(%2)")"\n\t"  \
-		".set\tpop\n\t"			    \
-		"li\t%0, 0\n"			    \
-		"10:\n\t"			    \
-		".insn\n\t"			    \
-		".section\t.fixup,\"ax\"\n\t"	    \
-		"11:\tli\t%0, %3\n\t"		    \
-		"j\t10b\n\t"			    \
-		".previous\n\t"			    \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 11b\n\t"		    \
-		PTR_STR"\t2b, 11b\n\t"		    \
-		PTR_STR"\t3b, 11b\n\t"		    \
-		PTR_STR"\t4b, 11b\n\t"		    \
-		".previous"			    \
-		: "=&r" (res)				    \
-		: "r" (value), "r" (addr), "i" (-EFAULT)    \
-		: "memory");                                \
-} while (0)
-
-#define  _StoreDW(addr, value, res) \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		".set\tpush\n\t"		    \
-		".set\tnoat\n\t"		    \
-		"1:sb\t%1, 7(%2)\n\t"		    \
-		"dsrl\t$1, %1, 0x8\n\t"		    \
-		"2:sb\t$1, 6(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		"3:sb\t$1, 5(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		"4:sb\t$1, 4(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		"5:sb\t$1, 3(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		"6:sb\t$1, 2(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		"7:sb\t$1, 1(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		"8:sb\t$1, 0(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		".set\tpop\n\t"			    \
-		"li\t%0, 0\n"			    \
-		"10:\n\t"			    \
-		".insn\n\t"			    \
-		".section\t.fixup,\"ax\"\n\t"	    \
-		"11:\tli\t%0, %3\n\t"		    \
-		"j\t10b\n\t"			    \
-		".previous\n\t"			    \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 11b\n\t"		    \
-		PTR_STR"\t2b, 11b\n\t"		    \
-		PTR_STR"\t3b, 11b\n\t"		    \
-		PTR_STR"\t4b, 11b\n\t"		    \
-		PTR_STR"\t5b, 11b\n\t"		    \
-		PTR_STR"\t6b, 11b\n\t"		    \
-		PTR_STR"\t7b, 11b\n\t"		    \
-		PTR_STR"\t8b, 11b\n\t"		    \
-		".previous"			    \
-		: "=&r" (res)				    \
-		: "r" (value), "r" (addr), "i" (-EFAULT)    \
-		: "memory");                                \
-} while (0)
-
-#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */
-
-#else /* __BIG_ENDIAN */
-
-#define  _LoadHW(addr, value, res, type)  \
-do {                                                \
-	__asm__ __volatile__ (".set\tnoat\n"        \
-		"1:\t"type##_lb("%0", "1(%2)")"\n"  \
-		"2:\t"type##_lbu("$1", "0(%2)")"\n\t"\
-		"sll\t%0, 0x8\n\t"                  \
-		"or\t%0, $1\n\t"                    \
-		"li\t%1, 0\n"                       \
-		"3:\t.set\tat\n\t"                  \
-		".insn\n\t"                         \
-		".section\t.fixup,\"ax\"\n\t"       \
-		"4:\tli\t%1, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=&r" (value), "=r" (res)         \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#ifndef CONFIG_CPU_NO_LOAD_STORE_LR
-#define  _LoadW(addr, value, res, type)   \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		"1:\t"type##_lwl("%0", "3(%2)")"\n" \
-		"2:\t"type##_lwr("%0", "(%2)")"\n\t"\
-		"li\t%1, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		".section\t.fixup,\"ax\"\n\t"       \
-		"4:\tli\t%1, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=&r" (value), "=r" (res)         \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#else /* CONFIG_CPU_NO_LOAD_STORE_LR */
-/* For CPUs without lwl instruction */
-#define  _LoadW(addr, value, res, type) \
-do {                                                \
-	__asm__ __volatile__ (			    \
-		".set\tpush\n"			    \
-		".set\tnoat\n\t"		    \
-		"1:"type##_lb("%0", "3(%2)")"\n\t"  \
-		"2:"type##_lbu("$1", "2(%2)")"\n\t" \
-		"sll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"3:"type##_lbu("$1", "1(%2)")"\n\t" \
-		"sll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"4:"type##_lbu("$1", "0(%2)")"\n\t" \
-		"sll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"li\t%1, 0\n"			    \
-		".set\tpop\n"			    \
-		"10:\n\t"			    \
-		".insn\n\t"			    \
-		".section\t.fixup,\"ax\"\n\t"	    \
-		"11:\tli\t%1, %3\n\t"		    \
-		"j\t10b\n\t"			    \
-		".previous\n\t"			    \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 11b\n\t"		    \
-		PTR_STR"\t2b, 11b\n\t"		    \
-		PTR_STR"\t3b, 11b\n\t"		    \
-		PTR_STR"\t4b, 11b\n\t"		    \
-		".previous"			    \
-		: "=&r" (value), "=r" (res)	    \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */
-
-
-#define  _LoadHWU(addr, value, res, type) \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		".set\tnoat\n"                      \
-		"1:\t"type##_lbu("%0", "1(%2)")"\n" \
-		"2:\t"type##_lbu("$1", "0(%2)")"\n\t"\
-		"sll\t%0, 0x8\n\t"                  \
-		"or\t%0, $1\n\t"                    \
-		"li\t%1, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		".set\tat\n\t"                      \
-		".section\t.fixup,\"ax\"\n\t"       \
-		"4:\tli\t%1, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=&r" (value), "=r" (res)         \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#ifndef CONFIG_CPU_NO_LOAD_STORE_LR
-#define  _LoadWU(addr, value, res, type)  \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		"1:\t"type##_lwl("%0", "3(%2)")"\n" \
-		"2:\t"type##_lwr("%0", "(%2)")"\n\t"\
-		"dsll\t%0, %0, 32\n\t"              \
-		"dsrl\t%0, %0, 32\n\t"              \
-		"li\t%1, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		"\t.section\t.fixup,\"ax\"\n\t"     \
-		"4:\tli\t%1, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=&r" (value), "=r" (res)         \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#define  _LoadDW(addr, value, res)  \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		"1:\tldl\t%0, 7(%2)\n"              \
-		"2:\tldr\t%0, (%2)\n\t"             \
-		"li\t%1, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		"\t.section\t.fixup,\"ax\"\n\t"     \
-		"4:\tli\t%1, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=&r" (value), "=r" (res)         \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#else /* CONFIG_CPU_NO_LOAD_STORE_LR */
-/* For CPUs without lwl and ldl instructions */
-#define  _LoadWU(addr, value, res, type) \
-do {                                                \
-	__asm__ __volatile__ (			    \
-		".set\tpush\n\t"		    \
-		".set\tnoat\n\t"		    \
-		"1:"type##_lbu("%0", "3(%2)")"\n\t" \
-		"2:"type##_lbu("$1", "2(%2)")"\n\t" \
-		"sll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"3:"type##_lbu("$1", "1(%2)")"\n\t" \
-		"sll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"4:"type##_lbu("$1", "0(%2)")"\n\t" \
-		"sll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"li\t%1, 0\n"			    \
-		".set\tpop\n"			    \
-		"10:\n\t"			    \
-		".insn\n\t"			    \
-		".section\t.fixup,\"ax\"\n\t"	    \
-		"11:\tli\t%1, %3\n\t"		    \
-		"j\t10b\n\t"			    \
-		".previous\n\t"			    \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 11b\n\t"		    \
-		PTR_STR"\t2b, 11b\n\t"		    \
-		PTR_STR"\t3b, 11b\n\t"		    \
-		PTR_STR"\t4b, 11b\n\t"		    \
-		".previous"			    \
-		: "=&r" (value), "=r" (res)	    \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-
-#define  _LoadDW(addr, value, res)  \
-do {                                                \
-	__asm__ __volatile__ (			    \
-		".set\tpush\n\t"		    \
-		".set\tnoat\n\t"		    \
-		"1:lb\t%0, 7(%2)\n\t"		    \
-		"2:lbu\t$1, 6(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"3:lbu\t$1, 5(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"4:lbu\t$1, 4(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"5:lbu\t$1, 3(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"6:lbu\t$1, 2(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"7:lbu\t$1, 1(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"8:lbu\t$1, 0(%2)\n\t"		    \
-		"dsll\t%0, 0x8\n\t"		    \
-		"or\t%0, $1\n\t"		    \
-		"li\t%1, 0\n"			    \
-		".set\tpop\n\t"			    \
-		"10:\n\t"			    \
-		".insn\n\t"			    \
-		".section\t.fixup,\"ax\"\n\t"	    \
-		"11:\tli\t%1, %3\n\t"		    \
-		"j\t10b\n\t"			    \
-		".previous\n\t"			    \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 11b\n\t"		    \
-		PTR_STR"\t2b, 11b\n\t"		    \
-		PTR_STR"\t3b, 11b\n\t"		    \
-		PTR_STR"\t4b, 11b\n\t"		    \
-		PTR_STR"\t5b, 11b\n\t"		    \
-		PTR_STR"\t6b, 11b\n\t"		    \
-		PTR_STR"\t7b, 11b\n\t"		    \
-		PTR_STR"\t8b, 11b\n\t"		    \
-		".previous"			    \
-		: "=&r" (value), "=r" (res)	    \
-		: "r" (addr), "i" (-EFAULT));       \
-} while (0)
-#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */
-
-#define  _StoreHW(addr, value, res, type) \
-do {                                                 \
-	__asm__ __volatile__ (                      \
-		".set\tnoat\n"                      \
-		"1:\t"type##_sb("%1", "0(%2)")"\n"  \
-		"srl\t$1,%1, 0x8\n"                 \
-		"2:\t"type##_sb("$1", "1(%2)")"\n"  \
-		".set\tat\n\t"                      \
-		"li\t%0, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		".section\t.fixup,\"ax\"\n\t"       \
-		"4:\tli\t%0, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=r" (res)                        \
-		: "r" (value), "r" (addr), "i" (-EFAULT));\
-} while (0)
-
-#ifndef CONFIG_CPU_NO_LOAD_STORE_LR
-#define  _StoreW(addr, value, res, type)  \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		"1:\t"type##_swl("%1", "3(%2)")"\n" \
-		"2:\t"type##_swr("%1", "(%2)")"\n\t"\
-		"li\t%0, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		".section\t.fixup,\"ax\"\n\t"       \
-		"4:\tli\t%0, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=r" (res)                                \
-		: "r" (value), "r" (addr), "i" (-EFAULT));  \
-} while (0)
-
-#define  _StoreDW(addr, value, res) \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		"1:\tsdl\t%1, 7(%2)\n"              \
-		"2:\tsdr\t%1, (%2)\n\t"             \
-		"li\t%0, 0\n"                       \
-		"3:\n\t"                            \
-		".insn\n\t"                         \
-		".section\t.fixup,\"ax\"\n\t"       \
-		"4:\tli\t%0, %3\n\t"                \
-		"j\t3b\n\t"                         \
-		".previous\n\t"                     \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 4b\n\t"               \
-		PTR_STR"\t2b, 4b\n\t"               \
-		".previous"                         \
-		: "=r" (res)                                \
-		: "r" (value), "r" (addr), "i" (-EFAULT));  \
-} while (0)
-
-#else /* CONFIG_CPU_NO_LOAD_STORE_LR */
-/* For CPUs without swl and sdl instructions */
-#define  _StoreW(addr, value, res, type)  \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		".set\tpush\n\t"		    \
-		".set\tnoat\n\t"		    \
-		"1:"type##_sb("%1", "0(%2)")"\n\t"  \
-		"srl\t$1, %1, 0x8\n\t"		    \
-		"2:"type##_sb("$1", "1(%2)")"\n\t"  \
-		"srl\t$1, $1,  0x8\n\t"		    \
-		"3:"type##_sb("$1", "2(%2)")"\n\t"  \
-		"srl\t$1, $1, 0x8\n\t"		    \
-		"4:"type##_sb("$1", "3(%2)")"\n\t"  \
-		".set\tpop\n\t"			    \
-		"li\t%0, 0\n"			    \
-		"10:\n\t"			    \
-		".insn\n\t"			    \
-		".section\t.fixup,\"ax\"\n\t"	    \
-		"11:\tli\t%0, %3\n\t"		    \
-		"j\t10b\n\t"			    \
-		".previous\n\t"			    \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 11b\n\t"		    \
-		PTR_STR"\t2b, 11b\n\t"		    \
-		PTR_STR"\t3b, 11b\n\t"		    \
-		PTR_STR"\t4b, 11b\n\t"		    \
-		".previous"			    \
-		: "=&r" (res)				    \
-		: "r" (value), "r" (addr), "i" (-EFAULT)    \
-		: "memory");                                \
-} while (0)
-
-#define  _StoreDW(addr, value, res) \
-do {                                                \
-	__asm__ __volatile__ (                      \
-		".set\tpush\n\t"		    \
-		".set\tnoat\n\t"		    \
-		"1:sb\t%1, 0(%2)\n\t"		    \
-		"dsrl\t$1, %1, 0x8\n\t"		    \
-		"2:sb\t$1, 1(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		"3:sb\t$1, 2(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		"4:sb\t$1, 3(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		"5:sb\t$1, 4(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		"6:sb\t$1, 5(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		"7:sb\t$1, 6(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		"8:sb\t$1, 7(%2)\n\t"		    \
-		"dsrl\t$1, $1, 0x8\n\t"		    \
-		".set\tpop\n\t"			    \
-		"li\t%0, 0\n"			    \
-		"10:\n\t"			    \
-		".insn\n\t"			    \
-		".section\t.fixup,\"ax\"\n\t"	    \
-		"11:\tli\t%0, %3\n\t"		    \
-		"j\t10b\n\t"			    \
-		".previous\n\t"			    \
-		".section\t__ex_table,\"a\"\n\t"    \
-		PTR_STR"\t1b, 11b\n\t"		    \
-		PTR_STR"\t2b, 11b\n\t"		    \
-		PTR_STR"\t3b, 11b\n\t"		    \
-		PTR_STR"\t4b, 11b\n\t"		    \
-		PTR_STR"\t5b, 11b\n\t"		    \
-		PTR_STR"\t6b, 11b\n\t"		    \
-		PTR_STR"\t7b, 11b\n\t"		    \
-		PTR_STR"\t8b, 11b\n\t"		    \
-		".previous"			    \
-		: "=&r" (res)				    \
-		: "r" (value), "r" (addr), "i" (-EFAULT)    \
-		: "memory");                                \
-} while (0)
-
-#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */
-#endif
-
-#define LoadHWU(addr, value, res)	_LoadHWU(addr, value, res, kernel)
-#define LoadHWUE(addr, value, res)	_LoadHWU(addr, value, res, user)
-#define LoadWU(addr, value, res)	_LoadWU(addr, value, res, kernel)
-#define LoadWUE(addr, value, res)	_LoadWU(addr, value, res, user)
-#define LoadHW(addr, value, res)	_LoadHW(addr, value, res, kernel)
-#define LoadHWE(addr, value, res)	_LoadHW(addr, value, res, user)
-#define LoadW(addr, value, res)		_LoadW(addr, value, res, kernel)
-#define LoadWE(addr, value, res)	_LoadW(addr, value, res, user)
-#define LoadDW(addr, value, res)	_LoadDW(addr, value, res)
-
-#define StoreHW(addr, value, res)	_StoreHW(addr, value, res, kernel)
-#define StoreHWE(addr, value, res)	_StoreHW(addr, value, res, user)
-#define StoreW(addr, value, res)	_StoreW(addr, value, res, kernel)
-#define StoreWE(addr, value, res)	_StoreW(addr, value, res, user)
-#define StoreDW(addr, value, res)	_StoreDW(addr, value, res)
-
 #endif /* _ASM_INST_H */
diff --git a/arch/mips/include/asm/unaligned.h b/arch/mips/include/asm/unaligned.h
new file mode 100644
index 00000000..b81db83
--- /dev/null
+++ b/arch/mips/include/asm/unaligned.h
@@ -0,0 +1,802 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+#ifndef _ASM_MIPS_UNALIGNED_H
+#define _ASM_MIPS_UNALIGNED_H
+
+#include <asm/byteorder.h>
+
+#if defined(__LITTLE_ENDIAN)
+# include <linux/unaligned/le_struct.h>
+# include <linux/unaligned/be_byteshift.h>
+# include <linux/unaligned/generic.h>
+# define get_unaligned	__get_unaligned_le
+# define put_unaligned	__put_unaligned_le
+#elif defined(__BIG_ENDIAN)
+# include <linux/unaligned/be_struct.h>
+# include <linux/unaligned/le_byteshift.h>
+# include <linux/unaligned/generic.h>
+# define get_unaligned	__get_unaligned_be
+# define put_unaligned	__put_unaligned_be
+#else
+# error need to define endianess
+#endif
+
+#if (_MIPS_SZPTR == 32)
+#define PTR_STR		".word"
+#endif
+#if (_MIPS_SZPTR == 64)
+#define PTR_STR		".dword"
+#endif
+
+#ifdef __BIG_ENDIAN
+#define  _LoadHW(addr, value, res, type)  \
+do {                                                \
+	__asm__ __volatile__ (".set\tnoat\n"        \
+		"1:\t"type##_lb("%0", "0(%2)")"\n"  \
+		"2:\t"type##_lbu("$1", "1(%2)")"\n\t"\
+		"sll\t%0, 0x8\n\t"                  \
+		"or\t%0, $1\n\t"                    \
+		"li\t%1, 0\n"                       \
+		"3:\t.set\tat\n\t"                  \
+		".insn\n\t"                         \
+		".section\t.fixup,\"ax\"\n\t"       \
+		"4:\tli\t%1, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=&r" (value), "=r" (res)         \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#ifndef CONFIG_CPU_NO_LOAD_STORE_LR
+#define  _LoadW(addr, value, res, type)   \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		"1:\t"type##_lwl("%0", "(%2)")"\n"   \
+		"2:\t"type##_lwr("%0", "3(%2)")"\n\t"\
+		"li\t%1, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		".section\t.fixup,\"ax\"\n\t"       \
+		"4:\tli\t%1, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=&r" (value), "=r" (res)         \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#else /* CONFIG_CPU_NO_LOAD_STORE_LR */
+/* For CPUs without lwl instruction */
+#define  _LoadW(addr, value, res, type) \
+do {                                                \
+	__asm__ __volatile__ (			    \
+		".set\tpush\n"			    \
+		".set\tnoat\n\t"		    \
+		"1:"type##_lb("%0", "0(%2)")"\n\t"  \
+		"2:"type##_lbu("$1", "1(%2)")"\n\t" \
+		"sll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"3:"type##_lbu("$1", "2(%2)")"\n\t" \
+		"sll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"4:"type##_lbu("$1", "3(%2)")"\n\t" \
+		"sll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"li\t%1, 0\n"			    \
+		".set\tpop\n"			    \
+		"10:\n\t"			    \
+		".insn\n\t"			    \
+		".section\t.fixup,\"ax\"\n\t"	    \
+		"11:\tli\t%1, %3\n\t"		    \
+		"j\t10b\n\t"			    \
+		".previous\n\t"			    \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 11b\n\t"		    \
+		PTR_STR"\t2b, 11b\n\t"		    \
+		PTR_STR"\t3b, 11b\n\t"		    \
+		PTR_STR"\t4b, 11b\n\t"		    \
+		".previous"			    \
+		: "=&r" (value), "=r" (res)	    \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */
+
+#define  _LoadHWU(addr, value, res, type) \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		".set\tnoat\n"                      \
+		"1:\t"type##_lbu("%0", "0(%2)")"\n" \
+		"2:\t"type##_lbu("$1", "1(%2)")"\n\t"\
+		"sll\t%0, 0x8\n\t"                  \
+		"or\t%0, $1\n\t"                    \
+		"li\t%1, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		".set\tat\n\t"                      \
+		".section\t.fixup,\"ax\"\n\t"       \
+		"4:\tli\t%1, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=&r" (value), "=r" (res)         \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#ifndef CONFIG_CPU_NO_LOAD_STORE_LR
+#define  _LoadWU(addr, value, res, type)  \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		"1:\t"type##_lwl("%0", "(%2)")"\n"  \
+		"2:\t"type##_lwr("%0", "3(%2)")"\n\t"\
+		"dsll\t%0, %0, 32\n\t"              \
+		"dsrl\t%0, %0, 32\n\t"              \
+		"li\t%1, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		"\t.section\t.fixup,\"ax\"\n\t"     \
+		"4:\tli\t%1, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=&r" (value), "=r" (res)         \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#define  _LoadDW(addr, value, res)  \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		"1:\tldl\t%0, (%2)\n"               \
+		"2:\tldr\t%0, 7(%2)\n\t"            \
+		"li\t%1, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		"\t.section\t.fixup,\"ax\"\n\t"     \
+		"4:\tli\t%1, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=&r" (value), "=r" (res)         \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#else /* CONFIG_CPU_NO_LOAD_STORE_LR */
+/* For CPUs without lwl and ldl instructions */
+#define  _LoadWU(addr, value, res, type) \
+do {                                                \
+	__asm__ __volatile__ (			    \
+		".set\tpush\n\t"		    \
+		".set\tnoat\n\t"		    \
+		"1:"type##_lbu("%0", "0(%2)")"\n\t" \
+		"2:"type##_lbu("$1", "1(%2)")"\n\t" \
+		"sll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"3:"type##_lbu("$1", "2(%2)")"\n\t" \
+		"sll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"4:"type##_lbu("$1", "3(%2)")"\n\t" \
+		"sll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"li\t%1, 0\n"			    \
+		".set\tpop\n"			    \
+		"10:\n\t"			    \
+		".insn\n\t"			    \
+		".section\t.fixup,\"ax\"\n\t"	    \
+		"11:\tli\t%1, %3\n\t"		    \
+		"j\t10b\n\t"			    \
+		".previous\n\t"			    \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 11b\n\t"		    \
+		PTR_STR"\t2b, 11b\n\t"		    \
+		PTR_STR"\t3b, 11b\n\t"		    \
+		PTR_STR"\t4b, 11b\n\t"		    \
+		".previous"			    \
+		: "=&r" (value), "=r" (res)	    \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#define  _LoadDW(addr, value, res)  \
+do {                                                \
+	__asm__ __volatile__ (			    \
+		".set\tpush\n\t"		    \
+		".set\tnoat\n\t"		    \
+		"1:lb\t%0, 0(%2)\n\t"		    \
+		"2:lbu\t $1, 1(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"3:lbu\t$1, 2(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"4:lbu\t$1, 3(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"5:lbu\t$1, 4(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"6:lbu\t$1, 5(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"7:lbu\t$1, 6(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"8:lbu\t$1, 7(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"li\t%1, 0\n"			    \
+		".set\tpop\n\t"			    \
+		"10:\n\t"			    \
+		".insn\n\t"			    \
+		".section\t.fixup,\"ax\"\n\t"	    \
+		"11:\tli\t%1, %3\n\t"		    \
+		"j\t10b\n\t"			    \
+		".previous\n\t"			    \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 11b\n\t"		    \
+		PTR_STR"\t2b, 11b\n\t"		    \
+		PTR_STR"\t3b, 11b\n\t"		    \
+		PTR_STR"\t4b, 11b\n\t"		    \
+		PTR_STR"\t5b, 11b\n\t"		    \
+		PTR_STR"\t6b, 11b\n\t"		    \
+		PTR_STR"\t7b, 11b\n\t"		    \
+		PTR_STR"\t8b, 11b\n\t"		    \
+		".previous"			    \
+		: "=&r" (value), "=r" (res)	    \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */
+
+
+#define  _StoreHW(addr, value, res, type) \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		".set\tnoat\n"                      \
+		"1:\t"type##_sb("%1", "1(%2)")"\n"  \
+		"srl\t$1, %1, 0x8\n"                \
+		"2:\t"type##_sb("$1", "0(%2)")"\n"  \
+		".set\tat\n\t"                      \
+		"li\t%0, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		".section\t.fixup,\"ax\"\n\t"       \
+		"4:\tli\t%0, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"              \
+		PTR_STR"\t2b, 4b\n\t"              \
+		".previous"                         \
+		: "=r" (res)                        \
+		: "r" (value), "r" (addr), "i" (-EFAULT));\
+} while (0)
+
+#ifndef CONFIG_CPU_NO_LOAD_STORE_LR
+#define  _StoreW(addr, value, res, type)  \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		"1:\t"type##_swl("%1", "(%2)")"\n"  \
+		"2:\t"type##_swr("%1", "3(%2)")"\n\t"\
+		"li\t%0, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		".section\t.fixup,\"ax\"\n\t"       \
+		"4:\tli\t%0, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=r" (res)                                \
+		: "r" (value), "r" (addr), "i" (-EFAULT));  \
+} while (0)
+
+#define  _StoreDW(addr, value, res) \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		"1:\tsdl\t%1,(%2)\n"                \
+		"2:\tsdr\t%1, 7(%2)\n\t"            \
+		"li\t%0, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		".section\t.fixup,\"ax\"\n\t"       \
+		"4:\tli\t%0, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=r" (res)                                \
+		: "r" (value), "r" (addr), "i" (-EFAULT));  \
+} while (0)
+
+#else /* CONFIG_CPU_NO_LOAD_STORE_LR */
+#define  _StoreW(addr, value, res, type)  \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		".set\tpush\n\t"		    \
+		".set\tnoat\n\t"		    \
+		"1:"type##_sb("%1", "3(%2)")"\n\t"  \
+		"srl\t$1, %1, 0x8\n\t"		    \
+		"2:"type##_sb("$1", "2(%2)")"\n\t"  \
+		"srl\t$1, $1,  0x8\n\t"		    \
+		"3:"type##_sb("$1", "1(%2)")"\n\t"  \
+		"srl\t$1, $1, 0x8\n\t"		    \
+		"4:"type##_sb("$1", "0(%2)")"\n\t"  \
+		".set\tpop\n\t"			    \
+		"li\t%0, 0\n"			    \
+		"10:\n\t"			    \
+		".insn\n\t"			    \
+		".section\t.fixup,\"ax\"\n\t"	    \
+		"11:\tli\t%0, %3\n\t"		    \
+		"j\t10b\n\t"			    \
+		".previous\n\t"			    \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 11b\n\t"		    \
+		PTR_STR"\t2b, 11b\n\t"		    \
+		PTR_STR"\t3b, 11b\n\t"		    \
+		PTR_STR"\t4b, 11b\n\t"		    \
+		".previous"			    \
+		: "=&r" (res)				    \
+		: "r" (value), "r" (addr), "i" (-EFAULT)    \
+		: "memory");                                \
+} while (0)
+
+#define  _StoreDW(addr, value, res) \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		".set\tpush\n\t"		    \
+		".set\tnoat\n\t"		    \
+		"1:sb\t%1, 7(%2)\n\t"		    \
+		"dsrl\t$1, %1, 0x8\n\t"		    \
+		"2:sb\t$1, 6(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		"3:sb\t$1, 5(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		"4:sb\t$1, 4(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		"5:sb\t$1, 3(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		"6:sb\t$1, 2(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		"7:sb\t$1, 1(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		"8:sb\t$1, 0(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		".set\tpop\n\t"			    \
+		"li\t%0, 0\n"			    \
+		"10:\n\t"			    \
+		".insn\n\t"			    \
+		".section\t.fixup,\"ax\"\n\t"	    \
+		"11:\tli\t%0, %3\n\t"		    \
+		"j\t10b\n\t"			    \
+		".previous\n\t"			    \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 11b\n\t"		    \
+		PTR_STR"\t2b, 11b\n\t"		    \
+		PTR_STR"\t3b, 11b\n\t"		    \
+		PTR_STR"\t4b, 11b\n\t"		    \
+		PTR_STR"\t5b, 11b\n\t"		    \
+		PTR_STR"\t6b, 11b\n\t"		    \
+		PTR_STR"\t7b, 11b\n\t"		    \
+		PTR_STR"\t8b, 11b\n\t"		    \
+		".previous"			    \
+		: "=&r" (res)				    \
+		: "r" (value), "r" (addr), "i" (-EFAULT)    \
+		: "memory");                                \
+} while (0)
+
+#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */
+
+#else /* __BIG_ENDIAN */
+
+#define  _LoadHW(addr, value, res, type)  \
+do {                                                \
+	__asm__ __volatile__ (".set\tnoat\n"        \
+		"1:\t"type##_lb("%0", "1(%2)")"\n"  \
+		"2:\t"type##_lbu("$1", "0(%2)")"\n\t"\
+		"sll\t%0, 0x8\n\t"                  \
+		"or\t%0, $1\n\t"                    \
+		"li\t%1, 0\n"                       \
+		"3:\t.set\tat\n\t"                  \
+		".insn\n\t"                         \
+		".section\t.fixup,\"ax\"\n\t"       \
+		"4:\tli\t%1, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=&r" (value), "=r" (res)         \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#ifndef CONFIG_CPU_NO_LOAD_STORE_LR
+#define  _LoadW(addr, value, res, type)   \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		"1:\t"type##_lwl("%0", "3(%2)")"\n" \
+		"2:\t"type##_lwr("%0", "(%2)")"\n\t"\
+		"li\t%1, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		".section\t.fixup,\"ax\"\n\t"       \
+		"4:\tli\t%1, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=&r" (value), "=r" (res)         \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#else /* CONFIG_CPU_NO_LOAD_STORE_LR */
+/* For CPUs without lwl instruction */
+#define  _LoadW(addr, value, res, type) \
+do {                                                \
+	__asm__ __volatile__ (			    \
+		".set\tpush\n"			    \
+		".set\tnoat\n\t"		    \
+		"1:"type##_lb("%0", "3(%2)")"\n\t"  \
+		"2:"type##_lbu("$1", "2(%2)")"\n\t" \
+		"sll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"3:"type##_lbu("$1", "1(%2)")"\n\t" \
+		"sll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"4:"type##_lbu("$1", "0(%2)")"\n\t" \
+		"sll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"li\t%1, 0\n"			    \
+		".set\tpop\n"			    \
+		"10:\n\t"			    \
+		".insn\n\t"			    \
+		".section\t.fixup,\"ax\"\n\t"	    \
+		"11:\tli\t%1, %3\n\t"		    \
+		"j\t10b\n\t"			    \
+		".previous\n\t"			    \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 11b\n\t"		    \
+		PTR_STR"\t2b, 11b\n\t"		    \
+		PTR_STR"\t3b, 11b\n\t"		    \
+		PTR_STR"\t4b, 11b\n\t"		    \
+		".previous"			    \
+		: "=&r" (value), "=r" (res)	    \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */
+
+
+#define  _LoadHWU(addr, value, res, type) \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		".set\tnoat\n"                      \
+		"1:\t"type##_lbu("%0", "1(%2)")"\n" \
+		"2:\t"type##_lbu("$1", "0(%2)")"\n\t"\
+		"sll\t%0, 0x8\n\t"                  \
+		"or\t%0, $1\n\t"                    \
+		"li\t%1, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		".set\tat\n\t"                      \
+		".section\t.fixup,\"ax\"\n\t"       \
+		"4:\tli\t%1, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=&r" (value), "=r" (res)         \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#ifndef CONFIG_CPU_NO_LOAD_STORE_LR
+#define  _LoadWU(addr, value, res, type)  \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		"1:\t"type##_lwl("%0", "3(%2)")"\n" \
+		"2:\t"type##_lwr("%0", "(%2)")"\n\t"\
+		"dsll\t%0, %0, 32\n\t"              \
+		"dsrl\t%0, %0, 32\n\t"              \
+		"li\t%1, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		"\t.section\t.fixup,\"ax\"\n\t"     \
+		"4:\tli\t%1, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=&r" (value), "=r" (res)         \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#define  _LoadDW(addr, value, res)  \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		"1:\tldl\t%0, 7(%2)\n"              \
+		"2:\tldr\t%0, (%2)\n\t"             \
+		"li\t%1, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		"\t.section\t.fixup,\"ax\"\n\t"     \
+		"4:\tli\t%1, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=&r" (value), "=r" (res)         \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#else /* CONFIG_CPU_NO_LOAD_STORE_LR */
+/* For CPUs without lwl and ldl instructions */
+#define  _LoadWU(addr, value, res, type) \
+do {                                                \
+	__asm__ __volatile__ (			    \
+		".set\tpush\n\t"		    \
+		".set\tnoat\n\t"		    \
+		"1:"type##_lbu("%0", "3(%2)")"\n\t" \
+		"2:"type##_lbu("$1", "2(%2)")"\n\t" \
+		"sll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"3:"type##_lbu("$1", "1(%2)")"\n\t" \
+		"sll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"4:"type##_lbu("$1", "0(%2)")"\n\t" \
+		"sll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"li\t%1, 0\n"			    \
+		".set\tpop\n"			    \
+		"10:\n\t"			    \
+		".insn\n\t"			    \
+		".section\t.fixup,\"ax\"\n\t"	    \
+		"11:\tli\t%1, %3\n\t"		    \
+		"j\t10b\n\t"			    \
+		".previous\n\t"			    \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 11b\n\t"		    \
+		PTR_STR"\t2b, 11b\n\t"		    \
+		PTR_STR"\t3b, 11b\n\t"		    \
+		PTR_STR"\t4b, 11b\n\t"		    \
+		".previous"			    \
+		: "=&r" (value), "=r" (res)	    \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+
+#define  _LoadDW(addr, value, res)  \
+do {                                                \
+	__asm__ __volatile__ (			    \
+		".set\tpush\n\t"		    \
+		".set\tnoat\n\t"		    \
+		"1:lb\t%0, 7(%2)\n\t"		    \
+		"2:lbu\t$1, 6(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"3:lbu\t$1, 5(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"4:lbu\t$1, 4(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"5:lbu\t$1, 3(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"6:lbu\t$1, 2(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"7:lbu\t$1, 1(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"8:lbu\t$1, 0(%2)\n\t"		    \
+		"dsll\t%0, 0x8\n\t"		    \
+		"or\t%0, $1\n\t"		    \
+		"li\t%1, 0\n"			    \
+		".set\tpop\n\t"			    \
+		"10:\n\t"			    \
+		".insn\n\t"			    \
+		".section\t.fixup,\"ax\"\n\t"	    \
+		"11:\tli\t%1, %3\n\t"		    \
+		"j\t10b\n\t"			    \
+		".previous\n\t"			    \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 11b\n\t"		    \
+		PTR_STR"\t2b, 11b\n\t"		    \
+		PTR_STR"\t3b, 11b\n\t"		    \
+		PTR_STR"\t4b, 11b\n\t"		    \
+		PTR_STR"\t5b, 11b\n\t"		    \
+		PTR_STR"\t6b, 11b\n\t"		    \
+		PTR_STR"\t7b, 11b\n\t"		    \
+		PTR_STR"\t8b, 11b\n\t"		    \
+		".previous"			    \
+		: "=&r" (value), "=r" (res)	    \
+		: "r" (addr), "i" (-EFAULT));       \
+} while (0)
+#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */
+
+#define  _StoreHW(addr, value, res, type) \
+do {                                                 \
+	__asm__ __volatile__ (                      \
+		".set\tnoat\n"                      \
+		"1:\t"type##_sb("%1", "0(%2)")"\n"  \
+		"srl\t$1,%1, 0x8\n"                 \
+		"2:\t"type##_sb("$1", "1(%2)")"\n"  \
+		".set\tat\n\t"                      \
+		"li\t%0, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		".section\t.fixup,\"ax\"\n\t"       \
+		"4:\tli\t%0, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=r" (res)                        \
+		: "r" (value), "r" (addr), "i" (-EFAULT));\
+} while (0)
+
+#ifndef CONFIG_CPU_NO_LOAD_STORE_LR
+#define  _StoreW(addr, value, res, type)  \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		"1:\t"type##_swl("%1", "3(%2)")"\n" \
+		"2:\t"type##_swr("%1", "(%2)")"\n\t"\
+		"li\t%0, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		".section\t.fixup,\"ax\"\n\t"       \
+		"4:\tli\t%0, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=r" (res)                                \
+		: "r" (value), "r" (addr), "i" (-EFAULT));  \
+} while (0)
+
+#define  _StoreDW(addr, value, res) \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		"1:\tsdl\t%1, 7(%2)\n"              \
+		"2:\tsdr\t%1, (%2)\n\t"             \
+		"li\t%0, 0\n"                       \
+		"3:\n\t"                            \
+		".insn\n\t"                         \
+		".section\t.fixup,\"ax\"\n\t"       \
+		"4:\tli\t%0, %3\n\t"                \
+		"j\t3b\n\t"                         \
+		".previous\n\t"                     \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 4b\n\t"               \
+		PTR_STR"\t2b, 4b\n\t"               \
+		".previous"                         \
+		: "=r" (res)                                \
+		: "r" (value), "r" (addr), "i" (-EFAULT));  \
+} while (0)
+
+#else /* CONFIG_CPU_NO_LOAD_STORE_LR */
+/* For CPUs without swl and sdl instructions */
+#define  _StoreW(addr, value, res, type)  \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		".set\tpush\n\t"		    \
+		".set\tnoat\n\t"		    \
+		"1:"type##_sb("%1", "0(%2)")"\n\t"  \
+		"srl\t$1, %1, 0x8\n\t"		    \
+		"2:"type##_sb("$1", "1(%2)")"\n\t"  \
+		"srl\t$1, $1,  0x8\n\t"		    \
+		"3:"type##_sb("$1", "2(%2)")"\n\t"  \
+		"srl\t$1, $1, 0x8\n\t"		    \
+		"4:"type##_sb("$1", "3(%2)")"\n\t"  \
+		".set\tpop\n\t"			    \
+		"li\t%0, 0\n"			    \
+		"10:\n\t"			    \
+		".insn\n\t"			    \
+		".section\t.fixup,\"ax\"\n\t"	    \
+		"11:\tli\t%0, %3\n\t"		    \
+		"j\t10b\n\t"			    \
+		".previous\n\t"			    \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 11b\n\t"		    \
+		PTR_STR"\t2b, 11b\n\t"		    \
+		PTR_STR"\t3b, 11b\n\t"		    \
+		PTR_STR"\t4b, 11b\n\t"		    \
+		".previous"			    \
+		: "=&r" (res)				    \
+		: "r" (value), "r" (addr), "i" (-EFAULT)    \
+		: "memory");                                \
+} while (0)
+
+#define  _StoreDW(addr, value, res) \
+do {                                                \
+	__asm__ __volatile__ (                      \
+		".set\tpush\n\t"		    \
+		".set\tnoat\n\t"		    \
+		"1:sb\t%1, 0(%2)\n\t"		    \
+		"dsrl\t$1, %1, 0x8\n\t"		    \
+		"2:sb\t$1, 1(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		"3:sb\t$1, 2(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		"4:sb\t$1, 3(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		"5:sb\t$1, 4(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		"6:sb\t$1, 5(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		"7:sb\t$1, 6(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		"8:sb\t$1, 7(%2)\n\t"		    \
+		"dsrl\t$1, $1, 0x8\n\t"		    \
+		".set\tpop\n\t"			    \
+		"li\t%0, 0\n"			    \
+		"10:\n\t"			    \
+		".insn\n\t"			    \
+		".section\t.fixup,\"ax\"\n\t"	    \
+		"11:\tli\t%0, %3\n\t"		    \
+		"j\t10b\n\t"			    \
+		".previous\n\t"			    \
+		".section\t__ex_table,\"a\"\n\t"    \
+		PTR_STR"\t1b, 11b\n\t"		    \
+		PTR_STR"\t2b, 11b\n\t"		    \
+		PTR_STR"\t3b, 11b\n\t"		    \
+		PTR_STR"\t4b, 11b\n\t"		    \
+		PTR_STR"\t5b, 11b\n\t"		    \
+		PTR_STR"\t6b, 11b\n\t"		    \
+		PTR_STR"\t7b, 11b\n\t"		    \
+		PTR_STR"\t8b, 11b\n\t"		    \
+		".previous"			    \
+		: "=&r" (res)				    \
+		: "r" (value), "r" (addr), "i" (-EFAULT)    \
+		: "memory");                                \
+} while (0)
+
+#endif /* CONFIG_CPU_NO_LOAD_STORE_LR */
+#endif
+
+#define LoadHWU(addr, value, res)	_LoadHWU(addr, value, res, kernel)
+#define LoadHWUE(addr, value, res)	_LoadHWU(addr, value, res, user)
+#define LoadWU(addr, value, res)	_LoadWU(addr, value, res, kernel)
+#define LoadWUE(addr, value, res)	_LoadWU(addr, value, res, user)
+#define LoadHW(addr, value, res)	_LoadHW(addr, value, res, kernel)
+#define LoadHWE(addr, value, res)	_LoadHW(addr, value, res, user)
+#define LoadW(addr, value, res)		_LoadW(addr, value, res, kernel)
+#define LoadWE(addr, value, res)	_LoadW(addr, value, res, user)
+#define LoadDW(addr, value, res)	_LoadDW(addr, value, res)
+
+#define StoreHW(addr, value, res)	_StoreHW(addr, value, res, kernel)
+#define StoreHWE(addr, value, res)	_StoreHW(addr, value, res, user)
+#define StoreW(addr, value, res)	_StoreW(addr, value, res, kernel)
+#define StoreWE(addr, value, res)	_StoreW(addr, value, res, user)
+#define StoreDW(addr, value, res)	_StoreDW(addr, value, res)
+
+#endif /* _ASM_MIPS_UNALIGNED_H */
diff --git a/arch/mips/kernel/unaligned.c b/arch/mips/kernel/unaligned.c
index 19b906a..efb818c 100644
--- a/arch/mips/kernel/unaligned.c
+++ b/arch/mips/kernel/unaligned.c
@@ -89,6 +89,7 @@
 #include <asm/fpu.h>
 #include <asm/fpu_emulator.h>
 #include <asm/inst.h>
+#include <asm/unaligned.h>
 #include <asm/mmu_context.h>
 #include <linux/uaccess.h>
 
diff --git a/arch/mips/loongson64/cop2-ex.c b/arch/mips/loongson64/cop2-ex.c
index af0600d..6096b03 100644
--- a/arch/mips/loongson64/cop2-ex.c
+++ b/arch/mips/loongson64/cop2-ex.c
@@ -23,6 +23,7 @@
 #include <asm/branch.h>
 #include <asm/current.h>
 #include <asm/mipsregs.h>
+#include <asm/unaligned.h>
 
 static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action,
 	void *data)
-- 
2.7.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] MIPS: Fix build warning about "PTR_STR" redefinition
  2020-05-29  8:22 [PATCH] MIPS: Fix build warning about "PTR_STR" redefinition Huacai Chen
@ 2020-05-29  8:34 ` WANG Xuerui
  2020-05-29  9:12   ` Huacai Chen
  2020-05-29 11:18 ` Thomas Bogendoerfer
  1 sibling, 1 reply; 8+ messages in thread
From: WANG Xuerui @ 2020-05-29  8:34 UTC (permalink / raw)
  To: Huacai Chen, Thomas Bogendoerfer
  Cc: linux-mips, Fuxin Zhang, Zhangjin Wu, Huacai Chen, Jiaxun Yang,
	Maciej W . Rozycki

Hi Huacai,


On 2020/5/29 16:22, Huacai Chen wrote:

> PTR_STR is redefined when CONFIG_TEST_PRINTF is set. This causes the
> following build warning:
>
>    CC      lib/test_printf.o
> lib/test_printf.c:214:0: warning: "PTR_STR" redefined
>   #define PTR_STR "ffff0123456789ab"
>   ^
> In file included from ./arch/mips/include/asm/dsemul.h:11:0,
>                   from ./arch/mips/include/asm/processor.h:22,
>                   from ./arch/mips/include/asm/thread_info.h:16,
>                   from ./include/linux/thread_info.h:38,
>                   from ./include/asm-generic/preempt.h:5,
>                   from ./arch/mips/include/generated/asm/preempt.h:1,
>                   from ./include/linux/preempt.h:78,
>                   from ./include/linux/spinlock.h:51,
>                   from ./include/linux/seqlock.h:36,
>                   from ./include/linux/time.h:6,
>                   from ./include/linux/stat.h:19,
>                   from ./include/linux/module.h:13,
>                   from lib/test_printf.c:10:
> ./arch/mips/include/asm/inst.h:20:0: note: this is the location of the previous definition
>   #define PTR_STR  ".dword"
>   ^
>
> Instead of renaming PTR_STR again and again, it is better to move the
> unaligned load/store helpers from inst.h to unaligned.h, suggested by
> Maciej W. Rozycki.

I don't have time to review the implementation at the moment, but you 
can use the Suggested-by tag to mention Maciej in a structured way.

>
> Fixes: e701656ec4db ("MIPS: inst.h: Stop including asm.h to avoid various build failures")
> Cc: Maciej W. Rozycki" <macro@linux-mips.org>
> Reported-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> Signed-off-by: Huacai Chen <chenhc@lemote.com>
> ---
>   arch/mips/include/asm/inst.h      | 779 ------------------------------------
>   arch/mips/include/asm/unaligned.h | 802 ++++++++++++++++++++++++++++++++++++++
>   arch/mips/kernel/unaligned.c      |   1 +
>   arch/mips/loongson64/cop2-ex.c    |   1 +
>   4 files changed, 804 insertions(+), 779 deletions(-)
>   create mode 100644 arch/mips/include/asm/unaligned.h

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] MIPS: Fix build warning about "PTR_STR" redefinition
  2020-05-29  8:34 ` WANG Xuerui
@ 2020-05-29  9:12   ` Huacai Chen
  2020-05-29  9:20     ` WANG Xuerui
  0 siblings, 1 reply; 8+ messages in thread
From: Huacai Chen @ 2020-05-29  9:12 UTC (permalink / raw)
  To: WANG Xuerui
  Cc: Thomas Bogendoerfer, open list:MIPS, Fuxin Zhang, Zhangjin Wu,
	Jiaxun Yang, Maciej W . Rozycki

I'm sorry I forgot that, should I send V2?

Huacai

On Fri, May 29, 2020 at 4:34 PM WANG Xuerui <kernel@xen0n.name> wrote:
>
> Hi Huacai,
>
>
> On 2020/5/29 16:22, Huacai Chen wrote:
>
> > PTR_STR is redefined when CONFIG_TEST_PRINTF is set. This causes the
> > following build warning:
> >
> >    CC      lib/test_printf.o
> > lib/test_printf.c:214:0: warning: "PTR_STR" redefined
> >   #define PTR_STR "ffff0123456789ab"
> >   ^
> > In file included from ./arch/mips/include/asm/dsemul.h:11:0,
> >                   from ./arch/mips/include/asm/processor.h:22,
> >                   from ./arch/mips/include/asm/thread_info.h:16,
> >                   from ./include/linux/thread_info.h:38,
> >                   from ./include/asm-generic/preempt.h:5,
> >                   from ./arch/mips/include/generated/asm/preempt.h:1,
> >                   from ./include/linux/preempt.h:78,
> >                   from ./include/linux/spinlock.h:51,
> >                   from ./include/linux/seqlock.h:36,
> >                   from ./include/linux/time.h:6,
> >                   from ./include/linux/stat.h:19,
> >                   from ./include/linux/module.h:13,
> >                   from lib/test_printf.c:10:
> > ./arch/mips/include/asm/inst.h:20:0: note: this is the location of the previous definition
> >   #define PTR_STR  ".dword"
> >   ^
> >
> > Instead of renaming PTR_STR again and again, it is better to move the
> > unaligned load/store helpers from inst.h to unaligned.h, suggested by
> > Maciej W. Rozycki.
>
> I don't have time to review the implementation at the moment, but you
> can use the Suggested-by tag to mention Maciej in a structured way.
>
> >
> > Fixes: e701656ec4db ("MIPS: inst.h: Stop including asm.h to avoid various build failures")
> > Cc: Maciej W. Rozycki" <macro@linux-mips.org>
> > Reported-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> > Signed-off-by: Huacai Chen <chenhc@lemote.com>
> > ---
> >   arch/mips/include/asm/inst.h      | 779 ------------------------------------
> >   arch/mips/include/asm/unaligned.h | 802 ++++++++++++++++++++++++++++++++++++++
> >   arch/mips/kernel/unaligned.c      |   1 +
> >   arch/mips/loongson64/cop2-ex.c    |   1 +
> >   4 files changed, 804 insertions(+), 779 deletions(-)
> >   create mode 100644 arch/mips/include/asm/unaligned.h

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] MIPS: Fix build warning about "PTR_STR" redefinition
  2020-05-29  9:12   ` Huacai Chen
@ 2020-05-29  9:20     ` WANG Xuerui
  0 siblings, 0 replies; 8+ messages in thread
From: WANG Xuerui @ 2020-05-29  9:20 UTC (permalink / raw)
  To: Huacai Chen, WANG Xuerui
  Cc: Thomas Bogendoerfer, open list:MIPS, Fuxin Zhang, Zhangjin Wu,
	Jiaxun Yang, Maciej W . Rozycki

On 2020/5/29 17:12, Huacai Chen wrote:

> I'm sorry I forgot that, should I send V2?

Feel free to, at a *very* quick glance the implementation should have 
few problems if any...


P.S.: Please don't top post.

>
> Huacai
>
> On Fri, May 29, 2020 at 4:34 PM WANG Xuerui <kernel@xen0n.name> wrote:
>> Hi Huacai,
>>
>>
>> On 2020/5/29 16:22, Huacai Chen wrote:
>>
>>> PTR_STR is redefined when CONFIG_TEST_PRINTF is set. This causes the
>>> following build warning:
>>>
>>>     CC      lib/test_printf.o
>>> lib/test_printf.c:214:0: warning: "PTR_STR" redefined
>>>    #define PTR_STR "ffff0123456789ab"
>>>    ^
>>> In file included from ./arch/mips/include/asm/dsemul.h:11:0,
>>>                    from ./arch/mips/include/asm/processor.h:22,
>>>                    from ./arch/mips/include/asm/thread_info.h:16,
>>>                    from ./include/linux/thread_info.h:38,
>>>                    from ./include/asm-generic/preempt.h:5,
>>>                    from ./arch/mips/include/generated/asm/preempt.h:1,
>>>                    from ./include/linux/preempt.h:78,
>>>                    from ./include/linux/spinlock.h:51,
>>>                    from ./include/linux/seqlock.h:36,
>>>                    from ./include/linux/time.h:6,
>>>                    from ./include/linux/stat.h:19,
>>>                    from ./include/linux/module.h:13,
>>>                    from lib/test_printf.c:10:
>>> ./arch/mips/include/asm/inst.h:20:0: note: this is the location of the previous definition
>>>    #define PTR_STR  ".dword"
>>>    ^
>>>
>>> Instead of renaming PTR_STR again and again, it is better to move the
>>> unaligned load/store helpers from inst.h to unaligned.h, suggested by
>>> Maciej W. Rozycki.
>> I don't have time to review the implementation at the moment, but you
>> can use the Suggested-by tag to mention Maciej in a structured way.
>>
>>> Fixes: e701656ec4db ("MIPS: inst.h: Stop including asm.h to avoid various build failures")
>>> Cc: Maciej W. Rozycki" <macro@linux-mips.org>
>>> Reported-by: Tiezhu Yang <yangtiezhu@loongson.cn>
>>> Signed-off-by: Huacai Chen <chenhc@lemote.com>
>>> ---
>>>    arch/mips/include/asm/inst.h      | 779 ------------------------------------
>>>    arch/mips/include/asm/unaligned.h | 802 ++++++++++++++++++++++++++++++++++++++
>>>    arch/mips/kernel/unaligned.c      |   1 +
>>>    arch/mips/loongson64/cop2-ex.c    |   1 +
>>>    4 files changed, 804 insertions(+), 779 deletions(-)
>>>    create mode 100644 arch/mips/include/asm/unaligned.h

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] MIPS: Fix build warning about "PTR_STR" redefinition
  2020-05-29  8:22 [PATCH] MIPS: Fix build warning about "PTR_STR" redefinition Huacai Chen
  2020-05-29  8:34 ` WANG Xuerui
@ 2020-05-29 11:18 ` Thomas Bogendoerfer
  2020-05-30  4:43   ` Huacai Chen
  1 sibling, 1 reply; 8+ messages in thread
From: Thomas Bogendoerfer @ 2020-05-29 11:18 UTC (permalink / raw)
  To: Huacai Chen
  Cc: linux-mips, Fuxin Zhang, Zhangjin Wu, Huacai Chen, Jiaxun Yang,
	Maciej W . Rozycki

On Fri, May 29, 2020 at 04:22:10PM +0800, Huacai Chen wrote:
>  arch/mips/include/asm/inst.h      | 779 ------------------------------------
>  arch/mips/include/asm/unaligned.h | 802 ++++++++++++++++++++++++++++++++++++++

please use a different filename for this to avoid another disaster
because asm/unaligned.h is already used.

Thomas.

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] MIPS: Fix build warning about "PTR_STR" redefinition
  2020-05-29 11:18 ` Thomas Bogendoerfer
@ 2020-05-30  4:43   ` Huacai Chen
  2020-05-30  9:05     ` Thomas Bogendoerfer
  0 siblings, 1 reply; 8+ messages in thread
From: Huacai Chen @ 2020-05-30  4:43 UTC (permalink / raw)
  To: Thomas Bogendoerfer
  Cc: open list:MIPS, Fuxin Zhang, Zhangjin Wu, Jiaxun Yang,
	Maciej W . Rozycki

Hi, Thomas,

On Fri, May 29, 2020 at 7:19 PM Thomas Bogendoerfer
<tsbogend@alpha.franken.de> wrote:
>
> On Fri, May 29, 2020 at 04:22:10PM +0800, Huacai Chen wrote:
> >  arch/mips/include/asm/inst.h      | 779 ------------------------------------
> >  arch/mips/include/asm/unaligned.h | 802 ++++++++++++++++++++++++++++++++++++++
>
> please use a different filename for this to avoid another disaster
> because asm/unaligned.h is already used.
It seems like unaligned.h is the best place, because LoadXX/StoreXX is
nearly the same thing as get_unaligned/put_unaligned in the original
unaligned.h. For PTR_STR, the only confliction comes from
lib/test_printf.c, but lib/test_printf.c doesn't include unaligned.h.
And it seems there is no future problem, because unaligned.h has only
one new macro (i.e., PTR_STR, while LoadXX/StoreXX has no problems).

Regards,
Huacai
>
> Thomas.
>
> --
> Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
> good idea.                                                [ RFC1925, 2.3 ]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] MIPS: Fix build warning about "PTR_STR" redefinition
  2020-05-30  4:43   ` Huacai Chen
@ 2020-05-30  9:05     ` Thomas Bogendoerfer
  2020-05-30 10:26       ` Huacai Chen
  0 siblings, 1 reply; 8+ messages in thread
From: Thomas Bogendoerfer @ 2020-05-30  9:05 UTC (permalink / raw)
  To: Huacai Chen
  Cc: open list:MIPS, Fuxin Zhang, Zhangjin Wu, Jiaxun Yang,
	Maciej W . Rozycki

On Sat, May 30, 2020 at 12:43:17PM +0800, Huacai Chen wrote:
> Hi, Thomas,
> 
> On Fri, May 29, 2020 at 7:19 PM Thomas Bogendoerfer
> <tsbogend@alpha.franken.de> wrote:
> >
> > On Fri, May 29, 2020 at 04:22:10PM +0800, Huacai Chen wrote:
> > >  arch/mips/include/asm/inst.h      | 779 ------------------------------------
> > >  arch/mips/include/asm/unaligned.h | 802 ++++++++++++++++++++++++++++++++++++++
> >
> > please use a different filename for this to avoid another disaster
> > because asm/unaligned.h is already used.
> It seems like unaligned.h is the best place, because LoadXX/StoreXX is
> nearly the same thing as get_unaligned/put_unaligned in the original
> unaligned.h. For PTR_STR, the only confliction comes from
> lib/test_printf.c, but lib/test_printf.c doesn't include unaligned.h.
> And it seems there is no future problem, because unaligned.h has only
> one new macro (i.e., PTR_STR, while LoadXX/StoreXX has no problems).

this approach has two things I don't like. First it duplicates code
from asm-generic/unaligned.h and second it again risks to leak PTR_STR
since asm/unaligned.h is included by other kernel code.

I took your patch renamed unaligned.h to unaligned-emul.h, included 
asm/asm.h and replaced PTR_STR by STR(PTR). I've pushed it to mips-next
with a Co-developed by you.

Thomas.

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] MIPS: Fix build warning about "PTR_STR" redefinition
  2020-05-30  9:05     ` Thomas Bogendoerfer
@ 2020-05-30 10:26       ` Huacai Chen
  0 siblings, 0 replies; 8+ messages in thread
From: Huacai Chen @ 2020-05-30 10:26 UTC (permalink / raw)
  To: Thomas Bogendoerfer
  Cc: open list:MIPS, Fuxin Zhang, Zhangjin Wu, Jiaxun Yang,
	Maciej W . Rozycki

Hi, Thomas,

On Sat, May 30, 2020 at 5:08 PM Thomas Bogendoerfer
<tsbogend@alpha.franken.de> wrote:
>
> On Sat, May 30, 2020 at 12:43:17PM +0800, Huacai Chen wrote:
> > Hi, Thomas,
> >
> > On Fri, May 29, 2020 at 7:19 PM Thomas Bogendoerfer
> > <tsbogend@alpha.franken.de> wrote:
> > >
> > > On Fri, May 29, 2020 at 04:22:10PM +0800, Huacai Chen wrote:
> > > >  arch/mips/include/asm/inst.h      | 779 ------------------------------------
> > > >  arch/mips/include/asm/unaligned.h | 802 ++++++++++++++++++++++++++++++++++++++
> > >
> > > please use a different filename for this to avoid another disaster
> > > because asm/unaligned.h is already used.
> > It seems like unaligned.h is the best place, because LoadXX/StoreXX is
> > nearly the same thing as get_unaligned/put_unaligned in the original
> > unaligned.h. For PTR_STR, the only confliction comes from
> > lib/test_printf.c, but lib/test_printf.c doesn't include unaligned.h.
> > And it seems there is no future problem, because unaligned.h has only
> > one new macro (i.e., PTR_STR, while LoadXX/StoreXX has no problems).
>
> this approach has two things I don't like. First it duplicates code
> from asm-generic/unaligned.h and second it again risks to leak PTR_STR
> since asm/unaligned.h is included by other kernel code.
>
> I took your patch renamed unaligned.h to unaligned-emul.h, included
> asm/asm.h and replaced PTR_STR by STR(PTR). I've pushed it to mips-next
> with a Co-developed by you.
>
> Thomas.
OK, thank you.

>
> --
> Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
> good idea.                                                [ RFC1925, 2.3 ]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-05-30 10:26 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-29  8:22 [PATCH] MIPS: Fix build warning about "PTR_STR" redefinition Huacai Chen
2020-05-29  8:34 ` WANG Xuerui
2020-05-29  9:12   ` Huacai Chen
2020-05-29  9:20     ` WANG Xuerui
2020-05-29 11:18 ` Thomas Bogendoerfer
2020-05-30  4:43   ` Huacai Chen
2020-05-30  9:05     ` Thomas Bogendoerfer
2020-05-30 10:26       ` Huacai Chen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.