mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-06 13:05:20 +00:00
e03e27ee08
For some architectures and setups, device removal can take longer than the default 5 seconds. This results in commands such as 'virsh setvcpus' to fire timeout messages even if the operation were successful in the guest, confusing the user. This patch sets a new 10 seconds unplug timeout for PPC64 guests. All other archs will keep the default 5 seconds timeout. Instead of putting 'if PPC64' conditionals inside qemu_hotplug.c to set the new timeout value, a new function called qemuDomainGetUnplugTimeout was added. The timeout value is then retrieved when needed, by passing the correspondent DomainDef object. This approach allows for different guest architectures to have distint unplug timeout intervals, regardless of the host architecture. This design also makes it easier to modify/enhance the unplug timeout logic in the future (allow for special timeouts for TCG domains, for example). A new mock file was created to work with qemuhotplugtest.c, given that the test timeout is significantly shorter than the actual timeout value in qemu_hotplug.c. The now unused 'qemuDomainRemoveDeviceWaitTime' global can't be simply erased from qemu_hotplug.c though. Next patch will remove it properly. Reviewed-by: Cole Robinson <crobinso@redhat.com> Suggested-by: Cole Robinson <crobinso@redhat.com> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
166 lines
7.3 KiB
C
166 lines
7.3 KiB
C
/*
|
|
* qemu_hotplug.h: QEMU device hotplug management
|
|
*
|
|
* Copyright (C) 2006-2007, 2009-2012 Red Hat, Inc.
|
|
* Copyright (C) 2006 Daniel P. Berrange
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see
|
|
* <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "qemu_conf.h"
|
|
#include "qemu_domain.h"
|
|
#include "domain_conf.h"
|
|
|
|
int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainDiskDefPtr disk,
|
|
virStorageSourcePtr newsrc,
|
|
bool force);
|
|
|
|
void qemuDomainDelTLSObjects(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
qemuDomainAsyncJob asyncJob,
|
|
const char *secAlias,
|
|
const char *tlsAlias);
|
|
|
|
int qemuDomainAddTLSObjects(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
qemuDomainAsyncJob asyncJob,
|
|
virJSONValuePtr *secProps,
|
|
virJSONValuePtr *tlsProps);
|
|
|
|
int qemuDomainGetTLSObjects(virQEMUCapsPtr qemuCaps,
|
|
qemuDomainSecretInfoPtr secinfo,
|
|
const char *tlsCertdir,
|
|
bool tlsListen,
|
|
bool tlsVerify,
|
|
const char *alias,
|
|
virJSONValuePtr *tlsProps,
|
|
virJSONValuePtr *secProps);
|
|
|
|
int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainControllerDefPtr controller);
|
|
int qemuDomainAttachDeviceDiskLive(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainDeviceDefPtr dev);
|
|
int qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainNetDefPtr net);
|
|
int qemuDomainAttachRedirdevDevice(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainRedirdevDefPtr hostdev);
|
|
int qemuDomainAttachHostDevice(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainHostdevDefPtr hostdev);
|
|
int qemuDomainAttachShmemDevice(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainShmemDefPtr shmem);
|
|
int qemuDomainAttachWatchdog(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainWatchdogDefPtr watchdog);
|
|
int qemuDomainFindGraphicsIndex(virDomainDefPtr def,
|
|
virDomainGraphicsDefPtr dev);
|
|
int qemuDomainAttachMemory(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainMemoryDefPtr mem);
|
|
int qemuDomainChangeGraphics(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainGraphicsDefPtr dev);
|
|
int qemuDomainChangeGraphicsPasswords(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
int type,
|
|
virDomainGraphicsAuthDefPtr auth,
|
|
const char *defaultPasswd,
|
|
int asyncJob);
|
|
int qemuDomainChangeNet(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainDeviceDefPtr dev);
|
|
int qemuDomainChangeNetLinkState(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainNetDefPtr dev,
|
|
int linkstate);
|
|
|
|
int qemuDomainAttachInputDevice(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainInputDefPtr input);
|
|
|
|
int qemuDomainAttachVsockDevice(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainVsockDefPtr vsock);
|
|
|
|
int qemuDomainAttachLease(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainLeaseDefPtr lease);
|
|
int qemuDomainAttachChrDevice(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainChrDefPtr chr);
|
|
int qemuDomainAttachRNGDevice(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainRNGDefPtr rng);
|
|
|
|
int qemuDomainDetachDeviceLive(virDomainObjPtr vm,
|
|
virDomainDeviceDefPtr match,
|
|
virQEMUDriverPtr driver,
|
|
bool async);
|
|
|
|
void qemuDomainRemoveVcpuAlias(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
const char *alias);
|
|
|
|
int
|
|
qemuDomainChrInsert(virDomainDefPtr vmdef,
|
|
virDomainChrDefPtr chr);
|
|
virDomainChrDefPtr
|
|
qemuDomainChrRemove(virDomainDefPtr vmdef,
|
|
virDomainChrDefPtr chr);
|
|
|
|
int qemuDomainRemoveDevice(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainDeviceDefPtr dev);
|
|
|
|
bool qemuDomainSignalDeviceRemoval(virDomainObjPtr vm,
|
|
const char *devAlias,
|
|
qemuDomainUnpluggingDeviceStatus status);
|
|
|
|
int qemuDomainSetVcpusInternal(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainDefPtr def,
|
|
virDomainDefPtr persistentDef,
|
|
unsigned int nvcpus,
|
|
bool hotpluggable);
|
|
|
|
int qemuDomainSetVcpuInternal(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
virDomainDefPtr def,
|
|
virDomainDefPtr persistentDef,
|
|
virBitmapPtr vcpus,
|
|
bool state);
|
|
|
|
int qemuDomainAttachDBusVMState(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
const char *id,
|
|
const char *addr,
|
|
qemuDomainAsyncJob asyncJob);
|
|
|
|
int qemuDomainDetachDBusVMState(virQEMUDriverPtr driver,
|
|
virDomainObjPtr vm,
|
|
const char *id,
|
|
qemuDomainAsyncJob asyncJob);
|
|
|
|
unsigned long long qemuDomainGetUnplugTimeout(virDomainObjPtr vm);
|