qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

target-i386: kvm: 'kvm_get_supported_msrs' cleanup

Function 'kvm_get_supported_msrs' is only called once
now, get rid of the static variable 'kvm_supported_msrs'.

Signed-off-by: Li Qiang <liq3ea@163.com>
Message-Id: <20190725151639.21693-1-liq3ea@163.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

authored by

Li Qiang and committed by
Paolo Bonzini
de428cea 98387d58

+91 -94
+91 -94
target/i386/kvm.c
··· 1842 1842 1843 1843 static int kvm_get_supported_msrs(KVMState *s) 1844 1844 { 1845 - static int kvm_supported_msrs; 1846 1845 int ret = 0; 1846 + struct kvm_msr_list msr_list, *kvm_msr_list; 1847 1847 1848 - /* first time */ 1849 - if (kvm_supported_msrs == 0) { 1850 - struct kvm_msr_list msr_list, *kvm_msr_list; 1848 + /* 1849 + * Obtain MSR list from KVM. These are the MSRs that we must 1850 + * save/restore. 1851 + */ 1852 + msr_list.nmsrs = 0; 1853 + ret = kvm_ioctl(s, KVM_GET_MSR_INDEX_LIST, &msr_list); 1854 + if (ret < 0 && ret != -E2BIG) { 1855 + return ret; 1856 + } 1857 + /* 1858 + * Old kernel modules had a bug and could write beyond the provided 1859 + * memory. Allocate at least a safe amount of 1K. 1860 + */ 1861 + kvm_msr_list = g_malloc0(MAX(1024, sizeof(msr_list) + 1862 + msr_list.nmsrs * 1863 + sizeof(msr_list.indices[0]))); 1851 1864 1852 - kvm_supported_msrs = -1; 1865 + kvm_msr_list->nmsrs = msr_list.nmsrs; 1866 + ret = kvm_ioctl(s, KVM_GET_MSR_INDEX_LIST, kvm_msr_list); 1867 + if (ret >= 0) { 1868 + int i; 1853 1869 1854 - /* Obtain MSR list from KVM. These are the MSRs that we must 1855 - * save/restore */ 1856 - msr_list.nmsrs = 0; 1857 - ret = kvm_ioctl(s, KVM_GET_MSR_INDEX_LIST, &msr_list); 1858 - if (ret < 0 && ret != -E2BIG) { 1859 - return ret; 1860 - } 1861 - /* Old kernel modules had a bug and could write beyond the provided 1862 - memory. Allocate at least a safe amount of 1K. */ 1863 - kvm_msr_list = g_malloc0(MAX(1024, sizeof(msr_list) + 1864 - msr_list.nmsrs * 1865 - sizeof(msr_list.indices[0]))); 1866 - 1867 - kvm_msr_list->nmsrs = msr_list.nmsrs; 1868 - ret = kvm_ioctl(s, KVM_GET_MSR_INDEX_LIST, kvm_msr_list); 1869 - if (ret >= 0) { 1870 - int i; 1871 - 1872 - for (i = 0; i < kvm_msr_list->nmsrs; i++) { 1873 - switch (kvm_msr_list->indices[i]) { 1874 - case MSR_STAR: 1875 - has_msr_star = true; 1876 - break; 1877 - case MSR_VM_HSAVE_PA: 1878 - has_msr_hsave_pa = true; 1879 - break; 1880 - case MSR_TSC_AUX: 1881 - has_msr_tsc_aux = true; 1882 - break; 1883 - case MSR_TSC_ADJUST: 1884 - has_msr_tsc_adjust = true; 1885 - break; 1886 - case MSR_IA32_TSCDEADLINE: 1887 - has_msr_tsc_deadline = true; 1888 - break; 1889 - case MSR_IA32_SMBASE: 1890 - has_msr_smbase = true; 1891 - break; 1892 - case MSR_SMI_COUNT: 1893 - has_msr_smi_count = true; 1894 - break; 1895 - case MSR_IA32_MISC_ENABLE: 1896 - has_msr_misc_enable = true; 1897 - break; 1898 - case MSR_IA32_BNDCFGS: 1899 - has_msr_bndcfgs = true; 1900 - break; 1901 - case MSR_IA32_XSS: 1902 - has_msr_xss = true; 1903 - break; 1904 - case HV_X64_MSR_CRASH_CTL: 1905 - has_msr_hv_crash = true; 1906 - break; 1907 - case HV_X64_MSR_RESET: 1908 - has_msr_hv_reset = true; 1909 - break; 1910 - case HV_X64_MSR_VP_INDEX: 1911 - has_msr_hv_vpindex = true; 1912 - break; 1913 - case HV_X64_MSR_VP_RUNTIME: 1914 - has_msr_hv_runtime = true; 1915 - break; 1916 - case HV_X64_MSR_SCONTROL: 1917 - has_msr_hv_synic = true; 1918 - break; 1919 - case HV_X64_MSR_STIMER0_CONFIG: 1920 - has_msr_hv_stimer = true; 1921 - break; 1922 - case HV_X64_MSR_TSC_FREQUENCY: 1923 - has_msr_hv_frequencies = true; 1924 - break; 1925 - case HV_X64_MSR_REENLIGHTENMENT_CONTROL: 1926 - has_msr_hv_reenlightenment = true; 1927 - break; 1928 - case MSR_IA32_SPEC_CTRL: 1929 - has_msr_spec_ctrl = true; 1930 - break; 1931 - case MSR_VIRT_SSBD: 1932 - has_msr_virt_ssbd = true; 1933 - break; 1934 - case MSR_IA32_ARCH_CAPABILITIES: 1935 - has_msr_arch_capabs = true; 1936 - break; 1937 - case MSR_IA32_CORE_CAPABILITY: 1938 - has_msr_core_capabs = true; 1939 - break; 1940 - } 1870 + for (i = 0; i < kvm_msr_list->nmsrs; i++) { 1871 + switch (kvm_msr_list->indices[i]) { 1872 + case MSR_STAR: 1873 + has_msr_star = true; 1874 + break; 1875 + case MSR_VM_HSAVE_PA: 1876 + has_msr_hsave_pa = true; 1877 + break; 1878 + case MSR_TSC_AUX: 1879 + has_msr_tsc_aux = true; 1880 + break; 1881 + case MSR_TSC_ADJUST: 1882 + has_msr_tsc_adjust = true; 1883 + break; 1884 + case MSR_IA32_TSCDEADLINE: 1885 + has_msr_tsc_deadline = true; 1886 + break; 1887 + case MSR_IA32_SMBASE: 1888 + has_msr_smbase = true; 1889 + break; 1890 + case MSR_SMI_COUNT: 1891 + has_msr_smi_count = true; 1892 + break; 1893 + case MSR_IA32_MISC_ENABLE: 1894 + has_msr_misc_enable = true; 1895 + break; 1896 + case MSR_IA32_BNDCFGS: 1897 + has_msr_bndcfgs = true; 1898 + break; 1899 + case MSR_IA32_XSS: 1900 + has_msr_xss = true; 1901 + break; 1902 + case HV_X64_MSR_CRASH_CTL: 1903 + has_msr_hv_crash = true; 1904 + break; 1905 + case HV_X64_MSR_RESET: 1906 + has_msr_hv_reset = true; 1907 + break; 1908 + case HV_X64_MSR_VP_INDEX: 1909 + has_msr_hv_vpindex = true; 1910 + break; 1911 + case HV_X64_MSR_VP_RUNTIME: 1912 + has_msr_hv_runtime = true; 1913 + break; 1914 + case HV_X64_MSR_SCONTROL: 1915 + has_msr_hv_synic = true; 1916 + break; 1917 + case HV_X64_MSR_STIMER0_CONFIG: 1918 + has_msr_hv_stimer = true; 1919 + break; 1920 + case HV_X64_MSR_TSC_FREQUENCY: 1921 + has_msr_hv_frequencies = true; 1922 + break; 1923 + case HV_X64_MSR_REENLIGHTENMENT_CONTROL: 1924 + has_msr_hv_reenlightenment = true; 1925 + break; 1926 + case MSR_IA32_SPEC_CTRL: 1927 + has_msr_spec_ctrl = true; 1928 + break; 1929 + case MSR_VIRT_SSBD: 1930 + has_msr_virt_ssbd = true; 1931 + break; 1932 + case MSR_IA32_ARCH_CAPABILITIES: 1933 + has_msr_arch_capabs = true; 1934 + break; 1935 + case MSR_IA32_CORE_CAPABILITY: 1936 + has_msr_core_capabs = true; 1937 + break; 1941 1938 } 1942 1939 } 1940 + } 1943 1941 1944 - g_free(kvm_msr_list); 1945 - } 1942 + g_free(kvm_msr_list); 1946 1943 1947 1944 return ret; 1948 1945 }