| From 54a2b67fd80d9a5fe1b976efad4f513b495b58e3 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 6 Oct 2019 15:12:32 +0200 |
| Subject: MIPS: include: Mark __cmpxchg as __always_inline |
| |
| From: Thomas Bogendoerfer <tbogendoerfer@suse.de> |
| |
| [ Upstream commit 88356d09904bc606182c625575237269aeece22e ] |
| |
| Commit ac7c3e4ff401 ("compiler: enable CONFIG_OPTIMIZE_INLINING |
| forcibly") allows compiler to uninline functions marked as 'inline'. |
| In cace of cmpxchg this would cause to reference function |
| __cmpxchg_called_with_bad_pointer, which is a error case |
| for catching bugs and will not happen for correct code, if |
| __cmpxchg is inlined. |
| |
| Signed-off-by: Thomas Bogendoerfer <tbogendoerfer@suse.de> |
| [paul.burton@mips.com: s/__cmpxchd/__cmpxchg in subject] |
| Signed-off-by: Paul Burton <paul.burton@mips.com> |
| Cc: Ralf Baechle <ralf@linux-mips.org> |
| Cc: James Hogan <jhogan@kernel.org> |
| Cc: linux-mips@vger.kernel.org |
| Cc: linux-kernel@vger.kernel.org |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/mips/include/asm/cmpxchg.h | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| diff --git a/arch/mips/include/asm/cmpxchg.h b/arch/mips/include/asm/cmpxchg.h |
| index c8a47d18f6288..319522fa3a45e 100644 |
| --- a/arch/mips/include/asm/cmpxchg.h |
| +++ b/arch/mips/include/asm/cmpxchg.h |
| @@ -153,8 +153,9 @@ static inline unsigned long __xchg(volatile void *ptr, unsigned long x, |
| extern unsigned long __cmpxchg_small(volatile void *ptr, unsigned long old, |
| unsigned long new, unsigned int size); |
| |
| -static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, |
| - unsigned long new, unsigned int size) |
| +static __always_inline |
| +unsigned long __cmpxchg(volatile void *ptr, unsigned long old, |
| + unsigned long new, unsigned int size) |
| { |
| switch (size) { |
| case 1: |
| -- |
| 2.20.1 |
| |