include/libvirt/libvirt-domain.h | 1 + src/qemu/qemu_driver.c | 24 +++++++++++++++++++----- tools/virsh-domain.c | 5 ++++- tools/virsh.pod | 1 + 4 files changed, 25 insertions(+), 6 deletions(-)
We can't clear vcpupin settings of XML once we did vcpupin
command, this is not convenient under some condition such
as migration.
This patch introduces clear feature, which can clear vcpuin
setting of XML.
Signed-off-by: Yi Wang <wang.yi59@zte.com.cn>
Signed-off-by: Xi Xu <xu.xi8@zte.com.cn>
---
include/libvirt/libvirt-domain.h | 1 +
src/qemu/qemu_driver.c | 24 +++++++++++++++++++-----
tools/virsh-domain.c | 5 ++++-
tools/virsh.pod | 1 +
4 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
index 4048acf..7b171df 100644
--- a/include/libvirt/libvirt-domain.h
+++ b/include/libvirt/libvirt-domain.h
@@ -1837,6 +1837,7 @@ typedef enum {
VIR_DOMAIN_VCPU_MAXIMUM = (1 << 2), /* Max rather than current count */
VIR_DOMAIN_VCPU_GUEST = (1 << 3), /* Modify state of the cpu in the guest */
VIR_DOMAIN_VCPU_HOTPLUGGABLE = (1 << 4), /* Make vcpus added hot(un)pluggable */
+ VIR_DOMAIN_VCPU_CLEAR = (1 << 5), /* Clear vcpus pin info */
} virDomainVcpuFlags;
int virDomainSetVcpus (virDomainPtr domain,
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 97b194b..9e8759f 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -5001,7 +5001,7 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
int vcpu,
virQEMUDriverPtr driver,
virQEMUDriverConfigPtr cfg,
- virBitmapPtr cpumap)
+ virBitmapPtr cpumap, bool clear)
{
virBitmapPtr tmpmap = NULL;
virDomainVcpuDefPtr vcpuinfo;
@@ -5049,7 +5049,12 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm,
}
virBitmapFree(vcpuinfo->cpumask);
- vcpuinfo->cpumask = tmpmap;
+ if (clear) {
+ virBitmapFree(tmpmap);
+ vcpuinfo->cpumask = NULL;
+ } else {
+ vcpuinfo->cpumask = tmpmap;
+ }
tmpmap = NULL;
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
@@ -5093,9 +5098,11 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
virBitmapPtr pcpumap = NULL;
virDomainVcpuDefPtr vcpuinfo = NULL;
virQEMUDriverConfigPtr cfg = NULL;
+ bool clear = false;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
- VIR_DOMAIN_AFFECT_CONFIG, -1);
+ VIR_DOMAIN_AFFECT_CONFIG |
+ VIR_DOMAIN_VCPU_CLEAR, -1);
cfg = virQEMUDriverGetConfig(driver);
@@ -5111,6 +5118,8 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0)
goto endjob;
+ clear = !!(flags & VIR_DOMAIN_VCPU_CLEAR);
+
if ((def && def->virtType == VIR_DOMAIN_VIRT_QEMU) ||
(persistentDef && persistentDef->virtType == VIR_DOMAIN_VIRT_QEMU)) {
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
@@ -5136,12 +5145,17 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
}
if (def &&
- qemuDomainPinVcpuLive(vm, def, vcpu, driver, cfg, pcpumap) < 0)
+ qemuDomainPinVcpuLive(vm, def, vcpu, driver, cfg, pcpumap, clear) < 0)
goto endjob;
if (persistentDef) {
virBitmapFree(vcpuinfo->cpumask);
- vcpuinfo->cpumask = pcpumap;
+ if (clear) {
+ virBitmapFree(pcpumap);
+ vcpuinfo->cpumask = NULL;
+ } else {
+ vcpuinfo->cpumask = pcpumap;
+ }
pcpumap = NULL;
ret = virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef);
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 93cb020..4bad9e7 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -6860,7 +6860,7 @@ virshParseCPUList(vshControl *ctl, int *cpumaplen,
unsigned char *cpumap = NULL;
virBitmapPtr map = NULL;
- if (cpulist[0] == 'r') {
+ if (cpulist[0] == 'r' || STREQ("clear", cpulist)) {
if (!(map = virBitmapNew(maxcpu)))
return NULL;
virBitmapSetAll(map);
@@ -6938,6 +6938,9 @@ cmdVcpuPin(vshControl *ctl, const vshCmd *cmd)
goto cleanup;
}
+ if (STREQ(cpulist, "clear"))
+ flags |= VIR_DOMAIN_VCPU_CLEAR;
+
/* Pin mode: pinning specified vcpu to specified physical cpus*/
if (!(cpumap = virshParseCPUList(ctl, &cpumaplen, cpulist, maxcpu)))
goto cleanup;
diff --git a/tools/virsh.pod b/tools/virsh.pod
index 69cc423..caaa230 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -2857,6 +2857,7 @@ I<cpulist> is a list of physical CPU numbers. Its syntax is a comma
separated list and a special markup using '-' and '^' (ex. '0-4', '0-3,^2') can
also be allowed. The '-' denotes the range and the '^' denotes exclusive.
For pinning the I<vcpu> to all physical cpus specify 'r' as a I<cpulist>.
+For clearing pinning info, specify 'clear' as a I<cpulist>.
If I<--live> is specified, affect a running guest.
If I<--config> is specified, affect the next boot of a persistent guest.
If I<--current> is specified, affect the current guest state.
--
1.8.3.1
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Thu, Jan 04, 2018 at 05:46:32 -0500, Yi Wang wrote: > We can't clear vcpupin settings of XML once we did vcpupin > command, this is not convenient under some condition such > as migration. > > This patch introduces clear feature, which can clear vcpuin > setting of XML. > > Signed-off-by: Yi Wang <wang.yi59@zte.com.cn> > Signed-off-by: Xi Xu <xu.xi8@zte.com.cn> > --- > include/libvirt/libvirt-domain.h | 1 + > src/qemu/qemu_driver.c | 24 +++++++++++++++++++----- > tools/virsh-domain.c | 5 ++++- > tools/virsh.pod | 1 + > 4 files changed, 25 insertions(+), 6 deletions(-) > > diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h > index 4048acf..7b171df 100644 > --- a/include/libvirt/libvirt-domain.h > +++ b/include/libvirt/libvirt-domain.h > @@ -1837,6 +1837,7 @@ typedef enum { > VIR_DOMAIN_VCPU_MAXIMUM = (1 << 2), /* Max rather than current count */ > VIR_DOMAIN_VCPU_GUEST = (1 << 3), /* Modify state of the cpu in the guest */ > VIR_DOMAIN_VCPU_HOTPLUGGABLE = (1 << 4), /* Make vcpus added hot(un)pluggable */ > + VIR_DOMAIN_VCPU_CLEAR = (1 << 5), /* Clear vcpus pin info */ These are flags for a wrong API, you'll need to introduce new set of flags for the pinning API. > } virDomainVcpuFlags; > > int virDomainSetVcpus (virDomainPtr domain, > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c > index 97b194b..9e8759f 100644 > --- a/src/qemu/qemu_driver.c > +++ b/src/qemu/qemu_driver.c > @@ -5001,7 +5001,7 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm, > int vcpu, > virQEMUDriverPtr driver, > virQEMUDriverConfigPtr cfg, > - virBitmapPtr cpumap) > + virBitmapPtr cpumap, bool clear) Please adhere to the coding standards. > { > virBitmapPtr tmpmap = NULL; > virDomainVcpuDefPtr vcpuinfo; > @@ -5049,7 +5049,12 @@ qemuDomainPinVcpuLive(virDomainObjPtr vm, > } > > virBitmapFree(vcpuinfo->cpumask); > - vcpuinfo->cpumask = tmpmap; > + if (clear) { > + virBitmapFree(tmpmap); > + vcpuinfo->cpumask = NULL; > + } else { > + vcpuinfo->cpumask = tmpmap; > + } This will not work as expected. The API still takes the pinning map into account when setting the pinning, so setting 'clear' will only remove the information from the XML but will still apply 'cpumap' as the desired pinning. The API should not rely on the fact that the user passes in correct cpumap in this case. You'll need to add logic which will set the pinning to the value as if it was omitted in the XML. > tmpmap = NULL; > > if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0) > @@ -5093,9 +5098,11 @@ qemuDomainPinVcpuFlags(virDomainPtr dom, > virBitmapPtr pcpumap = NULL; > virDomainVcpuDefPtr vcpuinfo = NULL; > virQEMUDriverConfigPtr cfg = NULL; > + bool clear = false; > > virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | > - VIR_DOMAIN_AFFECT_CONFIG, -1); > + VIR_DOMAIN_AFFECT_CONFIG | > + VIR_DOMAIN_VCPU_CLEAR, -1); > > cfg = virQEMUDriverGetConfig(driver); > [...] > diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c > index 93cb020..4bad9e7 100644 > --- a/tools/virsh-domain.c > +++ b/tools/virsh-domain.c > @@ -6860,7 +6860,7 @@ virshParseCPUList(vshControl *ctl, int *cpumaplen, > unsigned char *cpumap = NULL; > virBitmapPtr map = NULL; > > - if (cpulist[0] == 'r') { > + if (cpulist[0] == 'r' || STREQ("clear", cpulist)) { > if (!(map = virBitmapNew(maxcpu))) > return NULL; > virBitmapSetAll(map); > @@ -6938,6 +6938,9 @@ cmdVcpuPin(vshControl *ctl, const vshCmd *cmd) > goto cleanup; > } > > + if (STREQ(cpulist, "clear")) > + flags |= VIR_DOMAIN_VCPU_CLEAR; > + > /* Pin mode: pinning specified vcpu to specified physical cpus*/ > if (!(cpumap = virshParseCPUList(ctl, &cpumaplen, cpulist, maxcpu))) > goto cleanup; > diff --git a/tools/virsh.pod b/tools/virsh.pod > index 69cc423..caaa230 100644 > --- a/tools/virsh.pod > +++ b/tools/virsh.pod > @@ -2857,6 +2857,7 @@ I<cpulist> is a list of physical CPU numbers. Its syntax is a comma > separated list and a special markup using '-' and '^' (ex. '0-4', '0-3,^2') can > also be allowed. The '-' denotes the range and the '^' denotes exclusive. > For pinning the I<vcpu> to all physical cpus specify 'r' as a I<cpulist>. > +For clearing pinning info, specify 'clear' as a I<cpulist>. The other special value is 'r' so I think this should also be a single letter option. Or better a switch by itself. -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
VGhhbmtzIGZvciB5b3VyIHJlcGx5LCBhbmQgSSB3aWxsIHNlbmQgYSBuZXcgdmVyc2lvbiBvZiB0 aGlzCnBhdGNoLgoKPk9uIFRodSwgSmFuIDA0LCAyMDE4IGF0IDA1OjQ2OjMyIC0wNTAwLCBZaSBX YW5nIHdyb3RlOgo+PiBXZSBjYW4ndCBjbGVhciB2Y3B1cGluIHNldHRpbmdzIG9mIFhNTCBvbmNl IHdlIGRpZCB2Y3B1cGluCj4+IGNvbW1hbmQsIHRoaXMgaXMgbm90IGNvbnZlbmllbnQgdW5kZXIg c29tZSBjb25kaXRpb24gc3VjaAo+PiBhcyBtaWdyYXRpb24uCj4+Cj4+IFRoaXMgcGF0Y2ggaW50 cm9kdWNlcyBjbGVhciBmZWF0dXJlLCB3aGljaCBjYW4gY2xlYXIgdmNwdWluCj4+IHNldHRpbmcg b2YgWE1MLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBZaSBXYW5nIDx3YW5nLnlpNTlAenRlLmNvbS5j bj4KPj4gU2lnbmVkLW9mZi1ieTogWGkgWHUgPHh1LnhpOEB6dGUuY29tLmNuPgo+PiAtLS0KPj4g aW5jbHVkZS9saWJ2aXJ0L2xpYnZpcnQtZG9tYWluLmggfCAxICsKPj4gc3JjL3FlbXUvcWVtdV9k cml2ZXIuYyB8IDI0ICsrKysrKysrKysrKysrKysrKystLS0tLQo+PiB0b29scy92aXJzaC1kb21h aW4uYyB8IDUgKysrKy0KPj4gdG9vbHMvdmlyc2gucG9kIHwgMSArCj4+IDQgZmlsZXMgY2hhbmdl ZCwgMjUgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvbGlidmlydC9saWJ2aXJ0LWRvbWFpbi5oIGIvaW5jbHVkZS9saWJ2aXJ0L2xpYnZpcnQt ZG9tYWluLmgKPj4gaW5kZXggNDA0OGFjZi4uN2IxNzFkZiAxMDA2NDQKPj4gLS0tIGEvaW5jbHVk ZS9saWJ2aXJ0L2xpYnZpcnQtZG9tYWluLmgKPj4gKysrIGIvaW5jbHVkZS9saWJ2aXJ0L2xpYnZp cnQtZG9tYWluLmgKPj4gQEAgLTE4MzcsNiArMTgzNyw3IEBAIHR5cGVkZWYgZW51bSB7Cj4+IFZJ Ul9ET01BSU5fVkNQVV9NQVhJTVVNID0gKDEgPDwgMiksIC8qIE1heCByYXRoZXIgdGhhbiBjdXJy ZW50IGNvdW50ICovCj4+IFZJUl9ET01BSU5fVkNQVV9HVUVTVCA9ICgxIDw8IDMpLCAvKiBNb2Rp Znkgc3RhdGUgb2YgdGhlIGNwdSBpbiB0aGUgZ3Vlc3QgKi8KPj4gVklSX0RPTUFJTl9WQ1BVX0hP VFBMVUdHQUJMRSA9ICgxIDw8IDQpLCAvKiBNYWtlIHZjcHVzIGFkZGVkIGhvdCh1bilwbHVnZ2Fi bGUgKi8KPj4gKyBWSVJfRE9NQUlOX1ZDUFVfQ0xFQVIgPSAoMSA8PCA1KSwgLyogQ2xlYXIgdmNw dXMgcGluIGluZm8gKi8KPgo+VGhlc2UgYXJlIGZsYWdzIGZvciBhIHdyb25nIEFQSSwgeW91J2xs IG5lZWQgdG8gaW50cm9kdWNlIG5ldyBzZXQgb2YKPmZsYWdzIGZvciB0aGUgcGlubmluZyBBUEku Cj4KPj4gfSB2aXJEb21haW5WY3B1RmxhZ3M7Cj4+Cj4+IGludCB2aXJEb21haW5TZXRWY3B1cyAo dmlyRG9tYWluUHRyIGRvbWFpbiwKPj4gZGlmZiAtLWdpdCBhL3NyYy9xZW11L3FlbXVfZHJpdmVy LmMgYi9zcmMvcWVtdS9xZW11X2RyaXZlci5jCj4+IGluZGV4IDk3YjE5NGIuLjllODc1OWYgMTAw NjQ0Cj4+IC0tLSBhL3NyYy9xZW11L3FlbXVfZHJpdmVyLmMKPj4gKysrIGIvc3JjL3FlbXUvcWVt dV9kcml2ZXIuYwo+PiBAQCAtNTAwMSw3ICs1MDAxLDcgQEAgcWVtdURvbWFpblBpblZjcHVMaXZl KHZpckRvbWFpbk9ialB0ciB2bSwKPj4gaW50IHZjcHUsCj4+IHZpclFFTVVEcml2ZXJQdHIgZHJp dmVyLAo+PiB2aXJRRU1VRHJpdmVyQ29uZmlnUHRyIGNmZywKPj4gLSB2aXJCaXRtYXBQdHIgY3B1 bWFwKQo+PiArIHZpckJpdG1hcFB0ciBjcHVtYXAsIGJvb2wgY2xlYXIpCj4KPlBsZWFzZSBhZGhl cmUgdG8gdGhlIGNvZGluZyBzdGFuZGFyZHMuCj4KPj4gewo+PiB2aXJCaXRtYXBQdHIgdG1wbWFw ID0gTlVMTDsKPj4gdmlyRG9tYWluVmNwdURlZlB0ciB2Y3B1aW5mbzsKPj4gQEAgLTUwNDksNyAr NTA0OSwxMiBAQCBxZW11RG9tYWluUGluVmNwdUxpdmUodmlyRG9tYWluT2JqUHRyIHZtLAo+PiB9 Cj4+Cj4+IHZpckJpdG1hcEZyZWUodmNwdWluZm8tPmNwdW1hc2spOwo+PiAtIHZjcHVpbmZvLT5j cHVtYXNrID0gdG1wbWFwOwo+PiArIGlmIChjbGVhcikgewo+PiArIHZpckJpdG1hcEZyZWUodG1w bWFwKTsKPj4gKyB2Y3B1aW5mby0+Y3B1bWFzayA9IE5VTEw7Cj4+ICsgfSBlbHNlIHsKPj4gKyB2 Y3B1aW5mby0+Y3B1bWFzayA9IHRtcG1hcDsKPj4gKyB9Cj4KPlRoaXMgd2lsbCBub3Qgd29yayBh cyBleHBlY3RlZC4gVGhlIEFQSSBzdGlsbCB0YWtlcyB0aGUgcGlubmluZyBtYXAgaW50bwo+YWNj b3VudCB3aGVuIHNldHRpbmcgdGhlIHBpbm5pbmcsIHNvIHNldHRpbmcgJ2NsZWFyJyB3aWxsIG9u bHkgcmVtb3ZlCj50aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgWE1MIGJ1dCB3aWxsIHN0aWxsIGFw cGx5ICdjcHVtYXAnIGFzIHRoZQo+ZGVzaXJlZCBwaW5uaW5nLgo+Cj5UaGUgQVBJIHNob3VsZCBu b3QgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZSB1c2VyIHBhc3NlcyBpbiBjb3JyZWN0Cj5jcHVt YXAgaW4gdGhpcyBjYXNlLiBZb3UnbGwgbmVlZCB0byBhZGQgbG9naWMgd2hpY2ggd2lsbCBzZXQg dGhlIHBpbm5pbmcKPnRvIHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMgb21pdHRlZCBpbiB0aGUgWE1M Lgo+Cj4+IHRtcG1hcCA9IE5VTEw7Cj4+Cj4+IGlmICh2aXJEb21haW5TYXZlU3RhdHVzKGRyaXZl ci0+eG1sb3B0LCBjZmctPnN0YXRlRGlyLCB2bSwgZHJpdmVyLT5jYXBzKSA8IDApCj4+IEBAIC01 MDkzLDkgKzUwOTgsMTEgQEAgcWVtdURvbWFpblBpblZjcHVGbGFncyh2aXJEb21haW5QdHIgZG9t LAo+PiB2aXJCaXRtYXBQdHIgcGNwdW1hcCA9IE5VTEw7Cj4+IHZpckRvbWFpblZjcHVEZWZQdHIg dmNwdWluZm8gPSBOVUxMOwo+PiB2aXJRRU1VRHJpdmVyQ29uZmlnUHRyIGNmZyA9IE5VTEw7Cj4+ ICsgYm9vbCBjbGVhciA9IGZhbHNlOwo+Pgo+PiB2aXJDaGVja0ZsYWdzKFZJUl9ET01BSU5fQUZG RUNUX0xJVkUgfAo+PiAtIFZJUl9ET01BSU5fQUZGRUNUX0NPTkZJRywgLTEpOwo+PiArIFZJUl9E T01BSU5fQUZGRUNUX0NPTkZJRyB8Cj4+ICsgVklSX0RPTUFJTl9WQ1BVX0NMRUFSLCAtMSk7Cj4+ Cj4+IGNmZyA9IHZpclFFTVVEcml2ZXJHZXRDb25maWcoZHJpdmVyKTsKPj4KPgo+Wy4uLl0KPgo+ PiBkaWZmIC0tZ2l0IGEvdG9vbHMvdmlyc2gtZG9tYWluLmMgYi90b29scy92aXJzaC1kb21haW4u Ywo+PiBpbmRleCA5M2NiMDIwLi40YmFkOWU3IDEwMDY0NAo+PiAtLS0gYS90b29scy92aXJzaC1k b21haW4uYwo+PiArKysgYi90b29scy92aXJzaC1kb21haW4uYwo+PiBAQCAtNjg2MCw3ICs2ODYw LDcgQEAgdmlyc2hQYXJzZUNQVUxpc3QodnNoQ29udHJvbCAqY3RsLCBpbnQgKmNwdW1hcGxlbiwK Pj4gdW5zaWduZWQgY2hhciAqY3B1bWFwID0gTlVMTDsKPj4gdmlyQml0bWFwUHRyIG1hcCA9IE5V TEw7Cj4+Cj4+IC0gaWYgKGNwdWxpc3RbMF0gPT0gJ3InKSB7Cj4+ICsgaWYgKGNwdWxpc3RbMF0g PT0gJ3InIHx8IFNUUkVRKCJjbGVhciIsIGNwdWxpc3QpKSB7Cj4+IGlmICghKG1hcCA9IHZpckJp dG1hcE5ldyhtYXhjcHUpKSkKPj4gcmV0dXJuIE5VTEw7Cj4+IHZpckJpdG1hcFNldEFsbChtYXAp Owo+PiBAQCAtNjkzOCw2ICs2OTM4LDkgQEAgY21kVmNwdVBpbih2c2hDb250cm9sICpjdGwsIGNv bnN0IHZzaENtZCAqY21kKQo+PiBnb3RvIGNsZWFudXA7Cj4+IH0KPj4KPj4gKyBpZiAoU1RSRVEo Y3B1bGlzdCwgImNsZWFyIikpCj4+ICsgZmxhZ3MgfD0gVklSX0RPTUFJTl9WQ1BVX0NMRUFSOwo+ PiArCj4+IC8qIFBpbiBtb2RlOiBwaW5uaW5nIHNwZWNpZmllZCB2Y3B1IHRvIHNwZWNpZmllZCBw aHlzaWNhbCBjcHVzKi8KPj4gaWYgKCEoY3B1bWFwID0gdmlyc2hQYXJzZUNQVUxpc3QoY3RsLCAm Y3B1bWFwbGVuLCBjcHVsaXN0LCBtYXhjcHUpKSkKPj4gZ290byBjbGVhbnVwOwo+PiBkaWZmIC0t Z2l0IGEvdG9vbHMvdmlyc2gucG9kIGIvdG9vbHMvdmlyc2gucG9kCj4+IGluZGV4IDY5Y2M0MjMu LmNhYWEyMzAgMTAwNjQ0Cj4+IC0tLSBhL3Rvb2xzL3ZpcnNoLnBvZAo+PiArKysgYi90b29scy92 aXJzaC5wb2QKPj4gQEAgLTI4NTcsNiArMjg1Nyw3IEBAIEk8Y3B1bGlzdD4gaXMgYSBsaXN0IG9m IHBoeXNpY2FsIENQVSBudW1iZXJzLiBJdHMgc3ludGF4IGlzIGEgY29tbWEKPj4gc2VwYXJhdGVk IGxpc3QgYW5kIGEgc3BlY2lhbCBtYXJrdXAgdXNpbmcgJy0nIGFuZCAnXicgKGV4LiAnMC00Jywg JzAtMyxeMicpIGNhbgo+PiBhbHNvIGJlIGFsbG93ZWQuIFRoZSAnLScgZGVub3RlcyB0aGUgcmFu Z2UgYW5kIHRoZSAnXicgZGVub3RlcyBleGNsdXNpdmUuCj4+IEZvciBwaW5uaW5nIHRoZSBJPHZj cHU+IHRvIGFsbCBwaHlzaWNhbCBjcHVzIHNwZWNpZnkgJ3InIGFzIGEgSTxjcHVsaXN0Pi4KPj4g K0ZvciBjbGVhcmluZyBwaW5uaW5nIGluZm8sIHNwZWNpZnkgJ2NsZWFyJyBhcyBhIEk8Y3B1bGlz dD4uCj4KPlRoZSBvdGhlciBzcGVjaWFsIHZhbHVlIGlzICdyJyBzbyBJIHRoaW5rIHRoaXMgc2hv dWxkIGFsc28gYmUgYSBzaW5nbGUKPmxldHRlciBvcHRpb24uIE9yIGJldHRlciBhIHN3aXRjaCBi eSBpdHNlbGYuCgoKLS0tCkJlc3Qgd2lzaGVzCllpIFdhbmc= -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2025 Red Hat, Inc.