x86.c (ff5c2c0316ff0e3e2dba3ca14167d994453df093) x86.c (f5132b01386b5a67f1ff673bb2b96a507a3f7e41)
1/*
2 * Kernel-based Virtual Machine driver for Linux
3 *
4 * derived from drivers/kvm/kvm_main.c
5 *
6 * Copyright (C) 2006 Qumranet, Inc.
7 * Copyright (C) 2008 Qumranet, Inc.
8 * Copyright IBM Corporation, 2008

--- 1588 unchanged lines hidden (view full) ---

1597
1598 /* Performance counters are not protected by a CPUID bit,
1599 * so we should check all of them in the generic path for the sake of
1600 * cross vendor migration.
1601 * Writing a zero into the event select MSRs disables them,
1602 * which we perfectly emulate ;-). Any other value should be at least
1603 * reported, some guests depend on them.
1604 */
1/*
2 * Kernel-based Virtual Machine driver for Linux
3 *
4 * derived from drivers/kvm/kvm_main.c
5 *
6 * Copyright (C) 2006 Qumranet, Inc.
7 * Copyright (C) 2008 Qumranet, Inc.
8 * Copyright IBM Corporation, 2008

--- 1588 unchanged lines hidden (view full) ---

1597
1598 /* Performance counters are not protected by a CPUID bit,
1599 * so we should check all of them in the generic path for the sake of
1600 * cross vendor migration.
1601 * Writing a zero into the event select MSRs disables them,
1602 * which we perfectly emulate ;-). Any other value should be at least
1603 * reported, some guests depend on them.
1604 */
1605 case MSR_P6_EVNTSEL0:
1606 case MSR_P6_EVNTSEL1:
1607 case MSR_K7_EVNTSEL0:
1608 case MSR_K7_EVNTSEL1:
1609 case MSR_K7_EVNTSEL2:
1610 case MSR_K7_EVNTSEL3:
1611 if (data != 0)
1612 pr_unimpl(vcpu, "unimplemented perfctr wrmsr: "
1613 "0x%x data 0x%llx\n", msr, data);
1614 break;
1615 /* at least RHEL 4 unconditionally writes to the perfctr registers,
1616 * so we ignore writes to make it happy.
1617 */
1605 case MSR_K7_EVNTSEL0:
1606 case MSR_K7_EVNTSEL1:
1607 case MSR_K7_EVNTSEL2:
1608 case MSR_K7_EVNTSEL3:
1609 if (data != 0)
1610 pr_unimpl(vcpu, "unimplemented perfctr wrmsr: "
1611 "0x%x data 0x%llx\n", msr, data);
1612 break;
1613 /* at least RHEL 4 unconditionally writes to the perfctr registers,
1614 * so we ignore writes to make it happy.
1615 */
1618 case MSR_P6_PERFCTR0:
1619 case MSR_P6_PERFCTR1:
1620 case MSR_K7_PERFCTR0:
1621 case MSR_K7_PERFCTR1:
1622 case MSR_K7_PERFCTR2:
1623 case MSR_K7_PERFCTR3:
1624 pr_unimpl(vcpu, "unimplemented perfctr wrmsr: "
1625 "0x%x data 0x%llx\n", msr, data);
1626 break;
1627 case MSR_K7_CLK_CTL:

--- 20 unchanged lines hidden (view full) ---

1648 /* Drop writes to this legacy MSR -- see rdmsr
1649 * counterpart for further detail.
1650 */
1651 pr_unimpl(vcpu, "ignored wrmsr: 0x%x data %llx\n", msr, data);
1652 break;
1653 default:
1654 if (msr && (msr == vcpu->kvm->arch.xen_hvm_config.msr))
1655 return xen_hvm_config(vcpu, data);
1616 case MSR_K7_PERFCTR0:
1617 case MSR_K7_PERFCTR1:
1618 case MSR_K7_PERFCTR2:
1619 case MSR_K7_PERFCTR3:
1620 pr_unimpl(vcpu, "unimplemented perfctr wrmsr: "
1621 "0x%x data 0x%llx\n", msr, data);
1622 break;
1623 case MSR_K7_CLK_CTL:

--- 20 unchanged lines hidden (view full) ---

1644 /* Drop writes to this legacy MSR -- see rdmsr
1645 * counterpart for further detail.
1646 */
1647 pr_unimpl(vcpu, "ignored wrmsr: 0x%x data %llx\n", msr, data);
1648 break;
1649 default:
1650 if (msr && (msr == vcpu->kvm->arch.xen_hvm_config.msr))
1651 return xen_hvm_config(vcpu, data);
1652 if (kvm_pmu_msr(vcpu, msr))
1653 return kvm_pmu_set_msr(vcpu, msr, data);
1656 if (!ignore_msrs) {
1657 pr_unimpl(vcpu, "unhandled wrmsr: 0x%x data %llx\n",
1658 msr, data);
1659 return 1;
1660 } else {
1661 pr_unimpl(vcpu, "ignored wrmsr: 0x%x data %llx\n",
1662 msr, data);
1663 break;

--- 146 unchanged lines hidden (view full) ---

1810 case MSR_IA32_DEBUGCTLMSR:
1811 case MSR_IA32_LASTBRANCHFROMIP:
1812 case MSR_IA32_LASTBRANCHTOIP:
1813 case MSR_IA32_LASTINTFROMIP:
1814 case MSR_IA32_LASTINTTOIP:
1815 case MSR_K8_SYSCFG:
1816 case MSR_K7_HWCR:
1817 case MSR_VM_HSAVE_PA:
1654 if (!ignore_msrs) {
1655 pr_unimpl(vcpu, "unhandled wrmsr: 0x%x data %llx\n",
1656 msr, data);
1657 return 1;
1658 } else {
1659 pr_unimpl(vcpu, "ignored wrmsr: 0x%x data %llx\n",
1660 msr, data);
1661 break;

--- 146 unchanged lines hidden (view full) ---

1808 case MSR_IA32_DEBUGCTLMSR:
1809 case MSR_IA32_LASTBRANCHFROMIP:
1810 case MSR_IA32_LASTBRANCHTOIP:
1811 case MSR_IA32_LASTINTFROMIP:
1812 case MSR_IA32_LASTINTTOIP:
1813 case MSR_K8_SYSCFG:
1814 case MSR_K7_HWCR:
1815 case MSR_VM_HSAVE_PA:
1818 case MSR_P6_PERFCTR0:
1819 case MSR_P6_PERFCTR1:
1820 case MSR_P6_EVNTSEL0:
1821 case MSR_P6_EVNTSEL1:
1822 case MSR_K7_EVNTSEL0:
1823 case MSR_K7_PERFCTR0:
1824 case MSR_K8_INT_PENDING_MSG:
1825 case MSR_AMD64_NB_CFG:
1826 case MSR_FAM10H_MMIO_CONF_BASE:
1827 data = 0;
1828 break;
1829 case MSR_IA32_UCODE_REV:

--- 94 unchanged lines hidden (view full) ---

1924 * interpreted by the guest:
1925 *
1926 * L2 cache control register 3: 64GB range, 256KB size,
1927 * enabled, latency 0x1, configured
1928 */
1929 data = 0xbe702111;
1930 break;
1931 default:
1816 case MSR_K7_EVNTSEL0:
1817 case MSR_K7_PERFCTR0:
1818 case MSR_K8_INT_PENDING_MSG:
1819 case MSR_AMD64_NB_CFG:
1820 case MSR_FAM10H_MMIO_CONF_BASE:
1821 data = 0;
1822 break;
1823 case MSR_IA32_UCODE_REV:

--- 94 unchanged lines hidden (view full) ---

1918 * interpreted by the guest:
1919 *
1920 * L2 cache control register 3: 64GB range, 256KB size,
1921 * enabled, latency 0x1, configured
1922 */
1923 data = 0xbe702111;
1924 break;
1925 default:
1926 if (kvm_pmu_msr(vcpu, msr))
1927 return kvm_pmu_get_msr(vcpu, msr, pdata);
1932 if (!ignore_msrs) {
1933 pr_unimpl(vcpu, "unhandled rdmsr: 0x%x\n", msr);
1934 return 1;
1935 } else {
1936 pr_unimpl(vcpu, "ignored rdmsr: 0x%x\n", msr);
1937 data = 0;
1938 }
1939 break;

--- 2705 unchanged lines hidden (view full) ---

4645 }
4646 pr_debug("kvm: max_tsc_khz = %ld\n", max_tsc_khz);
4647 for_each_online_cpu(cpu)
4648 smp_call_function_single(cpu, tsc_khz_changed, NULL, 1);
4649}
4650
4651static DEFINE_PER_CPU(struct kvm_vcpu *, current_vcpu);
4652
1928 if (!ignore_msrs) {
1929 pr_unimpl(vcpu, "unhandled rdmsr: 0x%x\n", msr);
1930 return 1;
1931 } else {
1932 pr_unimpl(vcpu, "ignored rdmsr: 0x%x\n", msr);
1933 data = 0;
1934 }
1935 break;

--- 2705 unchanged lines hidden (view full) ---

4641 }
4642 pr_debug("kvm: max_tsc_khz = %ld\n", max_tsc_khz);
4643 for_each_online_cpu(cpu)
4644 smp_call_function_single(cpu, tsc_khz_changed, NULL, 1);
4645}
4646
4647static DEFINE_PER_CPU(struct kvm_vcpu *, current_vcpu);
4648
4653static int kvm_is_in_guest(void)
4649int kvm_is_in_guest(void)
4654{
4655 return __this_cpu_read(current_vcpu) != NULL;
4656}
4657
4658static int kvm_is_user_mode(void)
4659{
4660 int user_mode = 3;
4661

--- 447 unchanged lines hidden (view full) ---

5109 goto out;
5110 }
5111 if (kvm_check_request(KVM_REQ_STEAL_UPDATE, vcpu))
5112 record_steal_time(vcpu);
5113 if (kvm_check_request(KVM_REQ_NMI, vcpu))
5114 process_nmi(vcpu);
5115 req_immediate_exit =
5116 kvm_check_request(KVM_REQ_IMMEDIATE_EXIT, vcpu);
4650{
4651 return __this_cpu_read(current_vcpu) != NULL;
4652}
4653
4654static int kvm_is_user_mode(void)
4655{
4656 int user_mode = 3;
4657

--- 447 unchanged lines hidden (view full) ---

5105 goto out;
5106 }
5107 if (kvm_check_request(KVM_REQ_STEAL_UPDATE, vcpu))
5108 record_steal_time(vcpu);
5109 if (kvm_check_request(KVM_REQ_NMI, vcpu))
5110 process_nmi(vcpu);
5111 req_immediate_exit =
5112 kvm_check_request(KVM_REQ_IMMEDIATE_EXIT, vcpu);
5113 if (kvm_check_request(KVM_REQ_PMU, vcpu))
5114 kvm_handle_pmu_event(vcpu);
5115 if (kvm_check_request(KVM_REQ_PMI, vcpu))
5116 kvm_deliver_pmi(vcpu);
5117 }
5118
5119 r = kvm_mmu_reload(vcpu);
5120 if (unlikely(r))
5121 goto out;
5122
5123 if (kvm_check_request(KVM_REQ_EVENT, vcpu) || req_int_win) {
5124 inject_pending_event(vcpu);

--- 720 unchanged lines hidden (view full) ---

5845 vcpu->arch.st.msr_val = 0;
5846
5847 kvmclock_reset(vcpu);
5848
5849 kvm_clear_async_pf_completion_queue(vcpu);
5850 kvm_async_pf_hash_reset(vcpu);
5851 vcpu->arch.apf.halted = false;
5852
5117 }
5118
5119 r = kvm_mmu_reload(vcpu);
5120 if (unlikely(r))
5121 goto out;
5122
5123 if (kvm_check_request(KVM_REQ_EVENT, vcpu) || req_int_win) {
5124 inject_pending_event(vcpu);

--- 720 unchanged lines hidden (view full) ---

5845 vcpu->arch.st.msr_val = 0;
5846
5847 kvmclock_reset(vcpu);
5848
5849 kvm_clear_async_pf_completion_queue(vcpu);
5850 kvm_async_pf_hash_reset(vcpu);
5851 vcpu->arch.apf.halted = false;
5852
5853 kvm_pmu_reset(vcpu);
5854
5853 return kvm_x86_ops->vcpu_reset(vcpu);
5854}
5855
5856int kvm_arch_hardware_enable(void *garbage)
5857{
5858 struct kvm *kvm;
5859 struct kvm_vcpu *vcpu;
5860 int i;

--- 68 unchanged lines hidden (view full) ---

5929 goto fail_free_lapic;
5930 }
5931 vcpu->arch.mcg_cap = KVM_MAX_MCE_BANKS;
5932
5933 if (!zalloc_cpumask_var(&vcpu->arch.wbinvd_dirty_mask, GFP_KERNEL))
5934 goto fail_free_mce_banks;
5935
5936 kvm_async_pf_hash_reset(vcpu);
5855 return kvm_x86_ops->vcpu_reset(vcpu);
5856}
5857
5858int kvm_arch_hardware_enable(void *garbage)
5859{
5860 struct kvm *kvm;
5861 struct kvm_vcpu *vcpu;
5862 int i;

--- 68 unchanged lines hidden (view full) ---

5931 goto fail_free_lapic;
5932 }
5933 vcpu->arch.mcg_cap = KVM_MAX_MCE_BANKS;
5934
5935 if (!zalloc_cpumask_var(&vcpu->arch.wbinvd_dirty_mask, GFP_KERNEL))
5936 goto fail_free_mce_banks;
5937
5938 kvm_async_pf_hash_reset(vcpu);
5939 kvm_pmu_init(vcpu);
5937
5938 return 0;
5939fail_free_mce_banks:
5940 kfree(vcpu->arch.mce_banks);
5941fail_free_lapic:
5942 kvm_free_lapic(vcpu);
5943fail_mmu_destroy:
5944 kvm_mmu_destroy(vcpu);
5945fail_free_pio_data:
5946 free_page((unsigned long)vcpu->arch.pio_data);
5947fail:
5948 return r;
5949}
5950
5951void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
5952{
5953 int idx;
5954
5940
5941 return 0;
5942fail_free_mce_banks:
5943 kfree(vcpu->arch.mce_banks);
5944fail_free_lapic:
5945 kvm_free_lapic(vcpu);
5946fail_mmu_destroy:
5947 kvm_mmu_destroy(vcpu);
5948fail_free_pio_data:
5949 free_page((unsigned long)vcpu->arch.pio_data);
5950fail:
5951 return r;
5952}
5953
5954void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
5955{
5956 int idx;
5957
5958 kvm_pmu_destroy(vcpu);
5955 kfree(vcpu->arch.mce_banks);
5956 kvm_free_lapic(vcpu);
5957 idx = srcu_read_lock(&vcpu->kvm->srcu);
5958 kvm_mmu_destroy(vcpu);
5959 srcu_read_unlock(&vcpu->kvm->srcu, idx);
5960 free_page((unsigned long)vcpu->arch.pio_data);
5961}
5962

--- 353 unchanged lines hidden ---
5959 kfree(vcpu->arch.mce_banks);
5960 kvm_free_lapic(vcpu);
5961 idx = srcu_read_lock(&vcpu->kvm->srcu);
5962 kvm_mmu_destroy(vcpu);
5963 srcu_read_unlock(&vcpu->kvm->srcu, idx);
5964 free_page((unsigned long)vcpu->arch.pio_data);
5965}
5966

--- 353 unchanged lines hidden ---