Commit 4f7e90d6 authored by Martin Schwidefsky's avatar Martin Schwidefsky

[S390] clear_table inline assembly contraints

Tell the compile that the clear_table inline assembly writes to the
memory referenced by *s.
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent c185b783
...@@ -28,6 +28,8 @@ void disable_noexec(struct mm_struct *, struct task_struct *); ...@@ -28,6 +28,8 @@ void disable_noexec(struct mm_struct *, struct task_struct *);
static inline void clear_table(unsigned long *s, unsigned long val, size_t n) static inline void clear_table(unsigned long *s, unsigned long val, size_t n)
{ {
typedef struct { char _[n]; } addrtype;
*s = val; *s = val;
n = (n / 256) - 1; n = (n / 256) - 1;
asm volatile( asm volatile(
...@@ -39,7 +41,8 @@ static inline void clear_table(unsigned long *s, unsigned long val, size_t n) ...@@ -39,7 +41,8 @@ static inline void clear_table(unsigned long *s, unsigned long val, size_t n)
"0: mvc 256(256,%0),0(%0)\n" "0: mvc 256(256,%0),0(%0)\n"
" la %0,256(%0)\n" " la %0,256(%0)\n"
" brct %1,0b\n" " brct %1,0b\n"
: "+a" (s), "+d" (n)); : "+a" (s), "+d" (n), "=m" (*(addrtype *) s)
: "m" (*(addrtype *) s));
} }
static inline void crst_table_init(unsigned long *crst, unsigned long entry) static inline void crst_table_init(unsigned long *crst, unsigned long entry)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment