Skip to content

Commit c4908c4

Browse files
mdouchapevik
authored andcommitted
KVM: Implement helper functions for setting x86 control registers
Link: https://lore.kernel.org/ltp/[email protected]/ Reviewed-by: Petr Vorel <[email protected]> Signed-off-by: Martin Doucha <[email protected]>
1 parent a6c1b79 commit c4908c4

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

testcases/kernel/kvm/include/kvm_x86.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ unsigned int kvm_create_stack_descriptor(struct segment_descriptor *table,
221221
void kvm_get_cpuid(unsigned int eax, unsigned int ecx, struct kvm_cpuid *buf);
222222
void kvm_read_cregs(struct kvm_cregs *buf);
223223
void kvm_read_sregs(struct kvm_sregs *buf);
224+
void kvm_set_cr0(unsigned long val);
225+
void kvm_set_cr3(unsigned long val);
226+
void kvm_set_cr4(unsigned long val);
224227
uint64_t kvm_rdmsr(unsigned int msr);
225228
void kvm_wrmsr(unsigned int msr, uint64_t value);
226229

testcases/kernel/kvm/lib_x86.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,33 @@ void kvm_get_cpuid(unsigned int eax, unsigned int ecx, struct kvm_cpuid *buf)
214214
);
215215
}
216216

217+
void kvm_set_cr0(unsigned long val)
218+
{
219+
asm (
220+
"mov %0, %%cr0\n"
221+
:
222+
: "r" (val)
223+
);
224+
}
225+
226+
void kvm_set_cr3(unsigned long val)
227+
{
228+
asm (
229+
"mov %0, %%cr3\n"
230+
:
231+
: "r" (val)
232+
);
233+
}
234+
235+
void kvm_set_cr4(unsigned long val)
236+
{
237+
asm (
238+
"mov %0, %%cr4\n"
239+
:
240+
: "r" (val)
241+
);
242+
}
243+
217244
uint64_t kvm_rdmsr(unsigned int msr)
218245
{
219246
unsigned int ret_lo, ret_hi;

0 commit comments

Comments
 (0)