[PATCH 1/1] x86: install modules-load.d file to load msr module

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On recent Intel CPUs, some of the CPU features (mostly
vmx-* subfeatures) are listed and controlled via the
MSRs (Model Specific Registers) instead of the traditional
CPUID instruction method.

To be able to read the MSR's values, the kernel module msr
has to be loaded and the values can be read via /dev/cpu/*/msr.

This commit introduces following changes:

- install modules-load file for msr
  this is only enabled:
   - On x86 arch
   - If user asks for it explicitly via a build option:
     meson -Dmsr_module_load=true build
     By default, it is disabled.
- modify virt-host-validate to check of /dev/cpu/*/msr is
  available.

Signed-off-by: Hector Cao <hector.cao@xxxxxxxxxxxxx>
---
 meson_options.txt                |  1 +
 src/util/meson.build             | 17 +++++++++++++++++
 src/util/modules-load.d/msr.conf |  1 +
 tools/virt-host-validate-qemu.c  |  7 +++++++
 4 files changed, 26 insertions(+)
 create mode 100644 src/util/modules-load.d/msr.conf

diff --git a/meson_options.txt b/meson_options.txt
index 3dc3e8667b..5a9e067407 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -135,3 +135,4 @@ option('sysctl_config', type: 'feature', value: 'auto', description: 'Whether to
 # dep:sysctl_config
 option('userfaultfd_sysctl', type: 'feature', value: 'auto', description: 'Whether to install sysctl config for enabling unprivileged userfaultfd')
 option('tls_priority', type: 'string', value: 'NORMAL', description: 'set the default TLS session priority string')
+option('msr_module_load', type: 'boolean', value: true, description: 'Install modules-load.d file for msr module on x86')
diff --git a/src/util/meson.build b/src/util/meson.build
index 69ef49139a..5471a1e9ea 100644
--- a/src/util/meson.build
+++ b/src/util/meson.build
@@ -225,3 +225,20 @@ if conf.has('WITH_LIBVIRTD')
 endif
 
 util_inc_dir = include_directories('.')
+
+# Install the modules-load.d file to load the MSR module
+# NB: For the file to taken into account and the module load to happen, users must trigger
+# the modules-load.d reload (by reboot or restart the systemd-modules-load service).
+msr_module_load = get_option('msr_module_load')
+if msr_module_load and (host_machine.cpu_family() == 'x86' or host_machine.cpu_family() == 'x86_64')
+  message('msr_module_load: Enabling installation of modules-load.d/msr.conf for x86')
+
+  install_data(
+    'modules-load.d/msr.conf',
+    install_dir: join_paths(sysconfdir, 'modules-load.d')
+  )
+elif msr_module_load
+  message('msr_module_load: option enabled, but not x86/x86_64 : skipping')
+else
+  message('msr_module_load: option disabled: skipping')
+endif
\ No newline at end of file
diff --git a/src/util/modules-load.d/msr.conf b/src/util/modules-load.d/msr.conf
new file mode 100644
index 0000000000..3e5ee7fa15
--- /dev/null
+++ b/src/util/modules-load.d/msr.conf
@@ -0,0 +1 @@
+msr
diff --git a/tools/virt-host-validate-qemu.c b/tools/virt-host-validate-qemu.c
index 833bb1b914..f582e1146e 100644
--- a/tools/virt-host-validate-qemu.c
+++ b/tools/virt-host-validate-qemu.c
@@ -95,6 +95,13 @@ int virHostValidateQEMU(void)
             virValidatePass();
     }
 
+    if (arch == VIR_ARCH_X86_64) {
+        if (virHostValidateDeviceExists("QEMU", "/dev/cpu/0/msr",
+                                        VIR_HOST_VALIDATE_WARN,
+                                        _("Load the 'msr' module for better x86 CPU features detection")) < 0)
+            ret = -1;
+    }
+
     if (virHostValidateDeviceExists("QEMU", "/dev/vhost-net",
                                     VIR_VALIDATE_WARN,
                                     _("Load the 'vhost_net' module to improve performance of virtio networking")) < 0)
-- 
2.45.2




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux