mirror of https://github.com/xemu-project/xemu.git
virtio,pc,pci: features, cleanups, fixes
mostly vhost-vdpa: guest announce feature emulation when using shadow virtqueue support for configure interrupt startup speed ups an acpi change to only generate cluster node in PPTT when specified for arm misc fixes, cleanups Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAmO6eGMPHG1zdEByZWRo YXQuY29tAAoJECgfDbjSjVRpoUIIALqC3UtJcK3AuAMbeqVokxl5CPwoeXMyi+rT 0QuN8m8dpBtJFpy3Vyq0afixOFmlwvORW5ye4QI97OyIhtLJq00buzQsgHjNoPo3 zN2L0BDyofDmfFHgCxcEbv2aAO8TaqRSHmKffEFmf8JDMDL9Ev1QvPTWHhfm2eJf VKPHOtCA/3WXBD9JNfYJ0YuzCrrJaMhIO6/5tqv9yjMxWTfEFa1J2Sr2tWkRLuDk FPfApy7afjI705Guv6PllZ3JdOMwf7iZaoBK6mSdCDSyi1xciYM0VeWi8SLD4qbM N+9NkUQOIYS5ZC4BXrULy6HDUsECJ71I0pvHveX7nwbK6xPD4RQ= =0tPe -----END PGP SIGNATURE----- Merge tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging virtio,pc,pci: features, cleanups, fixes mostly vhost-vdpa: guest announce feature emulation when using shadow virtqueue support for configure interrupt startup speed ups an acpi change to only generate cluster node in PPTT when specified for arm misc fixes, cleanups Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Sun 08 Jan 2023 08:01:39 GMT # gpg: using RSA key 5D09FD0871C8F85B94CA8A0D281F0DB8D28D5469 # gpg: issuer "mst@redhat.com" # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" [full] # gpg: aka "Michael S. Tsirkin <mst@redhat.com>" [full] # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67 # Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469 * tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu: (50 commits) vhost-scsi: fix memleak of vsc->inflight acpi: cpuhp: fix guest-visible maximum access size to the legacy reg block tests: acpi: aarch64: Add *.topology tables tests: acpi: aarch64: Add topology test for aarch64 tests: acpi: Add and whitelist *.topology blobs tests: virt: Update expected ACPI tables for virt test hw/acpi/aml-build: Only generate cluster node in PPTT when specified tests: virt: Allow changes to PPTT test table virtio-pci: fix proxy->vector_irqfd leak in virtio_pci_set_guest_notifiers vdpa: commit all host notifier MRs in a single MR transaction vhost: configure all host notifiers in a single MR transaction vhost: simplify vhost_dev_enable_notifiers vdpa: harden the error path if get_iova_range failed vdpa-dev: get iova range explicitly docs/devel: Rules on #include in headers include: Include headers where needed include/hw/virtio: Break inclusion loop include/hw/cxl: Break inclusion loop cxl_pci.h and cxl_cdat_h include/hw/pci: Include hw/pci/pci.h where needed include/hw/pci: Split pci_device.h off pci.h ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
d6271b6572
|
@ -17,9 +17,7 @@ CONFIG_I8254=y
|
|||
CONFIG_PCSPK=y
|
||||
CONFIG_PCKBD=y
|
||||
CONFIG_FDC=y
|
||||
CONFIG_ACPI=y
|
||||
CONFIG_ACPI_PIIX4=y
|
||||
CONFIG_APM=y
|
||||
CONFIG_I8257=y
|
||||
CONFIG_PIIX4=y
|
||||
CONFIG_IDE_ISA=y
|
||||
|
@ -32,6 +30,5 @@ CONFIG_MIPS_ITU=y
|
|||
CONFIG_MALTA=y
|
||||
CONFIG_PCNET_PCI=y
|
||||
CONFIG_MIPSSIM=y
|
||||
CONFIG_ACPI_SMBUS=y
|
||||
CONFIG_SMBUS_EEPROM=y
|
||||
CONFIG_TEST_DEVICES=y
|
||||
|
|
|
@ -293,6 +293,13 @@ that QEMU depends on.
|
|||
Do not include "qemu/osdep.h" from header files since the .c file will have
|
||||
already included it.
|
||||
|
||||
Headers should normally include everything they need beyond osdep.h.
|
||||
If exceptions are needed for some reason, they must be documented in
|
||||
the header. If all that's needed from a header is typedefs, consider
|
||||
putting those into qemu/typedefs.h instead of including the header.
|
||||
|
||||
Cyclic inclusion is forbidden.
|
||||
|
||||
C types
|
||||
=======
|
||||
|
||||
|
|
|
@ -9,13 +9,14 @@ config ACPI_X86
|
|||
select ACPI_CPU_HOTPLUG
|
||||
select ACPI_MEMORY_HOTPLUG
|
||||
select ACPI_HMAT
|
||||
select ACPI_PIIX4
|
||||
select ACPI_PCIHP
|
||||
select ACPI_ERST
|
||||
|
||||
config ACPI_X86_ICH
|
||||
config ACPI_ICH9
|
||||
bool
|
||||
select ACPI_SMBUS
|
||||
select ACPI_X86
|
||||
select APM
|
||||
|
||||
config ACPI_CPU_HOTPLUG
|
||||
bool
|
||||
|
@ -30,7 +31,9 @@ config ACPI_NVDIMM
|
|||
|
||||
config ACPI_PIIX4
|
||||
bool
|
||||
depends on ACPI
|
||||
select ACPI
|
||||
select ACPI_SMBUS
|
||||
select APM
|
||||
|
||||
config ACPI_PCIHP
|
||||
bool
|
||||
|
|
|
@ -2030,7 +2030,7 @@ void build_pptt(GArray *table_data, BIOSLinker *linker, MachineState *ms,
|
|||
0, socket_id, NULL, 0);
|
||||
}
|
||||
|
||||
if (mc->smp_props.clusters_supported) {
|
||||
if (mc->smp_props.clusters_supported && mc->smp_props.has_clusters) {
|
||||
if (cpus->cpus[n].props.cluster_id != cluster_id) {
|
||||
assert(cpus->cpus[n].props.cluster_id > cluster_id);
|
||||
cluster_id = cpus->cpus[n].props.cluster_id;
|
||||
|
|
|
@ -52,6 +52,9 @@ static const MemoryRegionOps AcpiCpuHotplug_ops = {
|
|||
.endianness = DEVICE_LITTLE_ENDIAN,
|
||||
.valid = {
|
||||
.min_access_size = 1,
|
||||
.max_access_size = 4,
|
||||
},
|
||||
.impl = {
|
||||
.max_access_size = 1,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include "hw/qdev-core.h"
|
||||
#include "exec/memory.h"
|
||||
#include "qom/object.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "qom/object_interfaces.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "migration/vmstate.h"
|
||||
|
|
|
@ -22,7 +22,7 @@ acpi_ss.add(when: 'CONFIG_ACPI_PIIX4', if_true: files('piix4.c'))
|
|||
acpi_ss.add(when: 'CONFIG_ACPI_PCIHP', if_true: files('pcihp.c'))
|
||||
acpi_ss.add(when: 'CONFIG_ACPI_PCIHP', if_false: files('acpi-pci-hotplug-stub.c'))
|
||||
acpi_ss.add(when: 'CONFIG_ACPI_VIOT', if_true: files('viot.c'))
|
||||
acpi_ss.add(when: 'CONFIG_ACPI_X86_ICH', if_true: files('ich9.c', 'ich9_tco.c'))
|
||||
acpi_ss.add(when: 'CONFIG_ACPI_ICH9', if_true: files('ich9.c', 'ich9_tco.c'))
|
||||
acpi_ss.add(when: 'CONFIG_ACPI_ERST', if_true: files('erst.c'))
|
||||
acpi_ss.add(when: 'CONFIG_IPMI', if_true: files('ipmi.c'), if_false: files('ipmi-stub.c'))
|
||||
acpi_ss.add(when: 'CONFIG_PC', if_false: files('acpi-x86-stub.c'))
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
#include "target/alpha/cpu-qom.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
#include "hw/boards.h"
|
||||
#include "hw/intc/i8259.h"
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
#include "alpha_sys.h"
|
||||
#include "qemu/log.h"
|
||||
#include "trace.h"
|
||||
|
|
|
@ -10,10 +10,10 @@
|
|||
#include "qemu/module.h"
|
||||
#include "qemu/units.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
#include "cpu.h"
|
||||
#include "hw/irq.h"
|
||||
#include "alpha_sys.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
|
||||
#define TYPE_TYPHOON_PCI_HOST_BRIDGE "typhoon-pcihost"
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include "qemu/osdep.h"
|
||||
#include "hw/audio/soundhw.h"
|
||||
#include "audio/audio.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "qemu/module.h"
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#include "qemu/osdep.h"
|
||||
#include "hw/audio/soundhw.h"
|
||||
#include "audio/audio.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "qemu/module.h"
|
||||
#include "sysemu/dma.h"
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/isa/vt82c686.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
|
||||
static void via_ac97_realize(PCIDevice *pci_dev, Error **errp)
|
||||
{
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "qapi/error.h"
|
||||
#include "hw/char/serial.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/qdev-properties-system.h"
|
||||
#include "migration/vmstate.h"
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#include "qemu/module.h"
|
||||
#include "hw/char/serial.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "qom/object.h"
|
||||
|
|
|
@ -158,6 +158,8 @@ void machine_parse_smp_config(MachineState *ms,
|
|||
ms->smp.threads = threads;
|
||||
ms->smp.max_cpus = maxcpus;
|
||||
|
||||
mc->smp_props.has_clusters = config->has_clusters;
|
||||
|
||||
/* sanity-check of the computed topology */
|
||||
if (sockets * dies * clusters * cores * threads != maxcpus) {
|
||||
g_autofree char *topo_msg = cpu_hierarchy_to_string(ms);
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include "sysemu/blockdev.h"
|
||||
#include "net/net.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pcie.h"
|
||||
#include "util/block-helpers.h"
|
||||
|
||||
static bool check_prop_still_unset(Object *obj, const char *name,
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#define ATI_INT_H
|
||||
|
||||
#include "qemu/timer.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/i2c/bitbang_i2c.h"
|
||||
#include "vga_int.h"
|
||||
#include "qom/object.h"
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include "qemu/osdep.h"
|
||||
#include "qemu/module.h"
|
||||
#include "qemu/units.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/display/bochs-vbe.h"
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
#include "sysemu/reset.h"
|
||||
#include "qapi/error.h"
|
||||
#include "trace.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "ui/pixel_ops.h"
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
#ifndef HW_QXL_H
|
||||
#define HW_QXL_H
|
||||
|
||||
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "vga_int.h"
|
||||
#include "qemu/thread.h"
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include "ui/console.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/i2c/i2c.h"
|
||||
#include "hw/display/i2c-ddc.h"
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "vga_int.h"
|
||||
|
|
|
@ -486,6 +486,15 @@ vhost_user_gpu_guest_notifier_pending(VirtIODevice *vdev, int idx)
|
|||
{
|
||||
VhostUserGPU *g = VHOST_USER_GPU(vdev);
|
||||
|
||||
/*
|
||||
* Add the check for configure interrupt, Use VIRTIO_CONFIG_IRQ_IDX -1
|
||||
* as the Marco of configure interrupt's IDX, If this driver does not
|
||||
* support, the function will return
|
||||
*/
|
||||
|
||||
if (idx == VIRTIO_CONFIG_IRQ_IDX) {
|
||||
return false;
|
||||
}
|
||||
return vhost_virtqueue_pending(&g->vhost->dev, idx);
|
||||
}
|
||||
|
||||
|
@ -494,6 +503,15 @@ vhost_user_gpu_guest_notifier_mask(VirtIODevice *vdev, int idx, bool mask)
|
|||
{
|
||||
VhostUserGPU *g = VHOST_USER_GPU(vdev);
|
||||
|
||||
/*
|
||||
* Add the check for configure interrupt, Use VIRTIO_CONFIG_IRQ_IDX -1
|
||||
* as the Marco of configure interrupt's IDX, If this driver does not
|
||||
* support, the function will return
|
||||
*/
|
||||
|
||||
if (idx == VIRTIO_CONFIG_IRQ_IDX) {
|
||||
return;
|
||||
}
|
||||
vhost_virtqueue_mask(&g->vhost->dev, vdev, idx, mask);
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#include "qemu/log.h"
|
||||
#include "hw/loader.h"
|
||||
#include "trace.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "qom/object.h"
|
||||
|
|
|
@ -2,7 +2,7 @@ i2c_ss = ss.source_set()
|
|||
i2c_ss.add(when: 'CONFIG_I2C', if_true: files('core.c'))
|
||||
i2c_ss.add(when: 'CONFIG_SMBUS', if_true: files('smbus_slave.c', 'smbus_master.c'))
|
||||
i2c_ss.add(when: 'CONFIG_ACPI_SMBUS', if_true: files('pm_smbus.c'))
|
||||
i2c_ss.add(when: 'CONFIG_ACPI_X86_ICH', if_true: files('smbus_ich9.c'))
|
||||
i2c_ss.add(when: 'CONFIG_ACPI_ICH9', if_true: files('smbus_ich9.c'))
|
||||
i2c_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files('aspeed_i2c.c'))
|
||||
i2c_ss.add(when: 'CONFIG_BITBANG_I2C', if_true: files('bitbang_i2c.c'))
|
||||
i2c_ss.add(when: 'CONFIG_EXYNOS4', if_true: files('exynos4210_i2c.c'))
|
||||
|
|
|
@ -51,7 +51,6 @@ config PC_PCI
|
|||
bool
|
||||
select APIC
|
||||
select IOAPIC
|
||||
select APM
|
||||
select PC
|
||||
|
||||
config PC_ACPI
|
||||
|
@ -69,9 +68,9 @@ config I440FX
|
|||
imply E1000_PCI
|
||||
imply VMPORT
|
||||
imply VMMOUSE
|
||||
select ACPI_PIIX4
|
||||
select PC_PCI
|
||||
select PC_ACPI
|
||||
select ACPI_SMBUS
|
||||
select PCI_I440FX
|
||||
select PIIX3
|
||||
select IDE_PIIX
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#include "acpi-common.h"
|
||||
#include "qemu/bitmap.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_bridge.h"
|
||||
#include "hw/cxl/cxl.h"
|
||||
#include "hw/core/cpu.h"
|
||||
#include "target/i386/cpu.h"
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/module.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "trace.h"
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
#include "hw/ide/ahci.h"
|
||||
#include "hw/ide/internal.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
|
||||
#define AHCI_MEM_BAR_SIZE 0x1000
|
||||
#define AHCI_MAX_PORTS 32
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "qemu/units.h"
|
||||
#include "hw/ipack/ipack.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "qemu/bitops.h"
|
||||
#include "qemu/module.h"
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#include "migration/vmstate.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/ipmi/ipmi_bt.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
#define TYPE_PCI_IPMI_BT "pci-ipmi-bt"
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#include "migration/vmstate.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/ipmi/ipmi_kcs.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
#define TYPE_PCI_IPMI_KCS "pci-ipmi-kcs"
|
||||
|
|
|
@ -52,6 +52,7 @@ config PIIX4
|
|||
config VT82C686
|
||||
bool
|
||||
select ISA_SUPERIO
|
||||
select ACPI
|
||||
select ACPI_SMBUS
|
||||
select SERIAL_ISA
|
||||
select FDC_ISA
|
||||
|
@ -77,5 +78,4 @@ config LPC_ICH9
|
|||
# for ICH9.
|
||||
select I8257
|
||||
select ISA_BUS
|
||||
select ACPI_SMBUS
|
||||
select ACPI_X86_ICH
|
||||
select ACPI_ICH9
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/intc/i8259.h"
|
||||
#include "hw/timer/i8254.h"
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#include "qapi/error.h"
|
||||
#include "qemu/units.h"
|
||||
#include "qemu/log.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/intc/i8259.h"
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "qemu/event_notifier.h"
|
||||
#include "qemu/module.h"
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include "migration/vmstate.h"
|
||||
#include "hw/misc/pvpanic.h"
|
||||
#include "qom/object.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "standard-headers/linux/pvpanic.h"
|
||||
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(PVPanicPCIState, PVPANIC_PCI_DEVICE)
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#include "qapi/error.h"
|
||||
#include "chardev/char.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "net/can_emu.h"
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#include "qapi/error.h"
|
||||
#include "chardev/char.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "net/can_emu.h"
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#include "qapi/error.h"
|
||||
#include "chardev/char.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "net/can_emu.h"
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#include "qapi/error.h"
|
||||
#include "chardev/char.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "net/can_emu.h"
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "net/eth.h"
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/units.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "net/net.h"
|
||||
|
||||
#include "e1000x_common.h"
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/units.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "net/net.h"
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "ne2000.h"
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "net/checksum.h"
|
||||
#include "net/tap.h"
|
||||
#include "net/net.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
|
||||
enum {
|
||||
NET_TX_PKT_VHDR_FRAG = 0,
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "net/net.h"
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/qdev-properties-system.h"
|
||||
#include "migration/vmstate.h"
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
#include "qemu/osdep.h"
|
||||
#include "net/net.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
|
||||
#include "rocker.h"
|
||||
#include "rocker_hw.h"
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
#include "qemu/osdep.h"
|
||||
#include <zlib.h>
|
||||
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "sysemu/dma.h"
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "qemu/log.h"
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/net/mii.h"
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
#include "qemu/osdep.h"
|
||||
#include "qemu/log.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/nvram/eeprom93xx.h"
|
||||
#include "migration/vmstate.h"
|
||||
|
|
|
@ -82,6 +82,15 @@ void vhost_net_virtqueue_mask(VHostNetState *net, VirtIODevice *dev,
|
|||
{
|
||||
}
|
||||
|
||||
bool vhost_net_config_pending(VHostNetState *net)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void vhost_net_config_mask(VHostNetState *net, VirtIODevice *dev, bool mask)
|
||||
{
|
||||
}
|
||||
|
||||
int vhost_net_notify_migration_done(struct vhost_net *net, char* mac_addr)
|
||||
{
|
||||
return -1;
|
||||
|
@ -113,3 +122,8 @@ int vhost_net_virtqueue_restart(VirtIODevice *vdev, NetClientState *nc,
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void vhost_net_save_acked_features(NetClientState *nc)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
@ -144,6 +144,15 @@ uint64_t vhost_net_get_acked_features(VHostNetState *net)
|
|||
return net->dev.acked_features;
|
||||
}
|
||||
|
||||
void vhost_net_save_acked_features(NetClientState *nc)
|
||||
{
|
||||
#ifdef CONFIG_VHOST_NET_USER
|
||||
if (nc->info->type == NET_CLIENT_DRIVER_VHOST_USER) {
|
||||
vhost_user_save_acked_features(nc);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static int vhost_net_get_fd(NetClientState *backend)
|
||||
{
|
||||
switch (backend->info->type) {
|
||||
|
@ -478,6 +487,15 @@ void vhost_net_virtqueue_mask(VHostNetState *net, VirtIODevice *dev,
|
|||
vhost_virtqueue_mask(&net->dev, dev, idx, mask);
|
||||
}
|
||||
|
||||
bool vhost_net_config_pending(VHostNetState *net)
|
||||
{
|
||||
return vhost_config_pending(&net->dev);
|
||||
}
|
||||
|
||||
void vhost_net_config_mask(VHostNetState *net, VirtIODevice *dev, bool mask)
|
||||
{
|
||||
vhost_config_mask(&net->dev, dev, mask);
|
||||
}
|
||||
VHostNetState *get_vhost_net(NetClientState *nc)
|
||||
{
|
||||
VHostNetState *vhost_net = 0;
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
#include "sysemu/sysemu.h"
|
||||
#include "trace.h"
|
||||
#include "monitor/qdev.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "net_rx_pkt.h"
|
||||
#include "hw/virtio/vhost.h"
|
||||
#include "sysemu/qtest.h"
|
||||
|
@ -168,20 +168,24 @@ static void virtio_net_get_config(VirtIODevice *vdev, uint8_t *config)
|
|||
if (nc->peer && nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_VDPA) {
|
||||
ret = vhost_net_get_config(get_vhost_net(nc->peer), (uint8_t *)&netcfg,
|
||||
n->config_size);
|
||||
if (ret != -1) {
|
||||
/*
|
||||
* Some NIC/kernel combinations present 0 as the mac address. As
|
||||
* that is not a legal address, try to proceed with the
|
||||
* address from the QEMU command line in the hope that the
|
||||
* address has been configured correctly elsewhere - just not
|
||||
* reported by the device.
|
||||
*/
|
||||
if (memcmp(&netcfg.mac, &zero, sizeof(zero)) == 0) {
|
||||
info_report("Zero hardware mac address detected. Ignoring.");
|
||||
memcpy(netcfg.mac, n->mac, ETH_ALEN);
|
||||
}
|
||||
memcpy(config, &netcfg, n->config_size);
|
||||
if (ret == -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Some NIC/kernel combinations present 0 as the mac address. As that
|
||||
* is not a legal address, try to proceed with the address from the
|
||||
* QEMU command line in the hope that the address has been configured
|
||||
* correctly elsewhere - just not reported by the device.
|
||||
*/
|
||||
if (memcmp(&netcfg.mac, &zero, sizeof(zero)) == 0) {
|
||||
info_report("Zero hardware mac address detected. Ignoring.");
|
||||
memcpy(netcfg.mac, n->mac, ETH_ALEN);
|
||||
}
|
||||
|
||||
netcfg.status |= virtio_tswap16(vdev,
|
||||
n->status & VIRTIO_NET_S_ANNOUNCE);
|
||||
memcpy(config, &netcfg, n->config_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -980,6 +984,12 @@ static void virtio_net_set_features(VirtIODevice *vdev, uint64_t features)
|
|||
continue;
|
||||
}
|
||||
vhost_net_ack_features(get_vhost_net(nc->peer), features);
|
||||
|
||||
/*
|
||||
* keep acked_features in NetVhostUserState up-to-date so it
|
||||
* can't miss any features configured by guest virtio driver.
|
||||
*/
|
||||
vhost_net_save_acked_features(nc->peer);
|
||||
}
|
||||
|
||||
if (virtio_has_feature(features, VIRTIO_NET_F_CTRL_VLAN)) {
|
||||
|
@ -3315,6 +3325,15 @@ static bool virtio_net_guest_notifier_pending(VirtIODevice *vdev, int idx)
|
|||
} else {
|
||||
nc = qemu_get_subqueue(n->nic, vq2q(idx));
|
||||
}
|
||||
/*
|
||||
* Add the check for configure interrupt, Use VIRTIO_CONFIG_IRQ_IDX -1
|
||||
* as the Marco of configure interrupt's IDX, If this driver does not
|
||||
* support, the function will return false
|
||||
*/
|
||||
|
||||
if (idx == VIRTIO_CONFIG_IRQ_IDX) {
|
||||
return vhost_net_config_pending(get_vhost_net(nc->peer));
|
||||
}
|
||||
return vhost_net_virtqueue_pending(get_vhost_net(nc->peer), idx);
|
||||
}
|
||||
|
||||
|
@ -3338,8 +3357,17 @@ static void virtio_net_guest_notifier_mask(VirtIODevice *vdev, int idx,
|
|||
} else {
|
||||
nc = qemu_get_subqueue(n->nic, vq2q(idx));
|
||||
}
|
||||
vhost_net_virtqueue_mask(get_vhost_net(nc->peer),
|
||||
vdev, idx, mask);
|
||||
/*
|
||||
*Add the check for configure interrupt, Use VIRTIO_CONFIG_IRQ_IDX -1
|
||||
* as the Marco of configure interrupt's IDX, If this driver does not
|
||||
* support, the function will return
|
||||
*/
|
||||
|
||||
if (idx == VIRTIO_CONFIG_IRQ_IDX) {
|
||||
vhost_net_config_mask(get_vhost_net(nc->peer), vdev, mask);
|
||||
return;
|
||||
}
|
||||
vhost_net_virtqueue_mask(get_vhost_net(nc->peer), vdev, idx, mask);
|
||||
}
|
||||
|
||||
static void virtio_net_set_config_size(VirtIONet *n, uint64_t host_features)
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
#include "net/net.h"
|
||||
#include "hw/net/vmxnet3.h"
|
||||
#include "qom/object.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
|
||||
#define TYPE_VMXNET3 "vmxnet3"
|
||||
typedef struct VMXNET3State VMXNET3State;
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#define HW_NVME_NVME_H
|
||||
|
||||
#include "qemu/uuid.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/block/block.h"
|
||||
|
||||
#include "block/nvme.h"
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_bridge.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "qemu/module.h"
|
||||
#include "hw/i386/ich9.h"
|
||||
|
|
|
@ -50,7 +50,6 @@ struct PXBBus {
|
|||
};
|
||||
|
||||
#define TYPE_PXB_DEVICE "pxb"
|
||||
typedef struct PXBDev PXBDev;
|
||||
DECLARE_INSTANCE_CHECKER(PXBDev, PXB_DEV,
|
||||
TYPE_PXB_DEVICE)
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
#include "qemu/units.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/mips/mips.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include "qemu/units.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/pci/pci_bus.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/pci-host/dino.h"
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/irq.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/module.h"
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include "qapi/error.h"
|
||||
#include "hw/hw.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/intc/i8259.h"
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include "hw/ppc/e500-ccsr.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
#include "qemu/bswap.h"
|
||||
#include "qemu/module.h"
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
#include "qemu/units.h"
|
||||
#include "qemu/log.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/pci/pci_bus.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#include "hw/sysbus.h"
|
||||
#include "hw/sh4/sh.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
#include "qemu/bswap.h"
|
||||
#include "qemu/module.h"
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#include "hw/irq.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "qemu/module.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
#include "hw/pci-host/uninorth.h"
|
||||
#include "trace.h"
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "hw/sysbus.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/pci/pci_bus.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "monitor/hmp.h"
|
||||
#include "monitor/monitor.h"
|
||||
#include "pci-internal.h"
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/pci/pcie_host.h"
|
||||
#include "qemu/module.h"
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/pci/pcie.h"
|
||||
#include "hw/pci/pci_bus.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/slotid_cap.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/error.h"
|
||||
|
||||
|
|
|
@ -76,8 +76,6 @@ config PEGASOS2
|
|||
select VT82C686
|
||||
select SMBUS_EEPROM
|
||||
select VOF
|
||||
# This should come with VT82C686
|
||||
select ACPI_X86
|
||||
|
||||
config PREP
|
||||
bool
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#include "hw/irq.h"
|
||||
#include "hw/ppc/ppc.h"
|
||||
#include "hw/ppc/ppc4xx.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
#include "trace.h"
|
||||
#include "qom/object.h"
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#include "migration/vmstate.h"
|
||||
#include "qemu/module.h"
|
||||
#include "sysemu/reset.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/pci/pci_host.h"
|
||||
#include "trace.h"
|
||||
#include "qom/object.h"
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "hw/ppc/spapr.h"
|
||||
#include "hw/pci-host/spapr.h"
|
||||
#include "hw/pci/msix.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/vfio/vfio.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "trace.h"
|
||||
#include "rdma_utils.h"
|
||||
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
#define RDMA_UTILS_H
|
||||
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "sysemu/dma.h"
|
||||
|
||||
#define rdma_error_report(fmt, ...) \
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
|
||||
#include "qemu/units.h"
|
||||
#include "qemu/notify.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/msix.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "chardev/char-fe.h"
|
||||
#include "hw/net/vmxnet3_defs.h"
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include "exec/memory-internal.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "sysemu/hw_accel.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/s390x/s390-pci-inst.h"
|
||||
#include "hw/s390x/s390-pci-bus.h"
|
||||
#include "hw/s390x/s390-pci-kvm.h"
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/nvram/eeprom93xx.h"
|
||||
#include "hw/scsi/esp.h"
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include "qemu/osdep.h"
|
||||
|
||||
#include "hw/irq.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/scsi/scsi.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "sysemu/dma.h"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#define MPTSAS_H
|
||||
|
||||
#include "mpi.h"
|
||||
#include "qom/object.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
|
||||
#define MPTSAS_NUM_PORTS 8
|
||||
#define MPTSAS_MAX_FRAMES 2048 /* Firmware limit at 65535 */
|
||||
|
|
|
@ -113,6 +113,7 @@ void vhost_scsi_common_stop(VHostSCSICommon *vsc)
|
|||
|
||||
if (vsc->inflight) {
|
||||
vhost_dev_free_inflight(vsc->inflight);
|
||||
g_free(vsc->inflight);
|
||||
vsc->inflight = NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "qemu/iov.h"
|
||||
#include "qemu/module.h"
|
||||
#include "sysemu/block-backend.h"
|
||||
#include "sysemu/dma.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/scsi/scsi.h"
|
||||
#include "scsi/constants.h"
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "hw/loader.h"
|
||||
#include "hw/boards.h"
|
||||
#include "hw/pci/pci_bus.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "smbios_build.h"
|
||||
|
||||
/* legacy structures and constants for <= 2.0 machines */
|
||||
|
|
|
@ -21,9 +21,8 @@
|
|||
#include "qemu/timer.h"
|
||||
#include "hw/usb.h"
|
||||
#include "sysemu/dma.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
#ifndef EHCI_DEBUG
|
||||
#define EHCI_DEBUG 0
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include "qemu/timer.h"
|
||||
#include "hw/usb.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/qdev-dma.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
#include "exec/memory.h"
|
||||
#include "qemu/timer.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/usb.h"
|
||||
|
||||
typedef struct UHCIQueue UHCIQueue;
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#ifndef HW_USB_HCD_XHCI_PCI_H
|
||||
#define HW_USB_HCD_XHCI_PCI_H
|
||||
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/usb.h"
|
||||
#include "hcd-xhci.h"
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#define HW_VFIO_VFIO_PCI_H
|
||||
|
||||
#include "exec/memory.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_device.h"
|
||||
#include "hw/vfio/vfio-common.h"
|
||||
#include "qemu/event_notifier.h"
|
||||
#include "qemu/queue.h"
|
||||
|
|
|
@ -62,6 +62,7 @@ vhost_vdpa_get_features(void *dev, uint64_t features) "dev: %p features: 0x%"PRI
|
|||
vhost_vdpa_set_owner(void *dev) "dev: %p"
|
||||
vhost_vdpa_vq_get_addr(void *dev, void *vq, uint64_t desc_user_addr, uint64_t avail_user_addr, uint64_t used_user_addr) "dev: %p vq: %p desc_user_addr: 0x%"PRIx64" avail_user_addr: 0x%"PRIx64" used_user_addr: 0x%"PRIx64
|
||||
vhost_vdpa_get_iova_range(void *dev, uint64_t first, uint64_t last) "dev: %p first: 0x%"PRIx64" last: 0x%"PRIx64
|
||||
vhost_vdpa_set_config_call(void *dev, int fd)"dev: %p fd: %d"
|
||||
|
||||
# virtio.c
|
||||
virtqueue_alloc_element(void *elem, size_t sz, unsigned in_num, unsigned out_num) "elem %p size %zd in_num %u out_num %u"
|
||||
|
|
|
@ -53,6 +53,7 @@ static void vhost_vdpa_device_realize(DeviceState *dev, Error **errp)
|
|||
{
|
||||
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
||||
VhostVdpaDevice *v = VHOST_VDPA_DEVICE(vdev);
|
||||
struct vhost_vdpa_iova_range iova_range;
|
||||
uint16_t max_queue_size;
|
||||
struct vhost_virtqueue *vqs;
|
||||
int i, ret;
|
||||
|
@ -108,6 +109,14 @@ static void vhost_vdpa_device_realize(DeviceState *dev, Error **errp)
|
|||
v->dev.backend_features = 0;
|
||||
v->started = false;
|
||||
|
||||
ret = vhost_vdpa_get_iova_range(v->vhostfd, &iova_range);
|
||||
if (ret < 0) {
|
||||
error_setg(errp, "vhost-vdpa-device: get iova range failed: %s",
|
||||
strerror(-ret));
|
||||
goto free_vqs;
|
||||
}
|
||||
v->vdpa.iova_range = iova_range;
|
||||
|
||||
ret = vhost_dev_init(&v->dev, &v->vdpa, VHOST_BACKEND_TYPE_VDPA, 0, NULL);
|
||||
if (ret < 0) {
|
||||
error_setg(errp, "vhost-vdpa-device: vhost initialization failed: %s",
|
||||
|
|
|
@ -159,6 +159,15 @@ static void vuf_guest_notifier_mask(VirtIODevice *vdev, int idx,
|
|||
{
|
||||
VHostUserFS *fs = VHOST_USER_FS(vdev);
|
||||
|
||||
/*
|
||||
* Add the check for configure interrupt, Use VIRTIO_CONFIG_IRQ_IDX -1
|
||||
* as the Marco of configure interrupt's IDX, If this driver does not
|
||||
* support, the function will return
|
||||
*/
|
||||
|
||||
if (idx == VIRTIO_CONFIG_IRQ_IDX) {
|
||||
return;
|
||||
}
|
||||
vhost_virtqueue_mask(&fs->vhost_dev, vdev, idx, mask);
|
||||
}
|
||||
|
||||
|
@ -166,6 +175,15 @@ static bool vuf_guest_notifier_pending(VirtIODevice *vdev, int idx)
|
|||
{
|
||||
VHostUserFS *fs = VHOST_USER_FS(vdev);
|
||||
|
||||
/*
|
||||
* Add the check for configure interrupt, Use VIRTIO_CONFIG_IRQ_IDX -1
|
||||
* as the Marco of configure interrupt's IDX, If this driver does not
|
||||
* support, the function will return
|
||||
*/
|
||||
|
||||
if (idx == VIRTIO_CONFIG_IRQ_IDX) {
|
||||
return false;
|
||||
}
|
||||
return vhost_virtqueue_pending(&fs->vhost_dev, idx);
|
||||
}
|
||||
|
||||
|
|
|
@ -191,6 +191,16 @@ static void vu_gpio_guest_notifier_mask(VirtIODevice *vdev, int idx, bool mask)
|
|||
{
|
||||
VHostUserGPIO *gpio = VHOST_USER_GPIO(vdev);
|
||||
|
||||
/*
|
||||
* Add the check for configure interrupt, Use VIRTIO_CONFIG_IRQ_IDX -1
|
||||
* as the Marco of configure interrupt's IDX, If this driver does not
|
||||
* support, the function will return
|
||||
*/
|
||||
|
||||
if (idx == VIRTIO_CONFIG_IRQ_IDX) {
|
||||
return;
|
||||
}
|
||||
|
||||
vhost_virtqueue_mask(&gpio->vhost_dev, vdev, idx, mask);
|
||||
}
|
||||
|
||||
|
|
|
@ -378,6 +378,13 @@ static int vhost_vdpa_add_status(struct vhost_dev *dev, uint8_t status)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int vhost_vdpa_get_iova_range(int fd, struct vhost_vdpa_iova_range *iova_range)
|
||||
{
|
||||
int ret = ioctl(fd, VHOST_VDPA_GET_IOVA_RANGE, iova_range);
|
||||
|
||||
return ret < 0 ? -errno : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* The use of this function is for requests that only need to be
|
||||
* applied once. Typically such request occurs at the beginning
|
||||
|
@ -512,9 +519,18 @@ static void vhost_vdpa_host_notifiers_uninit(struct vhost_dev *dev, int n)
|
|||
{
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Pack all the changes to the memory regions in a single
|
||||
* transaction to avoid a few updating of the address space
|
||||
* topology.
|
||||
*/
|
||||
memory_region_transaction_begin();
|
||||
|
||||
for (i = dev->vq_index; i < dev->vq_index + n; i++) {
|
||||
vhost_vdpa_host_notifier_uninit(dev, i);
|
||||
}
|
||||
|
||||
memory_region_transaction_commit();
|
||||
}
|
||||
|
||||
static void vhost_vdpa_host_notifiers_init(struct vhost_dev *dev)
|
||||
|
@ -527,17 +543,21 @@ static void vhost_vdpa_host_notifiers_init(struct vhost_dev *dev)
|
|||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Pack all the changes to the memory regions in a single
|
||||
* transaction to avoid a few updating of the address space
|
||||
* topology.
|
||||
*/
|
||||
memory_region_transaction_begin();
|
||||
|
||||
for (i = dev->vq_index; i < dev->vq_index + dev->nvqs; i++) {
|
||||
if (vhost_vdpa_host_notifier_init(dev, i)) {
|
||||
goto err;
|
||||
vhost_vdpa_host_notifiers_uninit(dev, i - dev->vq_index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
err:
|
||||
vhost_vdpa_host_notifiers_uninit(dev, i - dev->vq_index);
|
||||
return;
|
||||
memory_region_transaction_commit();
|
||||
}
|
||||
|
||||
static void vhost_vdpa_svq_cleanup(struct vhost_dev *dev)
|
||||
|
@ -716,6 +736,13 @@ static int vhost_vdpa_set_vring_ready(struct vhost_dev *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int vhost_vdpa_set_config_call(struct vhost_dev *dev,
|
||||
int fd)
|
||||
{
|
||||
trace_vhost_vdpa_set_config_call(dev, fd);
|
||||
return vhost_vdpa_call(dev, VHOST_VDPA_SET_CONFIG_CALL, &fd);
|
||||
}
|
||||
|
||||
static void vhost_vdpa_dump_config(struct vhost_dev *dev, const uint8_t *config,
|
||||
uint32_t config_len)
|
||||
{
|
||||
|
@ -1298,4 +1325,5 @@ const VhostOps vdpa_ops = {
|
|||
.vhost_get_device_id = vhost_vdpa_get_device_id,
|
||||
.vhost_vq_get_addr = vhost_vdpa_vq_get_addr,
|
||||
.vhost_force_iommu = vhost_vdpa_force_iommu,
|
||||
.vhost_set_config_call = vhost_vdpa_set_config_call,
|
||||
};
|
||||
|
|
|
@ -127,6 +127,15 @@ static void vhost_vsock_common_guest_notifier_mask(VirtIODevice *vdev, int idx,
|
|||
{
|
||||
VHostVSockCommon *vvc = VHOST_VSOCK_COMMON(vdev);
|
||||
|
||||
/*
|
||||
* Add the check for configure interrupt, Use VIRTIO_CONFIG_IRQ_IDX -1
|
||||
* as the Marco of configure interrupt's IDX, If this driver does not
|
||||
* support, the function will return
|
||||
*/
|
||||
|
||||
if (idx == VIRTIO_CONFIG_IRQ_IDX) {
|
||||
return;
|
||||
}
|
||||
vhost_virtqueue_mask(&vvc->vhost_dev, vdev, idx, mask);
|
||||
}
|
||||
|
||||
|
@ -135,6 +144,15 @@ static bool vhost_vsock_common_guest_notifier_pending(VirtIODevice *vdev,
|
|||
{
|
||||
VHostVSockCommon *vvc = VHOST_VSOCK_COMMON(vdev);
|
||||
|
||||
/*
|
||||
* Add the check for configure interrupt, Use VIRTIO_CONFIG_IRQ_IDX -1
|
||||
* as the Marco of configure interrupt's IDX, If this driver does not
|
||||
* support, the function will return
|
||||
*/
|
||||
|
||||
if (idx == VIRTIO_CONFIG_IRQ_IDX) {
|
||||
return false;
|
||||
}
|
||||
return vhost_virtqueue_pending(&vvc->vhost_dev, idx);
|
||||
}
|
||||
|
||||
|
|
|
@ -1551,7 +1551,7 @@ void vhost_dev_cleanup(struct vhost_dev *hdev)
|
|||
int vhost_dev_enable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev)
|
||||
{
|
||||
BusState *qbus = BUS(qdev_get_parent_bus(DEVICE(vdev)));
|
||||
int i, r, e;
|
||||
int i, r;
|
||||
|
||||
/* We will pass the notifiers to the kernel, make sure that QEMU
|
||||
* doesn't interfere.
|
||||
|
@ -1559,32 +1559,29 @@ int vhost_dev_enable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev)
|
|||
r = virtio_device_grab_ioeventfd(vdev);
|
||||
if (r < 0) {
|
||||
error_report("binding does not support host notifiers");
|
||||
goto fail;
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* Batch all the host notifiers in a single transaction to avoid
|
||||
* quadratic time complexity in address_space_update_ioeventfds().
|
||||
*/
|
||||
memory_region_transaction_begin();
|
||||
|
||||
for (i = 0; i < hdev->nvqs; ++i) {
|
||||
r = virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), hdev->vq_index + i,
|
||||
true);
|
||||
if (r < 0) {
|
||||
error_report("vhost VQ %d notifier binding failed: %d", i, -r);
|
||||
goto fail_vq;
|
||||
memory_region_transaction_commit();
|
||||
vhost_dev_disable_notifiers(hdev, vdev);
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
memory_region_transaction_commit();
|
||||
|
||||
return 0;
|
||||
fail_vq:
|
||||
while (--i >= 0) {
|
||||
e = virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), hdev->vq_index + i,
|
||||
false);
|
||||
if (e < 0) {
|
||||
error_report("vhost VQ %d notifier cleanup error: %d", i, -r);
|
||||
}
|
||||
assert (e >= 0);
|
||||
virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), hdev->vq_index + i);
|
||||
}
|
||||
virtio_device_release_ioeventfd(vdev);
|
||||
fail:
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Stop processing guest IO notifications in vhost.
|
||||
|
@ -1597,6 +1594,12 @@ void vhost_dev_disable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev)
|
|||
BusState *qbus = BUS(qdev_get_parent_bus(DEVICE(vdev)));
|
||||
int i, r;
|
||||
|
||||
/*
|
||||
* Batch all the host notifiers in a single transaction to avoid
|
||||
* quadratic time complexity in address_space_update_ioeventfds().
|
||||
*/
|
||||
memory_region_transaction_begin();
|
||||
|
||||
for (i = 0; i < hdev->nvqs; ++i) {
|
||||
r = virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), hdev->vq_index + i,
|
||||
false);
|
||||
|
@ -1604,6 +1607,15 @@ void vhost_dev_disable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev)
|
|||
error_report("vhost VQ %d notifier cleanup failed: %d", i, -r);
|
||||
}
|
||||
assert (r >= 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* The transaction expects the ioeventfds to be open when it
|
||||
* commits. Do it now, before the cleanup loop.
|
||||
*/
|
||||
memory_region_transaction_commit();
|
||||
|
||||
for (i = 0; i < hdev->nvqs; ++i) {
|
||||
virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), hdev->vq_index + i);
|
||||
}
|
||||
virtio_device_release_ioeventfd(vdev);
|
||||
|
@ -1640,7 +1652,68 @@ void vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n,
|
|||
file.index = hdev->vhost_ops->vhost_get_vq_index(hdev, n);
|
||||
r = hdev->vhost_ops->vhost_set_vring_call(hdev, &file);
|
||||
if (r < 0) {
|
||||
VHOST_OPS_DEBUG(r, "vhost_set_vring_call failed");
|
||||
error_report("vhost_set_vring_call failed %d", -r);
|
||||
}
|
||||
}
|
||||
|
||||
bool vhost_config_pending(struct vhost_dev *hdev)
|
||||
{
|
||||
assert(hdev->vhost_ops);
|
||||
if ((hdev->started == false) ||
|
||||
(hdev->vhost_ops->vhost_set_config_call == NULL)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
EventNotifier *notifier =
|
||||
&hdev->vqs[VHOST_QUEUE_NUM_CONFIG_INR].masked_config_notifier;
|
||||
return event_notifier_test_and_clear(notifier);
|
||||
}
|
||||
|
||||
void vhost_config_mask(struct vhost_dev *hdev, VirtIODevice *vdev, bool mask)
|
||||
{
|
||||
int fd;
|
||||
int r;
|
||||
EventNotifier *notifier =
|
||||
&hdev->vqs[VHOST_QUEUE_NUM_CONFIG_INR].masked_config_notifier;
|
||||
EventNotifier *config_notifier = &vdev->config_notifier;
|
||||
assert(hdev->vhost_ops);
|
||||
|
||||
if ((hdev->started == false) ||
|
||||
(hdev->vhost_ops->vhost_set_config_call == NULL)) {
|
||||
return;
|
||||
}
|
||||
if (mask) {
|
||||
assert(vdev->use_guest_notifier_mask);
|
||||
fd = event_notifier_get_fd(notifier);
|
||||
} else {
|
||||
fd = event_notifier_get_fd(config_notifier);
|
||||
}
|
||||
r = hdev->vhost_ops->vhost_set_config_call(hdev, fd);
|
||||
if (r < 0) {
|
||||
error_report("vhost_set_config_call failed %d", -r);
|
||||
}
|
||||
}
|
||||
|
||||
static void vhost_stop_config_intr(struct vhost_dev *dev)
|
||||
{
|
||||
int fd = -1;
|
||||
assert(dev->vhost_ops);
|
||||
if (dev->vhost_ops->vhost_set_config_call) {
|
||||
dev->vhost_ops->vhost_set_config_call(dev, fd);
|
||||
}
|
||||
}
|
||||
|
||||
static void vhost_start_config_intr(struct vhost_dev *dev)
|
||||
{
|
||||
int r;
|
||||
|
||||
assert(dev->vhost_ops);
|
||||
int fd = event_notifier_get_fd(&dev->vdev->config_notifier);
|
||||
if (dev->vhost_ops->vhost_set_config_call) {
|
||||
r = dev->vhost_ops->vhost_set_config_call(dev, fd);
|
||||
if (!r) {
|
||||
event_notifier_set(&dev->vdev->config_notifier);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1880,6 +1953,16 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev, bool vrings)
|
|||
}
|
||||
}
|
||||
|
||||
r = event_notifier_init(
|
||||
&hdev->vqs[VHOST_QUEUE_NUM_CONFIG_INR].masked_config_notifier, 0);
|
||||
if (r < 0) {
|
||||
return r;
|
||||
}
|
||||
event_notifier_test_and_clear(
|
||||
&hdev->vqs[VHOST_QUEUE_NUM_CONFIG_INR].masked_config_notifier);
|
||||
if (!vdev->use_guest_notifier_mask) {
|
||||
vhost_config_mask(hdev, vdev, true);
|
||||
}
|
||||
if (hdev->log_enabled) {
|
||||
uint64_t log_base;
|
||||
|
||||
|
@ -1918,6 +2001,7 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev, bool vrings)
|
|||
vhost_device_iotlb_miss(hdev, vq->used_phys, true);
|
||||
}
|
||||
}
|
||||
vhost_start_config_intr(hdev);
|
||||
return 0;
|
||||
fail_start:
|
||||
if (vrings) {
|
||||
|
@ -1947,6 +2031,9 @@ void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev, bool vrings)
|
|||
|
||||
/* should only be called after backend is connected */
|
||||
assert(hdev->vhost_ops);
|
||||
event_notifier_test_and_clear(
|
||||
&hdev->vqs[VHOST_QUEUE_NUM_CONFIG_INR].masked_config_notifier);
|
||||
event_notifier_test_and_clear(&vdev->config_notifier);
|
||||
|
||||
trace_vhost_dev_stop(hdev, vdev->name, vrings);
|
||||
|
||||
|
@ -1969,6 +2056,7 @@ void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev, bool vrings)
|
|||
}
|
||||
memory_listener_unregister(&hdev->iommu_listener);
|
||||
}
|
||||
vhost_stop_config_intr(hdev);
|
||||
vhost_log_put(hdev, true);
|
||||
hdev->started = false;
|
||||
vdev->vhost_started = false;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue