mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging
virtio, pc: fixes, features New virtio iommu. Unrealize memory leaks. In-band kick/call support. Bugfixes, documentation all over the place. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Thu 27 Feb 2020 08:46:33 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 * remotes/mst/tags/for_upstream: (30 commits) Fixed assert in vhost_user_set_mem_table_postcopy vhost-user: only set slave channel for first vq acpi: cpuhp: document CPHP_GET_CPU_ID_CMD command libvhost-user: implement in-band notifications docs: vhost-user: add in-band kick/call messages libvhost-user: handle NOFD flag in call/kick/err better libvhost-user-glib: use g_main_context_get_thread_default() libvhost-user-glib: fix VugDev main fd cleanup libvhost-user: implement VHOST_USER_PROTOCOL_F_REPLY_ACK MAINTAINERS: add virtio-iommu related files hw/arm/virt: Add the virtio-iommu device tree mappings virtio-iommu-pci: Add virtio iommu pci support virtio-iommu: Support migration virtio-iommu: Implement fault reporting virtio-iommu: Implement translate virtio-iommu: Implement map/unmap virtio-iommu: Implement attach/detach command virtio-iommu: Decode the command payload virtio-iommu: Add skeleton virtio: gracefully handle invalid region caches ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
@@ -125,8 +125,10 @@ typedef struct {
|
||||
bool virt;
|
||||
int32_t gic_version;
|
||||
VirtIOMMUType iommu;
|
||||
uint16_t virtio_iommu_bdf;
|
||||
struct arm_boot_info bootinfo;
|
||||
MemMapEntry *memmap;
|
||||
char *pciehb_nodename;
|
||||
const int *irqmap;
|
||||
int smp_cpus;
|
||||
void *fdt;
|
||||
|
||||
@@ -86,6 +86,7 @@ extern bool pci_available;
|
||||
#define PCI_DEVICE_ID_VIRTIO_9P 0x1009
|
||||
#define PCI_DEVICE_ID_VIRTIO_VSOCK 0x1012
|
||||
#define PCI_DEVICE_ID_VIRTIO_PMEM 0x1013
|
||||
#define PCI_DEVICE_ID_VIRTIO_IOMMU 0x1014
|
||||
|
||||
#define PCI_VENDOR_ID_REDHAT 0x1b36
|
||||
#define PCI_DEVICE_ID_REDHAT_BRIDGE 0x0001
|
||||
|
||||
@@ -36,7 +36,8 @@ typedef struct VHostUserBlk {
|
||||
struct vhost_dev dev;
|
||||
struct vhost_inflight *inflight;
|
||||
VhostUserState vhost_user;
|
||||
struct vhost_virtqueue *vqs;
|
||||
struct vhost_virtqueue *vhost_vqs;
|
||||
VirtQueue **virtqs;
|
||||
guint watch;
|
||||
bool connected;
|
||||
} VHostUserBlk;
|
||||
|
||||
@@ -37,6 +37,8 @@ typedef struct {
|
||||
struct vhost_virtqueue *vhost_vqs;
|
||||
struct vhost_dev vhost_dev;
|
||||
VhostUserState vhost_user;
|
||||
VirtQueue **req_vqs;
|
||||
VirtQueue *hiprio_vq;
|
||||
|
||||
/*< public >*/
|
||||
} VHostUserFS;
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* virtio-iommu device
|
||||
*
|
||||
* Copyright (c) 2020 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2 or later, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef QEMU_VIRTIO_IOMMU_H
|
||||
#define QEMU_VIRTIO_IOMMU_H
|
||||
|
||||
#include "standard-headers/linux/virtio_iommu.h"
|
||||
#include "hw/virtio/virtio.h"
|
||||
#include "hw/pci/pci.h"
|
||||
|
||||
#define TYPE_VIRTIO_IOMMU "virtio-iommu-device"
|
||||
#define TYPE_VIRTIO_IOMMU_PCI "virtio-iommu-device-base"
|
||||
#define VIRTIO_IOMMU(obj) \
|
||||
OBJECT_CHECK(VirtIOIOMMU, (obj), TYPE_VIRTIO_IOMMU)
|
||||
|
||||
#define TYPE_VIRTIO_IOMMU_MEMORY_REGION "virtio-iommu-memory-region"
|
||||
|
||||
typedef struct IOMMUDevice {
|
||||
void *viommu;
|
||||
PCIBus *bus;
|
||||
int devfn;
|
||||
IOMMUMemoryRegion iommu_mr;
|
||||
AddressSpace as;
|
||||
} IOMMUDevice;
|
||||
|
||||
typedef struct IOMMUPciBus {
|
||||
PCIBus *bus;
|
||||
IOMMUDevice *pbdev[0]; /* Parent array is sparse, so dynamically alloc */
|
||||
} IOMMUPciBus;
|
||||
|
||||
typedef struct VirtIOIOMMU {
|
||||
VirtIODevice parent_obj;
|
||||
VirtQueue *req_vq;
|
||||
VirtQueue *event_vq;
|
||||
struct virtio_iommu_config config;
|
||||
uint64_t features;
|
||||
GHashTable *as_by_busptr;
|
||||
IOMMUPciBus *iommu_pcibus_by_bus_num[PCI_BUS_MAX];
|
||||
PCIBus *primary_bus;
|
||||
GTree *domains;
|
||||
QemuMutex mutex;
|
||||
GTree *endpoints;
|
||||
} VirtIOIOMMU;
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user