Messages in this thread | | | Subject | Re: [Xen-devel] [PATCH] x86/xen: fix pv boot | From | Juergen Gross <> | Date | Wed, 7 Nov 2018 13:16:42 +0100 |
| |
On 07/11/2018 13:02, Andrew Cooper wrote: > On 07/11/18 11:55, Andrew Cooper wrote: >> On 07/11/18 11:30, Juergen Gross wrote: >>> + return ret; >>> } >>> >>> static inline int xen_safe_read_ulong(unsigned long *addr, unsigned long *val) >>> { >>> - return __get_user(*val, (unsigned long __user *)addr); >>> + int ret = 0; >>> + unsigned long rval; >>> + >>> + asm volatile("1: mov"__i" %2,%"__r"1\n" >>> + "2:\n" >>> + ".section .fixup,\"ax\"\n" >>> + "3: mov %3,%0\n" >>> + " jmp 2b\n" >>> + ".previous\n" >>> + _ASM_EXTABLE(1b, 3b) >>> + : "=r" (ret), "=r" (rval) >>> + : "m" (*addr), "i" (-1), "0" (ret)); >>> + *val = rval; >>> + return ret; >> This also uses rval uninitialised if a fault occurs. >> >> Overall, how about: >> >> static inline int xen_safe_write_ulong(unsigned long *addr, unsigned >> long val) >> { >> int ret = 0; >> >> asm volatile("1: mov %[val], %[ptr]\n" >> "2:\n" >> ".section .fixup, \"ax\"\n" >> "3: mov %[err], %[ret]\n" > > Actually, if you want a shorter fixup path, `sub $1, %[ret]` would also > do, and drop the [err] constraint.
Thanks for the review.
Will send V2 soon.
Juergen
| |