Revision 317ac620 target-i386/kvm.c
b/target-i386/kvm.c | ||
---|---|---|
221 | 221 |
return -ENOSYS; |
222 | 222 |
} |
223 | 223 |
|
224 |
static void kvm_mce_inject(CPUState *env, target_phys_addr_t paddr, int code) |
|
224 |
static void kvm_mce_inject(CPUX86State *env, target_phys_addr_t paddr, int code)
|
|
225 | 225 |
{ |
226 | 226 |
uint64_t status = MCI_STATUS_VAL | MCI_STATUS_UC | MCI_STATUS_EN | |
227 | 227 |
MCI_STATUS_MISCV | MCI_STATUS_ADDRV | MCI_STATUS_S; |
... | ... | |
246 | 246 |
exit(1); |
247 | 247 |
} |
248 | 248 |
|
249 |
int kvm_arch_on_sigbus_vcpu(CPUState *env, int code, void *addr) |
|
249 |
int kvm_arch_on_sigbus_vcpu(CPUX86State *env, int code, void *addr)
|
|
250 | 250 |
{ |
251 | 251 |
ram_addr_t ram_addr; |
252 | 252 |
target_phys_addr_t paddr; |
... | ... | |
306 | 306 |
return 0; |
307 | 307 |
} |
308 | 308 |
|
309 |
static int kvm_inject_mce_oldstyle(CPUState *env) |
|
309 |
static int kvm_inject_mce_oldstyle(CPUX86State *env)
|
|
310 | 310 |
{ |
311 | 311 |
if (!kvm_has_vcpu_events() && env->exception_injected == EXCP12_MCHK) { |
312 | 312 |
unsigned int bank, bank_num = env->mcg_cap & 0xff; |
... | ... | |
338 | 338 |
|
339 | 339 |
static void cpu_update_state(void *opaque, int running, RunState state) |
340 | 340 |
{ |
341 |
CPUState *env = opaque; |
|
341 |
CPUX86State *env = opaque;
|
|
342 | 342 |
|
343 | 343 |
if (running) { |
344 | 344 |
env->tsc_valid = false; |
345 | 345 |
} |
346 | 346 |
} |
347 | 347 |
|
348 |
int kvm_arch_init_vcpu(CPUState *env) |
|
348 |
int kvm_arch_init_vcpu(CPUX86State *env)
|
|
349 | 349 |
{ |
350 | 350 |
struct { |
351 | 351 |
struct kvm_cpuid2 cpuid; |
... | ... | |
577 | 577 |
return 0; |
578 | 578 |
} |
579 | 579 |
|
580 |
void kvm_arch_reset_vcpu(CPUState *env) |
|
580 |
void kvm_arch_reset_vcpu(CPUX86State *env)
|
|
581 | 581 |
{ |
582 | 582 |
env->exception_injected = -1; |
583 | 583 |
env->interrupt_injected = -1; |
... | ... | |
768 | 768 |
} |
769 | 769 |
} |
770 | 770 |
|
771 |
static int kvm_getput_regs(CPUState *env, int set) |
|
771 |
static int kvm_getput_regs(CPUX86State *env, int set)
|
|
772 | 772 |
{ |
773 | 773 |
struct kvm_regs regs; |
774 | 774 |
int ret = 0; |
... | ... | |
809 | 809 |
return ret; |
810 | 810 |
} |
811 | 811 |
|
812 |
static int kvm_put_fpu(CPUState *env) |
|
812 |
static int kvm_put_fpu(CPUX86State *env)
|
|
813 | 813 |
{ |
814 | 814 |
struct kvm_fpu fpu; |
815 | 815 |
int i; |
... | ... | |
841 | 841 |
#define XSAVE_XSTATE_BV 128 |
842 | 842 |
#define XSAVE_YMMH_SPACE 144 |
843 | 843 |
|
844 |
static int kvm_put_xsave(CPUState *env) |
|
844 |
static int kvm_put_xsave(CPUX86State *env)
|
|
845 | 845 |
{ |
846 | 846 |
struct kvm_xsave* xsave = env->kvm_xsave_buf; |
847 | 847 |
uint16_t cwd, swd, twd; |
... | ... | |
875 | 875 |
return r; |
876 | 876 |
} |
877 | 877 |
|
878 |
static int kvm_put_xcrs(CPUState *env) |
|
878 |
static int kvm_put_xcrs(CPUX86State *env)
|
|
879 | 879 |
{ |
880 | 880 |
struct kvm_xcrs xcrs; |
881 | 881 |
|
... | ... | |
890 | 890 |
return kvm_vcpu_ioctl(env, KVM_SET_XCRS, &xcrs); |
891 | 891 |
} |
892 | 892 |
|
893 |
static int kvm_put_sregs(CPUState *env) |
|
893 |
static int kvm_put_sregs(CPUX86State *env)
|
|
894 | 894 |
{ |
895 | 895 |
struct kvm_sregs sregs; |
896 | 896 |
|
... | ... | |
946 | 946 |
entry->data = value; |
947 | 947 |
} |
948 | 948 |
|
949 |
static int kvm_put_msrs(CPUState *env, int level) |
|
949 |
static int kvm_put_msrs(CPUX86State *env, int level)
|
|
950 | 950 |
{ |
951 | 951 |
struct { |
952 | 952 |
struct kvm_msrs info; |
... | ... | |
1029 | 1029 |
} |
1030 | 1030 |
|
1031 | 1031 |
|
1032 |
static int kvm_get_fpu(CPUState *env) |
|
1032 |
static int kvm_get_fpu(CPUX86State *env)
|
|
1033 | 1033 |
{ |
1034 | 1034 |
struct kvm_fpu fpu; |
1035 | 1035 |
int i, ret; |
... | ... | |
1055 | 1055 |
return 0; |
1056 | 1056 |
} |
1057 | 1057 |
|
1058 |
static int kvm_get_xsave(CPUState *env) |
|
1058 |
static int kvm_get_xsave(CPUX86State *env)
|
|
1059 | 1059 |
{ |
1060 | 1060 |
struct kvm_xsave* xsave = env->kvm_xsave_buf; |
1061 | 1061 |
int ret, i; |
... | ... | |
1093 | 1093 |
return 0; |
1094 | 1094 |
} |
1095 | 1095 |
|
1096 |
static int kvm_get_xcrs(CPUState *env) |
|
1096 |
static int kvm_get_xcrs(CPUX86State *env)
|
|
1097 | 1097 |
{ |
1098 | 1098 |
int i, ret; |
1099 | 1099 |
struct kvm_xcrs xcrs; |
... | ... | |
1117 | 1117 |
return 0; |
1118 | 1118 |
} |
1119 | 1119 |
|
1120 |
static int kvm_get_sregs(CPUState *env) |
|
1120 |
static int kvm_get_sregs(CPUX86State *env)
|
|
1121 | 1121 |
{ |
1122 | 1122 |
struct kvm_sregs sregs; |
1123 | 1123 |
uint32_t hflags; |
... | ... | |
1201 | 1201 |
return 0; |
1202 | 1202 |
} |
1203 | 1203 |
|
1204 |
static int kvm_get_msrs(CPUState *env) |
|
1204 |
static int kvm_get_msrs(CPUX86State *env)
|
|
1205 | 1205 |
{ |
1206 | 1206 |
struct { |
1207 | 1207 |
struct kvm_msrs info; |
... | ... | |
1331 | 1331 |
return 0; |
1332 | 1332 |
} |
1333 | 1333 |
|
1334 |
static int kvm_put_mp_state(CPUState *env) |
|
1334 |
static int kvm_put_mp_state(CPUX86State *env)
|
|
1335 | 1335 |
{ |
1336 | 1336 |
struct kvm_mp_state mp_state = { .mp_state = env->mp_state }; |
1337 | 1337 |
|
1338 | 1338 |
return kvm_vcpu_ioctl(env, KVM_SET_MP_STATE, &mp_state); |
1339 | 1339 |
} |
1340 | 1340 |
|
1341 |
static int kvm_get_mp_state(CPUState *env) |
|
1341 |
static int kvm_get_mp_state(CPUX86State *env)
|
|
1342 | 1342 |
{ |
1343 | 1343 |
struct kvm_mp_state mp_state; |
1344 | 1344 |
int ret; |
... | ... | |
1354 | 1354 |
return 0; |
1355 | 1355 |
} |
1356 | 1356 |
|
1357 |
static int kvm_get_apic(CPUState *env) |
|
1357 |
static int kvm_get_apic(CPUX86State *env)
|
|
1358 | 1358 |
{ |
1359 | 1359 |
DeviceState *apic = env->apic_state; |
1360 | 1360 |
struct kvm_lapic_state kapic; |
... | ... | |
1371 | 1371 |
return 0; |
1372 | 1372 |
} |
1373 | 1373 |
|
1374 |
static int kvm_put_apic(CPUState *env) |
|
1374 |
static int kvm_put_apic(CPUX86State *env)
|
|
1375 | 1375 |
{ |
1376 | 1376 |
DeviceState *apic = env->apic_state; |
1377 | 1377 |
struct kvm_lapic_state kapic; |
... | ... | |
1384 | 1384 |
return 0; |
1385 | 1385 |
} |
1386 | 1386 |
|
1387 |
static int kvm_put_vcpu_events(CPUState *env, int level) |
|
1387 |
static int kvm_put_vcpu_events(CPUX86State *env, int level)
|
|
1388 | 1388 |
{ |
1389 | 1389 |
struct kvm_vcpu_events events; |
1390 | 1390 |
|
... | ... | |
1418 | 1418 |
return kvm_vcpu_ioctl(env, KVM_SET_VCPU_EVENTS, &events); |
1419 | 1419 |
} |
1420 | 1420 |
|
1421 |
static int kvm_get_vcpu_events(CPUState *env) |
|
1421 |
static int kvm_get_vcpu_events(CPUX86State *env)
|
|
1422 | 1422 |
{ |
1423 | 1423 |
struct kvm_vcpu_events events; |
1424 | 1424 |
int ret; |
... | ... | |
1453 | 1453 |
return 0; |
1454 | 1454 |
} |
1455 | 1455 |
|
1456 |
static int kvm_guest_debug_workarounds(CPUState *env) |
|
1456 |
static int kvm_guest_debug_workarounds(CPUX86State *env)
|
|
1457 | 1457 |
{ |
1458 | 1458 |
int ret = 0; |
1459 | 1459 |
unsigned long reinject_trap = 0; |
... | ... | |
1482 | 1482 |
return ret; |
1483 | 1483 |
} |
1484 | 1484 |
|
1485 |
static int kvm_put_debugregs(CPUState *env) |
|
1485 |
static int kvm_put_debugregs(CPUX86State *env)
|
|
1486 | 1486 |
{ |
1487 | 1487 |
struct kvm_debugregs dbgregs; |
1488 | 1488 |
int i; |
... | ... | |
1501 | 1501 |
return kvm_vcpu_ioctl(env, KVM_SET_DEBUGREGS, &dbgregs); |
1502 | 1502 |
} |
1503 | 1503 |
|
1504 |
static int kvm_get_debugregs(CPUState *env) |
|
1504 |
static int kvm_get_debugregs(CPUX86State *env)
|
|
1505 | 1505 |
{ |
1506 | 1506 |
struct kvm_debugregs dbgregs; |
1507 | 1507 |
int i, ret; |
... | ... | |
1523 | 1523 |
return 0; |
1524 | 1524 |
} |
1525 | 1525 |
|
1526 |
int kvm_arch_put_registers(CPUState *env, int level) |
|
1526 |
int kvm_arch_put_registers(CPUX86State *env, int level)
|
|
1527 | 1527 |
{ |
1528 | 1528 |
int ret; |
1529 | 1529 |
|
... | ... | |
1580 | 1580 |
return 0; |
1581 | 1581 |
} |
1582 | 1582 |
|
1583 |
int kvm_arch_get_registers(CPUState *env) |
|
1583 |
int kvm_arch_get_registers(CPUX86State *env)
|
|
1584 | 1584 |
{ |
1585 | 1585 |
int ret; |
1586 | 1586 |
|
... | ... | |
1625 | 1625 |
return 0; |
1626 | 1626 |
} |
1627 | 1627 |
|
1628 |
void kvm_arch_pre_run(CPUState *env, struct kvm_run *run) |
|
1628 |
void kvm_arch_pre_run(CPUX86State *env, struct kvm_run *run)
|
|
1629 | 1629 |
{ |
1630 | 1630 |
int ret; |
1631 | 1631 |
|
... | ... | |
1685 | 1685 |
} |
1686 | 1686 |
} |
1687 | 1687 |
|
1688 |
void kvm_arch_post_run(CPUState *env, struct kvm_run *run) |
|
1688 |
void kvm_arch_post_run(CPUX86State *env, struct kvm_run *run)
|
|
1689 | 1689 |
{ |
1690 | 1690 |
if (run->if_flag) { |
1691 | 1691 |
env->eflags |= IF_MASK; |
... | ... | |
1696 | 1696 |
cpu_set_apic_base(env->apic_state, run->apic_base); |
1697 | 1697 |
} |
1698 | 1698 |
|
1699 |
int kvm_arch_process_async_events(CPUState *env) |
|
1699 |
int kvm_arch_process_async_events(CPUX86State *env)
|
|
1700 | 1700 |
{ |
1701 | 1701 |
if (env->interrupt_request & CPU_INTERRUPT_MCE) { |
1702 | 1702 |
/* We must not raise CPU_INTERRUPT_MCE if it's not supported. */ |
... | ... | |
1748 | 1748 |
return env->halted; |
1749 | 1749 |
} |
1750 | 1750 |
|
1751 |
static int kvm_handle_halt(CPUState *env) |
|
1751 |
static int kvm_handle_halt(CPUX86State *env)
|
|
1752 | 1752 |
{ |
1753 | 1753 |
if (!((env->interrupt_request & CPU_INTERRUPT_HARD) && |
1754 | 1754 |
(env->eflags & IF_MASK)) && |
... | ... | |
1760 | 1760 |
return 0; |
1761 | 1761 |
} |
1762 | 1762 |
|
1763 |
static int kvm_handle_tpr_access(CPUState *env) |
|
1763 |
static int kvm_handle_tpr_access(CPUX86State *env)
|
|
1764 | 1764 |
{ |
1765 | 1765 |
struct kvm_run *run = env->kvm_run; |
1766 | 1766 |
|
... | ... | |
1770 | 1770 |
return 1; |
1771 | 1771 |
} |
1772 | 1772 |
|
1773 |
int kvm_arch_insert_sw_breakpoint(CPUState *env, struct kvm_sw_breakpoint *bp) |
|
1773 |
int kvm_arch_insert_sw_breakpoint(CPUX86State *env, struct kvm_sw_breakpoint *bp)
|
|
1774 | 1774 |
{ |
1775 | 1775 |
static const uint8_t int3 = 0xcc; |
1776 | 1776 |
|
... | ... | |
1781 | 1781 |
return 0; |
1782 | 1782 |
} |
1783 | 1783 |
|
1784 |
int kvm_arch_remove_sw_breakpoint(CPUState *env, struct kvm_sw_breakpoint *bp) |
|
1784 |
int kvm_arch_remove_sw_breakpoint(CPUX86State *env, struct kvm_sw_breakpoint *bp)
|
|
1785 | 1785 |
{ |
1786 | 1786 |
uint8_t int3; |
1787 | 1787 |
|
... | ... | |
1924 | 1924 |
return ret; |
1925 | 1925 |
} |
1926 | 1926 |
|
1927 |
void kvm_arch_update_guest_debug(CPUState *env, struct kvm_guest_debug *dbg) |
|
1927 |
void kvm_arch_update_guest_debug(CPUX86State *env, struct kvm_guest_debug *dbg)
|
|
1928 | 1928 |
{ |
1929 | 1929 |
const uint8_t type_code[] = { |
1930 | 1930 |
[GDB_BREAKPOINT_HW] = 0x0, |
... | ... | |
1961 | 1961 |
|
1962 | 1962 |
#define VMX_INVALID_GUEST_STATE 0x80000021 |
1963 | 1963 |
|
1964 |
int kvm_arch_handle_exit(CPUState *env, struct kvm_run *run) |
|
1964 |
int kvm_arch_handle_exit(CPUX86State *env, struct kvm_run *run)
|
|
1965 | 1965 |
{ |
1966 | 1966 |
uint64_t code; |
1967 | 1967 |
int ret; |
... | ... | |
2012 | 2012 |
return ret; |
2013 | 2013 |
} |
2014 | 2014 |
|
2015 |
bool kvm_arch_stop_on_emulation_error(CPUState *env) |
|
2015 |
bool kvm_arch_stop_on_emulation_error(CPUX86State *env)
|
|
2016 | 2016 |
{ |
2017 | 2017 |
kvm_cpu_synchronize_state(env); |
2018 | 2018 |
return !(env->cr[0] & CR0_PE_MASK) || |
Also available in: Unified diff