@@ -114,66 +114,78 @@ typedef unsigned int addr_t;
114114
115115static inline u8 rdfs8 (addr_t addr )
116116{
117+ u8 * ptr = (u8 * )absolute_pointer (addr );
117118 u8 v ;
118- asm volatile ("movb %%fs:%1,%0" : "=q" (v ) : "m" (* ( u8 * ) addr ));
119+ asm volatile ("movb %%fs:%1,%0" : "=q" (v ) : "m" (* ptr ));
119120 return v ;
120121}
121122static inline u16 rdfs16 (addr_t addr )
122123{
124+ u16 * ptr = (u16 * )absolute_pointer (addr );
123125 u16 v ;
124- asm volatile ("movw %%fs:%1,%0" : "=r" (v ) : "m" (* ( u16 * ) addr ));
126+ asm volatile ("movw %%fs:%1,%0" : "=r" (v ) : "m" (* ptr ));
125127 return v ;
126128}
127129static inline u32 rdfs32 (addr_t addr )
128130{
131+ u32 * ptr = (u32 * )absolute_pointer (addr );
129132 u32 v ;
130- asm volatile ("movl %%fs:%1,%0" : "=r" (v ) : "m" (* ( u32 * ) addr ));
133+ asm volatile ("movl %%fs:%1,%0" : "=r" (v ) : "m" (* ptr ));
131134 return v ;
132135}
133136
134137static inline void wrfs8 (u8 v , addr_t addr )
135138{
136- asm volatile ("movb %1,%%fs:%0" : "+m" (* (u8 * )addr ) : "qi" (v ));
139+ u8 * ptr = (u8 * )absolute_pointer (addr );
140+ asm volatile ("movb %1,%%fs:%0" : "+m" (* ptr ) : "qi" (v ));
137141}
138142static inline void wrfs16 (u16 v , addr_t addr )
139143{
140- asm volatile ("movw %1,%%fs:%0" : "+m" (* (u16 * )addr ) : "ri" (v ));
144+ u16 * ptr = (u16 * )absolute_pointer (addr );
145+ asm volatile ("movw %1,%%fs:%0" : "+m" (* ptr ) : "ri" (v ));
141146}
142147static inline void wrfs32 (u32 v , addr_t addr )
143148{
144- asm volatile ("movl %1,%%fs:%0" : "+m" (* (u32 * )addr ) : "ri" (v ));
149+ u32 * ptr = (u32 * )absolute_pointer (addr );
150+ asm volatile ("movl %1,%%fs:%0" : "+m" (* ptr ) : "ri" (v ));
145151}
146152
147153static inline u8 rdgs8 (addr_t addr )
148154{
155+ u8 * ptr = (u8 * )absolute_pointer (addr );
149156 u8 v ;
150- asm volatile ("movb %%gs:%1,%0" : "=q" (v ) : "m" (* ( u8 * ) addr ));
157+ asm volatile ("movb %%gs:%1,%0" : "=q" (v ) : "m" (* ptr ));
151158 return v ;
152159}
153160static inline u16 rdgs16 (addr_t addr )
154161{
162+ u16 * ptr = (u16 * )absolute_pointer (addr );
155163 u16 v ;
156- asm volatile ("movw %%gs:%1,%0" : "=r" (v ) : "m" (* ( u16 * ) addr ));
164+ asm volatile ("movw %%gs:%1,%0" : "=r" (v ) : "m" (* ptr ));
157165 return v ;
158166}
159167static inline u32 rdgs32 (addr_t addr )
160168{
169+ u32 * ptr = (u32 * )absolute_pointer (addr );
161170 u32 v ;
162- asm volatile ("movl %%gs:%1,%0" : "=r" (v ) : "m" (* ( u32 * ) addr ));
171+ asm volatile ("movl %%gs:%1,%0" : "=r" (v ) : "m" (* ptr ));
163172 return v ;
164173}
165174
166175static inline void wrgs8 (u8 v , addr_t addr )
167176{
168- asm volatile ("movb %1,%%gs:%0" : "+m" (* (u8 * )addr ) : "qi" (v ));
177+ u8 * ptr = (u8 * )absolute_pointer (addr );
178+ asm volatile ("movb %1,%%gs:%0" : "+m" (* ptr ) : "qi" (v ));
169179}
170180static inline void wrgs16 (u16 v , addr_t addr )
171181{
172- asm volatile ("movw %1,%%gs:%0" : "+m" (* (u16 * )addr ) : "ri" (v ));
182+ u16 * ptr = (u16 * )absolute_pointer (addr );
183+ asm volatile ("movw %1,%%gs:%0" : "+m" (* ptr ) : "ri" (v ));
173184}
174185static inline void wrgs32 (u32 v , addr_t addr )
175186{
176- asm volatile ("movl %1,%%gs:%0" : "+m" (* (u32 * )addr ) : "ri" (v ));
187+ u32 * ptr = (u32 * )absolute_pointer (addr );
188+ asm volatile ("movl %1,%%gs:%0" : "+m" (* ptr ) : "ri" (v ));
177189}
178190
179191/* Note: these only return true/false, not a signed return value! */
0 commit comments