IOHUB object is added to manage PCI IRQs. It uses KVM_IRQFD ioctl to create irqfd to injecting PCI interrupts to the guest. IOHUB object forwards the irqfd to the remote process. Remote process uses this fd to directly send interrupts to the guest, bypassing QEMU. Signed-off-by: John G Johnson <john.g.johnson@oracle.com> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-id: 51d5c3d54e28a68b002e3875c59599c9f5a424a1.1611938319.git.jag.raman@oracle.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
49 lines
1.1 KiB
C
49 lines
1.1 KiB
C
/*
|
|
* Copyright © 2018, 2021 Oracle and/or its affiliates.
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*
|
|
*/
|
|
|
|
#ifndef PROXY_H
|
|
#define PROXY_H
|
|
|
|
#include "hw/pci/pci.h"
|
|
#include "io/channel.h"
|
|
#include "hw/remote/proxy-memory-listener.h"
|
|
#include "qemu/event_notifier.h"
|
|
|
|
#define TYPE_PCI_PROXY_DEV "x-pci-proxy-dev"
|
|
OBJECT_DECLARE_SIMPLE_TYPE(PCIProxyDev, PCI_PROXY_DEV)
|
|
|
|
typedef struct ProxyMemoryRegion {
|
|
PCIProxyDev *dev;
|
|
MemoryRegion mr;
|
|
bool memory;
|
|
bool present;
|
|
uint8_t type;
|
|
} ProxyMemoryRegion;
|
|
|
|
struct PCIProxyDev {
|
|
PCIDevice parent_dev;
|
|
char *fd;
|
|
|
|
/*
|
|
* Mutex used to protect the QIOChannel fd from
|
|
* the concurrent access by the VCPUs since proxy
|
|
* blocks while awaiting for the replies from the
|
|
* process remote.
|
|
*/
|
|
QemuMutex io_mutex;
|
|
QIOChannel *ioc;
|
|
Error *migration_blocker;
|
|
ProxyMemoryListener proxy_listener;
|
|
int virq;
|
|
EventNotifier intr;
|
|
EventNotifier resample;
|
|
ProxyMemoryRegion region[PCI_NUM_REGIONS];
|
|
};
|
|
|
|
#endif /* PROXY_H */
|