@@ -77,66 +77,78 @@ typedef unsigned int addr_t;
7777
7878static inline u8 rdfs8 (addr_t addr )
7979{
80+ u8 * ptr = (u8 * )absolute_pointer (addr );
8081 u8 v ;
81- asm volatile ("movb %%fs:%1,%0" : "=q" (v ) : "m" (* ( u8 * ) addr ));
82+ asm volatile ("movb %%fs:%1,%0" : "=q" (v ) : "m" (* ptr ));
8283 return v ;
8384}
8485static inline u16 rdfs16 (addr_t addr )
8586{
87+ u16 * ptr = (u16 * )absolute_pointer (addr );
8688 u16 v ;
87- asm volatile ("movw %%fs:%1,%0" : "=r" (v ) : "m" (* ( u16 * ) addr ));
89+ asm volatile ("movw %%fs:%1,%0" : "=r" (v ) : "m" (* ptr ));
8890 return v ;
8991}
9092static inline u32 rdfs32 (addr_t addr )
9193{
94+ u32 * ptr = (u32 * )absolute_pointer (addr );
9295 u32 v ;
93- asm volatile ("movl %%fs:%1,%0" : "=r" (v ) : "m" (* ( u32 * ) addr ));
96+ asm volatile ("movl %%fs:%1,%0" : "=r" (v ) : "m" (* ptr ));
9497 return v ;
9598}
9699
97100static inline void wrfs8 (u8 v , addr_t addr )
98101{
99- asm volatile ("movb %1,%%fs:%0" : "+m" (* (u8 * )addr ) : "qi" (v ));
102+ u8 * ptr = (u8 * )absolute_pointer (addr );
103+ asm volatile ("movb %1,%%fs:%0" : "+m" (* ptr ) : "qi" (v ));
100104}
101105static inline void wrfs16 (u16 v , addr_t addr )
102106{
103- asm volatile ("movw %1,%%fs:%0" : "+m" (* (u16 * )addr ) : "ri" (v ));
107+ u16 * ptr = (u16 * )absolute_pointer (addr );
108+ asm volatile ("movw %1,%%fs:%0" : "+m" (* ptr ) : "ri" (v ));
104109}
105110static inline void wrfs32 (u32 v , addr_t addr )
106111{
107- asm volatile ("movl %1,%%fs:%0" : "+m" (* (u32 * )addr ) : "ri" (v ));
112+ u32 * ptr = (u32 * )absolute_pointer (addr );
113+ asm volatile ("movl %1,%%fs:%0" : "+m" (* ptr ) : "ri" (v ));
108114}
109115
110116static inline u8 rdgs8 (addr_t addr )
111117{
118+ u8 * ptr = (u8 * )absolute_pointer (addr );
112119 u8 v ;
113- asm volatile ("movb %%gs:%1,%0" : "=q" (v ) : "m" (* ( u8 * ) addr ));
120+ asm volatile ("movb %%gs:%1,%0" : "=q" (v ) : "m" (* ptr ));
114121 return v ;
115122}
116123static inline u16 rdgs16 (addr_t addr )
117124{
125+ u16 * ptr = (u16 * )absolute_pointer (addr );
118126 u16 v ;
119- asm volatile ("movw %%gs:%1,%0" : "=r" (v ) : "m" (* ( u16 * ) addr ));
127+ asm volatile ("movw %%gs:%1,%0" : "=r" (v ) : "m" (* ptr ));
120128 return v ;
121129}
122130static inline u32 rdgs32 (addr_t addr )
123131{
132+ u32 * ptr = (u32 * )absolute_pointer (addr );
124133 u32 v ;
125- asm volatile ("movl %%gs:%1,%0" : "=r" (v ) : "m" (* ( u32 * ) addr ));
134+ asm volatile ("movl %%gs:%1,%0" : "=r" (v ) : "m" (* ptr ));
126135 return v ;
127136}
128137
129138static inline void wrgs8 (u8 v , addr_t addr )
130139{
131- asm volatile ("movb %1,%%gs:%0" : "+m" (* (u8 * )addr ) : "qi" (v ));
140+ u8 * ptr = (u8 * )absolute_pointer (addr );
141+ asm volatile ("movb %1,%%gs:%0" : "+m" (* ptr ) : "qi" (v ));
132142}
133143static inline void wrgs16 (u16 v , addr_t addr )
134144{
135- asm volatile ("movw %1,%%gs:%0" : "+m" (* (u16 * )addr ) : "ri" (v ));
145+ u16 * ptr = (u16 * )absolute_pointer (addr );
146+ asm volatile ("movw %1,%%gs:%0" : "+m" (* ptr ) : "ri" (v ));
136147}
137148static inline void wrgs32 (u32 v , addr_t addr )
138149{
139- asm volatile ("movl %1,%%gs:%0" : "+m" (* (u32 * )addr ) : "ri" (v ));
150+ u32 * ptr = (u32 * )absolute_pointer (addr );
151+ asm volatile ("movl %1,%%gs:%0" : "+m" (* ptr ) : "ri" (v ));
140152}
141153
142154/* Note: these only return true/false, not a signed return value! */
0 commit comments