mirror of https://github.com/xemu-project/xemu.git
spapr_iommu: Disable in-kernel IOMMU tables for >4GB windows
The existing KVM_CREATE_SPAPR_TCE ioctl only support 4G windows max as the window size parameter to the kernel ioctl() is 32-bit so there's no way of expressing a TCE window > 4GB. We are going to add huge DMA windows support so this will create small window and unexpectedly fail later. This disables KVM_CREATE_SPAPR_TCE for windows bigger that 4GB. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
421b1b27f6
commit
12fd285358
|
@ -126,11 +126,11 @@ static MemoryRegionIOMMUOps spapr_iommu_ops = {
|
||||||
static int spapr_tce_table_realize(DeviceState *dev)
|
static int spapr_tce_table_realize(DeviceState *dev)
|
||||||
{
|
{
|
||||||
sPAPRTCETable *tcet = SPAPR_TCE_TABLE(dev);
|
sPAPRTCETable *tcet = SPAPR_TCE_TABLE(dev);
|
||||||
|
uint64_t window_size = (uint64_t)tcet->nb_table << tcet->page_shift;
|
||||||
|
|
||||||
if (kvm_enabled()) {
|
if (kvm_enabled() && !(window_size >> 32)) {
|
||||||
tcet->table = kvmppc_create_spapr_tce(tcet->liobn,
|
tcet->table = kvmppc_create_spapr_tce(tcet->liobn,
|
||||||
tcet->nb_table <<
|
window_size,
|
||||||
tcet->page_shift,
|
|
||||||
&tcet->fd,
|
&tcet->fd,
|
||||||
tcet->vfio_accel);
|
tcet->vfio_accel);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue