diff options
Diffstat (limited to 'results/classifier/118/device/1342')
| -rw-r--r-- | results/classifier/118/device/1342 | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/results/classifier/118/device/1342 b/results/classifier/118/device/1342 new file mode 100644 index 000000000..17a589abf --- /dev/null +++ b/results/classifier/118/device/1342 @@ -0,0 +1,54 @@ +device: 0.933 +graphic: 0.860 +network: 0.811 +VMM: 0.739 +kernel: 0.728 +vnc: 0.707 +PID: 0.693 +arm: 0.692 +ppc: 0.684 +risc-v: 0.665 +register: 0.664 +socket: 0.622 +architecture: 0.620 +semantic: 0.577 +peripherals: 0.542 +boot: 0.499 +performance: 0.474 +TCG: 0.463 +permissions: 0.429 +x86: 0.426 +mistranslation: 0.402 +i386: 0.387 +debug: 0.384 +files: 0.353 +virtual: 0.337 +assembly: 0.332 +hypervisor: 0.280 +KVM: 0.199 +user-level: 0.151 + +Default machine setting of force-legacy=true causes problems for any modern VirtIO device using MMIO +Description of problem: +The default causes problems if you enable any non-legacy VirtIO device which has the VIRTIO_F_VERSION_1 feature bit will not properly read all feature bits. This is because reading VIRTIO_MMIO_VERSION returns VIRT_VERSION_LEGACY which in turn results in the driver not reading all feature bits, e.g. the qtest access: + +``` +static uint64_t qvirtio_mmio_get_features(QVirtioDevice *d) +{ + QVirtioMMIODevice *dev = container_of(d, QVirtioMMIODevice, vdev); + uint64_t lo; + uint64_t hi = 0; + + qtest_writel(dev->qts, dev->addr + QVIRTIO_MMIO_HOST_FEATURES_SEL, 0); + lo = qtest_readl(dev->qts, dev->addr + QVIRTIO_MMIO_HOST_FEATURES); + + if (dev->version >= 2) { + qtest_writel(dev->qts, dev->addr + QVIRTIO_MMIO_HOST_FEATURES_SEL, 1); + hi = qtest_readl(dev->qts, dev->addr + QVIRTIO_MMIO_HOST_FEATURES); + } + + return (hi << 32) | lo; +} +``` +Additional information: + |