mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
spapr_vio/spapr_iommu: Move VIO bypass where it belongs
Instead of tweaking a TCE table device by adding there a bypass flag, let's add an alias to RAM and IOMMU memory region, and enable/disable those according to the selected bypass mode. This way IOMMU memory region can have size of the actual window rather than ram_size which is essential for upcoming DDW support. This moves bypass logic to VIO layer and keeps @bypass flag in TCE table for migration compatibility only. This replaces spapr_tce_set_bypass() calls with explicit assignment to avoid confusion as the function could do something more that just syncing the @bypass flag. This adds a pointer to VIO device into the sPAPRTCETable struct to provide the sPAPRTCETable device a way to update bypass mode for the VIO device. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
0048fa6c80
commit
ee9a569ab8
4 changed files with 47 additions and 13 deletions
|
@ -463,6 +463,7 @@ struct sPAPRTCETable {
|
|||
bool vfio_accel;
|
||||
int fd;
|
||||
MemoryRegion iommu;
|
||||
struct VIOsPAPRDevice *vdev; /* for @bypass migration compatibility only */
|
||||
QLIST_ENTRY(sPAPRTCETable) list;
|
||||
};
|
||||
|
||||
|
@ -475,7 +476,6 @@ sPAPRTCETable *spapr_tce_new_table(DeviceState *owner, uint32_t liobn,
|
|||
uint32_t nb_table,
|
||||
bool vfio_accel);
|
||||
MemoryRegion *spapr_tce_get_iommu(sPAPRTCETable *tcet);
|
||||
void spapr_tce_set_bypass(sPAPRTCETable *tcet, bool bypass);
|
||||
int spapr_dma_dt(void *fdt, int node_off, const char *propname,
|
||||
uint32_t liobn, uint64_t window, uint32_t size);
|
||||
int spapr_tcet_dma_dt(void *fdt, int node_off, const char *propname,
|
||||
|
|
|
@ -64,6 +64,8 @@ struct VIOsPAPRDevice {
|
|||
target_ulong signal_state;
|
||||
VIOsPAPR_CRQ crq;
|
||||
AddressSpace as;
|
||||
MemoryRegion mrroot;
|
||||
MemoryRegion mrbypass;
|
||||
sPAPRTCETable *tcet;
|
||||
};
|
||||
|
||||
|
@ -139,4 +141,6 @@ extern const VMStateDescription vmstate_spapr_vio;
|
|||
#define VMSTATE_SPAPR_VIO(_f, _s) \
|
||||
VMSTATE_STRUCT(_f, _s, 0, vmstate_spapr_vio, VIOsPAPRDevice)
|
||||
|
||||
void spapr_vio_set_bypass(VIOsPAPRDevice *dev, bool bypass);
|
||||
|
||||
#endif /* _HW_SPAPR_VIO_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue