File 0004-Update-libvirt-go-to-fix-memory-leak.patch of Package kubevirt.26844

From 9ca2790f503f51fa16bb571dec978ca33eb0308e Mon Sep 17 00:00:00 2001
From: "L. Pivarc" <lpivarc@redhat.com>
Date: Tue, 2 Aug 2022 20:25:29 +0200
Subject: [PATCH] Update libvirt-go to fix memory leak

For more info see https://gitlab.com/libvirt/libvirt-go-module/-/merge_requests/33

Signed-off-by: L. Pivarc <lpivarc@redhat.com>
---
 go.mod                                        |   2 +-
 go.sum                                        |   4 +-
 vendor/libvirt.org/go/libvirt/.gitlab-ci.yml  |   4 +-
 vendor/libvirt.org/go/libvirt/connect.go      |  35 +++-
 .../libvirt.org/go/libvirt/connect_compat.h   |   6 +
 .../libvirt.org/go/libvirt/connect_wrapper.go |  30 ++++
 .../libvirt.org/go/libvirt/connect_wrapper.h  |  10 ++
 vendor/libvirt.org/go/libvirt/domain.go       | 158 ++++++++++++++----
 vendor/libvirt.org/go/libvirt/domain_compat.h |  69 ++++++++
 .../libvirt.org/go/libvirt/domain_snapshot.go |   7 +-
 .../go/libvirt/domain_snapshot_compat.h       |   7 +
 .../libvirt.org/go/libvirt/domain_wrapper.go  |  36 ++++
 .../libvirt.org/go/libvirt/domain_wrapper.h   |  12 ++
 vendor/libvirt.org/go/libvirt/error.go        |   1 -
 vendor/libvirt.org/go/libvirt/events.go       |  19 ++-
 vendor/libvirt.org/go/libvirt/qemu.go         |  40 +++++
 vendor/libvirt.org/go/libvirt/qemu_wrapper.go |  23 +++
 vendor/libvirt.org/go/libvirt/qemu_wrapper.h  |  11 ++
 vendor/libvirt.org/go/libvirt/typedparams.go  |   5 +
 vendor/modules.txt                            |   2 +-
 20 files changed, 433 insertions(+), 48 deletions(-)

diff --git a/go.mod b/go.mod
index 1ca93ba9a..529edf0cb 100644
--- a/go.mod
+++ b/go.mod
@@ -77,7 +77,7 @@ require (
 	kubevirt.io/containerized-data-importer-api v1.47.0
 	kubevirt.io/controller-lifecycle-operator-sdk v0.2.2
 	kubevirt.io/qe-tools v0.1.8
-	libvirt.org/go/libvirt v1.8000.0
+	libvirt.org/go/libvirt v1.8006.0
 	mvdan.cc/sh/v3 v3.1.1
 	sigs.k8s.io/yaml v1.3.0
 )
diff --git a/go.sum b/go.sum
index 1a5ebddb8..76d15cc32 100644
--- a/go.sum
+++ b/go.sum
@@ -2072,8 +2072,8 @@ kubevirt.io/controller-lifecycle-operator-sdk/api v0.0.0-20220329064328-f3cc58c6
 kubevirt.io/qe-tools v0.1.6/go.mod h1:PJyH/YXC4W0AmxfheDmXWMbLNsMSboVGXKpMAwfKzVE=
 kubevirt.io/qe-tools v0.1.8 h1:Ar7qicmzHdd+Ia+6rjHDg3D7GReIyq7QFXoC4F7TjhQ=
 kubevirt.io/qe-tools v0.1.8/go.mod h1:+Tr/WZGHIDQa/4pQgzM7+4J6YeVbUWAXESXtL2/zxqc=
-libvirt.org/go/libvirt v1.8000.0 h1:1sOyBCZA7t0xHrih3lF3h3CFDAlZFaulIzFtNDVtnW0=
-libvirt.org/go/libvirt v1.8000.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ=
+libvirt.org/go/libvirt v1.8006.0 h1:VtHRGSMAXjLzVFnaXqZLNTV9pZT6GOT94ai6JMVbU4E=
+libvirt.org/go/libvirt v1.8006.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ=
 mvdan.cc/editorconfig v0.1.1-0.20200121172147-e40951bde157 h1:VBYz8greWWP8BDpRX0v7SDv/8rNlZVmdHdO4ZSsHj/E=
 mvdan.cc/editorconfig v0.1.1-0.20200121172147-e40951bde157/go.mod h1:Ge4atmRUYqueGppvJ7JNrtqpqokoJEFxYbP0Z+WeKS8=
 mvdan.cc/sh/v3 v3.1.1 h1:niuYC5Ug0KzLuN6CNX3ru37v4MkVD5Wm9T4Mk2eJr9A=
diff --git a/vendor/libvirt.org/go/libvirt/.gitlab-ci.yml b/vendor/libvirt.org/go/libvirt/.gitlab-ci.yml
index 0edbcd40e..c96c88415 100644
--- a/vendor/libvirt.org/go/libvirt/.gitlab-ci.yml
+++ b/vendor/libvirt.org/go/libvirt/.gitlab-ci.yml
@@ -38,10 +38,10 @@ stages:
 include: '/ci/gitlab.yml'
 
 api-coverage:
-  image: $CI_REGISTRY_IMAGE/ci-centos-8:latest
+  image: $CI_REGISTRY_IMAGE/ci-almalinux-8:latest
   stage: sanity_checks
   needs:
-    - job: x86_64-centos-8-git
+    - job: x86_64-almalinux-8-git
       artifacts: true
   before_script:
     - *git_build_vars
diff --git a/vendor/libvirt.org/go/libvirt/connect.go b/vendor/libvirt.org/go/libvirt/connect.go
index 5736919cf..0289f677a 100644
--- a/vendor/libvirt.org/go/libvirt/connect.go
+++ b/vendor/libvirt.org/go/libvirt/connect.go
@@ -41,10 +41,6 @@ import (
 */
 import "C"
 
-func init() {
-	C.virInitialize()
-}
-
 const (
 	VERSION_NUMBER = uint32(C.LIBVIR_VERSION_NUMBER)
 )
@@ -2495,6 +2491,27 @@ func (c *Connect) DomainRestoreFlags(srcFile, xmlConf string, flags DomainSaveRe
 	return nil
 }
 
+// See also https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainRestoreParams
+func (c *Connect) DomainRestoreParams(params DomainSaveRestoreParams, flags DomainSaveRestoreFlags) error {
+	if C.LIBVIR_VERSION_NUMBER < 8004000 {
+		return makeNotImplementedError("virDomainRestoreParams")
+	}
+
+	info := getDomainSaveRestoreParametersFieldInfo(&params)
+	cparams, cnparams, gerr := typedParamsPackNew(info)
+	if gerr != nil {
+		return gerr
+	}
+
+	defer C.virTypedParamsFree(cparams, cnparams)
+
+	var err C.virError
+	if result := C.virDomainRestoreParamsWrapper(c.ptr, cparams, cnparams, C.uint(flags), &err); result == -1 {
+		return makeError(&err)
+	}
+	return nil
+}
+
 // See also https://libvirt.org/html/libvirt-libvirt-stream.html#virStreamNew
 func (c *Connect) NewStream(flags StreamFlags) (*Stream, error) {
 	var err C.virError
@@ -3052,7 +3069,7 @@ func getDomainStatsMemoryBandwidthMonitorNodeFieldInfo(idx1, idx2 int, params *D
 
 type DomainStatsDirtyRate struct {
 	CalcStatusSet         bool
-	CalcStatus            uint
+	CalcStatus            int
 	CalcStartTimeSet      bool
 	CalcStartTime         int64
 	CalcPeriodSet         bool
@@ -3065,7 +3082,7 @@ func getDomainStatsDirtyRateFieldInfo(params *DomainStatsDirtyRate) map[string]t
 	return map[string]typedParamsFieldInfo{
 		"dirtyrate.calc_status": typedParamsFieldInfo{
 			set: &params.CalcStatusSet,
-			ui:  &params.CalcStatus,
+			i:   &params.CalcStatus,
 		},
 		"dirtyrate.calc_start_time": typedParamsFieldInfo{
 			set: &params.CalcStartTimeSet,
@@ -3360,6 +3377,8 @@ type NodeSEVParameters struct {
 	MaxGuests          uint
 	MaxEsGuestsSet     bool
 	MaxEsGuests        uint
+	CPU0IDSet          bool
+	CPU0ID             string
 }
 
 func getNodeSEVFieldInfo(params *NodeSEVParameters) map[string]typedParamsFieldInfo {
@@ -3388,6 +3407,10 @@ func getNodeSEVFieldInfo(params *NodeSEVParameters) map[string]typedParamsFieldI
 			set: &params.MaxEsGuestsSet,
 			ui:  &params.MaxEsGuests,
 		},
+		C.VIR_NODE_SEV_CPU0_ID: typedParamsFieldInfo{
+			set: &params.CPU0IDSet,
+			s:   &params.CPU0ID,
+		},
 	}
 }
 
diff --git a/vendor/libvirt.org/go/libvirt/connect_compat.h b/vendor/libvirt.org/go/libvirt/connect_compat.h
index 5b89c6fd7..752bbb273 100644
--- a/vendor/libvirt.org/go/libvirt/connect_compat.h
+++ b/vendor/libvirt.org/go/libvirt/connect_compat.h
@@ -310,5 +310,11 @@ typedef struct _virNWFilterBinding *virNWFilterBindingPtr;
 #define VIR_NODE_SEV_MAX_ES_GUESTS "max-es-guests"
 #endif
 
+/* 8.4.0 */
+
+#ifndef VIR_NODE_SEV_CPU0_ID
+#define VIR_NODE_SEV_CPU0_ID "cpu0-id"
+#endif
+
 
 #endif /* LIBVIRT_GO_CONNECT_COMPAT_H__ */
diff --git a/vendor/libvirt.org/go/libvirt/connect_wrapper.go b/vendor/libvirt.org/go/libvirt/connect_wrapper.go
index 31e9b560e..87ace576f 100644
--- a/vendor/libvirt.org/go/libvirt/connect_wrapper.go
+++ b/vendor/libvirt.org/go/libvirt/connect_wrapper.go
@@ -33,6 +33,17 @@ package libvirt
 #include "connect_wrapper.h"
 #include "callbacks_wrapper.h"
 
+int
+virInitializeWrapper(virErrorPtr err)
+{
+    int ret = virInitialize();
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
+}
+
+
 extern void closeCallback(virConnectPtr, int, long);
 void closeCallbackHelper(virConnectPtr conn, int reason, void *opaque)
 {
@@ -1030,6 +1041,25 @@ virDomainRestoreFlagsWrapper(virConnectPtr conn,
 }
 
 
+int
+virDomainRestoreParamsWrapper(virConnectPtr conn,
+                              virTypedParameterPtr params,
+                              int nparams,
+                              unsigned int flags,
+                              virErrorPtr err)
+{
+#if LIBVIR_VERSION_NUMBER < 8004000
+    assert(0); // Caller should have checked version
+#else
+    int ret = virDomainRestoreParams(conn, params, nparams, flags);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
+#endif
+}
+
+
 int
 virDomainSaveImageDefineXMLWrapper(virConnectPtr conn,
                                    const char *file,
diff --git a/vendor/libvirt.org/go/libvirt/connect_wrapper.h b/vendor/libvirt.org/go/libvirt/connect_wrapper.h
index 35a6df1d7..93bba58ab 100644
--- a/vendor/libvirt.org/go/libvirt/connect_wrapper.h
+++ b/vendor/libvirt.org/go/libvirt/connect_wrapper.h
@@ -31,6 +31,9 @@
 #include <libvirt/virterror.h>
 #include "connect_compat.h"
 
+int
+virInitializeWrapper(virErrorPtr err);
+
 void
 closeCallbackHelper(virConnectPtr conn,
                     int reason,
@@ -429,6 +432,13 @@ virDomainRestoreFlagsWrapper(virConnectPtr conn,
                              unsigned int flags,
                              virErrorPtr err);
 
+int
+virDomainRestoreParamsWrapper(virConnectPtr conn,
+                              virTypedParameterPtr params,
+                              int nparams,
+                              unsigned int flags,
+                              virErrorPtr err);
+
 int
 virDomainSaveImageDefineXMLWrapper(virConnectPtr conn,
                                    const char *file,
diff --git a/vendor/libvirt.org/go/libvirt/domain.go b/vendor/libvirt.org/go/libvirt/domain.go
index be74a6cc6..ec5cbdd52 100644
--- a/vendor/libvirt.org/go/libvirt/domain.go
+++ b/vendor/libvirt.org/go/libvirt/domain.go
@@ -99,8 +99,9 @@ const (
 type DomainDestroyFlags uint
 
 const (
-	DOMAIN_DESTROY_DEFAULT  = DomainDestroyFlags(C.VIR_DOMAIN_DESTROY_DEFAULT)
-	DOMAIN_DESTROY_GRACEFUL = DomainDestroyFlags(C.VIR_DOMAIN_DESTROY_GRACEFUL)
+	DOMAIN_DESTROY_DEFAULT     = DomainDestroyFlags(C.VIR_DOMAIN_DESTROY_DEFAULT)
+	DOMAIN_DESTROY_GRACEFUL    = DomainDestroyFlags(C.VIR_DOMAIN_DESTROY_GRACEFUL)
+	DOMAIN_DESTROY_REMOVE_LOGS = DomainDestroyFlags(C.VIR_DOMAIN_DESTROY_REMOVE_LOGS)
 )
 
 type DomainShutdownFlags uint
@@ -142,6 +143,7 @@ const (
 	DOMAIN_START_BYPASS_CACHE = DomainCreateFlags(C.VIR_DOMAIN_START_BYPASS_CACHE)
 	DOMAIN_START_FORCE_BOOT   = DomainCreateFlags(C.VIR_DOMAIN_START_FORCE_BOOT)
 	DOMAIN_START_VALIDATE     = DomainCreateFlags(C.VIR_DOMAIN_START_VALIDATE)
+	DOMAIN_START_RESET_NVRAM  = DomainCreateFlags(C.VIR_DOMAIN_START_RESET_NVRAM)
 )
 
 const DOMAIN_MEMORY_PARAM_UNLIMITED = C.VIR_DOMAIN_MEMORY_PARAM_UNLIMITED
@@ -267,6 +269,7 @@ const (
 	DOMAIN_RUNNING_WAKEUP             = DomainRunningReason(C.VIR_DOMAIN_RUNNING_WAKEUP)             /* returned from pmsuspended due to wakeup event */
 	DOMAIN_RUNNING_CRASHED            = DomainRunningReason(C.VIR_DOMAIN_RUNNING_CRASHED)            /* resumed from crashed */
 	DOMAIN_RUNNING_POSTCOPY           = DomainRunningReason(C.VIR_DOMAIN_RUNNING_POSTCOPY)           /* running in post-copy migration mode */
+	DOMAIN_RUNNING_POSTCOPY_FAILED    = DomainRunningReason(C.VIR_DOMAIN_RUNNING_POSTCOPY_FAILED)    /* running in post-copy migration mode after failure */
 )
 
 type DomainPausedReason int
@@ -340,10 +343,11 @@ const (
 type DomainEventResumedDetailType int
 
 const (
-	DOMAIN_EVENT_RESUMED_UNPAUSED      = DomainEventResumedDetailType(C.VIR_DOMAIN_EVENT_RESUMED_UNPAUSED)
-	DOMAIN_EVENT_RESUMED_MIGRATED      = DomainEventResumedDetailType(C.VIR_DOMAIN_EVENT_RESUMED_MIGRATED)
-	DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT = DomainEventResumedDetailType(C.VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT)
-	DOMAIN_EVENT_RESUMED_POSTCOPY      = DomainEventResumedDetailType(C.VIR_DOMAIN_EVENT_RESUMED_POSTCOPY)
+	DOMAIN_EVENT_RESUMED_UNPAUSED        = DomainEventResumedDetailType(C.VIR_DOMAIN_EVENT_RESUMED_UNPAUSED)
+	DOMAIN_EVENT_RESUMED_MIGRATED        = DomainEventResumedDetailType(C.VIR_DOMAIN_EVENT_RESUMED_MIGRATED)
+	DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT   = DomainEventResumedDetailType(C.VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT)
+	DOMAIN_EVENT_RESUMED_POSTCOPY        = DomainEventResumedDetailType(C.VIR_DOMAIN_EVENT_RESUMED_POSTCOPY)
+	DOMAIN_EVENT_RESUMED_POSTCOPY_FAILED = DomainEventResumedDetailType(C.VIR_DOMAIN_EVENT_RESUMED_POSTCOPY_FAILED)
 )
 
 type DomainEventStoppedDetailType int
@@ -754,6 +758,7 @@ const (
 	DOMAIN_SAVE_BYPASS_CACHE = DomainSaveRestoreFlags(C.VIR_DOMAIN_SAVE_BYPASS_CACHE)
 	DOMAIN_SAVE_RUNNING      = DomainSaveRestoreFlags(C.VIR_DOMAIN_SAVE_RUNNING)
 	DOMAIN_SAVE_PAUSED       = DomainSaveRestoreFlags(C.VIR_DOMAIN_SAVE_PAUSED)
+	DOMAIN_SAVE_RESET_NVRAM  = DomainSaveRestoreFlags(C.VIR_DOMAIN_SAVE_RESET_NVRAM)
 )
 
 type DomainSetTimeFlags uint
@@ -824,6 +829,8 @@ const (
 	MIGRATE_TLS                           = DomainMigrateFlags(C.VIR_MIGRATE_TLS)
 	MIGRATE_PARALLEL                      = DomainMigrateFlags(C.VIR_MIGRATE_PARALLEL)
 	MIGRATE_NON_SHARED_SYNCHRONOUS_WRITES = DomainMigrateFlags(C.VIR_MIGRATE_NON_SHARED_SYNCHRONOUS_WRITES)
+	MIGRATE_POSTCOPY_RESUME               = DomainMigrateFlags(C.VIR_MIGRATE_POSTCOPY_RESUME)
+	MIGRATE_ZEROCOPY                      = DomainMigrateFlags(C.VIR_MIGRATE_ZEROCOPY)
 )
 
 type DomainMigrateMaxSpeedFlags uint
@@ -977,6 +984,20 @@ const (
 	DOMAIN_DIRTYRATE_MEASURED  = DomainDirtyRateStatus(C.VIR_DOMAIN_DIRTYRATE_MEASURED)
 )
 
+type DomainDirtyRateCalcFlags uint
+
+const (
+	DOMAIN_DIRTYRATE_MODE_PAGE_SAMPLING = DomainDirtyRateCalcFlags(C.VIR_DOMAIN_DIRTYRATE_MODE_PAGE_SAMPLING)
+	DOMAIN_DIRTYRATE_MODE_DIRTY_BITMAP  = DomainDirtyRateCalcFlags(C.VIR_DOMAIN_DIRTYRATE_MODE_DIRTY_BITMAP)
+	DOMAIN_DIRTYRATE_MODE_DIRTY_RING    = DomainDirtyRateCalcFlags(C.VIR_DOMAIN_DIRTYRATE_MODE_DIRTY_RING)
+)
+
+type DomainAbortJobFlags uint
+
+const (
+	DOMAIN_ABORT_JOB_POSTCOPY = DomainAbortJobFlags(C.VIR_DOMAIN_ABORT_JOB_POSTCOPY)
+)
+
 // See also https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainFree
 func (d *Domain) Free() error {
 	var err C.virError
@@ -1578,6 +1599,21 @@ func (d *Domain) AbortJob() error {
 	return nil
 }
 
+// See also https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainAbortJobFlags
+func (d *Domain) AbortJobFlags(flags DomainAbortJobFlags) error {
+	var err C.virError
+
+	if C.LIBVIR_VERSION_NUMBER < 8005000 {
+		return makeNotImplementedError("virDomainAbortJobFlags")
+	}
+
+	result := C.virDomainAbortJobFlagsWrapper(d.ptr, C.uint(flags), &err)
+	if result == -1 {
+		return makeError(&err)
+	}
+	return nil
+}
+
 // See also https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainDestroyFlags
 func (d *Domain) DestroyFlags(flags DomainDestroyFlags) error {
 	var err C.virError
@@ -4179,19 +4215,24 @@ func (d *Domain) HasCurrentSnapshot(flags uint32) (bool, error) {
 
 // See also https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainFSFreeze
 func (d *Domain) FSFreeze(mounts []string, flags uint32) error {
+	var err C.virError
+	var ret C.int
 	if C.LIBVIR_VERSION_NUMBER < 1002005 {
 		return makeNotImplementedError("virDomainFSFreeze")
 	}
-	cmounts := make([](*C.char), len(mounts))
+	if len(mounts) == 0 {
+		ret = C.virDomainFSFreezeWrapper(d.ptr, nil, 0, C.uint(flags), &err)
+	} else {
+		cmounts := make([](*C.char), len(mounts))
 
-	for i := 0; i < len(mounts); i++ {
-		cmounts[i] = C.CString(mounts[i])
-		defer C.free(unsafe.Pointer(cmounts[i]))
-	}
+		for i := 0; i < len(mounts); i++ {
+			cmounts[i] = C.CString(mounts[i])
+			defer C.free(unsafe.Pointer(cmounts[i]))
+		}
 
-	nmounts := len(mounts)
-	var err C.virError
-	ret := C.virDomainFSFreezeWrapper(d.ptr, (**C.char)(unsafe.Pointer(&cmounts[0])), C.uint(nmounts), C.uint(flags), &err)
+		nmounts := len(mounts)
+		ret = C.virDomainFSFreezeWrapper(d.ptr, (**C.char)(unsafe.Pointer(&cmounts[0])), C.uint(nmounts), C.uint(flags), &err)
+	}
 	if ret == -1 {
 		return makeError(&err)
 	}
@@ -4201,19 +4242,24 @@ func (d *Domain) FSFreeze(mounts []string, flags uint32) error {
 
 // See also https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainFSThaw
 func (d *Domain) FSThaw(mounts []string, flags uint32) error {
+	var err C.virError
+	var ret C.int
 	if C.LIBVIR_VERSION_NUMBER < 1002005 {
 		return makeNotImplementedError("virDomainFSThaw")
 	}
-	cmounts := make([](*C.char), len(mounts))
+	if len(mounts) == 0 {
+		ret = C.virDomainFSThawWrapper(d.ptr, nil, 0, C.uint(flags), &err)
+	} else {
+		cmounts := make([](*C.char), len(mounts))
 
-	for i := 0; i < len(mounts); i++ {
-		cmounts[i] = C.CString(mounts[i])
-		defer C.free(unsafe.Pointer(cmounts[i]))
-	}
+		for i := 0; i < len(mounts); i++ {
+			cmounts[i] = C.CString(mounts[i])
+			defer C.free(unsafe.Pointer(cmounts[i]))
+		}
 
-	nmounts := len(mounts)
-	var err C.virError
-	ret := C.virDomainFSThawWrapper(d.ptr, (**C.char)(unsafe.Pointer(&cmounts[0])), C.uint(nmounts), C.uint(flags), &err)
+		nmounts := len(mounts)
+		ret = C.virDomainFSThawWrapper(d.ptr, (**C.char)(unsafe.Pointer(&cmounts[0])), C.uint(nmounts), C.uint(flags), &err)
+	}
 	if ret == -1 {
 		return makeError(&err)
 	}
@@ -4335,12 +4381,16 @@ func (d *Domain) DelIOThread(id uint, flags DomainModificationImpact) error {
 // See also https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainSetIOThreadParams
 
 type DomainSetIOThreadParams struct {
-	PollMaxNsSet  bool
-	PollMaxNs     uint64
-	PollGrowSet   bool
-	PollGrow      uint
-	PollShrinkSet bool
-	PollShrink    uint
+	PollMaxNsSet     bool
+	PollMaxNs        uint64
+	PollGrowSet      bool
+	PollGrow         uint
+	PollShrinkSet    bool
+	PollShrink       uint
+	ThreadPoolMinSet bool
+	ThreadPoolMin    int
+	ThreadPoolMaxSet bool
+	ThreadPoolMax    int
 }
 
 func getSetIOThreadParamsFieldInfo(params *DomainSetIOThreadParams) map[string]typedParamsFieldInfo {
@@ -4357,6 +4407,14 @@ func getSetIOThreadParamsFieldInfo(params *DomainSetIOThreadParams) map[string]t
 			set: &params.PollShrinkSet,
 			ui:  &params.PollShrink,
 		},
+		C.VIR_DOMAIN_IOTHREAD_THREAD_POOL_MIN: typedParamsFieldInfo{
+			set: &params.ThreadPoolMinSet,
+			i:   &params.ThreadPoolMin,
+		},
+		C.VIR_DOMAIN_IOTHREAD_THREAD_POOL_MAX: typedParamsFieldInfo{
+			set: &params.ThreadPoolMaxSet,
+			i:   &params.ThreadPoolMax,
+		},
 	}
 }
 
@@ -4654,6 +4712,48 @@ func (d *Domain) SaveFlags(destFile string, destXml string, flags DomainSaveRest
 	return nil
 }
 
+type DomainSaveRestoreParams struct {
+	FileSet bool
+	File    string
+	DXMLSet bool
+	DXML    string
+}
+
+func getDomainSaveRestoreParametersFieldInfo(params *DomainSaveRestoreParams) map[string]typedParamsFieldInfo {
+	return map[string]typedParamsFieldInfo{
+		C.VIR_DOMAIN_SAVE_PARAM_FILE: typedParamsFieldInfo{
+			set: &params.FileSet,
+			s:   &params.File,
+		},
+		C.VIR_DOMAIN_SAVE_PARAM_DXML: typedParamsFieldInfo{
+			set: &params.DXMLSet,
+			s:   &params.DXML,
+		},
+	}
+}
+
+// See also https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainSaveParams
+func (d *Domain) SaveParams(params DomainSaveRestoreParams, flags DomainSaveRestoreFlags) error {
+	if C.LIBVIR_VERSION_NUMBER < 8004000 {
+		return makeNotImplementedError("virDomainSaveParams")
+	}
+
+	info := getDomainSaveRestoreParametersFieldInfo(&params)
+	cparams, cnparams, gerr := typedParamsPackNew(info)
+	if gerr != nil {
+		return gerr
+	}
+
+	defer C.virTypedParamsFree(cparams, cnparams)
+
+	var err C.virError
+	result := C.virDomainSaveParamsWrapper(d.ptr, cparams, cnparams, C.uint(flags), &err)
+	if result == -1 {
+		return makeError(&err)
+	}
+	return nil
+}
+
 type DomainGuestVcpus struct {
 	VcpusSet      bool
 	Vcpus         []bool
@@ -5712,7 +5812,7 @@ func (d *Domain) GetMessages(flags DomainMessageType) ([]string, error) {
 	return msgs, nil
 }
 
-func (d *Domain) StartDirtyRateCalc(secs int, flags uint) error {
+func (d *Domain) StartDirtyRateCalc(secs int, flags DomainDirtyRateCalcFlags) error {
 	if C.LIBVIR_VERSION_NUMBER < 7002000 {
 		return makeNotImplementedError("virDomainStartDirtyRateCalc")
 	}
diff --git a/vendor/libvirt.org/go/libvirt/domain_compat.h b/vendor/libvirt.org/go/libvirt/domain_compat.h
index 680ac242a..95df83f17 100644
--- a/vendor/libvirt.org/go/libvirt/domain_compat.h
+++ b/vendor/libvirt.org/go/libvirt/domain_compat.h
@@ -1238,5 +1238,74 @@ struct _virDomainInterface {
 #define VIR_DOMAIN_LAUNCH_SECURITY_SEV_SECRET_SET_ADDRESS "sev-secret-set-address"
 #endif
 
+/* 8.1.0 */
+
+#ifndef VIR_DOMAIN_SAVE_RESET_NVRAM
+#define VIR_DOMAIN_SAVE_RESET_NVRAM 1 << 3
+#endif
+
+#ifndef VIR_DOMAIN_START_RESET_NVRAM
+#define VIR_DOMAIN_START_RESET_NVRAM 1 << 5
+#endif
+
+
+#ifndef VIR_DOMAIN_DIRTYRATE_MODE_PAGE_SAMPLING
+#define VIR_DOMAIN_DIRTYRATE_MODE_PAGE_SAMPLING 0
+#endif
+
+#ifndef VIR_DOMAIN_DIRTYRATE_MODE_DIRTY_BITMAP
+#define VIR_DOMAIN_DIRTYRATE_MODE_DIRTY_BITMAP 1 << 0
+#endif
+
+#ifndef VIR_DOMAIN_DIRTYRATE_MODE_DIRTY_RING
+#define VIR_DOMAIN_DIRTYRATE_MODE_DIRTY_RING 1 << 1
+#endif
+
+/* 8.3.0 */
+
+#ifndef VIR_DOMAIN_DESTROY_REMOVE_LOGS
+#define VIR_DOMAIN_DESTROY_REMOVE_LOGS 1 << 1
+#endif
+
+/* 8.4.0 */
+
+#ifndef VIR_DOMAIN_SAVE_PARAM_FILE
+#define VIR_DOMAIN_SAVE_PARAM_FILE "file"
+#endif
+
+#ifndef VIR_DOMAIN_SAVE_PARAM_DXML
+#define VIR_DOMAIN_SAVE_PARAM_DXML "dxml"
+#endif
+
+/* 8.5.0 */
+
+#ifndef VIR_DOMAIN_ABORT_JOB_POSTCOPY
+#define VIR_DOMAIN_ABORT_JOB_POSTCOPY (1 << 0)
+#endif
+
+
+#ifndef VIR_DOMAIN_EVENT_RESUMED_POSTCOPY_FAILED
+#define VIR_DOMAIN_EVENT_RESUMED_POSTCOPY_FAILED 4
+#endif
+
+#ifndef VIR_DOMAIN_RUNNING_POSTCOPY_FAILED
+#define VIR_DOMAIN_RUNNING_POSTCOPY_FAILED 11
+#endif
+
+#ifndef VIR_MIGRATE_POSTCOPY_RESUME
+#define VIR_MIGRATE_POSTCOPY_RESUME 19
+#endif
+
+#ifndef VIR_MIGRATE_ZEROCOPY
+#define VIR_MIGRATE_ZEROCOPY 20
+#endif
+
+#ifndef VIR_DOMAIN_IOTHREAD_THREAD_POOL_MIN
+#define VIR_DOMAIN_IOTHREAD_THREAD_POOL_MIN "thread_pool_min"
+#endif
+
+#ifndef VIR_DOMAIN_IOTHREAD_THREAD_POOL_MAX
+#define VIR_DOMAIN_IOTHREAD_THREAD_POOL_MAX "thread_pool_max"
+#endif
 
 #endif /* LIBVIRT_GO_DOMAIN_COMPAT_H__ */
diff --git a/vendor/libvirt.org/go/libvirt/domain_snapshot.go b/vendor/libvirt.org/go/libvirt/domain_snapshot.go
index 72c484bed..b3c9011fd 100644
--- a/vendor/libvirt.org/go/libvirt/domain_snapshot.go
+++ b/vendor/libvirt.org/go/libvirt/domain_snapshot.go
@@ -73,9 +73,10 @@ const (
 type DomainSnapshotRevertFlags uint
 
 const (
-	DOMAIN_SNAPSHOT_REVERT_RUNNING = DomainSnapshotRevertFlags(C.VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING)
-	DOMAIN_SNAPSHOT_REVERT_PAUSED  = DomainSnapshotRevertFlags(C.VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED)
-	DOMAIN_SNAPSHOT_REVERT_FORCE   = DomainSnapshotRevertFlags(C.VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)
+	DOMAIN_SNAPSHOT_REVERT_RUNNING     = DomainSnapshotRevertFlags(C.VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING)
+	DOMAIN_SNAPSHOT_REVERT_PAUSED      = DomainSnapshotRevertFlags(C.VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED)
+	DOMAIN_SNAPSHOT_REVERT_FORCE       = DomainSnapshotRevertFlags(C.VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)
+	DOMAIN_SNAPSHOT_REVERT_RESET_NVRAM = DomainSnapshotRevertFlags(C.VIR_DOMAIN_SNAPSHOT_REVERT_RESET_NVRAM)
 )
 
 type DomainSnapshotDeleteFlags uint
diff --git a/vendor/libvirt.org/go/libvirt/domain_snapshot_compat.h b/vendor/libvirt.org/go/libvirt/domain_snapshot_compat.h
index 44fea6881..80c6dbb2c 100644
--- a/vendor/libvirt.org/go/libvirt/domain_snapshot_compat.h
+++ b/vendor/libvirt.org/go/libvirt/domain_snapshot_compat.h
@@ -37,4 +37,11 @@
 # define VIR_DOMAIN_SNAPSHOT_CREATE_VALIDATE (1 << 9)
 #endif
 
+/* 8.1.0 */
+
+#ifndef VIR_DOMAIN_SNAPSHOT_REVERT_RESET_NVRAM
+#define VIR_DOMAIN_SNAPSHOT_REVERT_RESET_NVRAM 1 << 3
+#endif
+
+
 #endif /* LIBVIRT_GO_DOMAIN_SNAPSHOT_COMPAT_H__ */
diff --git a/vendor/libvirt.org/go/libvirt/domain_wrapper.go b/vendor/libvirt.org/go/libvirt/domain_wrapper.go
index 88aa57276..c437411f5 100644
--- a/vendor/libvirt.org/go/libvirt/domain_wrapper.go
+++ b/vendor/libvirt.org/go/libvirt/domain_wrapper.go
@@ -43,6 +43,23 @@ virDomainAbortJobWrapper(virDomainPtr domain,
 }
 
 
+int
+virDomainAbortJobFlagsWrapper(virDomainPtr domain,
+                              unsigned int flags,
+                              virErrorPtr err)
+{
+#if LIBVIR_VERSION_NUMBER < 8005000
+    assert(0); // Caller should have checked version
+#else
+    int ret = virDomainAbortJobFlags(domain, flags);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
+#endif
+}
+
+
 int
 virDomainAddIOThreadWrapper(virDomainPtr domain,
                             unsigned int iothread_id,
@@ -1803,6 +1820,25 @@ virDomainSaveFlagsWrapper(virDomainPtr domain,
 }
 
 
+int
+virDomainSaveParamsWrapper(virDomainPtr domain,
+                           virTypedParameterPtr params,
+                           int nparams,
+                           unsigned int flags,
+                           virErrorPtr err)
+{
+#if LIBVIR_VERSION_NUMBER < 8004000
+    assert(0); // Caller should have checked version
+#else
+    int ret = virDomainSaveParams(domain, params, nparams, flags);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
+#endif
+}
+
+
 char *
 virDomainScreenshotWrapper(virDomainPtr domain,
                            virStreamPtr stream,
diff --git a/vendor/libvirt.org/go/libvirt/domain_wrapper.h b/vendor/libvirt.org/go/libvirt/domain_wrapper.h
index f7113c647..11c93af15 100644
--- a/vendor/libvirt.org/go/libvirt/domain_wrapper.h
+++ b/vendor/libvirt.org/go/libvirt/domain_wrapper.h
@@ -36,6 +36,11 @@ int
 virDomainAbortJobWrapper(virDomainPtr domain,
                          virErrorPtr err);
 
+int
+virDomainAbortJobFlagsWrapper(virDomainPtr domain,
+                              unsigned int flags,
+                              virErrorPtr err);
+
 int
 virDomainAddIOThreadWrapper(virDomainPtr domain,
                             unsigned int iothread_id,
@@ -764,6 +769,13 @@ virDomainSaveFlagsWrapper(virDomainPtr domain,
                           unsigned int flags,
                           virErrorPtr err);
 
+int
+virDomainSaveParamsWrapper(virDomainPtr domain,
+                           virTypedParameterPtr params,
+                           int nparams,
+                           unsigned int flags,
+                           virErrorPtr err);
+
 char *
 virDomainScreenshotWrapper(virDomainPtr domain,
                            virStreamPtr stream,
diff --git a/vendor/libvirt.org/go/libvirt/error.go b/vendor/libvirt.org/go/libvirt/error.go
index 803ba23da..0ad7f44bb 100644
--- a/vendor/libvirt.org/go/libvirt/error.go
+++ b/vendor/libvirt.org/go/libvirt/error.go
@@ -44,7 +44,6 @@ import (
 
 func init() {
 	C.virSetErrorFunc(nil, (C.virErrorFunc)(C.ignoreErrorFunc))
-	C.virInitialize()
 }
 
 type ErrorLevel int
diff --git a/vendor/libvirt.org/go/libvirt/events.go b/vendor/libvirt.org/go/libvirt/events.go
index 5a2fe0235..3ccaf41cb 100644
--- a/vendor/libvirt.org/go/libvirt/events.go
+++ b/vendor/libvirt.org/go/libvirt/events.go
@@ -30,6 +30,7 @@ package libvirt
 #cgo pkg-config: libvirt
 #include <stdint.h>
 #include "events_wrapper.h"
+#include "connect_wrapper.h"
 */
 import "C"
 
@@ -43,9 +44,14 @@ const (
 )
 
 // See also https://libvirt.org/html/libvirt-libvirt-event.html#virEventRegisterDefaultImpl
+//
+// Note that registering an event loop implementation must be
+// done before creating any Connect object instance
 func EventRegisterDefaultImpl() error {
 	var err C.virError
-	C.virInitialize()
+	if C.virInitializeWrapper(&err) < 0 {
+		return makeError(&err)
+	}
 	if i := int(C.virEventRegisterDefaultImplWrapper(&err)); i != 0 {
 		return makeError(&err)
 	}
@@ -187,10 +193,17 @@ type EventLoop interface {
 var eventLoopImpl EventLoop
 
 // See also https://libvirt.org/html/libvirt-libvirt-event.html#virEventRegisterImpl
-func EventRegisterImpl(impl EventLoop) {
+//
+// Note that registering an event loop implementation must be
+// done before creating any Connect object instance
+func EventRegisterImpl(impl EventLoop) error {
+	var err C.virError
 	eventLoopImpl = impl
-	C.virInitialize()
+	if C.virInitializeWrapper(&err) < 0 {
+		return makeError(&err)
+	}
 	C.virEventRegisterImplWrapper()
+	return nil
 }
 
 //export eventAddHandleFunc
diff --git a/vendor/libvirt.org/go/libvirt/qemu.go b/vendor/libvirt.org/go/libvirt/qemu.go
index 065e053cc..41a54fe17 100644
--- a/vendor/libvirt.org/go/libvirt/qemu.go
+++ b/vendor/libvirt.org/go/libvirt/qemu.go
@@ -39,6 +39,7 @@ package libvirt
 import "C"
 
 import (
+	"os"
 	"unsafe"
 )
 
@@ -94,6 +95,45 @@ func (d *Domain) QemuMonitorCommand(command string, flags DomainQemuMonitorComma
 	return rstring, nil
 }
 
+// See also https://libvirt.org/html/libvirt-libvirt-qemu.html#virDomainQemuMonitorCommandWithFiles
+func (d *Domain) QemuMonitorCommandWithFiles(command string, infiles []os.File, flags DomainQemuMonitorCommandFlags) (string, []*os.File, error) {
+	if C.LIBVIR_VERSION_NUMBER < 8002000 {
+		return "", []*os.File{}, makeNotImplementedError("virDomainQemuMonitorCommandWithFiles")
+	}
+
+	cninfiles := C.uint(len(infiles))
+	cinfiles := make([]C.int, len(infiles))
+	for i := 0; i < len(infiles); i++ {
+		cinfiles[i] = C.int(infiles[i].Fd())
+	}
+	cCommand := C.CString(command)
+	defer C.free(unsafe.Pointer(cCommand))
+
+	var cResult *C.char
+	var cnoutfiles C.uint
+	var coutfiles *C.int
+	var err C.virError
+	result := C.virDomainQemuMonitorCommandWithFilesWrapper(d.ptr, cCommand,
+		cninfiles, &cinfiles[0], &cnoutfiles, &coutfiles,
+		&cResult, C.uint(flags), &err)
+
+	if result != 0 {
+		return "", []*os.File{}, makeError(&err)
+	}
+
+	outfiles := []*os.File{}
+	for i := 0; i < int(cnoutfiles); i++ {
+		coutfile := *(*C.int)(unsafe.Pointer(uintptr(unsafe.Pointer(coutfiles)) + (unsafe.Sizeof(*coutfiles) * uintptr(i))))
+
+		outfiles = append(outfiles, os.NewFile(uintptr(coutfile), "mon-cmd-out"))
+	}
+	C.free(unsafe.Pointer(coutfiles))
+
+	rstring := C.GoString(cResult)
+	C.free(unsafe.Pointer(cResult))
+	return rstring, outfiles, nil
+}
+
 // See also https://libvirt.org/html/libvirt-libvirt-qemu.html#virDomainQemuAgentCommand
 func (d *Domain) QemuAgentCommand(command string, timeout DomainQemuAgentCommandTimeout, flags uint32) (string, error) {
 	cCommand := C.CString(command)
diff --git a/vendor/libvirt.org/go/libvirt/qemu_wrapper.go b/vendor/libvirt.org/go/libvirt/qemu_wrapper.go
index 2e91a83e8..5e984cacc 100644
--- a/vendor/libvirt.org/go/libvirt/qemu_wrapper.go
+++ b/vendor/libvirt.org/go/libvirt/qemu_wrapper.go
@@ -131,5 +131,28 @@ virDomainQemuMonitorCommandWrapper(virDomainPtr domain,
 }
 
 
+int
+virDomainQemuMonitorCommandWithFilesWrapper(virDomainPtr domain,
+                                            const char *cmd,
+					    unsigned int ninfiles,
+					    int *infiles,
+					    unsigned int *noutfiles,
+					    int **outfiles,
+                                            char **result,
+                                            unsigned int flags,
+                                            virErrorPtr err)
+{
+#if LIBVIR_VERSION_NUMBER < 8002000
+    assert(0); // Caller should have checked version
+#else
+    int ret = virDomainQemuMonitorCommandWithFiles(domain, cmd, ninfiles, infiles, noutfiles, outfiles, result, flags);
+    if (ret < 0) {
+        virCopyLastError(err);
+    }
+    return ret;
+#endif
+}
+
+
 */
 import "C"
diff --git a/vendor/libvirt.org/go/libvirt/qemu_wrapper.h b/vendor/libvirt.org/go/libvirt/qemu_wrapper.h
index bec1fe624..d4c0533ac 100644
--- a/vendor/libvirt.org/go/libvirt/qemu_wrapper.h
+++ b/vendor/libvirt.org/go/libvirt/qemu_wrapper.h
@@ -74,5 +74,16 @@ virDomainQemuMonitorCommandWrapper(virDomainPtr domain,
                                    unsigned int flags,
                                    virErrorPtr err);
 
+int
+virDomainQemuMonitorCommandWithFilesWrapper(virDomainPtr domain,
+					    const char *cmd,
+					    unsigned int ninfiles,
+					    int *infiles,
+					    unsigned int *noutfiles,
+					    int **outfiles,
+					    char **result,
+					    unsigned int flags,
+					    virErrorPtr err);
+
 
 #endif /* LIBVIRT_GO_DOMAIN_EVENTS_WRAPPER_H__ */
diff --git a/vendor/libvirt.org/go/libvirt/typedparams.go b/vendor/libvirt.org/go/libvirt/typedparams.go
index 761fe315a..a39199166 100644
--- a/vendor/libvirt.org/go/libvirt/typedparams.go
+++ b/vendor/libvirt.org/go/libvirt/typedparams.go
@@ -71,6 +71,8 @@ func typedParamsUnpack(cparams *C.virTypedParameter, cnparams C.int, infomap map
 					*value.sl = append(*value.sl, C.GoString(cs))
 					*value.set = true
 					count++
+				} else if ret < 0 {
+					break
 				}
 			}
 		} else {
@@ -126,6 +128,9 @@ func typedParamsUnpack(cparams *C.virTypedParameter, cnparams C.int, infomap map
 				count++
 			}
 		}
+		if ret < 0 {
+			return count, makeError(&err)
+		}
 	}
 
 	return count, nil
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 49dc79d62..198560e4f 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -1152,7 +1152,7 @@ kubevirt.io/controller-lifecycle-operator-sdk/pkg/sdk/api
 ## explicit; go 1.16
 kubevirt.io/qe-tools/pkg/ginkgo-reporters
 kubevirt.io/qe-tools/pkg/polarion-xml
-# libvirt.org/go/libvirt v1.8000.0
+# libvirt.org/go/libvirt v1.8006.0
 ## explicit; go 1.11
 libvirt.org/go/libvirt
 # mvdan.cc/editorconfig v0.1.1-0.20200121172147-e40951bde157
-- 
2.37.1

openSUSE Build Service is sponsored by