if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV))
virBufferAsprintf(buf, "<nodename index='%llu'/>\n", priv->nodenameindex);
+ virBufferAsprintf(buf, "<fdset index='%u'/>\n", priv->fdsetindex);
+
if (priv->memPrealloc)
virBufferAddLit(buf, "<memPrealloc/>\n");
return -1;
}
+ if (virXPathUInt("string(./fdset/@index)", ctxt, &priv->fdsetindex) == 0)
+ priv->fdsetindexParsed = true;
+
priv->memPrealloc = virXPathBoolean("boolean(./memPrealloc)", ctxt) == 1;
if (virXPathULongLong("string(./originalMemlock)",
/* counter for generating node names for qemu disks */
unsigned long long nodenameindex;
- /* counter for generating IDs of fdsets - only relevant during startup */
+ /* counter for generating IDs of fdsets */
unsigned int fdsetindex;
+ bool fdsetindexParsed;
/* qemuProcessStartCPUs stores the reason for starting vCPUs here for the
* RESUME event handler to use it */
}
+static int
+qemuProcessRefreshFdsetIndex(virDomainObj *vm)
+{
+ qemuDomainObjPrivate *priv = vm->privateData;
+ g_autoptr(qemuMonitorFdsets) fdsets = NULL;
+ size_t i;
+ int rc;
+
+ /* if the previous index was in the status XML we don't need to update it */
+ if (priv->fdsetindexParsed)
+ return 0;
+
+ qemuDomainObjEnterMonitor(priv->driver, vm);
+ rc = qemuMonitorQueryFdsets(priv->mon, &fdsets);
+ qemuDomainObjExitMonitor(vm);
+
+ if (rc < 0)
+ return -1;
+
+ for (i = 0; i < fdsets->nfdsets; i++) {
+ if (fdsets->fdsets[i].id >= priv->fdsetindex)
+ priv->fdsetindex = fdsets->fdsets[i].id + 1;
+ }
+
+ return 0;
+}
+
+
static void
qemuRefreshRTC(virQEMUDriver *driver,
virDomainObj *vm)
if (qemuRefreshPRManagerState(driver, obj) < 0)
goto error;
+ if (qemuProcessRefreshFdsetIndex(obj) < 0)
+ goto error;
+
qemuProcessReconnectCheckMemAliasOrderMismatch(obj);
if (qemuConnectAgent(driver, obj) < 0)
<chardevStdioLogd/>
<allowReboot value='yes'/>
<nodename index='0'/>
+ <fdset index='0'/>
<blockjobs active='yes'>
<blockjob name='backup-vda-libvirt-3-format' type='backup' state='running' jobflags='0x0'>
<disk dst='vda'/>
<chardevStdioLogd/>
<allowReboot value='yes'/>
<nodename index='0'/>
+ <fdset index='0'/>
<blockjobs active='yes'>
<blockjob name='broken-test' type='broken' state='ready' brokentype='commit'/>
<blockjob name='commit-vdc-libvirt-9-format' type='commit' state='running' jobflags='0x0'>
<libDir path='/tmp'/>
<channelTargetDir path='/tmp/channel'/>
<allowReboot value='yes'/>
+ <fdset index='0'/>
<blockjobs active='yes'/>
<agentTimeout>-2</agentTimeout>
<domain type='qemu' id='1'>
<channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-1-nest'/>
<chardevStdioLogd/>
<allowReboot value='yes'/>
+ <fdset index='0'/>
<blockjobs active='no'/>
<agentTimeout>-2</agentTimeout>
<domain type='kvm' id='1'>
<rememberOwner/>
<allowReboot value='yes'/>
<nodename index='3'/>
+ <fdset index='0'/>
<blockjobs active='yes'>
<blockjob name='drive-virtio-disk0' type='copy' state='ready' jobflags='0x0'>
<disk dst='vda'/>
<channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-4-upstream'/>
<chardevStdioLogd/>
<allowReboot value='yes'/>
+ <fdset index='0'/>
<blockjobs active='no'/>
<agentTimeout>-2</agentTimeout>
<domain type='kvm' id='4'>
<channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-3-upstream'/>
<chardevStdioLogd/>
<allowReboot value='yes'/>
+ <fdset index='0'/>
<blockjobs active='no'/>
<agentTimeout>-2</agentTimeout>
<domain type='kvm' id='3'>
<channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-7-nest'/>
<chardevStdioLogd/>
<allowReboot value='yes'/>
+ <fdset index='0'/>
<blockjobs active='no'/>
<agentTimeout>-2</agentTimeout>
<domain type='kvm' id='7'>
<chardevStdioLogd/>
<allowReboot value='yes'/>
<nodename index='123'/>
+ <fdset index='321'/>
<blockjobs active='no'/>
<agentTimeout>-2</agentTimeout>
<domain type='kvm' id='1'>
<channelTargetDir path='/var/lib/libvirt/qemu/channel/target/domain-1-upstream'/>
<chardevStdioLogd/>
<allowReboot value='yes'/>
+ <fdset index='0'/>
<blockjobs active='no'/>
<agentTimeout>-2</agentTimeout>
<domain type='kvm' id='1'>
<libDir path='/tmp'/>
<channelTargetDir path='/tmp/channel'/>
<allowReboot value='yes'/>
+ <fdset index='0'/>
<blockjobs active='no'/>
<agentTimeout>-2</agentTimeout>
<domain type='kvm' id='1729'>