mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
spapr/xive: rework the mapping the KVM memory regions
Today, the interrupt device is fully initialized at reset when the CAS negotiation process has completed. Depending on the KVM capabilities, the SpaprXive memory regions (ESB, TIMA) are initialized with a host MMIO backend or a QEMU emulated backend. This results in a complex initialization sequence partially done at realize and later at reset, and some memory region leaks. To simplify this sequence and to remove of the late initialization of the emulated device which is required to be done only once, we introduce new memory regions specific for KVM. These regions are mapped as overlaps on top of the emulated device to make use of the host MMIOs. Also provide proper cleanups of these regions when the XIVE KVM device is destroyed to fix the leaks. Signed-off-by: Cédric Le Goater <clg@kaod.org> Message-Id: <20190614165920.12670-2-clg@kaod.org> Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
a2166410ad
commit
981b1c6266
5 changed files with 24 additions and 39 deletions
|
@ -42,6 +42,7 @@ typedef struct SpaprXive {
|
|||
/* KVM support */
|
||||
int fd;
|
||||
void *tm_mmap;
|
||||
MemoryRegion tm_mmio_kvm;
|
||||
VMChangeStateEntry *change;
|
||||
} SpaprXive;
|
||||
|
||||
|
@ -66,7 +67,6 @@ void spapr_xive_map_mmio(SpaprXive *xive);
|
|||
|
||||
int spapr_xive_end_to_target(uint8_t end_blk, uint32_t end_idx,
|
||||
uint32_t *out_server, uint8_t *out_prio);
|
||||
void spapr_xive_init(SpaprXive *xive, Error **errp);
|
||||
|
||||
/*
|
||||
* KVM XIVE device helpers
|
||||
|
|
|
@ -197,6 +197,7 @@ typedef struct XiveSource {
|
|||
|
||||
/* KVM support */
|
||||
void *esb_mmap;
|
||||
MemoryRegion esb_mmio_kvm;
|
||||
|
||||
XiveNotifier *xive;
|
||||
} XiveSource;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue