From db5097835a5b81f9c0879c57096c14e248695e80 Mon Sep 17 00:00:00 2001 From: Marco Vedovati Date: Tue, 20 Aug 2019 15:50:57 +0200 Subject: [PATCH 1/2] kata-check: require kvm/vhost modules for amd64 KVM/vhost modules are required when using QEMU or firecracker. Fixes: #1985 Signed-off-by: Marco Vedovati --- cli/kata-check_amd64.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/cli/kata-check_amd64.go b/cli/kata-check_amd64.go index a36a3ec16a..21a7fc8dea 100644 --- a/cli/kata-check_amd64.go +++ b/cli/kata-check_amd64.go @@ -116,17 +116,21 @@ func setCPUtype(hypervisorType vc.HypervisorType) error { } archRequiredKernelModules = map[string]kernelModule{ kernelModkvm: { - desc: msgKernelVM, + desc: msgKernelVM, + required: true, }, kernelModkvmintel: { desc: "Intel KVM", parameters: kvmIntelParams, + required: true, }, kernelModvhost: { - desc: msgKernelVirtio, + desc: msgKernelVirtio, + required: true, }, kernelModvhostnet: { - desc: msgKernelVirtioNet, + desc: msgKernelVirtioNet, + required: true, }, kernelModvhostvsock: { desc: msgKernelVirtioVhostVsock, @@ -143,13 +147,16 @@ func setCPUtype(hypervisorType vc.HypervisorType) error { } archRequiredKernelModules = map[string]kernelModule{ kernelModvhm: { - desc: "Intel ACRN", + desc: "Intel ACRN", + required: false, }, kernelModvhost: { - desc: msgKernelVirtio, + desc: msgKernelVirtio, + required: false, }, kernelModvhostnet: { - desc: msgKernelVirtioNet, + desc: msgKernelVirtioNet, + required: false, }, } default: From 5bfca6e38e9ad49be0ddd2bb062a8872b3fa330f Mon Sep 17 00:00:00 2001 From: Marco Vedovati Date: Fri, 23 Aug 2019 11:47:51 +0200 Subject: [PATCH 2/2] test: add arch required kernel modules Add a test for the checkKernelModules returned error count value. Signed-off-by: Marco Vedovati --- cli/kata-check_test.go | 51 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/cli/kata-check_test.go b/cli/kata-check_test.go index 87605ef123..306fc6410e 100644 --- a/cli/kata-check_test.go +++ b/cli/kata-check_test.go @@ -763,3 +763,54 @@ func TestCheckKernelParamHandler(t *testing.T) { // single error (due to "param1"'s value being different) checkKernelParamHandler(assert, testDataToCreate, testDataToExpect, nil, false, uint32(1)) } + +func TestArchRequiredKernelModules(t *testing.T) { + assert := assert.New(t) + + tmpdir, err := ioutil.TempDir("", "") + assert.NoError(err) + defer os.RemoveAll(tmpdir) + + _, config, err := makeRuntimeConfig(tmpdir) + assert.NoError(err) + + err = setCPUtype(config.HypervisorType) + assert.NoError(err) + + if len(archRequiredKernelModules) == 0 { + // No modules to check + return + } + + dir, err := ioutil.TempDir("", "") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + savedModProbeCmd := modProbeCmd + savedSysModuleDir := sysModuleDir + + // XXX: override + sysModuleDir = filepath.Join(dir, "sys/module") + modProbeCmd = "false" + + defer func() { + sysModuleDir = savedSysModuleDir + modProbeCmd = savedModProbeCmd + }() + + // Running check with no modules + count, err := checkKernelModules(archRequiredKernelModules, nil) + assert.NoError(err) + + // Test that count returned matches the # of modules with required set. + expectedCount := 0 + for _, module := range archRequiredKernelModules { + if module.required { + expectedCount++ + } + } + + assert.EqualValues(count, expectedCount) +}