| .. | .. | 
|---|
| 9 | 9 |  #include <linux/mm.h> | 
|---|
| 10 | 10 |  #include <linux/device.h> | 
|---|
| 11 | 11 |   | 
|---|
| 12 |  | -#include <linux/uaccess.h>  | 
|---|
 | 12 | +#include <asm/extable.h>  | 
|---|
| 13 | 13 |  #include <asm/page.h> | 
|---|
| 14 |  | -#include <asm/pgtable.h>  | 
|---|
| 15 | 14 |   | 
|---|
| 16 | 15 |  #include <xen/interface/xen.h> | 
|---|
| 17 | 16 |  #include <xen/interface/grant_table.h> | 
|---|
| .. | .. | 
|---|
| 93 | 92 |   */ | 
|---|
| 94 | 93 |  static inline int xen_safe_write_ulong(unsigned long *addr, unsigned long val) | 
|---|
| 95 | 94 |  { | 
|---|
| 96 |  | -	return __put_user(val, (unsigned long __user *)addr);  | 
|---|
 | 95 | +	int ret = 0;  | 
|---|
 | 96 | +  | 
|---|
 | 97 | +	asm volatile("1: mov %[val], %[ptr]\n"  | 
|---|
 | 98 | +		     "2:\n"  | 
|---|
 | 99 | +		     ".section .fixup, \"ax\"\n"  | 
|---|
 | 100 | +		     "3: sub $1, %[ret]\n"  | 
|---|
 | 101 | +		     "   jmp 2b\n"  | 
|---|
 | 102 | +		     ".previous\n"  | 
|---|
 | 103 | +		     _ASM_EXTABLE(1b, 3b)  | 
|---|
 | 104 | +		     : [ret] "+r" (ret), [ptr] "=m" (*addr)  | 
|---|
 | 105 | +		     : [val] "r" (val));  | 
|---|
 | 106 | +  | 
|---|
 | 107 | +	return ret;  | 
|---|
| 97 | 108 |  } | 
|---|
| 98 | 109 |   | 
|---|
| 99 |  | -static inline int xen_safe_read_ulong(unsigned long *addr, unsigned long *val)  | 
|---|
 | 110 | +static inline int xen_safe_read_ulong(const unsigned long *addr,  | 
|---|
 | 111 | +				      unsigned long *val)  | 
|---|
| 100 | 112 |  { | 
|---|
| 101 |  | -	return __get_user(*val, (unsigned long __user *)addr);  | 
|---|
 | 113 | +	int ret = 0;  | 
|---|
 | 114 | +	unsigned long rval = ~0ul;  | 
|---|
 | 115 | +  | 
|---|
 | 116 | +	asm volatile("1: mov %[ptr], %[rval]\n"  | 
|---|
 | 117 | +		     "2:\n"  | 
|---|
 | 118 | +		     ".section .fixup, \"ax\"\n"  | 
|---|
 | 119 | +		     "3: sub $1, %[ret]\n"  | 
|---|
 | 120 | +		     "   jmp 2b\n"  | 
|---|
 | 121 | +		     ".previous\n"  | 
|---|
 | 122 | +		     _ASM_EXTABLE(1b, 3b)  | 
|---|
 | 123 | +		     : [ret] "+r" (ret), [rval] "+r" (rval)  | 
|---|
 | 124 | +		     : [ptr] "m" (*addr));  | 
|---|
 | 125 | +	*val = rval;  | 
|---|
 | 126 | +  | 
|---|
 | 127 | +	return ret;  | 
|---|
| 102 | 128 |  } | 
|---|
| 103 | 129 |   | 
|---|
| 104 | 130 |  #ifdef CONFIG_XEN_PV | 
|---|