提交 d3f06dcd 编写于 作者: M Michal Privoznik

qemu: Take NVMe disks into account when calculating memlock limit

We have this beautiful function that does crystal ball
divination. The function is named
qemuDomainGetMemLockLimitBytes() and it calculates the upper
limit of how much locked memory is given guest going to need. The
function bases its guess on devices defined for a domain. For
instance, if there is a VFIO hostdev defined then it adds 1GiB to
the guessed maximum. Since NVMe disks are pretty much VFIO
hostdevs (but not quite), we have to do the same sorcery.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
ACKed-by: NPeter Krempa <pkrempa@redhat.com>
Reviewed-by: NCole Robinson <crobinso@redhat.com>
上级 8943ca11
......@@ -12881,6 +12881,9 @@ getPPC64MemLockLimitBytes(virDomainDefPtr def)
}
}
if (virDomainDefHasNVMeDisk(def))
usesVFIO = true;
memory = virDomainDefGetMemoryTotal(def);
if (def->mem.max_memory)
......@@ -12979,6 +12982,7 @@ unsigned long long
qemuDomainGetMemLockLimitBytes(virDomainDefPtr def)
{
unsigned long long memKB = 0;
bool usesVFIO = false;
size_t i;
/* prefer the hard limit */
......@@ -13019,11 +13023,17 @@ qemuDomainGetMemLockLimitBytes(virDomainDefPtr def)
for (i = 0; i < def->nhostdevs; i++) {
if (virHostdevIsVFIODevice(def->hostdevs[i]) ||
virHostdevIsMdevDevice(def->hostdevs[i])) {
memKB = virDomainDefGetMemoryTotal(def) + 1024 * 1024;
goto done;
usesVFIO = true;
break;
}
}
if (virDomainDefHasNVMeDisk(def))
usesVFIO = true;
if (usesVFIO)
memKB = virDomainDefGetMemoryTotal(def) + 1024 * 1024;
done:
return memKB << 10;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册