On 11/06/2015 10:47 AM, Peter Krempa wrote: > New function qemuDomainGetMlockLimitBytes will now handle the > calculation so that it unifies the logic to one place and allows later > reuse. > --- > src/qemu/qemu_command.c | 18 ++---------------- > src/qemu/qemu_domain.c | 17 +++++++++++++++++ > src/qemu/qemu_domain.h | 2 ++ > src/qemu/qemu_hotplug.c | 17 ++--------------- > 4 files changed, 23 insertions(+), 31 deletions(-) > > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index 8824541..9acf8e4 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -11447,22 +11447,8 @@ qemuBuildCommandLine(virConnectPtr conn, > goto error; > } > > - if (mlock) { > - unsigned long long memKB; > - > - /* VFIO requires all of the guest's memory to be > - * locked resident, plus some amount for IO > - * space. Alex Williamson suggested adding 1GiB for IO > - * space just to be safe (some finer tuning might be > - * nice, though). > - */ > - if (virMemoryLimitIsSet(def->mem.hard_limit)) > - memKB = def->mem.hard_limit; > - else > - memKB = virDomainDefGetMemoryActual(def) + 1024 * 1024; > - > - virCommandSetMaxMemLock(cmd, memKB * 1024); > - } > + if (mlock) > + virCommandSetMaxMemLock(cmd, qemuDomainGetMlockLimitBytes(def)); > > if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSG_TIMESTAMP) && > cfg->logTimestamp) > diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c > index 890d8ed..8441d7a 100644 > --- a/src/qemu/qemu_domain.c > +++ b/src/qemu/qemu_domain.c > @@ -3616,3 +3616,20 @@ qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver, > > return 0; > } > + > + Should have intro comment /**... */ like other functions... ACK with that John > +unsigned long long > +qemuDomainGetMlockLimitBytes(virDomainDefPtr def) > +{ > + unsigned long long memKB; > + > + /* VFIO requires all of the guest's memory to be locked resident, plus some > + * amount for IO space. Alex Williamson suggested adding 1GiB for IO space > + * just to be safe (some finer tuning might be nice, though). */ > + if (virMemoryLimitIsSet(def->mem.hard_limit)) > + memKB = def->mem.hard_limit; > + else > + memKB = virDomainDefGetMemoryActual(def) + 1024 * 1024; > + > + return memKB << 10; > +} > diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h > index 64cd7e1..e34370b 100644 > --- a/src/qemu/qemu_domain.h > +++ b/src/qemu/qemu_domain.h > @@ -482,4 +482,6 @@ bool qemuDomainMachineIsS390CCW(const virDomainDef *def); > int qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver, > virDomainObjPtr vm); > > +unsigned long long qemuDomainGetMlockLimitBytes(virDomainDefPtr def); > + > #endif /* __QEMU_DOMAIN_H__ */ > diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c > index 8f2fda9..e7fc036 100644 > --- a/src/qemu/qemu_hotplug.c > +++ b/src/qemu/qemu_hotplug.c > @@ -1254,7 +1254,6 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver, > bool teardowncgroup = false; > bool teardownlabel = false; > int backend; > - unsigned long long memKB; > virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); > unsigned int flags = 0; > > @@ -1279,20 +1278,8 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver, > goto error; > } > > - /* VFIO requires all of the guest's memory to be locked > - * resident (plus an additional 1GiB to cover IO space). During > - * hotplug, the guest's memory may already be locked, but it > - * doesn't hurt to "change" the limit to the same value. > - * NB: the domain's memory tuning parameters are stored as > - * Kibibytes, but virProcessSetMaxMemLock expects the value in > - * bytes. > - */ > - if (virMemoryLimitIsSet(vm->def->mem.hard_limit)) > - memKB = vm->def->mem.hard_limit; > - else > - memKB = virDomainDefGetMemoryActual(vm->def) + (1024 * 1024); > - > - virProcessSetMaxMemLock(vm->pid, memKB * 1024); > + /* setup memory locking limits, that are necessary for VFIO */ > + virProcessSetMaxMemLock(vm->pid, qemuDomainGetMlockLimitBytes(vm->def)); > break; > > default: > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list