vsock_module: add 'vhost_vsock' kernel module in kata-check

Since we prefer vsock over virtio serial port, we add 'vhost_vsock'
in kernel mosules list.
But vhost_vsock.ko shouldn't be the definitely required kernel modules,
afterall, we could also use virtio serial port.
if kata-env shows SupportsVSocks as false, users could run kata-check
to manually load vhost_vsock.ko and get detailed info(errors)

Fixes: #1512

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
This commit is contained in:
Penny Zheng 2019-05-10 15:21:54 +08:00
parent f21d5a37fe
commit 9b23d4f143
5 changed files with 67 additions and 24 deletions

View File

@ -35,6 +35,9 @@ type kernelModule struct {
// maps parameter names to values // maps parameter names to values
parameters map[string]string parameters map[string]string
// if it is definitely required
required bool
} }
type vmContainerCapableDetails struct { type vmContainerCapableDetails struct {
@ -124,8 +127,11 @@ func haveKernelModule(module string) bool {
// Now, check if the module is unloaded, but available. // Now, check if the module is unloaded, but available.
// And modprobe it if so. // And modprobe it if so.
cmd := exec.Command(modProbeCmd, module) cmd := exec.Command(modProbeCmd, module)
err := cmd.Run() if output, err := cmd.CombinedOutput(); err != nil {
return err == nil kataLog.WithField("module", module).WithError(err).Warnf("modprobe insert module failed: %s", string(output))
return false
}
return true
} }
// checkCPU checks all required CPU attributes modules and returns a count of // checkCPU checks all required CPU attributes modules and returns a count of
@ -200,7 +206,9 @@ func checkKernelModules(modules map[string]kernelModule, handler kernelParamHand
if !haveKernelModule(module) { if !haveKernelModule(module) {
kataLog.WithFields(fields).Error("kernel property not found") kataLog.WithFields(fields).Error("kernel property not found")
count++ if details.required {
count++
}
continue continue
} }

View File

@ -15,14 +15,15 @@ import (
) )
const ( const (
cpuFlagsTag = genericCPUFlagsTag cpuFlagsTag = genericCPUFlagsTag
archCPUVendorField = genericCPUVendorField archCPUVendorField = genericCPUVendorField
archCPUModelField = genericCPUModelField archCPUModelField = genericCPUModelField
archGenuineIntel = "GenuineIntel" archGenuineIntel = "GenuineIntel"
archAuthenticAMD = "AuthenticAMD" archAuthenticAMD = "AuthenticAMD"
msgKernelVM = "Kernel-based Virtual Machine" msgKernelVM = "Kernel-based Virtual Machine"
msgKernelVirtio = "Host kernel accelerator for virtio" msgKernelVirtio = "Host kernel accelerator for virtio"
msgKernelVirtioNet = "Host kernel accelerator for virtio network" msgKernelVirtioNet = "Host kernel accelerator for virtio network"
msgKernelVirtioVhostVsock = "Host Support for Linux VM Sockets"
) )
// CPU types // CPU types
@ -75,17 +76,25 @@ func setCPUtype() error {
} }
archRequiredKernelModules = map[string]kernelModule{ archRequiredKernelModules = map[string]kernelModule{
"kvm": { "kvm": {
desc: msgKernelVM, desc: msgKernelVM,
required: true,
}, },
"kvm_intel": { "kvm_intel": {
desc: "Intel KVM", desc: "Intel KVM",
parameters: kvmIntelParams, parameters: kvmIntelParams,
required: true,
}, },
"vhost": { "vhost": {
desc: msgKernelVirtio, desc: msgKernelVirtio,
required: true,
}, },
"vhost_net": { "vhost_net": {
desc: msgKernelVirtioNet, desc: msgKernelVirtioNet,
required: true,
},
"vhost_vsock": {
desc: msgKernelVirtioVhostVsock,
required: false,
}, },
} }
} else if cpuType == cpuTypeAMD { } else if cpuType == cpuTypeAMD {
@ -99,16 +108,24 @@ func setCPUtype() error {
} }
archRequiredKernelModules = map[string]kernelModule{ archRequiredKernelModules = map[string]kernelModule{
"kvm": { "kvm": {
desc: msgKernelVM, desc: msgKernelVM,
required: true,
}, },
"kvm_amd": { "kvm_amd": {
desc: "AMD KVM", desc: "AMD KVM",
required: true,
}, },
"vhost": { "vhost": {
desc: msgKernelVirtio, desc: msgKernelVirtio,
required: true,
}, },
"vhost_net": { "vhost_net": {
desc: msgKernelVirtioNet, desc: msgKernelVirtioNet,
required: true,
},
"vhost_vsock": {
desc: msgKernelVirtioVhostVsock,
required: false,
}, },
} }
} }

View File

@ -30,13 +30,20 @@ var archRequiredCPUAttribs = map[string]string{}
// required module parameters. // required module parameters.
var archRequiredKernelModules = map[string]kernelModule{ var archRequiredKernelModules = map[string]kernelModule{
"kvm": { "kvm": {
desc: "Kernel-based Virtual Machine", desc: "Kernel-based Virtual Machine",
required: true,
}, },
"vhost": { "vhost": {
desc: "Host kernel accelerator for virtio", desc: "Host kernel accelerator for virtio",
required: true,
}, },
"vhost_net": { "vhost_net": {
desc: "Host kernel accelerator for virtio network", desc: "Host kernel accelerator for virtio network",
required: true,
},
"vhost_vsock": {
desc: "Host Support for Linux VM Sockets",
required: false,
}, },
} }

View File

@ -42,10 +42,16 @@ var archRequiredCPUAttribs = map[string]string{}
// required module parameters. // required module parameters.
var archRequiredKernelModules = map[string]kernelModule{ var archRequiredKernelModules = map[string]kernelModule{
"kvm": { "kvm": {
desc: "Kernel-based Virtual Machine", desc: "Kernel-based Virtual Machine",
required: true,
}, },
"kvm_hv": { "kvm_hv": {
desc: "Kernel-based Virtual Machine hardware virtualization", desc: "Kernel-based Virtual Machine hardware virtualization",
required: true,
},
"vhost_vsock": {
desc: "Host Support for Linux VM Sockets",
required: false,
}, },
} }

View File

@ -33,7 +33,12 @@ var archRequiredCPUAttribs = map[string]string{}
// required module parameters. // required module parameters.
var archRequiredKernelModules = map[string]kernelModule{ var archRequiredKernelModules = map[string]kernelModule{
"kvm": { "kvm": {
desc: "Kernel-based Virtual Machine", desc: "Kernel-based Virtual Machine",
required: true,
},
"vhost_vsock": {
desc: "Host Support for Linux VM Sockets",
required: false,
}, },
} }