Merge pull request #1323 from Pennyzct/nvdimm

arm64: support NVDIMM
This commit is contained in:
James O. D. Hunt 2019-03-12 10:11:01 +00:00 committed by GitHub
commit ffbae64a2d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 61 additions and 2 deletions

View File

@ -7,6 +7,7 @@ package virtcontainers
import (
"io/ioutil"
"os"
"runtime"
"strings"
@ -24,7 +25,7 @@ const defaultQemuPath = "/usr/bin/qemu-system-aarch64"
const defaultQemuMachineType = QemuVirt
var defaultQemuMachineOptions = "usb=off,accel=kvm,gic-version=" + getGuestGICVersion()
var defaultQemuMachineOptions = "usb=off,accel=kvm,nvdimm,gic-version=" + getGuestGICVersion()
var qemuPaths = map[string]string{
QemuVirt: defaultQemuPath,
@ -37,7 +38,9 @@ var kernelParams = []Param{
}
var kernelRootParams = []Param{
{"root", "/dev/vda1"},
{"root", "/dev/pmem0p1"},
{"rootflags", "data=ordered,errors=remount-ro rw"},
{"rootfstype", "ext4"},
}
var supportedQemuMachines = []govmmQemu.Machine{
@ -160,3 +163,29 @@ func (q *qemuArm64) bridges(number uint32) []types.PCIBridge {
func (q *qemuArm64) appendBridges(devices []govmmQemu.Device, bridges []types.PCIBridge) []govmmQemu.Device {
return genericAppendBridges(devices, bridges, q.machineType)
}
func (q *qemuArm64) appendImage(devices []govmmQemu.Device, path string) ([]govmmQemu.Device, error) {
imageFile, err := os.Open(path)
if err != nil {
return nil, err
}
defer imageFile.Close()
imageStat, err := imageFile.Stat()
if err != nil {
return nil, err
}
object := govmmQemu.Object{
Driver: govmmQemu.NVDIMM,
Type: govmmQemu.MemoryBackendFile,
DeviceID: "nv0",
ID: "mem0",
MemPath: path,
Size: (uint64)(imageStat.Size()),
}
devices = append(devices, object)
return devices, nil
}

View File

@ -125,3 +125,33 @@ func TestQemuArm64AppendBridges(t *testing.T) {
assert.Equal(expectedOut, devices)
}
func TestQemuArm64AppendImage(t *testing.T) {
var devices []govmmQemu.Device
assert := assert.New(t)
arm64 := newTestQemu(QemuVirt)
f, err := ioutil.TempFile("", "img")
assert.NoError(err)
defer func() { _ = f.Close() }()
defer func() { _ = os.Remove(f.Name()) }()
imageStat, err := f.Stat()
assert.NoError(err)
expectedOut := []govmmQemu.Device{
govmmQemu.Object{
Driver: govmmQemu.NVDIMM,
Type: govmmQemu.MemoryBackendFile,
DeviceID: "nv0",
ID: "mem0",
MemPath: f.Name(),
Size: (uint64)(imageStat.Size()),
},
}
devices, err = arm64.appendImage(devices, f.Name())
assert.NoError(err)
assert.Equal(expectedOut, devices)
}