Commit Graph

112 Commits

Author SHA1 Message Date
Ning Bo
79e0d5333d qmp: support command 'query-qmp-schema'
The upper hyervisor manager application maybe need to wait some
QMP event to control boot sequence, but the event we wanted maybe
not exist in some older version, so we need query all QMP ABI and
check the event is supported or not.

related: kata-containers/runtime#1918

Signed-off-by: Ning Bo <ning.bo9@zte.com.cn>
2019-08-01 17:14:54 +08:00
Alice Frosi
68cdf64fe5 test: add cpu topology tests
Add cpu driver types in TestQMPCPUDeviceAdd

Signed-off-by: Alice Frosi <afrosi@de.ibm.com>
2019-07-26 14:27:25 +02:00
Alice Frosi
e0cf9d5c14 qmp: add checks for the CPU toplogy
Support for function isSocketIDSupported, isThreadIDSupported and isDieIDSupported.
The functions check if the cpu driver and the qemu version support the
id parameter.

Fixes: #102

Signed-off-by: Alice Frosi <afrosi@de.ibm.com>
2019-07-26 14:27:25 +02:00
Julio Montes
a5c119086a qemu: support x86 SMP die
In QEMU 4.1 the CPU topology for x86 will change to:
`socket > die > core > thread`.
Add `die-id` field to `CPUProperties` and include it in CPU hotplugging

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-07-16 14:08:40 +00:00
Ace-Tang
8fd28e23ac Support x-pci-vendor-id and x-pci-device-id pass to qemu
since some vendor id like 1ded can not be identified by virtio-pci
driver, so upper level need to pass a specified vendor id to qemu.

the upper level will change unavailable id and pass it to qemu.

Signed-off-by: Ace-Tang <aceapril@126.com>
2019-07-09 12:19:51 +08:00
Alice Frosi
713d0d9406 s390x: add virtio-blk-ccw type
In order to hotplug virtio-blk, on s390x the CCW device drivers is used
instad of PCI.

Signed-off-by: Alice Frosi <afrosi@de.ibm.com>
2019-07-05 08:08:25 +02:00
Alice Frosi
65cc343f7b test: add devno in the tests for s390x
Add test with devno param

Signed-off-by: Alice Frosi <afrosi@de.ibm.com>
2019-07-05 08:08:25 +02:00
Alice Frosi
9cf98da0be s390x: add devno support
DevNo is used to identify the ccw device for s390x systems

Signed-off-by: Alice Frosi <afrosi@de.ibm.com>
2019-07-05 08:08:25 +02:00
Ganesh Maharaj Mahalingam
0c900f596e Allow sharing of memory backend file
Hotplugged memory could be backed by a file on the host with sharing
turned on. This change allows qmp to pass that option to a govmm.

Signed-off-by: Ganesh Maharaj Mahalingam <ganesh.mahalingam@intel.com>
2019-06-18 08:07:17 -07:00
Peng Tao
f695ddf8f3 qemu: add migration incoming defer support
qemu commandline supports -incoming defer
and qmp supports migrate-incoming uri.

Signed-off-by: Peng Tao <bergwolf@hyper.sh>
2019-06-14 00:24:26 -07:00
Peng Tao
f0f18dd0f2 qmp: add virtio-blk multiqueue
Hotplug virtio-blk with multiqueue support.

Signed-off-by: Peng Tao <bergwolf@hyper.sh>
2019-05-27 20:40:12 -07:00
lifupan
7d3deea4fc qemu: Add a virtio-blk-pci device driver support
Add a pci bus based virtio block device driver support.

Fixes:#92

Signed-off-by: lifupan <lifupan@gmail.com>
2019-04-16 11:45:50 -04:00
Stefan Hajnoczi
058cda0603 qemu: use MiB instead of Gib for virtio-fs cache size
QEMU supports finer-grained units than GiB.  Change the cache size to
MiB so users have more control over the cache size.

Note that changing the semantics of the CacheSize field is fine because
there are no users of this API yet.  kata-runtime will be the first
users and prefers MiB instead of GiB.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2019-04-09 10:21:43 +01:00
Mark Ryan
35a8fd3ca9 Merge pull request #90 from devimc/topic/FixQemu4qmp
qemu/qmp: re-implement mainLoop
2019-04-08 09:38:17 +02:00
Julio Montes
694a7b1c61 qemu/qmp: re-implement mainLoop
In newer versions of QEMU, like 4.0-rc2, QMP events can be thrown even before
the QMP-version response, one example of this behaviour is when a virtio serial
is closed and a VSERPORT_CHANGE event is thrown.
Re-implement mainLoop to check the data received from the VM channel, since
it's not a guarantee that the first data read from the VM channel is the
QMP version.

fixes https://github.com/kata-containers/runtime/issues/1474

Signed-off-by: Julio Montes <julio.montes@intel.com>
2019-04-05 13:25:22 -06:00
jiangpengfei
5712b1198e qemu/qmp: fix readLoop() reuse scanner.Bytes() underlying array problem
Since []byte channel type transfer slice info(include slice underlying array pointer, len, cap)
between channel sender and receiver. scanner.Bytes() function returned slice's underlying array
may point to data that will be overwritten by a subsequent call to Scan(reference from:
https://golang.org/pkg/bufio/#Scanner.Bytes), which may make consecutive scan() call write the
read data into the same underlying array which causes receiver read mixed data,so we need to
copy line to new allocated space and then send to channel receiver to solve this problem.

Fixes: #88

Signed-off-by: jiangpengfei <jiangpengfei9@huawei.com>
2019-03-13 19:45:05 -04:00
Stefan Hajnoczi
3c84b1daa3 govmm: add VhostUserFS vhost-user device type
The QEMU vhost-user-fs-pci device provides virtio-fs host<->guest file
system sharing (https://virtio-fs.gitlab.io/).  The device is
instantiated like this:

  $ qemu -chardev socket,path=/tmp/vhost-fs.sock,id=chr0
         -device vhost-user-fs-pci,tag=myfs,chardev=chr0,cache-size=4G,versiontable=/dev/shm/fuse_shared_versions

This patch adds the VhostUserFS DeviceDriver and command-line generation
for this QEMU device.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2019-02-19 13:03:18 +00:00
Nitesh Konkar
4692f6b965 qmp: Conditionally pass threadID and socketID when CPU device add
For vCPU hotplug to work on ppc64le, we need not
pass threadID and socketID. So conditionally pass
arguments when executing CPU device add.

Fixes: #83

Signed-off-by: Nitesh Konkar niteshkonkar@in.ibm.com
2019-01-28 21:44:41 +05:30
Mark Ryan
ad310f9fde Fix staticcheck S1023
Static check was complaining about code that looked like

_ = <-ch

when it wants to see simply

<-ch

There was only one instance of this in govmm and this commit fixes
that instance.

Signed-off-by: Mark Ryan <mark.d.ryan@intel.com>
2019-01-28 16:20:23 +01:00
Mark Ryan
932fdc7f50 Fix staticcheck S1023
By removing a redundant return statement.

Signed-off-by: Mark Ryan <mark.d.ryan@intel.com>
2019-01-28 16:19:20 +01:00
Mark Ryan
cb2ce9339c Fix staticcheck S1008
static check was complaining about code that looked like

if x == "" {
  return false
}

return true

when what it wants to see is return x != "".  This commit fixes the issue.

Signed-off-by: Mark Ryan <mark.d.ryan@intel.com>
2019-01-28 16:17:24 +01:00
Mark Ryan
f0172cd2a6 Fix staticcheck (S1002)
staticcheck was complaining about code that looked like

if x == true {

}

rather than

if x {

}

This commit fixes the issue.

Signed-off-by: Mark Ryan <mark.d.ryan@intel.com>
2019-01-28 16:13:48 +01:00
Mark Ryan
5f2e630bda Fix staticcheck (S1025)
staticcheck was complaining as there were quite a lot of
fmt.Sprintf("%s",d) in the code where d was either a string or
had string as its underlying type.

Signed-off-by: Mark Ryan <mark.d.ryan@intel.com>
2019-01-28 16:06:49 +01:00
Mark Ryan
4beea5133e Fix staticcheck (ST1005) errors
staticcheck was complaining as some of the error messages returned by
govmm began with a capital letter.  This commit fixes the issue.

Signed-off-by: Mark Ryan <mark.d.ryan@intel.com>
2019-01-28 15:32:07 +01:00
Sebastien Boeuf
737f03de59 Merge pull request #76 from teawater/nvdimm
qmp: Add nvdimm support
2018-12-06 19:43:30 +00:00
Hui Zhu
c891f5f84b qmp: Add nvdimm support
ExecuteNVDIMMDeviceAdd can add a nvdimm disk to qemu.
Not implement NVDIMM device delete function because qemu doesn't support it.

Signed-off-by: Hui Zhu <teawater@hyper.sh>
2018-12-06 11:35:07 +08:00
Sebastien Boeuf
f9b31c0f80 qemu: Allow disable-modern option from QMP
For devices that actually support the option disable-modern, this
current commit provides a proper flag to the caller. This will allow
for better support when used in nested environment as virtio-pci
devices should rely on virtio 0.9 instead of 1.0 due to a bug in
KVM.

Fixes #80

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-12-05 09:16:41 -08:00
Mark Ryan
908b6aab14 Merge pull request #69 from BetaXOi/output-qmp-err
qmp: Output error detail when execute QMP command failed
2018-12-04 09:20:41 +01:00
Mark Ryan
d6173077f1 Run tests for the s390x build
It turns out it is possible to run the unit tests for the s390x build
on travis by renaming the s390x specific files, so that their
inclusion in the build is determined only by tags and not by filename,
and by introducing a new tag s390x_test that we can use to force
their inclusion into a build by using this tag.  The .travis file is
then updated to include the line

go test --tags s390x_test ./...

This creates a build on travis that includes the s390x specific
files and runs the unit tests.

Signed-off-by: Mark Ryan <mark.d.ryan@intel.com>
2018-12-03 15:56:20 +01:00
NingBo
dab4cf1d70 qmp: Add tests
Test execute QMP command with error response.

Signed-off-by: NingBo <ning.bo9@zte.com.cn>
2018-12-03 14:40:26 +08:00
Alice Frosi
c80fc3b12f qemu: Add s390x support
The PR adds the s390x support. It sets the CCW devices and sets to false
all the devices in the mapping isVirtioPCI. It reimplements the functions
QemuNetdevParam and QemuDeviceParam to print an error message if the vhost-user
devices are used. It introduces a new function ExecuteNetCCWDeviceAdd for qmp
for the CCW devices.

Fixes: #37

Co-authored-by: Yash D Jain <ydjainopensource@gmail.com>
Signed-off-by: Alice Frosi <afrosi@de.ibm.com>
2018-11-30 10:13:28 +01:00
Mark Ryan
c5440a8819 Merge pull request #73 from markdryan/contributing
Update file headers , CONTRIBUTING.md and add CONTRIBUTORS.md
2018-11-30 10:04:14 +01:00
Mark Ryan
ca477a18b6 Update source file headers
This commit updates the headers in the Go source files to adhere
to the new guidelines in the CONTRIBUTING.md file.

Signed-off-by: Mark Ryan <mark.d.ryan@intel.com>
2018-11-30 09:34:21 +01:00
Mark Ryan
18948af4d4 Merge pull request #67 from BetaXOi/fix-mempath
qmp: fix mem-path properties for hotplug memory.
2018-11-30 08:49:21 +01:00
Alice Frosi
b3b765cbe6 qemu: test Valid for Vsock for Context ID
Add test for the validation when the Context ID is larger than 32
bits

Signed-off-by: Alice Frosi <afrosi@de.ibm.com>
2018-11-29 12:29:46 +00:00
Alice Frosi
3becff5f4e qemu: change of ContextID from uint32 to uint64
The correct type used by qemu and in kernel is uint64 and this leads to
an endianess problem with ioctl system call. See the issue
https://github.com/kata-containers/runtime/issues/947

Fixes: #70

Signed-off-by: Alice Frosi <afrosi@de.ibm.com>
2018-11-29 12:29:29 +00:00
NingBo
f30fd1354a qmp: Output error detail when execute QMP command failed
Only get 'QMP command failed' error message now when execute QMP
command by 'executeCommandWithResponse' failed. This patch will
output more error detail.

Signed-off-by: NingBo <ning.bo9@zte.com.cn>
2018-11-29 16:32:14 +08:00
NingBo
7da6a4c7c6 qmp: fix mem-path properties for hotplug memory.
The QMP command 'object-add' only has three arguments: 'qom-type'
'id' and 'props', thus 'mem-path' has to be saved in 'props'.
https://github.com/qemu/qemu/blob/stable-2.0/qapi-schema.json#L2958
https://github.com/qemu/qemu/blob/stable-2.12/qapi/misc.json#L1846

Signed-off-by: NingBo <ning.bo9@zte.com.cn>
2018-11-29 09:56:26 +08:00
Sebastien Boeuf
60a5f7ca7f Merge pull request #64 from alicefr/preparation
qemu/qmp: preparation for s390x support
2018-11-27 19:23:58 +00:00
Sebastien Boeuf
c664d3dd94 Merge pull request #60 from teawater/cache
qemu/qmp: add new function ExecuteBlockdevAddWithCache
2018-11-27 07:46:36 +00:00
Alice Frosi
e4892e3396 qemu/qmp: preparation for s390x support
This PR prepares for the s390x support. It introduces:
 - a generalization of ccw and pci devices. The variables for the pci devices
   have been renamed by removing the Pci suffix. They have been moved to the
   qemu_arch_base.go
 - the mapping isVirtioPCI has been move to qemu_arch_base.go because in
   this way a different mapping can be added for other architecture (e.g
   s390x)
 - the functions QemuNetdevParam and QemuDeviceParam have been moved to
   qemu_arch_base.go. In this way, they could be reimplemented for other
   architecture for the case VHOSTUSER
 - a function disableModern has been introduced to check if the device is
   a pci device and then returns the right parameters. In the case of ccw
   devices, they don't have the disable-modern flag
 - a function mqParameter has been introduced to return the right
   parameters for the mq case. The virtio-net-ccw device doesn't have the
   vectors flag
 - in qemu_arch_base_test.go contains the test and strings that can be
   overwritten for other architectures (e.g s390). The devices names and
   the flags for the devices can be overwritten.
 - the string for the romfile has been replaced by a variable romfile
   that could be left empty if the devices doesn't support a romfile as
   for the ccw devices for s390.
 - clean-up: the disable-modern=on/off options have been changed to
   disable-modern=true/false. In the code there was a mixture of on/true
   off/false

Fixes: #61

Co-authored-by: Yash D Jain <ydjainopensource@gmail.com>
Signed-off-by: Alice Frosi <afrosi@de.ibm.com>
2018-11-23 10:15:09 +00:00
Hui Zhu
110d2fa049 qemu/qmp: add new function ExecuteBlockdevAddWithCache
ExecuteBlockdevAddWithCache has two more parameters direct and noFlush
than ExecuteBlockdevAdd.
They are cache-related options for block devices that are described in
https://github.com/qemu/qemu/blob/master/qapi/block-core.json.
direct denotes whether use of O_DIRECT (bypass the host page cache)
is enabled.  noFlush denotes whether flush requests for the device are
ignored.

Signed-off-by: Hui Zhu <teawater@hyper.sh>
2018-11-23 17:23:06 +08:00
Hui Zhu
a0b0c86e9c qmp_test: Change QMP version from 2.6 to 2.9
Also change TestQMPXBlockdevDel to TestQMPBlockdevDel because QMP verion
2.9 and older use blockdev-del but not x-blockdev-del.

Signed-off-by: Hui Zhu <teawater@hyper.sh>
2018-11-23 09:33:21 +08:00
l00397676
10c36a13da qemu: add support for pidfile option
Add input for -pidfile option of qemu, so that we can get pid of
qemu main process, and apply resource limitations to it.

Fixes #62

Signed-off-by: l00397676 <lujingxiao@huawei.com>
2018-11-21 19:51:49 +08:00
Sebastien Boeuf
9c819db5a3 qemu: Fix virtio-net-pci QMP command
This patch fixes the wrong behavior of specifying a netdev, MAC
address or PCI address entry when those were empty. Instead, it
does not provide those entries if the content is empty.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-10-16 13:20:55 -07:00
Sebastien Boeuf
7fdfc6a4c9 qemu: Add support for romfile option
Any device inheriting from virtio-pci can specify a ROM file. This
option is provisioned by default with "efi-virtio.rom", but most
of the time, firmwares such as OVMF or seabios will already support
what is provided by this ROM file.

In order to reduce the "forced" dependency on such ROM file, govmm
should provide an empty path if the consumer of the library does not
provide one.

This patch reorganizes the list of devices, so that it gets easier to
list which devices inherit from virtio-pci, and then adds the romfile
option to every single device that support this option.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-10-10 17:17:36 -07:00
Jose Carlos Venegas Munoz
ec83abe69e qemu: Add virtio-balloon device suppport.
Add support for virtio-balloon.

- Add test
- Support disable-modern
- Support deflate-on-oom

Signed-off-by: Jose Carlos Venegas Munoz <jose.carlos.venegas.munoz@intel.com>
2018-10-05 11:18:31 -05:00
James O. D. Hunt
46970781fa qemu: Show full path to qemu binary at launch time
Rather than show the generic "qemu", log the full path to the
particular qemu binary being used.

Signed-off-by: James O. D. Hunt <james.o.hunt@intel.com>
2018-10-03 16:41:08 +01:00
Sebastien Boeuf
ef7250508c qemu: Fix the support of PCIe bridge
In case the type of bridge is PCIEBridge, which we expect as ending
up using pcie-pci-bridge device from Qemu, the properties chassis_nr
and shpc don't exist.

This commit simply fixes this use case by removing those parameters
from the command line.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2018-10-02 15:35:49 -07:00
Peng Tao
56f645eac6 qmp: add ExecuteQueryMigration
It sends query-migrate qmp command to check migration status.

Signed-off-by: Peng Tao <bergwolf@gmail.com>
2018-09-28 21:10:21 +08:00