mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 01:50:53 +07:00
[S390] Fix __ctl_load/__ctl_store inline assembly constraints
__ctl_load/__ctl_store are called with either an array of unsigned long or a single unsigned long value. Add an address operator to the "m"/"=m" contraints to make them work for unsigned long arguments as well. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
24d3e210c1
commit
b57838ea3f
@ -315,14 +315,14 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size)
|
||||
asm volatile( \
|
||||
" lctlg %1,%2,0(%0)\n" \
|
||||
: : "a" (&array), "i" (low), "i" (high), \
|
||||
"m" (*(addrtype *)(array))); \
|
||||
"m" (*(addrtype *)(&array))); \
|
||||
})
|
||||
|
||||
#define __ctl_store(array, low, high) ({ \
|
||||
typedef struct { char _[sizeof(array)]; } addrtype; \
|
||||
asm volatile( \
|
||||
" stctg %2,%3,0(%1)\n" \
|
||||
: "=m" (*(addrtype *)(array)) \
|
||||
: "=m" (*(addrtype *)(&array)) \
|
||||
: "a" (&array), "i" (low), "i" (high)); \
|
||||
})
|
||||
|
||||
@ -333,14 +333,14 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size)
|
||||
asm volatile( \
|
||||
" lctl %1,%2,0(%0)\n" \
|
||||
: : "a" (&array), "i" (low), "i" (high), \
|
||||
"m" (*(addrtype *)(array))); \
|
||||
"m" (*(addrtype *)(&array))); \
|
||||
})
|
||||
|
||||
#define __ctl_store(array, low, high) ({ \
|
||||
typedef struct { char _[sizeof(array)]; } addrtype; \
|
||||
asm volatile( \
|
||||
" stctl %2,%3,0(%1)\n" \
|
||||
: "=m" (*(addrtype *)(array)) \
|
||||
: "=m" (*(addrtype *)(&array)) \
|
||||
: "a" (&array), "i" (low), "i" (high)); \
|
||||
})
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user