forked from kata-containers/runtime
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The PR adds the support for s390x. The VirtioNetPCI has been changed to VirtioNet. The generalization allows to set the VirtioNet to the correct CCW device for s390x. Fixes: kata-containers#666 Co-authored-by: Yash D Jain ydjainopensource@gmail.com Signed-off-by: Alice Frosi <afrosi@de.ibm.>
- Loading branch information
Alice Frosi
committed
Dec 6, 2018
1 parent
8f14a6d
commit d5fb32c
Showing
13 changed files
with
743 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
# Copyright (c) 2018 IBM | ||
# | ||
# SPDX-License-Identifier: Apache-2.0 | ||
# | ||
|
||
# s390x settings | ||
|
||
MACHINETYPE := s390-ccw-virtio | ||
KERNELPARAMS := | ||
MACHINEACCELERATORS := | ||
|
||
QEMUCMD := qemu-system-s390x |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// Copyright (c) 2018 IBM | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 | ||
// | ||
|
||
package main | ||
|
||
const testCPUInfoTemplate = ` | ||
vendor_id : IBM/S390 | ||
# processors : 4 | ||
bogomips per cpu: 20325.00 | ||
max thread id : 0 | ||
features : esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs te vx sie | ||
cache0 : level=1 type=Data scope=Private size=128K line_size=256 associativity=8 | ||
cache1 : level=1 type=Instruction scope=Private size=96K line_size=256 associativity=6 | ||
cache2 : level=2 type=Data scope=Private size=2048K line_size=256 associativity=8 | ||
cache3 : level=2 type=Instruction scope=Private size=2048K line_size=256 associativity=8 | ||
cache4 : level=3 type=Unified scope=Shared size=65536K line_size=256 associativity=16 | ||
cache5 : level=4 type=Unified scope=Shared size=491520K line_size=256 associativity=30 | ||
processor 0: version = FF, identification = FFFFFF, machine = 2964 | ||
` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
// Copyright (c) 2018 Intel Corporation | ||
// | ||
// SPDX-License-Identifier: Apache-2.0 | ||
// | ||
|
||
package main | ||
|
||
import ( | ||
"fmt" | ||
"github.com/sirupsen/logrus" | ||
"strings" | ||
) | ||
|
||
const ( | ||
cpuFlagsTag = genericCPUFlagsTag | ||
archCPUVendorField = genericCPUVendorField | ||
// On s390x the cpu model is indicated by the field machine. | ||
// Example: | ||
// processor 0: version = FF, identification = 3FEC87, machine = 2964 | ||
archCPUModelField = "machine" | ||
) | ||
|
||
// archRequiredCPUFlags maps a CPU flag value to search for and a | ||
// human-readable description of that value. | ||
var archRequiredCPUFlags = map[string]string{} | ||
|
||
// archRequiredCPUAttribs maps a CPU (non-CPU flag) attribute value to search for | ||
// and a human-readable description of that value. | ||
var archRequiredCPUAttribs = map[string]string{} | ||
|
||
// archRequiredKernelModules maps a required module name to a human-readable | ||
// description of the modules functionality and an optional list of | ||
// required module parameters. | ||
var archRequiredKernelModules = map[string]kernelModule{ | ||
"kvm": { | ||
desc: "Kernel-based Virtual Machine", | ||
}, | ||
} | ||
|
||
func setCPUtype() error { | ||
return nil | ||
} | ||
|
||
// kvmIsUsable determines if it will be possible to create a full virtual machine | ||
// by creating a minimal VM and then deleting it. | ||
func kvmIsUsable() error { | ||
return genericKvmIsUsable() | ||
} | ||
|
||
func archHostCanCreateVMContainer() error { | ||
return kvmIsUsable() | ||
} | ||
|
||
// hostIsVMContainerCapable checks to see if the host is theoretically capable | ||
// of creating a VM container. | ||
func hostIsVMContainerCapable(details vmContainerCapableDetails) error { | ||
|
||
_, err := getCPUInfo(details.cpuInfoFile) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
count, err := checkKernelModules(details.requiredKernelModules, archKernelParamHandler) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
if count == 0 { | ||
return nil | ||
} | ||
|
||
return fmt.Errorf("ERROR: %s", failMessage) | ||
|
||
} | ||
|
||
func archKernelParamHandler(onVMM bool, fields logrus.Fields, msg string) bool { | ||
return genericArchKernelParamHandler(onVMM, fields, msg) | ||
} | ||
|
||
// getS390xCPUDetails returns the cpu information | ||
func getS390xCPUDetails() (vendor, model string, err error) { | ||
prefixModel := "processor" | ||
cpuinfo, err := getCPUInfo(procCPUInfo) | ||
if err != nil { | ||
return "", "", err | ||
} | ||
|
||
lines := strings.Split(cpuinfo, "\n") | ||
|
||
for _, line := range lines { | ||
if archCPUVendorField != "" { | ||
if strings.HasPrefix(line, archCPUVendorField) { | ||
fields := strings.Split(line, ":") | ||
if len(fields) > 1 { | ||
vendor = strings.TrimSpace(fields[1]) | ||
} | ||
} | ||
} | ||
if archCPUModelField != "" { | ||
if strings.HasPrefix(line, prefixModel) { | ||
fields := strings.Split(strings.TrimSpace(line), ",") | ||
cpuModel := strings.Split(fields[2], "=") | ||
model = strings.TrimSpace(cpuModel[1]) | ||
} | ||
} | ||
} | ||
|
||
if vendor == "" { | ||
return "", "", fmt.Errorf("cannot find vendor field in file %v", procCPUInfo) | ||
} | ||
|
||
// model name is optional | ||
if model == "" { | ||
return "", "", fmt.Errorf("Error in parsing cpu model from %v", procCPUInfo) | ||
} | ||
|
||
return vendor, model, nil | ||
} | ||
|
||
func getCPUDetails() (vendor, model string, err error) { | ||
if vendor, model, err := genericGetCPUDetails(); err == nil { | ||
return vendor, model, nil | ||
} | ||
return getS390xCPUDetails() | ||
} |
Oops, something went wrong.