@@ -189,7 +189,8 @@ mod x86_64 {
189189 /// break memory safety with wrong flags, e.g. by disabling long mode.
190190 #[ inline]
191191 pub unsafe fn write_raw ( flags : u64 ) {
192- Self :: MSR . write ( flags) ;
192+ let mut msr = Self :: MSR ;
193+ msr. write ( flags) ;
193194 }
194195
195196 /// Update EFER flags.
@@ -221,7 +222,8 @@ mod x86_64 {
221222 /// Write a given virtual address to the FS.Base register.
222223 #[ inline]
223224 pub fn write ( address : VirtAddr ) {
224- unsafe { Self :: MSR . write ( address. as_u64 ( ) ) } ;
225+ let mut msr = Self :: MSR ;
226+ unsafe { msr. write ( address. as_u64 ( ) ) } ;
225227 }
226228 }
227229
@@ -235,7 +237,8 @@ mod x86_64 {
235237 /// Write a given virtual address to the GS.Base register.
236238 #[ inline]
237239 pub fn write ( address : VirtAddr ) {
238- unsafe { Self :: MSR . write ( address. as_u64 ( ) ) } ;
240+ let mut msr = Self :: MSR ;
241+ unsafe { msr. write ( address. as_u64 ( ) ) } ;
239242 }
240243 }
241244
@@ -249,7 +252,8 @@ mod x86_64 {
249252 /// Write a given virtual address to the KernelGsBase register.
250253 #[ inline]
251254 pub fn write ( address : VirtAddr ) {
252- unsafe { Self :: MSR . write ( address. as_u64 ( ) ) } ;
255+ let mut msr = Self :: MSR ;
256+ unsafe { msr. write ( address. as_u64 ( ) ) } ;
253257 }
254258 }
255259
@@ -316,7 +320,8 @@ mod x86_64 {
316320 let mut msr_value = 0u64 ;
317321 msr_value. set_bits ( 48 ..64 , sysret. into ( ) ) ;
318322 msr_value. set_bits ( 32 ..48 , syscall. into ( ) ) ;
319- Self :: MSR . write ( msr_value) ;
323+ let mut msr = Self :: MSR ;
324+ msr. write ( msr_value) ;
320325 }
321326
322327 /// Write the Ring 0 and Ring 3 segment bases.
@@ -366,7 +371,8 @@ mod x86_64 {
366371 /// This holds the target RIP of a syscall.
367372 #[ inline]
368373 pub fn write ( address : VirtAddr ) {
369- unsafe { Self :: MSR . write ( address. as_u64 ( ) ) } ;
374+ let mut msr = Self :: MSR ;
375+ unsafe { msr. write ( address. as_u64 ( ) ) } ;
370376 }
371377 }
372378
@@ -392,7 +398,8 @@ mod x86_64 {
392398 /// to 0, the corresponding rFLAGS bit is not modified.
393399 #[ inline]
394400 pub fn write ( value : RFlags ) {
395- unsafe { Self :: MSR . write ( value. bits ( ) ) } ;
401+ let mut msr = Self :: MSR ;
402+ unsafe { msr. write ( value. bits ( ) ) } ;
396403 }
397404 }
398405}
0 commit comments