From: Robin Murphy <robin.murphy@arm.com>
To: will@kernel.org, catalin.marinas@arm.com
Cc: sam.tebbs@arm.com, linux-arm-kernel@lists.infradead.org
Subject: [PATCH 8/8] arm64: Tidy up _asm_extable_faultaddr usage
Date: Tue, 15 Oct 2019 16:50:03 +0100 [thread overview]
Message-ID: <c8a3fb5b1fcc74fd867b0701e59834f8229935bb.1571073960.git.robin.murphy@arm.com> (raw)
In-Reply-To: <cover.1571073960.git.robin.murphy@arm.com>
To match the way the USER() shorthand wraps _asm_extable entries,
introduce USER_F() to wrap _asm_extable_faultaddr and clean up a bit.
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
---
arch/arm64/include/asm/assembler.h | 4 ++
arch/arm64/lib/copy_from_user.S | 36 +++++----------
arch/arm64/lib/copy_in_user.S | 72 ++++++++++--------------------
arch/arm64/lib/copy_to_user.S | 33 +++++---------
4 files changed, 51 insertions(+), 94 deletions(-)
diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h
index 02bb156cbf0e..959f6fa493ef 100644
--- a/arch/arm64/include/asm/assembler.h
+++ b/arch/arm64/include/asm/assembler.h
@@ -155,6 +155,10 @@ alternative_endif
9999: x; \
_asm_extable 9999b, l
+#define USER_F(l, x...) \
+9999: x; \
+ _asm_extable_faultaddr 9999b, l
+
/*
* Register aliases.
*/
diff --git a/arch/arm64/lib/copy_from_user.S b/arch/arm64/lib/copy_from_user.S
index 8928c38d8c76..d0bcfad5dafd 100644
--- a/arch/arm64/lib/copy_from_user.S
+++ b/arch/arm64/lib/copy_from_user.S
@@ -21,8 +21,7 @@
*/
.macro ldrb1 reg, ptr, offset=0
- 8888: ldtrb \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldtrb \reg, [\ptr, \offset])
.endm
.macro strb1 reg, ptr, offset=0
@@ -31,9 +30,8 @@
.macro ldrb1_reg reg, ptr, offset
add \ptr, \ptr, \offset
- 8888: ldtrb \reg, [\ptr]
+ USER_F(9998f, ldtrb \reg, [\ptr])
sub \ptr, \ptr, \offset
- _asm_extable_faultaddr 8888b,9998f;
.endm
.macro strb1_reg reg, ptr, offset
@@ -41,8 +39,7 @@
.endm
.macro ldr1 reg, ptr, offset=0
- 8888: ldtr \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldtr \reg, [\ptr, \offset])
.endm
.macro str1 reg, ptr, offset=0
@@ -50,10 +47,8 @@
.endm
.macro ldp1 regA, regB, ptr, offset=0
- 8888: ldtr \regA, [\ptr, \offset]
- 8889: ldtr \regB, [\ptr, \offset + 8]
- _asm_extable_faultaddr 8888b,9998f;
- _asm_extable_faultaddr 8889b,9998f;
+ USER_F(9998f, ldtr \regA, [\ptr, \offset])
+ USER_F(9998f, ldtr \regB, [\ptr, \offset + 8])
.endm
.macro stp1 regA, regB, ptr, offset=0
@@ -61,11 +56,9 @@
.endm
.macro ldp1_pre regA, regB, ptr, offset
- 8888: ldtr \regA, [\ptr, \offset]
- 8889: ldtr \regB, [\ptr, \offset + 8]
+ USER_F(9998f, ldtr \regA, [\ptr, \offset])
+ USER_F(9998f, ldtr \regB, [\ptr, \offset + 8])
add \ptr, \ptr, \offset
- _asm_extable_faultaddr 8888b,9998f;
- _asm_extable_faultaddr 8889b,9998f;
.endm
.macro stp1_pre regA, regB, ptr, offset
@@ -73,8 +66,7 @@
.endm
.macro ldrb1_nuao reg, ptr, offset=0
- 8888: ldrb \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldrb \reg, [\ptr, \offset])
.endm
.macro strb1_nuao reg, ptr, offset=0
@@ -82,8 +74,7 @@
.endm
.macro ldrb1_nuao_reg reg, ptr, offset=0
- 8888: ldrb \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldrb \reg, [\ptr, \offset])
.endm
.macro strb1_nuao_reg reg, ptr, offset=0
@@ -91,8 +82,7 @@
.endm
.macro ldr1_nuao reg, ptr, offset=0
- 8888: ldr \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldr \reg, [\ptr, \offset])
.endm
.macro str1_nuao reg, ptr, offset=0
@@ -100,8 +90,7 @@
.endm
.macro ldp1_nuao regA, regB, ptr, offset=0
- 8888: ldp \regA, \regB, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldp \regA, \regB, [\ptr, \offset])
.endm
.macro stp1_nuao regA, regB, ptr, offset=0
@@ -109,8 +98,7 @@
.endm
.macro ldp1_pre_nuao regA, regB, ptr, offset
- 8888: ldp \regA, \regB, [\ptr, \offset]!
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldp \regA, \regB, [\ptr, \offset]!)
.endm
.macro stp1_pre_nuao regA, regB, ptr, offset
diff --git a/arch/arm64/lib/copy_in_user.S b/arch/arm64/lib/copy_in_user.S
index 2aecdc300c8d..25fdedc6eed8 100644
--- a/arch/arm64/lib/copy_in_user.S
+++ b/arch/arm64/lib/copy_in_user.S
@@ -23,117 +23,93 @@
*/
.macro ldrb1 reg, ptr, offset=0
- 8888: ldtrb \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldtrb \reg, [\ptr, \offset])
.endm
.macro strb1 reg, ptr, offset=0
- 8888: sttrb \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, sttrb \reg, [\ptr, \offset])
.endm
.macro ldrb1_reg reg, ptr, offset
add \ptr, \ptr, \offset
- 8888: ldtrb \reg, [\ptr]
+ USER_F(9998f, ldtrb \reg, [\ptr])
sub \ptr, \ptr, \offset
- _asm_extable_faultaddr 8888b,9998f;
.endm
.macro strb1_reg reg, ptr, offset
add \ptr, \ptr, \offset
- 8888: sttrb \reg, [\ptr]
+ USER_F(9998f, sttrb \reg, [\ptr])
sub \ptr, \ptr, \offset
- _asm_extable_faultaddr 8888b,9998f;
.endm
.macro ldr1 reg, ptr, offset=0
- 8888: ldtr \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldtr \reg, [\ptr, \offset])
.endm
.macro str1 reg, ptr, offset=0
- 8888: sttr \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, sttr \reg, [\ptr, \offset])
.endm
.macro ldp1 regA, regB, ptr, offset=0
- 8888: ldtr \regA, [\ptr, \offset]
- 8889: ldtr \regB, [\ptr, \offset + 8]
- _asm_extable_faultaddr 8888b,9998f;
- _asm_extable_faultaddr 8889b,9998f;
+ USER_F(9998f, ldtr \regA, [\ptr, \offset])
+ USER_F(9998f, ldtr \regB, [\ptr, \offset + 8])
.endm
.macro stp1 regA, regB, ptr, offset=0
- 8888: sttr \regA, [\ptr, \offset]
- 8889: sttr \regB, [\ptr, \offset + 8]
- _asm_extable_faultaddr 8888b,9998f;
- _asm_extable_faultaddr 8889b,9998f;
+ USER_F(9998f, sttr \regA, [\ptr, \offset])
+ USER_F(9998f, sttr \regB, [\ptr, \offset + 8])
.endm
.macro ldp1_pre regA, regB, ptr, offset
- 8888: ldtr \regA, [\ptr, \offset]
- 8889: ldtr \regB, [\ptr, \offset + 8]
+ USER_F(9998f, ldtr \regA, [\ptr, \offset])
+ USER_F(9998f, ldtr \regB, [\ptr, \offset + 8])
add \ptr, \ptr, \offset
- _asm_extable_faultaddr 8888b,9998f;
- _asm_extable_faultaddr 8889b,9998f;
.endm
.macro stp1_pre regA, regB, ptr, offset
- 8888: sttr \regA, [\ptr, \offset]
- 8889: sttr \regB, [\ptr, \offset + 8]
+ USER_F(9998f, sttr \regA, [\ptr, \offset])
+ USER_F(9998f, sttr \regB, [\ptr, \offset + 8])
add \ptr, \ptr, \offset
- _asm_extable_faultaddr 8888b,9998f;
- _asm_extable_faultaddr 8889b,9998f;
.endm
.macro ldrb1_nuao reg, ptr, offset=0
- 8888: ldrb \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldrb \reg, [\ptr, \offset])
.endm
.macro strb1_nuao reg, ptr, offset=0
- 8888: strb \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, strb \reg, [\ptr, \offset])
.endm
.macro ldrb1_nuao_reg reg, ptr, offset=0
- 8888: ldrb \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldrb \reg, [\ptr, \offset])
.endm
.macro strb1_nuao_reg reg, ptr, offset=0
- 8888: strb \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, strb \reg, [\ptr, \offset])
.endm
.macro ldr1_nuao reg, ptr, offset=0
- 8888: ldr \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldr \reg, [\ptr, \offset])
.endm
.macro str1_nuao reg, ptr, offset=0
- 8888: str \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, str \reg, [\ptr, \offset])
.endm
.macro ldp1_nuao regA, regB, ptr, offset=0
- 8888: ldp \regA, \regB, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldp \regA, \regB, [\ptr, \offset])
.endm
.macro stp1_nuao regA, regB, ptr, offset=0
- 8888: stp \regA, \regB, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, stp \regA, \regB, [\ptr, \offset])
.endm
.macro ldp1_pre_nuao regA, regB, ptr, offset
- 8888: ldp \regA, \regB, [\ptr, \offset]!
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, ldp \regA, \regB, [\ptr, \offset]!)
.endm
.macro stp1_pre_nuao regA, regB, ptr, offset
- 8888: stp \regA, \regB, [\ptr, \offset]!
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, stp \regA, \regB, [\ptr, \offset]!)
.endm
.macro copy_exit
diff --git a/arch/arm64/lib/copy_to_user.S b/arch/arm64/lib/copy_to_user.S
index d49db097bc31..744c57460619 100644
--- a/arch/arm64/lib/copy_to_user.S
+++ b/arch/arm64/lib/copy_to_user.S
@@ -25,8 +25,7 @@
.endm
.macro strb1 reg, ptr, offset=0
- 8888: sttrb \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, sttrb \reg, [\ptr, \offset])
.endm
.macro ldrb1_reg reg, ptr, offset
@@ -35,9 +34,8 @@
.macro strb1_reg reg, ptr, offset
add \ptr, \ptr, \offset
- 8888: sttrb \reg, [\ptr]
+ USER_F(9998f, sttrb \reg, [\ptr])
sub \ptr, \ptr, \offset
- _asm_extable_faultaddr 8888b,9998f;
.endm
.macro ldr1 reg, ptr, offset=0
@@ -45,8 +43,7 @@
.endm
.macro str1 reg, ptr, offset=0
- 8888: sttr \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, sttr \reg, [\ptr, \offset])
.endm
.macro ldp1 regA, regB, ptr, offset=0
@@ -54,10 +51,8 @@
.endm
.macro stp1 regA, regB, ptr, offset=0
- 8888: sttr \regA, [\ptr, \offset]
- 8889: sttr \regB, [\ptr, \offset + 8]
- _asm_extable_faultaddr 8888b,9998f;
- _asm_extable_faultaddr 8889b,9998f;
+ USER_F(9998f, sttr \regA, [\ptr, \offset])
+ USER_F(9998f, sttr \regB, [\ptr, \offset + 8])
.endm
.macro ldp1_pre regA, regB, ptr, offset
@@ -65,11 +60,9 @@
.endm
.macro stp1_pre regA, regB, ptr, offset
- 8888: sttr \regA, [\ptr, \offset]
- 8889: sttr \regB, [\ptr, \offset + 8]
+ USER_F(9998f, sttr \regA, [\ptr, \offset])
+ USER_F(9998f, sttr \regB, [\ptr, \offset + 8])
add \ptr, \ptr, \offset
- _asm_extable_faultaddr 8888b,9998f;
- _asm_extable_faultaddr 8889b,9998f;
.endm
.macro ldrb1_nuao reg, ptr, offset=0
@@ -77,8 +70,7 @@
.endm
.macro strb1_nuao reg, ptr, offset=0
- 8888: strb \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, strb \reg, [\ptr, \offset])
.endm
.macro ldrb1_nuao_reg reg, ptr, offset=0
@@ -94,8 +86,7 @@
.endm
.macro str1_nuao reg, ptr, offset=0
- 8888: str \reg, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, str \reg, [\ptr, \offset])
.endm
.macro ldp1_nuao regA, regB, ptr, offset=0
@@ -107,13 +98,11 @@
.endm
.macro stp1_nuao regA, regB, ptr, offset=0
- 8888: stp \regA, \regB, [\ptr, \offset]
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, stp \regA, \regB, [\ptr, \offset])
.endm
.macro stp1_pre_nuao regA, regB, ptr, offset
- 8888: stp \regA, \regB, [\ptr, \offset]!
- _asm_extable_faultaddr 8888b,9998f;
+ USER_F(9998f, stp \regA, \regB, [\ptr, \offset]!)
.endm
.macro copy_exit
--
2.21.0.dirty
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-10-15 15:52 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-15 15:49 [PATCH 0/8] arm64: Optimise and update memcpy, user copy and string routines Robin Murphy
2019-10-15 15:49 ` [PATCH 1/8] arm64: Allow passing fault address to fixup handlers Robin Murphy
2019-10-15 15:49 ` [PATCH 2/8] arm64: Import latest Cortex Strings memcpy implementation Robin Murphy
2019-10-15 15:49 ` [PATCH 3/8] arm64: Import latest version of Cortex Strings' memcmp Robin Murphy
2019-10-15 15:49 ` [PATCH 4/8] arm64: Import latest version of Cortex Strings' memmove Robin Murphy
2019-10-15 15:50 ` [PATCH 5/8] arm64: Import latest version of Cortex Strings' strcmp Robin Murphy
2019-10-15 15:50 ` [PATCH 6/8] arm64: Import latest version of Cortex Strings' strlen Robin Murphy
2019-10-15 15:50 ` [PATCH 7/8] arm64: Import latest version of Cortex Strings' strncmp Robin Murphy
2019-10-15 15:50 ` Robin Murphy [this message]
2019-10-17 11:21 ` [PATCH 0/8] arm64: Optimise and update memcpy, user copy and string routines Catalin Marinas
2019-10-18 7:54 ` Catalin Marinas
2019-10-18 9:28 ` Robin Murphy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c8a3fb5b1fcc74fd867b0701e59834f8229935bb.1571073960.git.robin.murphy@arm.com \
--to=robin.murphy@arm.com \
--cc=catalin.marinas@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=sam.tebbs@arm.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).