mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-31 06:13:53 -06:00
spapr/xive: add KVM support
This introduces a set of helpers when KVM is in use, which create the KVM XIVE device, initialize the interrupt sources at a KVM level and connect the interrupt presenters to the vCPU. They also handle the initialization of the TIMA and the source ESB memory regions of the controller. These have a different type under KVM. They are 'ram device' memory mappings, similarly to VFIO, exposed to the guest and the associated VMAs on the host are populated dynamically with the appropriate pages using a fault handler. Signed-off-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Message-Id: <20190513084245.25755-3-clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
75de59416d
commit
38afd772f8
10 changed files with 344 additions and 10 deletions
|
@ -38,6 +38,10 @@ typedef struct SpaprXive {
|
|||
/* TIMA mapping address */
|
||||
hwaddr tm_base;
|
||||
MemoryRegion tm_mmio;
|
||||
|
||||
/* KVM support */
|
||||
int fd;
|
||||
void *tm_mmap;
|
||||
} SpaprXive;
|
||||
|
||||
bool spapr_xive_irq_claim(SpaprXive *xive, uint32_t lisn, bool lsi);
|
||||
|
@ -49,5 +53,11 @@ void spapr_dt_xive(SpaprMachineState *spapr, uint32_t nr_servers, void *fdt,
|
|||
uint32_t phandle);
|
||||
void spapr_xive_set_tctx_os_cam(XiveTCTX *tctx);
|
||||
void spapr_xive_mmio_set_enabled(SpaprXive *xive, bool enable);
|
||||
void spapr_xive_map_mmio(SpaprXive *xive);
|
||||
|
||||
/*
|
||||
* KVM XIVE device helpers
|
||||
*/
|
||||
void kvmppc_xive_connect(SpaprXive *xive, Error **errp);
|
||||
|
||||
#endif /* PPC_SPAPR_XIVE_H */
|
||||
|
|
|
@ -140,6 +140,7 @@
|
|||
#ifndef PPC_XIVE_H
|
||||
#define PPC_XIVE_H
|
||||
|
||||
#include "sysemu/kvm.h"
|
||||
#include "hw/qdev-core.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/ppc/xive_regs.h"
|
||||
|
@ -194,6 +195,9 @@ typedef struct XiveSource {
|
|||
uint32_t esb_shift;
|
||||
MemoryRegion esb_mmio;
|
||||
|
||||
/* KVM support */
|
||||
void *esb_mmap;
|
||||
|
||||
XiveNotifier *xive;
|
||||
} XiveSource;
|
||||
|
||||
|
@ -423,4 +427,13 @@ static inline uint32_t xive_nvt_cam_line(uint8_t nvt_blk, uint32_t nvt_idx)
|
|||
return (nvt_blk << 19) | nvt_idx;
|
||||
}
|
||||
|
||||
/*
|
||||
* KVM XIVE device helpers
|
||||
*/
|
||||
|
||||
void kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **errp);
|
||||
void kvmppc_xive_source_reset(XiveSource *xsrc, Error **errp);
|
||||
void kvmppc_xive_source_set_irq(void *opaque, int srcno, int val);
|
||||
void kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp);
|
||||
|
||||
#endif /* PPC_XIVE_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue