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>
39 lines
849 B
C
39 lines
849 B
C
/*
|
|
* Remote machine configuration
|
|
*
|
|
* 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 REMOTE_MACHINE_H
|
|
#define REMOTE_MACHINE_H
|
|
|
|
#include "qom/object.h"
|
|
#include "hw/boards.h"
|
|
#include "hw/pci-host/remote.h"
|
|
#include "io/channel.h"
|
|
#include "hw/remote/iohub.h"
|
|
|
|
struct RemoteMachineState {
|
|
MachineState parent_obj;
|
|
|
|
RemotePCIHost *host;
|
|
RemoteIOHubState iohub;
|
|
};
|
|
|
|
/* Used to pass to co-routine device and ioc. */
|
|
typedef struct RemoteCommDev {
|
|
PCIDevice *dev;
|
|
QIOChannel *ioc;
|
|
} RemoteCommDev;
|
|
|
|
#define TYPE_REMOTE_MACHINE "x-remote-machine"
|
|
OBJECT_DECLARE_SIMPLE_TYPE(RemoteMachineState, REMOTE_MACHINE)
|
|
|
|
void coroutine_fn mpqemu_remote_msg_loop_co(void *data);
|
|
|
|
#endif
|