2
* qemu_process.h: QEMU process management
4
* Copyright (C) 2006-2012 Red Hat, Inc.
6
* This library is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
11
* This library is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with this library. If not, see
18
* <http://www.gnu.org/licenses/>.
29
#include <sys/resource.h>
30
#include <linux/capability.h>
32
#include "qemu_process.h"
33
#include "qemu_domain.h"
34
#include "qemu_cgroup.h"
35
#include "qemu_capabilities.h"
36
#include "qemu_monitor.h"
37
#include "qemu_command.h"
38
#include "qemu_hostdev.h"
39
#include "qemu_hotplug.h"
40
#include "qemu_bridge_filter.h"
41
#include "qemu_migration.h"
44
# define NUMA_VERSION1_COMPATIBILITY 1
48
#include "datatypes.h"
50
#include "virterror_internal.h"
54
#include "virpidfile.h"
58
#include "processinfo.h"
59
#include "domain_audit.h"
60
#include "domain_nwfilter.h"
61
#include "locking/domain_lock.h"
62
#include "network/bridge_driver.h"
64
#include "virprocess.h"
66
#include "virnetdevtap.h"
69
#define VIR_FROM_THIS VIR_FROM_QEMU
71
#define START_POSTFIX ": starting up\n"
72
#define ATTACH_POSTFIX ": attaching\n"
73
#define SHUTDOWN_POSTFIX ": shutting down\n"
76
* qemudRemoveDomainStatus
78
* remove all state files of a domain from statedir
80
* Returns 0 on success
83
qemuProcessRemoveDomainStatus(struct qemud_driver *driver,
88
qemuDomainObjPrivatePtr priv = vm->privateData;
90
if (virAsprintf(&file, "%s/%s.xml", driver->stateDir, vm->def->name) < 0) {
95
if (unlink(file) < 0 && errno != ENOENT && errno != ENOTDIR)
96
VIR_WARN("Failed to remove domain XML for %s: %s",
97
vm->def->name, virStrerror(errno, ebuf, sizeof(ebuf)));
101
unlink(priv->pidfile) < 0 &&
103
VIR_WARN("Failed to remove PID file for %s: %s",
104
vm->def->name, virStrerror(errno, ebuf, sizeof(ebuf)));
110
/* XXX figure out how to remove this */
111
extern struct qemud_driver *qemu_driver;
114
* This is a callback registered with a qemuAgentPtr instance,
115
* and to be invoked when the agent console hits an end of file
116
* condition, or error, thus indicating VM shutdown should be
120
qemuProcessHandleAgentEOF(qemuAgentPtr agent,
123
struct qemud_driver *driver = qemu_driver;
124
qemuDomainObjPrivatePtr priv;
126
VIR_DEBUG("Received EOF from agent on %p '%s'", vm, vm->def->name);
128
qemuDriverLock(driver);
129
virDomainObjLock(vm);
131
priv = vm->privateData;
132
if (priv->agent == agent)
135
virDomainObjUnlock(vm);
136
qemuDriverUnlock(driver);
138
qemuAgentClose(agent);
143
* This is invoked when there is some kind of error
144
* parsing data to/from the agent. The VM can continue
145
* to run, but no further agent commands will be
149
qemuProcessHandleAgentError(qemuAgentPtr agent ATTRIBUTE_UNUSED,
152
struct qemud_driver *driver = qemu_driver;
153
qemuDomainObjPrivatePtr priv;
155
VIR_DEBUG("Received error from agent on %p '%s'", vm, vm->def->name);
157
qemuDriverLock(driver);
158
virDomainObjLock(vm);
160
priv = vm->privateData;
162
priv->agentError = true;
164
virDomainObjUnlock(vm);
165
qemuDriverUnlock(driver);
168
static void qemuProcessHandleAgentDestroy(qemuAgentPtr agent,
171
VIR_DEBUG("Received destroy agent=%p vm=%p", agent, vm);
177
static qemuAgentCallbacks agentCallbacks = {
178
.destroy = qemuProcessHandleAgentDestroy,
179
.eofNotify = qemuProcessHandleAgentEOF,
180
.errorNotify = qemuProcessHandleAgentError,
183
static virDomainChrSourceDefPtr
184
qemuFindAgentConfig(virDomainDefPtr def)
186
virDomainChrSourceDefPtr config = NULL;
189
for (i = 0 ; i < def->nchannels ; i++) {
190
virDomainChrDefPtr channel = def->channels[i];
192
if (channel->targetType != VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO)
195
if (STREQ_NULLABLE(channel->target.name, "org.qemu.guest_agent.0")) {
196
config = &channel->source;
205
qemuConnectAgent(struct qemud_driver *driver, virDomainObjPtr vm)
207
qemuDomainObjPrivatePtr priv = vm->privateData;
209
qemuAgentPtr agent = NULL;
210
virDomainChrSourceDefPtr config = qemuFindAgentConfig(vm->def);
215
if (virSecurityManagerSetDaemonSocketLabel(driver->securityManager,
217
VIR_ERROR(_("Failed to set security context for agent for %s"),
222
/* Hold an extra reference because we can't allow 'vm' to be
223
* deleted while the agent is active */
226
ignore_value(virTimeMillisNow(&priv->agentStart));
227
virDomainObjUnlock(vm);
228
qemuDriverUnlock(driver);
230
agent = qemuAgentOpen(vm,
234
qemuDriverLock(driver);
235
virDomainObjLock(vm);
236
priv->agentStart = 0;
238
if (virSecurityManagerClearSocketLabel(driver->securityManager,
240
VIR_ERROR(_("Failed to clear security context for agent for %s"),
248
if (!virDomainObjIsActive(vm)) {
249
qemuAgentClose(agent);
254
if (priv->agent == NULL) {
255
VIR_INFO("Failed to connect agent for %s", vm->def->name);
267
* This is a callback registered with a qemuMonitorPtr instance,
268
* and to be invoked when the monitor console hits an end of file
269
* condition, or error, thus indicating VM shutdown should be
273
qemuProcessHandleMonitorEOF(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
276
struct qemud_driver *driver = qemu_driver;
277
virDomainEventPtr event = NULL;
278
qemuDomainObjPrivatePtr priv;
279
int eventReason = VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN;
280
int stopReason = VIR_DOMAIN_SHUTOFF_SHUTDOWN;
281
const char *auditReason = "shutdown";
283
VIR_DEBUG("Received EOF on %p '%s'", vm, vm->def->name);
285
qemuDriverLock(driver);
286
virDomainObjLock(vm);
288
priv = vm->privateData;
290
if (priv->beingDestroyed) {
291
VIR_DEBUG("Domain is being destroyed, EOF is expected");
295
if (!virDomainObjIsActive(vm)) {
296
VIR_DEBUG("Domain %p is not active, ignoring EOF", vm);
300
if (priv->monJSON && !priv->gotShutdown) {
301
VIR_DEBUG("Monitor connection to '%s' closed without SHUTDOWN event; "
302
"assuming the domain crashed", vm->def->name);
303
eventReason = VIR_DOMAIN_EVENT_STOPPED_FAILED;
304
stopReason = VIR_DOMAIN_SHUTOFF_CRASHED;
305
auditReason = "failed";
308
event = virDomainEventNewFromObj(vm,
309
VIR_DOMAIN_EVENT_STOPPED,
311
qemuProcessStop(driver, vm, stopReason, 0);
312
virDomainAuditStop(vm, auditReason);
314
if (!vm->persistent) {
315
qemuDomainRemoveInactive(driver, vm);
320
virDomainObjUnlock(vm);
324
qemuDomainEventQueue(driver, event);
325
qemuDriverUnlock(driver);
330
* This is invoked when there is some kind of error
331
* parsing data to/from the monitor. The VM can continue
332
* to run, but no further monitor commands will be
336
qemuProcessHandleMonitorError(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
339
struct qemud_driver *driver = qemu_driver;
340
virDomainEventPtr event = NULL;
342
VIR_DEBUG("Received error on %p '%s'", vm, vm->def->name);
344
qemuDriverLock(driver);
345
virDomainObjLock(vm);
347
((qemuDomainObjPrivatePtr) vm->privateData)->monError = true;
348
event = virDomainEventControlErrorNewFromObj(vm);
350
qemuDomainEventQueue(driver, event);
352
virDomainObjUnlock(vm);
353
qemuDriverUnlock(driver);
357
static virDomainDiskDefPtr
358
qemuProcessFindDomainDiskByPath(virDomainObjPtr vm,
361
int i = virDomainDiskIndexByName(vm->def, path, true);
364
return vm->def->disks[i];
366
virReportError(VIR_ERR_INTERNAL_ERROR,
367
_("no disk found with path %s"),
372
static virDomainDiskDefPtr
373
qemuProcessFindDomainDiskByAlias(virDomainObjPtr vm,
378
if (STRPREFIX(alias, QEMU_DRIVE_HOST_PREFIX))
379
alias += strlen(QEMU_DRIVE_HOST_PREFIX);
381
for (i = 0; i < vm->def->ndisks; i++) {
382
virDomainDiskDefPtr disk;
384
disk = vm->def->disks[i];
385
if (disk->info.alias != NULL && STREQ(disk->info.alias, alias))
389
virReportError(VIR_ERR_INTERNAL_ERROR,
390
_("no disk found with alias %s"),
396
qemuProcessGetVolumeQcowPassphrase(virConnectPtr conn,
397
virDomainDiskDefPtr disk,
406
virStorageEncryptionPtr enc;
408
if (!disk->encryption) {
409
virReportError(VIR_ERR_INTERNAL_ERROR,
410
_("disk %s does not have any encryption information"),
414
enc = disk->encryption;
417
virReportError(VIR_ERR_INTERNAL_ERROR,
418
"%s", _("cannot find secrets without a connection"));
422
if (conn->secretDriver == NULL ||
423
conn->secretDriver->lookupByUUID == NULL ||
424
conn->secretDriver->getValue == NULL) {
425
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
426
_("secret storage not supported"));
430
if (enc->format != VIR_STORAGE_ENCRYPTION_FORMAT_QCOW ||
431
enc->nsecrets != 1 ||
432
enc->secrets[0]->type !=
433
VIR_STORAGE_ENCRYPTION_SECRET_TYPE_PASSPHRASE) {
434
virReportError(VIR_ERR_XML_ERROR,
435
_("invalid <encryption> for volume %s"), disk->src);
439
secret = conn->secretDriver->lookupByUUID(conn,
440
enc->secrets[0]->uuid);
443
data = conn->secretDriver->getValue(secret, &size, 0,
444
VIR_SECRET_GET_VALUE_INTERNAL_CALL);
445
virObjectUnref(secret);
449
if (memchr(data, '\0', size) != NULL) {
450
memset(data, 0, size);
452
virReportError(VIR_ERR_XML_ERROR,
453
_("format='qcow' passphrase for %s must not contain a "
454
"'\\0'"), disk->src);
458
if (VIR_ALLOC_N(passphrase, size + 1) < 0) {
459
memset(data, 0, size);
464
memcpy(passphrase, data, size);
465
passphrase[size] = '\0';
467
memset(data, 0, size);
470
*secretRet = passphrase;
480
qemuProcessFindVolumeQcowPassphrase(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
487
virDomainDiskDefPtr disk;
490
virDomainObjLock(vm);
491
disk = qemuProcessFindDomainDiskByPath(vm, path);
496
ret = qemuProcessGetVolumeQcowPassphrase(conn, disk, secretRet, secretLen);
499
virDomainObjUnlock(vm);
505
qemuProcessHandleReset(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
508
struct qemud_driver *driver = qemu_driver;
509
virDomainEventPtr event;
510
qemuDomainObjPrivatePtr priv;
512
virDomainObjLock(vm);
514
event = virDomainEventRebootNewFromObj(vm);
515
priv = vm->privateData;
517
qemuAgentNotifyEvent(priv->agent, QEMU_AGENT_EVENT_RESET);
519
virDomainObjUnlock(vm);
522
qemuDriverLock(driver);
523
qemuDomainEventQueue(driver, event);
524
qemuDriverUnlock(driver);
532
* Since we have the '-no-shutdown' flag set, the
533
* QEMU process will currently have guest OS shutdown
534
* and the CPUS stopped. To fake the reboot, we thus
535
* want todo a reset of the virtual hardware, followed
536
* by restart of the CPUs. This should result in the
537
* guest OS booting up again
540
qemuProcessFakeReboot(void *opaque)
542
struct qemud_driver *driver = qemu_driver;
543
virDomainObjPtr vm = opaque;
544
qemuDomainObjPrivatePtr priv = vm->privateData;
545
virDomainEventPtr event = NULL;
547
VIR_DEBUG("vm=%p", vm);
548
qemuDriverLock(driver);
549
virDomainObjLock(vm);
550
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
553
if (!virDomainObjIsActive(vm)) {
554
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
555
_("guest unexpectedly quit"));
559
qemuDomainObjEnterMonitorWithDriver(driver, vm);
560
if (qemuMonitorSystemReset(priv->mon) < 0) {
561
qemuDomainObjExitMonitorWithDriver(driver, vm);
564
qemuDomainObjExitMonitorWithDriver(driver, vm);
566
if (!virDomainObjIsActive(vm)) {
567
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
568
_("guest unexpectedly quit"));
572
if (qemuProcessStartCPUs(driver, vm, NULL,
573
VIR_DOMAIN_RUNNING_BOOTED,
574
QEMU_ASYNC_JOB_NONE) < 0) {
575
if (virGetLastError() == NULL)
576
virReportError(VIR_ERR_INTERNAL_ERROR,
577
"%s", _("resume operation failed"));
580
priv->gotShutdown = false;
581
event = virDomainEventNewFromObj(vm,
582
VIR_DOMAIN_EVENT_RESUMED,
583
VIR_DOMAIN_EVENT_RESUMED_UNPAUSED);
588
if (!qemuDomainObjEndJob(driver, vm))
594
ignore_value(qemuProcessKill(driver, vm,
595
VIR_QEMU_PROCESS_KILL_FORCE));
597
if (virObjectUnref(vm))
598
virDomainObjUnlock(vm);
601
qemuDomainEventQueue(driver, event);
602
qemuDriverUnlock(driver);
607
qemuProcessShutdownOrReboot(struct qemud_driver *driver,
610
qemuDomainObjPrivatePtr priv = vm->privateData;
612
if (priv->fakeReboot) {
613
qemuDomainSetFakeReboot(driver, vm, false);
616
if (virThreadCreate(&th,
618
qemuProcessFakeReboot,
620
VIR_ERROR(_("Failed to create reboot thread, killing domain"));
621
ignore_value(qemuProcessKill(driver, vm,
622
VIR_QEMU_PROCESS_KILL_NOWAIT));
626
ignore_value(qemuProcessKill(driver, vm, VIR_QEMU_PROCESS_KILL_NOWAIT));
631
qemuProcessHandleShutdown(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
634
struct qemud_driver *driver = qemu_driver;
635
qemuDomainObjPrivatePtr priv;
636
virDomainEventPtr event = NULL;
638
VIR_DEBUG("vm=%p", vm);
640
virDomainObjLock(vm);
642
priv = vm->privateData;
643
if (priv->gotShutdown) {
644
VIR_DEBUG("Ignoring repeated SHUTDOWN event from domain %s",
647
} else if (!virDomainObjIsActive(vm)) {
648
VIR_DEBUG("Ignoring SHUTDOWN event from inactive domain %s",
652
priv->gotShutdown = true;
654
VIR_DEBUG("Transitioned guest %s to shutdown state",
656
virDomainObjSetState(vm,
658
VIR_DOMAIN_SHUTDOWN_UNKNOWN);
659
event = virDomainEventNewFromObj(vm,
660
VIR_DOMAIN_EVENT_SHUTDOWN,
661
VIR_DOMAIN_EVENT_SHUTDOWN_FINISHED);
663
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) {
664
VIR_WARN("Unable to save status on vm %s after state change",
669
qemuAgentNotifyEvent(priv->agent, QEMU_AGENT_EVENT_SHUTDOWN);
671
qemuProcessShutdownOrReboot(driver, vm);
674
virDomainObjUnlock(vm);
677
qemuDriverLock(driver);
678
qemuDomainEventQueue(driver, event);
679
qemuDriverUnlock(driver);
687
qemuProcessHandleStop(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
690
struct qemud_driver *driver = qemu_driver;
691
virDomainEventPtr event = NULL;
693
virDomainObjLock(vm);
694
if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
695
qemuDomainObjPrivatePtr priv = vm->privateData;
697
if (priv->gotShutdown) {
698
VIR_DEBUG("Ignoring STOP event after SHUTDOWN");
702
VIR_DEBUG("Transitioned guest %s to paused state",
705
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, VIR_DOMAIN_PAUSED_UNKNOWN);
706
event = virDomainEventNewFromObj(vm,
707
VIR_DOMAIN_EVENT_SUSPENDED,
708
VIR_DOMAIN_EVENT_SUSPENDED_PAUSED);
710
VIR_FREE(priv->lockState);
711
if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0)
712
VIR_WARN("Unable to release lease on %s", vm->def->name);
713
VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
715
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) {
716
VIR_WARN("Unable to save status on vm %s after state change",
722
virDomainObjUnlock(vm);
725
qemuDriverLock(driver);
726
qemuDomainEventQueue(driver, event);
727
qemuDriverUnlock(driver);
735
qemuProcessHandleRTCChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
739
struct qemud_driver *driver = qemu_driver;
740
virDomainEventPtr event;
742
virDomainObjLock(vm);
743
event = virDomainEventRTCChangeNewFromObj(vm, offset);
745
if (vm->def->clock.offset == VIR_DOMAIN_CLOCK_OFFSET_VARIABLE)
746
vm->def->clock.data.variable.adjustment = offset;
748
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
749
VIR_WARN("unable to save domain status with RTC change");
751
virDomainObjUnlock(vm);
754
qemuDriverLock(driver);
755
qemuDomainEventQueue(driver, event);
756
qemuDriverUnlock(driver);
764
qemuProcessHandleWatchdog(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
768
struct qemud_driver *driver = qemu_driver;
769
virDomainEventPtr watchdogEvent = NULL;
770
virDomainEventPtr lifecycleEvent = NULL;
772
virDomainObjLock(vm);
773
watchdogEvent = virDomainEventWatchdogNewFromObj(vm, action);
775
if (action == VIR_DOMAIN_EVENT_WATCHDOG_PAUSE &&
776
virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
777
qemuDomainObjPrivatePtr priv = vm->privateData;
778
VIR_DEBUG("Transitioned guest %s to paused state due to watchdog", vm->def->name);
780
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, VIR_DOMAIN_PAUSED_WATCHDOG);
781
lifecycleEvent = virDomainEventNewFromObj(vm,
782
VIR_DOMAIN_EVENT_SUSPENDED,
783
VIR_DOMAIN_EVENT_SUSPENDED_WATCHDOG);
785
VIR_FREE(priv->lockState);
786
if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0)
787
VIR_WARN("Unable to release lease on %s", vm->def->name);
788
VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
790
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) {
791
VIR_WARN("Unable to save status on vm %s after watchdog event",
796
if (vm->def->watchdog->action == VIR_DOMAIN_WATCHDOG_ACTION_DUMP) {
797
struct qemuDomainWatchdogEvent *wdEvent;
798
if (VIR_ALLOC(wdEvent) == 0) {
799
wdEvent->action = VIR_DOMAIN_WATCHDOG_ACTION_DUMP;
801
/* Hold an extra reference because we can't allow 'vm' to be
802
* deleted before handling watchdog event is finished.
805
if (virThreadPoolSendJob(driver->workerPool, 0, wdEvent) < 0) {
806
if (!virObjectUnref(vm))
816
virDomainObjUnlock(vm);
818
if (watchdogEvent || lifecycleEvent) {
819
qemuDriverLock(driver);
821
qemuDomainEventQueue(driver, watchdogEvent);
823
qemuDomainEventQueue(driver, lifecycleEvent);
824
qemuDriverUnlock(driver);
832
qemuProcessHandleIOError(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
834
const char *diskAlias,
838
struct qemud_driver *driver = qemu_driver;
839
virDomainEventPtr ioErrorEvent = NULL;
840
virDomainEventPtr ioErrorEvent2 = NULL;
841
virDomainEventPtr lifecycleEvent = NULL;
843
const char *devAlias;
844
virDomainDiskDefPtr disk;
846
virDomainObjLock(vm);
847
disk = qemuProcessFindDomainDiskByAlias(vm, diskAlias);
851
devAlias = disk->info.alias;
857
ioErrorEvent = virDomainEventIOErrorNewFromObj(vm, srcPath, devAlias, action);
858
ioErrorEvent2 = virDomainEventIOErrorReasonNewFromObj(vm, srcPath, devAlias, action, reason);
860
if (action == VIR_DOMAIN_EVENT_IO_ERROR_PAUSE &&
861
virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
862
qemuDomainObjPrivatePtr priv = vm->privateData;
863
VIR_DEBUG("Transitioned guest %s to paused state due to IO error", vm->def->name);
865
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, VIR_DOMAIN_PAUSED_IOERROR);
866
lifecycleEvent = virDomainEventNewFromObj(vm,
867
VIR_DOMAIN_EVENT_SUSPENDED,
868
VIR_DOMAIN_EVENT_SUSPENDED_IOERROR);
870
VIR_FREE(priv->lockState);
871
if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0)
872
VIR_WARN("Unable to release lease on %s", vm->def->name);
873
VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
875
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
876
VIR_WARN("Unable to save status on vm %s after IO error", vm->def->name);
878
virDomainObjUnlock(vm);
880
if (ioErrorEvent || ioErrorEvent2 || lifecycleEvent) {
881
qemuDriverLock(driver);
883
qemuDomainEventQueue(driver, ioErrorEvent);
885
qemuDomainEventQueue(driver, ioErrorEvent2);
887
qemuDomainEventQueue(driver, lifecycleEvent);
888
qemuDriverUnlock(driver);
895
qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
897
const char *diskAlias,
901
struct qemud_driver *driver = qemu_driver;
902
virDomainEventPtr event = NULL;
904
virDomainDiskDefPtr disk;
906
virDomainObjLock(vm);
907
disk = qemuProcessFindDomainDiskByAlias(vm, diskAlias);
911
event = virDomainEventBlockJobNewFromObj(vm, path, type, status);
912
/* XXX If we completed a block pull or commit, then recompute
913
* the cached backing chain to match. Better would be storing
914
* the chain ourselves rather than reprobing, but this
915
* requires modifying domain_conf and our XML to fully track
916
* the chain across libvirtd restarts. For that matter, if
917
* qemu gains support for committing the active layer, we have
918
* to update disk->src. */
919
if ((type == VIR_DOMAIN_BLOCK_JOB_TYPE_PULL ||
920
type == VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT) &&
921
status == VIR_DOMAIN_BLOCK_JOB_COMPLETED)
922
qemuDomainDetermineDiskChain(driver, disk, true);
923
if (disk->mirror && type == VIR_DOMAIN_BLOCK_JOB_TYPE_COPY &&
924
status == VIR_DOMAIN_BLOCK_JOB_READY)
925
disk->mirroring = true;
928
virDomainObjUnlock(vm);
931
qemuDriverLock(driver);
932
qemuDomainEventQueue(driver, event);
933
qemuDriverUnlock(driver);
940
qemuProcessHandleGraphics(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
944
const char *localNode,
945
const char *localService,
947
const char *remoteNode,
948
const char *remoteService,
949
const char *authScheme,
950
const char *x509dname,
951
const char *saslUsername)
953
struct qemud_driver *driver = qemu_driver;
954
virDomainEventPtr event;
955
virDomainEventGraphicsAddressPtr localAddr = NULL;
956
virDomainEventGraphicsAddressPtr remoteAddr = NULL;
957
virDomainEventGraphicsSubjectPtr subject = NULL;
960
if (VIR_ALLOC(localAddr) < 0)
962
localAddr->family = localFamily;
963
if (!(localAddr->service = strdup(localService)) ||
964
!(localAddr->node = strdup(localNode)))
967
if (VIR_ALLOC(remoteAddr) < 0)
969
remoteAddr->family = remoteFamily;
970
if (!(remoteAddr->service = strdup(remoteService)) ||
971
!(remoteAddr->node = strdup(remoteNode)))
974
if (VIR_ALLOC(subject) < 0)
977
if (VIR_REALLOC_N(subject->identities, subject->nidentity+1) < 0)
979
subject->nidentity++;
980
if (!(subject->identities[subject->nidentity-1].type = strdup("x509dname")) ||
981
!(subject->identities[subject->nidentity-1].name = strdup(x509dname)))
985
if (VIR_REALLOC_N(subject->identities, subject->nidentity+1) < 0)
987
subject->nidentity++;
988
if (!(subject->identities[subject->nidentity-1].type = strdup("saslUsername")) ||
989
!(subject->identities[subject->nidentity-1].name = strdup(saslUsername)))
993
virDomainObjLock(vm);
994
event = virDomainEventGraphicsNewFromObj(vm, phase, localAddr, remoteAddr, authScheme, subject);
995
virDomainObjUnlock(vm);
998
qemuDriverLock(driver);
999
qemuDomainEventQueue(driver, event);
1000
qemuDriverUnlock(driver);
1006
virReportOOMError();
1008
VIR_FREE(localAddr->service);
1009
VIR_FREE(localAddr->node);
1010
VIR_FREE(localAddr);
1013
VIR_FREE(remoteAddr->service);
1014
VIR_FREE(remoteAddr->node);
1015
VIR_FREE(remoteAddr);
1018
for (i = 0 ; i < subject->nidentity ; i++) {
1019
VIR_FREE(subject->identities[i].type);
1020
VIR_FREE(subject->identities[i].name);
1022
VIR_FREE(subject->identities);
1030
static void qemuProcessHandleMonitorDestroy(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
1037
qemuProcessHandleTrayChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
1039
const char *devAlias,
1042
struct qemud_driver *driver = qemu_driver;
1043
virDomainEventPtr event = NULL;
1044
virDomainDiskDefPtr disk;
1046
virDomainObjLock(vm);
1047
disk = qemuProcessFindDomainDiskByAlias(vm, devAlias);
1050
event = virDomainEventTrayChangeNewFromObj(vm,
1053
/* Update disk tray status */
1054
if (reason == VIR_DOMAIN_EVENT_TRAY_CHANGE_OPEN)
1055
disk->tray_status = VIR_DOMAIN_DISK_TRAY_OPEN;
1056
else if (reason == VIR_DOMAIN_EVENT_TRAY_CHANGE_CLOSE)
1057
disk->tray_status = VIR_DOMAIN_DISK_TRAY_CLOSED;
1059
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) {
1060
VIR_WARN("Unable to save status on vm %s after tray moved event",
1065
virDomainObjUnlock(vm);
1068
qemuDriverLock(driver);
1069
qemuDomainEventQueue(driver, event);
1070
qemuDriverUnlock(driver);
1077
qemuProcessHandlePMWakeup(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
1080
struct qemud_driver *driver = qemu_driver;
1081
virDomainEventPtr event = NULL;
1082
virDomainEventPtr lifecycleEvent = NULL;
1084
virDomainObjLock(vm);
1085
event = virDomainEventPMWakeupNewFromObj(vm);
1087
/* Don't set domain status back to running if it wasn't paused
1088
* from guest side, otherwise it can just cause confusion.
1090
if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PMSUSPENDED) {
1091
VIR_DEBUG("Transitioned guest %s from pmsuspended to running "
1092
"state due to QMP wakeup event", vm->def->name);
1094
virDomainObjSetState(vm, VIR_DOMAIN_RUNNING,
1095
VIR_DOMAIN_RUNNING_WAKEUP);
1096
lifecycleEvent = virDomainEventNewFromObj(vm,
1097
VIR_DOMAIN_EVENT_STARTED,
1098
VIR_DOMAIN_EVENT_STARTED_WAKEUP);
1100
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) {
1101
VIR_WARN("Unable to save status on vm %s after wakeup event",
1106
virDomainObjUnlock(vm);
1108
if (event || lifecycleEvent) {
1109
qemuDriverLock(driver);
1111
qemuDomainEventQueue(driver, event);
1113
qemuDomainEventQueue(driver, lifecycleEvent);
1114
qemuDriverUnlock(driver);
1121
qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
1124
struct qemud_driver *driver = qemu_driver;
1125
virDomainEventPtr event = NULL;
1126
virDomainEventPtr lifecycleEvent = NULL;
1128
virDomainObjLock(vm);
1129
event = virDomainEventPMSuspendNewFromObj(vm);
1131
if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
1132
qemuDomainObjPrivatePtr priv = vm->privateData;
1133
VIR_DEBUG("Transitioned guest %s to pmsuspended state due to "
1134
"QMP suspend event", vm->def->name);
1136
virDomainObjSetState(vm, VIR_DOMAIN_PMSUSPENDED,
1137
VIR_DOMAIN_PMSUSPENDED_UNKNOWN);
1139
virDomainEventNewFromObj(vm,
1140
VIR_DOMAIN_EVENT_PMSUSPENDED,
1141
VIR_DOMAIN_EVENT_PMSUSPENDED_MEMORY);
1143
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) {
1144
VIR_WARN("Unable to save status on vm %s after suspend event",
1149
qemuAgentNotifyEvent(priv->agent, QEMU_AGENT_EVENT_SUSPEND);
1152
virDomainObjUnlock(vm);
1154
if (event || lifecycleEvent) {
1155
qemuDriverLock(driver);
1157
qemuDomainEventQueue(driver, event);
1159
qemuDomainEventQueue(driver, lifecycleEvent);
1160
qemuDriverUnlock(driver);
1167
qemuProcessHandleBalloonChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
1169
unsigned long long actual)
1171
struct qemud_driver *driver = qemu_driver;
1172
virDomainEventPtr event;
1174
virDomainObjLock(vm);
1175
event = virDomainEventBalloonChangeNewFromObj(vm, actual);
1177
VIR_DEBUG("Updating balloon from %lld to %lld kb",
1178
vm->def->mem.cur_balloon, actual);
1179
vm->def->mem.cur_balloon = actual;
1181
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
1182
VIR_WARN("unable to save domain status with balloon change");
1184
virDomainObjUnlock(vm);
1187
qemuDriverLock(driver);
1188
qemuDomainEventQueue(driver, event);
1189
qemuDriverUnlock(driver);
1196
qemuProcessHandlePMSuspendDisk(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
1199
struct qemud_driver *driver = qemu_driver;
1200
virDomainEventPtr event = NULL;
1201
virDomainEventPtr lifecycleEvent = NULL;
1203
virDomainObjLock(vm);
1204
event = virDomainEventPMSuspendDiskNewFromObj(vm);
1206
if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
1207
qemuDomainObjPrivatePtr priv = vm->privateData;
1208
VIR_DEBUG("Transitioned guest %s to pmsuspended state due to "
1209
"QMP suspend_disk event", vm->def->name);
1211
virDomainObjSetState(vm, VIR_DOMAIN_PMSUSPENDED,
1212
VIR_DOMAIN_PMSUSPENDED_UNKNOWN);
1214
virDomainEventNewFromObj(vm,
1215
VIR_DOMAIN_EVENT_PMSUSPENDED,
1216
VIR_DOMAIN_EVENT_PMSUSPENDED_DISK);
1218
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) {
1219
VIR_WARN("Unable to save status on vm %s after suspend event",
1224
qemuAgentNotifyEvent(priv->agent, QEMU_AGENT_EVENT_SUSPEND);
1227
virDomainObjUnlock(vm);
1229
if (event || lifecycleEvent) {
1230
qemuDriverLock(driver);
1232
qemuDomainEventQueue(driver, event);
1234
qemuDomainEventQueue(driver, lifecycleEvent);
1235
qemuDriverUnlock(driver);
1242
static qemuMonitorCallbacks monitorCallbacks = {
1243
.destroy = qemuProcessHandleMonitorDestroy,
1244
.eofNotify = qemuProcessHandleMonitorEOF,
1245
.errorNotify = qemuProcessHandleMonitorError,
1246
.diskSecretLookup = qemuProcessFindVolumeQcowPassphrase,
1247
.domainShutdown = qemuProcessHandleShutdown,
1248
.domainStop = qemuProcessHandleStop,
1249
.domainReset = qemuProcessHandleReset,
1250
.domainRTCChange = qemuProcessHandleRTCChange,
1251
.domainWatchdog = qemuProcessHandleWatchdog,
1252
.domainIOError = qemuProcessHandleIOError,
1253
.domainGraphics = qemuProcessHandleGraphics,
1254
.domainBlockJob = qemuProcessHandleBlockJob,
1255
.domainTrayChange = qemuProcessHandleTrayChange,
1256
.domainPMWakeup = qemuProcessHandlePMWakeup,
1257
.domainPMSuspend = qemuProcessHandlePMSuspend,
1258
.domainBalloonChange = qemuProcessHandleBalloonChange,
1259
.domainPMSuspendDisk = qemuProcessHandlePMSuspendDisk,
1263
qemuConnectMonitor(struct qemud_driver *driver, virDomainObjPtr vm)
1265
qemuDomainObjPrivatePtr priv = vm->privateData;
1267
qemuMonitorPtr mon = NULL;
1269
if (virSecurityManagerSetDaemonSocketLabel(driver->securityManager,
1271
VIR_ERROR(_("Failed to set security context for monitor for %s"),
1276
/* Hold an extra reference because we can't allow 'vm' to be
1277
* deleted while the monitor is active */
1280
ignore_value(virTimeMillisNow(&priv->monStart));
1281
virDomainObjUnlock(vm);
1282
qemuDriverUnlock(driver);
1284
mon = qemuMonitorOpen(vm,
1289
qemuDriverLock(driver);
1290
virDomainObjLock(vm);
1295
} else if (!virDomainObjIsActive(vm)) {
1296
qemuMonitorClose(mon);
1301
if (virSecurityManagerClearSocketLabel(driver->securityManager, vm->def) < 0) {
1302
VIR_ERROR(_("Failed to clear security context for monitor for %s"),
1307
if (priv->mon == NULL) {
1308
VIR_INFO("Failed to connect monitor for %s", vm->def->name);
1313
qemuDomainObjEnterMonitorWithDriver(driver, vm);
1314
ret = qemuMonitorSetCapabilities(priv->mon);
1316
qemuCapsGet(priv->caps, QEMU_CAPS_MONITOR_JSON))
1317
ret = qemuCapsProbeQMP(priv->caps, priv->mon);
1318
qemuDomainObjExitMonitorWithDriver(driver, vm);
1325
typedef int qemuProcessLogHandleOutput(virDomainObjPtr vm,
1330
* Returns -1 for error, 0 on success
1333
qemuProcessReadLogOutput(virDomainObjPtr vm,
1337
qemuProcessLogHandleOutput func,
1341
int retries = (timeout*10);
1345
char *filter_next = buf;
1349
/* This relies on log message format generated by virLogFormatString() and
1350
* might need to be modified when message format changes. */
1351
if (virAsprintf(&debug, ": %d: debug : ", vm->pid) < 0) {
1352
virReportOOMError();
1357
ssize_t func_ret, bytes;
1361
func_ret = func(vm, buf, fd);
1363
if (kill(vm->pid, 0) == -1 && errno == ESRCH)
1366
/* Any failures should be detected before we read the log, so we
1367
* always have something useful to report on failure. */
1368
bytes = saferead(fd, buf+got, buflen-got-1);
1370
virReportSystemError(errno,
1371
_("Failure while reading %s log output"),
1379
/* Filter out debug messages from intermediate libvirt process */
1380
while ((eol = strchr(filter_next, '\n'))) {
1382
if (strstr(filter_next, debug)) {
1383
memmove(filter_next, eol + 1, got - (eol - buf));
1384
got -= eol + 1 - filter_next;
1386
filter_next = eol + 1;
1391
if (got == buflen-1) {
1392
virReportError(VIR_ERR_INTERNAL_ERROR,
1393
_("Out of space while reading %s log output: %s"),
1399
virReportError(VIR_ERR_INTERNAL_ERROR,
1400
_("Process exited while reading %s log output: %s"),
1405
if (func_ret <= 0) {
1414
virReportError(VIR_ERR_INTERNAL_ERROR,
1415
_("Timed out while reading %s log output: %s"),
1425
* Look at a chunk of data from the QEMU stdout logs and try to
1426
* find a TTY device, as indicated by a line like
1428
* char device redirected to /dev/pts/3
1430
* Returns -1 for error, 0 success, 1 continue reading
1433
qemuProcessExtractTTYPath(const char *haystack,
1437
static const char needle[] = "char device redirected to";
1441
/* First look for our magic string */
1442
if (!(tmp = strstr(haystack + *offset, needle))) {
1445
tmp += sizeof(needle);
1449
* And look for first whitespace character and nul terminate
1450
* to mark end of the pty path
1453
if (c_isspace(*tmp)) {
1454
*path = strndup(dev, tmp-dev);
1455
if (*path == NULL) {
1456
virReportOOMError();
1460
/* ... now further update offset till we get EOL */
1461
*offset = tmp - haystack;
1468
* We found a path, but didn't find any whitespace,
1469
* so it must be still incomplete - we should at
1470
* least see a \n - indicate that we want to carry
1477
qemuProcessLookupPTYs(virDomainChrDefPtr *devices,
1479
virHashTablePtr paths,
1483
const char *prefix = chardevfmt ? "char" : "";
1485
for (i = 0 ; i < count ; i++) {
1486
virDomainChrDefPtr chr = devices[i];
1487
if (chr->source.type == VIR_DOMAIN_CHR_TYPE_PTY) {
1491
if (snprintf(id, sizeof(id), "%s%s",
1492
prefix, chr->info.alias) >= sizeof(id))
1495
path = (const char *) virHashLookup(paths, id);
1497
if (chr->source.data.file.path == NULL) {
1498
/* neither the log output nor 'info chardev' had a
1499
* pty path for this chardev, report an error
1501
virReportError(VIR_ERR_INTERNAL_ERROR,
1502
_("no assigned pty for device %s"), id);
1505
/* 'info chardev' had no pty path for this chardev,
1506
* but the log output had, so we're fine
1512
VIR_FREE(chr->source.data.file.path);
1513
chr->source.data.file.path = strdup(path);
1515
if (chr->source.data.file.path == NULL) {
1516
virReportOOMError();
1526
qemuProcessFindCharDevicePTYsMonitor(virDomainObjPtr vm,
1528
virHashTablePtr paths)
1530
bool chardevfmt = qemuCapsGet(caps, QEMU_CAPS_CHARDEV);
1532
if (qemuProcessLookupPTYs(vm->def->serials, vm->def->nserials,
1533
paths, chardevfmt) < 0)
1536
if (qemuProcessLookupPTYs(vm->def->parallels, vm->def->nparallels,
1537
paths, chardevfmt) < 0)
1540
if (qemuProcessLookupPTYs(vm->def->channels, vm->def->nchannels,
1541
paths, chardevfmt) < 0)
1544
if (qemuProcessLookupPTYs(vm->def->consoles, vm->def->nconsoles,
1545
paths, chardevfmt) < 0)
1552
qemuProcessFindCharDevicePTYs(virDomainObjPtr vm,
1554
int fd ATTRIBUTE_UNUSED)
1559
/* The order in which QEMU prints out the PTY paths is
1560
the order in which it procsses its serial and parallel
1561
device args. This code must match that ordering.... */
1563
/* first comes the serial devices */
1564
for (i = 0 ; i < vm->def->nserials ; i++) {
1565
virDomainChrDefPtr chr = vm->def->serials[i];
1566
if (chr->source.type == VIR_DOMAIN_CHR_TYPE_PTY) {
1567
if ((ret = qemuProcessExtractTTYPath(output, &offset,
1568
&chr->source.data.file.path)) != 0)
1573
/* then the parallel devices */
1574
for (i = 0 ; i < vm->def->nparallels ; i++) {
1575
virDomainChrDefPtr chr = vm->def->parallels[i];
1576
if (chr->source.type == VIR_DOMAIN_CHR_TYPE_PTY) {
1577
if ((ret = qemuProcessExtractTTYPath(output, &offset,
1578
&chr->source.data.file.path)) != 0)
1583
/* then the channel devices */
1584
for (i = 0 ; i < vm->def->nchannels ; i++) {
1585
virDomainChrDefPtr chr = vm->def->channels[i];
1586
if (chr->source.type == VIR_DOMAIN_CHR_TYPE_PTY) {
1587
if ((ret = qemuProcessExtractTTYPath(output, &offset,
1588
&chr->source.data.file.path)) != 0)
1593
for (i = 0 ; i < vm->def->nconsoles ; i++) {
1594
virDomainChrDefPtr chr = vm->def->consoles[i];
1595
/* For historical reasons, console[0] can be just an alias
1596
* for serial[0]; That's why we need to update it as well */
1597
if (i == 0 && vm->def->nserials &&
1598
chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE &&
1599
chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL) {
1600
if ((ret = virDomainChrSourceDefCopy(&chr->source,
1601
&((vm->def->serials[0])->source))) != 0)
1604
if (chr->source.type == VIR_DOMAIN_CHR_TYPE_PTY &&
1605
chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO) {
1606
if ((ret = qemuProcessExtractTTYPath(output, &offset,
1607
&chr->source.data.file.path)) != 0)
1616
static void qemuProcessFreePtyPath(void *payload, const void *name ATTRIBUTE_UNUSED)
1622
qemuProcessReadLogFD(int logfd, char *buf, int maxlen, int off)
1625
char *tmpbuf = buf + off;
1627
ret = saferead(logfd, tmpbuf, maxlen - off - 1);
1637
qemuProcessWaitForMonitor(struct qemud_driver* driver,
1643
size_t buf_size = 4096; /* Plenty of space to get startup greeting */
1646
virHashTablePtr paths = NULL;
1647
qemuDomainObjPrivatePtr priv;
1650
if ((logfd = qemuDomainOpenLog(driver, vm, pos)) < 0)
1653
if (VIR_ALLOC_N(buf, buf_size) < 0) {
1654
virReportOOMError();
1658
if (qemuProcessReadLogOutput(vm, logfd, buf, buf_size,
1659
qemuProcessFindCharDevicePTYs,
1664
VIR_DEBUG("Connect monitor to %p '%s'", vm, vm->def->name);
1665
if (qemuConnectMonitor(driver, vm) < 0) {
1669
/* Try to get the pty path mappings again via the monitor. This is much more
1670
* reliable if it's available.
1671
* Note that the monitor itself can be on a pty, so we still need to try the
1672
* log output method. */
1673
paths = virHashCreate(0, qemuProcessFreePtyPath);
1677
priv = vm->privateData;
1678
qemuDomainObjEnterMonitorWithDriver(driver, vm);
1679
ret = qemuMonitorGetPtyPaths(priv->mon, paths);
1680
qemuDomainObjExitMonitorWithDriver(driver, vm);
1682
VIR_DEBUG("qemuMonitorGetPtyPaths returned %i", ret);
1684
ret = qemuProcessFindCharDevicePTYsMonitor(vm, caps, paths);
1689
if (pos != -1 && kill(vm->pid, 0) == -1 && errno == ESRCH) {
1690
/* VM is dead, any other error raised in the interim is probably
1691
* not as important as the qemu cmdline output */
1692
qemuProcessReadLogFD(logfd, buf, buf_size, strlen(buf));
1693
virReportError(VIR_ERR_INTERNAL_ERROR,
1694
_("process exited while connecting to monitor: %s"),
1700
if (VIR_CLOSE(logfd) < 0) {
1702
VIR_WARN("Unable to close logfile: %s",
1703
virStrerror(errno, ebuf, sizeof(ebuf)));
1712
qemuProcessDetectVcpuPIDs(struct qemud_driver *driver,
1715
pid_t *cpupids = NULL;
1717
qemuDomainObjPrivatePtr priv = vm->privateData;
1719
qemuDomainObjEnterMonitorWithDriver(driver, vm);
1720
/* failure to get the VCPU<-> PID mapping or to execute the query
1721
* command will not be treated fatal as some versions of qemu don't
1722
* support this command */
1723
if ((ncpupids = qemuMonitorGetCPUInfo(priv->mon, &cpupids)) <= 0) {
1724
qemuDomainObjExitMonitorWithDriver(driver, vm);
1725
virResetLastError();
1727
priv->nvcpupids = 1;
1728
if (VIR_ALLOC_N(priv->vcpupids, priv->nvcpupids) < 0) {
1729
virReportOOMError();
1732
priv->vcpupids[0] = vm->pid;
1735
qemuDomainObjExitMonitorWithDriver(driver, vm);
1737
if (ncpupids != vm->def->vcpus) {
1738
virReportError(VIR_ERR_INTERNAL_ERROR,
1739
_("got wrong number of vCPU pids from QEMU monitor. "
1740
"got %d, wanted %d"),
1741
ncpupids, vm->def->vcpus);
1746
priv->nvcpupids = ncpupids;
1747
priv->vcpupids = cpupids;
1753
* Set NUMA memory policy for qemu process, to be run between
1754
* fork/exec of QEMU only.
1758
qemuProcessInitNumaMemoryPolicy(virDomainObjPtr vm,
1759
virBitmapPtr nodemask)
1767
bool warned = false;
1768
virDomainNumatuneDef numatune = vm->def->numatune;
1769
virBitmapPtr tmp_nodemask = NULL;
1771
if (numatune.memory.placement_mode ==
1772
VIR_DOMAIN_NUMATUNE_MEM_PLACEMENT_MODE_STATIC) {
1773
if (!numatune.memory.nodemask)
1775
VIR_DEBUG("Set NUMA memory policy with specified nodeset");
1776
tmp_nodemask = numatune.memory.nodemask;
1777
} else if (numatune.memory.placement_mode ==
1778
VIR_DOMAIN_NUMATUNE_MEM_PLACEMENT_MODE_AUTO) {
1779
VIR_DEBUG("Set NUMA memory policy with advisory nodeset from numad");
1780
tmp_nodemask = nodemask;
1785
if (numa_available() < 0) {
1786
virReportError(VIR_ERR_INTERNAL_ERROR,
1787
"%s", _("Host kernel is not aware of NUMA."));
1791
maxnode = numa_max_node() + 1;
1792
/* Convert nodemask to NUMA bitmask. */
1793
nodemask_zero(&mask);
1795
while ((i = virBitmapNextSetBit(tmp_nodemask, i)) >= 0) {
1796
if (i > NUMA_NUM_NODES) {
1797
virReportError(VIR_ERR_INTERNAL_ERROR,
1798
_("Host cannot support NUMA node %d"), i);
1801
if (i > maxnode && !warned) {
1802
VIR_WARN("nodeset is out of range, there is only %d NUMA "
1803
"nodes on host", maxnode);
1806
nodemask_set(&mask, i);
1809
mode = numatune.memory.mode;
1811
if (mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT) {
1812
numa_set_bind_policy(1);
1813
numa_set_membind(&mask);
1814
numa_set_bind_policy(0);
1815
} else if (mode == VIR_DOMAIN_NUMATUNE_MEM_PREFERRED) {
1817
for (i = 0; i < NUMA_NUM_NODES; i++) {
1818
if (nodemask_isset(&mask, i)) {
1825
virReportError(VIR_ERR_INTERNAL_ERROR,
1826
"%s", _("NUMA memory tuning in 'preferred' mode "
1827
"only supports single node"));
1831
numa_set_bind_policy(0);
1832
numa_set_preferred(node);
1833
} else if (mode == VIR_DOMAIN_NUMATUNE_MEM_INTERLEAVE) {
1834
numa_set_interleave_mask(&mask);
1836
/* XXX: Shouldn't go here, as we already do checking when
1837
* parsing domain XML.
1839
virReportError(VIR_ERR_XML_ERROR,
1840
"%s", _("Invalid mode for memory NUMA tuning."));
1851
qemuProcessInitNumaMemoryPolicy(virDomainObjPtr vm,
1852
virBitmapPtr nodemask ATTRIBUTE_UNUSED)
1854
if (vm->def->numatune.memory.nodemask) {
1855
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
1856
_("libvirt is compiled without NUMA tuning support"));
1867
qemuGetNumadAdvice(virDomainDefPtr def)
1869
virCommandPtr cmd = NULL;
1870
char *output = NULL;
1872
cmd = virCommandNewArgList(NUMAD, "-w", NULL);
1873
virCommandAddArgFormat(cmd, "%d:%llu", def->vcpus,
1874
VIR_DIV_UP(def->mem.cur_balloon, 1024));
1876
virCommandSetOutputBuffer(cmd, &output);
1878
if (virCommandRun(cmd, NULL) < 0)
1879
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
1880
_("Failed to query numad for the "
1881
"advisory nodeset"));
1883
virCommandFree(cmd);
1888
qemuGetNumadAdvice(virDomainDefPtr def ATTRIBUTE_UNUSED)
1890
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
1891
_("numad is not available on this host"));
1896
/* Helper to prepare cpumap for affinity setting, convert
1897
* NUMA nodeset into cpuset if @nodemask is not NULL, otherwise
1898
* just return a new allocated bitmap.
1901
qemuPrepareCpumap(struct qemud_driver *driver,
1902
virBitmapPtr nodemask)
1904
int i, hostcpus, maxcpu = QEMUD_CPUMASK_LEN;
1905
virNodeInfo nodeinfo;
1906
virBitmapPtr cpumap = NULL;
1908
if (nodeGetInfo(NULL, &nodeinfo) < 0)
1911
/* setaffinity fails if you set bits for CPUs which
1912
* aren't present, so we have to limit ourselves */
1913
hostcpus = VIR_NODEINFO_MAXCPUS(nodeinfo);
1914
if (maxcpu > hostcpus)
1917
if (!(cpumap = virBitmapNew(maxcpu))) {
1918
virReportOOMError();
1923
for (i = 0; i < driver->caps->host.nnumaCell; i++) {
1925
int cur_ncpus = driver->caps->host.numaCell[i]->ncpus;
1927
if (virBitmapGetBit(nodemask, i, &result) < 0) {
1928
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
1929
_("Failed to convert nodeset to cpuset"));
1930
virBitmapFree(cpumap);
1934
for (j = 0; j < cur_ncpus; j++)
1935
ignore_value(virBitmapSetBit(cpumap,
1936
driver->caps->host.numaCell[i]->cpus[j]));
1945
* To be run between fork/exec of QEMU only
1948
qemuProcessInitCpuAffinity(struct qemud_driver *driver,
1950
virBitmapPtr nodemask)
1953
virBitmapPtr cpumap = NULL;
1954
virBitmapPtr cpumapToSet = NULL;
1956
if (!(cpumap = qemuPrepareCpumap(driver, nodemask)))
1959
if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
1960
VIR_DEBUG("Set CPU affinity with advisory nodeset from numad");
1961
cpumapToSet = cpumap;
1963
VIR_DEBUG("Set CPU affinity with specified cpuset");
1964
if (vm->def->cpumask) {
1965
cpumapToSet = vm->def->cpumask;
1967
cpumapToSet = cpumap;
1968
/* You may think this is redundant, but we can't assume libvirtd
1969
* itself is running on all pCPUs, so we need to explicitly set
1970
* the spawned QEMU instance to all pCPUs if no map is given in
1971
* its config file */
1972
virBitmapSetAll(cpumap);
1976
/* We are pressuming we are running between fork/exec of QEMU
1977
* so use '0' to indicate our own process ID. No threads are
1978
* running at this point
1980
if (virProcessInfoSetAffinity(0 /* Self */, cpumapToSet) < 0)
1986
virBitmapFree(cpumap);
1990
/* set link states to down on interfaces at qemu start */
1992
qemuProcessSetLinkStates(virDomainObjPtr vm)
1994
qemuDomainObjPrivatePtr priv = vm->privateData;
1995
virDomainDefPtr def = vm->def;
1999
for (i = 0; i < def->nnets; i++) {
2000
if (def->nets[i]->linkstate == VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DOWN) {
2001
VIR_DEBUG("Setting link state: %s", def->nets[i]->info.alias);
2003
if (!qemuCapsGet(priv->caps, QEMU_CAPS_NETDEV)) {
2004
virReportError(VIR_ERR_NO_SUPPORT, "%s",
2005
_("Setting of link state is not supported by this qemu"));
2009
ret = qemuMonitorSetLink(priv->mon,
2010
def->nets[i]->info.alias,
2011
VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DOWN);
2013
virReportError(VIR_ERR_OPERATION_FAILED,
2014
_("Couldn't set link state on interface: %s"), def->nets[i]->info.alias);
2023
/* Set CPU affinities for vcpus if vcpupin xml provided. */
2025
qemuProcessSetVcpuAffinites(virConnectPtr conn ATTRIBUTE_UNUSED,
2028
qemuDomainObjPrivatePtr priv = vm->privateData;
2029
virDomainDefPtr def = vm->def;
2033
if (!def->cputune.nvcpupin)
2036
if (priv->vcpupids == NULL) {
2037
virReportError(VIR_ERR_OPERATION_INVALID,
2038
"%s", _("cpu affinity is not supported"));
2042
for (n = 0; n < def->cputune.nvcpupin; n++) {
2043
vcpu = def->cputune.vcpupin[n]->vcpuid;
2045
if (virProcessInfoSetAffinity(priv->vcpupids[vcpu],
2046
def->cputune.vcpupin[n]->cpumask) < 0) {
2056
/* Set CPU affinities for emulator threads. */
2058
qemuProcessSetEmulatorAffinites(virConnectPtr conn ATTRIBUTE_UNUSED,
2061
virBitmapPtr cpumask;
2062
virDomainDefPtr def = vm->def;
2065
if (def->cputune.emulatorpin)
2066
cpumask = def->cputune.emulatorpin->cpumask;
2067
else if (def->cpumask)
2068
cpumask = def->cpumask;
2072
ret = virProcessInfoSetAffinity(vm->pid, cpumask);
2077
qemuProcessInitPasswords(virConnectPtr conn,
2078
struct qemud_driver *driver,
2082
qemuDomainObjPrivatePtr priv = vm->privateData;
2084
if (vm->def->ngraphics == 1) {
2085
if (vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
2086
ret = qemuDomainChangeGraphicsPasswords(driver, vm,
2087
VIR_DOMAIN_GRAPHICS_TYPE_VNC,
2088
&vm->def->graphics[0]->data.vnc.auth,
2089
driver->vncPassword);
2090
} else if (vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
2091
ret = qemuDomainChangeGraphicsPasswords(driver, vm,
2092
VIR_DOMAIN_GRAPHICS_TYPE_SPICE,
2093
&vm->def->graphics[0]->data.spice.auth,
2094
driver->spicePassword);
2101
if (qemuCapsGet(priv->caps, QEMU_CAPS_DEVICE)) {
2104
for (i = 0 ; i < vm->def->ndisks ; i++) {
2109
if (!vm->def->disks[i]->encryption ||
2110
!vm->def->disks[i]->src)
2113
if (qemuProcessGetVolumeQcowPassphrase(conn,
2115
&secret, &secretLen) < 0)
2118
alias = vm->def->disks[i]->info.alias;
2119
qemuDomainObjEnterMonitorWithDriver(driver, vm);
2120
ret = qemuMonitorSetDrivePassphrase(priv->mon, alias, secret);
2122
qemuDomainObjExitMonitorWithDriver(driver, vm);
2133
#define QEMU_PCI_VENDOR_INTEL 0x8086
2134
#define QEMU_PCI_VENDOR_LSI_LOGIC 0x1000
2135
#define QEMU_PCI_VENDOR_REDHAT 0x1af4
2136
#define QEMU_PCI_VENDOR_CIRRUS 0x1013
2137
#define QEMU_PCI_VENDOR_REALTEK 0x10ec
2138
#define QEMU_PCI_VENDOR_AMD 0x1022
2139
#define QEMU_PCI_VENDOR_ENSONIQ 0x1274
2140
#define QEMU_PCI_VENDOR_VMWARE 0x15ad
2141
#define QEMU_PCI_VENDOR_QEMU 0x1234
2143
#define QEMU_PCI_PRODUCT_DISK_VIRTIO 0x1001
2145
#define QEMU_PCI_PRODUCT_BALLOON_VIRTIO 0x1002
2147
#define QEMU_PCI_PRODUCT_NIC_NE2K 0x8029
2148
#define QEMU_PCI_PRODUCT_NIC_PCNET 0x2000
2149
#define QEMU_PCI_PRODUCT_NIC_RTL8139 0x8139
2150
#define QEMU_PCI_PRODUCT_NIC_E1000 0x100E
2151
#define QEMU_PCI_PRODUCT_NIC_VIRTIO 0x1000
2153
#define QEMU_PCI_PRODUCT_VGA_CIRRUS 0x00b8
2154
#define QEMU_PCI_PRODUCT_VGA_VMWARE 0x0405
2155
#define QEMU_PCI_PRODUCT_VGA_STDVGA 0x1111
2157
#define QEMU_PCI_PRODUCT_AUDIO_AC97 0x2415
2158
#define QEMU_PCI_PRODUCT_AUDIO_ES1370 0x5000
2160
#define QEMU_PCI_PRODUCT_CONTROLLER_PIIX 0x7010
2161
#define QEMU_PCI_PRODUCT_CONTROLLER_LSI 0x0012
2163
#define QEMU_PCI_PRODUCT_WATCHDOG_I63000ESB 0x25ab
2166
qemuProcessAssignNextPCIAddress(virDomainDeviceInfo *info,
2169
qemuMonitorPCIAddress *addrs,
2175
VIR_DEBUG("Look for %x:%x out of %d", vendor, product, naddrs);
2177
for (i = 0 ; (i < naddrs) && !found; i++) {
2178
VIR_DEBUG("Maybe %x:%x", addrs[i].vendor, addrs[i].product);
2179
if (addrs[i].vendor == vendor &&
2180
addrs[i].product == product) {
2181
VIR_DEBUG("Match %d", i);
2190
/* Blank it out so this device isn't matched again */
2191
addrs[i].vendor = 0;
2192
addrs[i].product = 0;
2194
if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)
2195
info->type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
2197
if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
2198
info->addr.pci.domain = addrs[i].addr.domain;
2199
info->addr.pci.bus = addrs[i].addr.bus;
2200
info->addr.pci.slot = addrs[i].addr.slot;
2201
info->addr.pci.function = addrs[i].addr.function;
2208
qemuProcessGetPCIDiskVendorProduct(virDomainDiskDefPtr def,
2213
case VIR_DOMAIN_DISK_BUS_VIRTIO:
2214
*vendor = QEMU_PCI_VENDOR_REDHAT;
2215
*product = QEMU_PCI_PRODUCT_DISK_VIRTIO;
2226
qemuProcessGetPCINetVendorProduct(virDomainNetDefPtr def,
2233
if (STREQ(def->model, "ne2k_pci")) {
2234
*vendor = QEMU_PCI_VENDOR_REALTEK;
2235
*product = QEMU_PCI_PRODUCT_NIC_NE2K;
2236
} else if (STREQ(def->model, "pcnet")) {
2237
*vendor = QEMU_PCI_VENDOR_AMD;
2238
*product = QEMU_PCI_PRODUCT_NIC_PCNET;
2239
} else if (STREQ(def->model, "rtl8139")) {
2240
*vendor = QEMU_PCI_VENDOR_REALTEK;
2241
*product = QEMU_PCI_PRODUCT_NIC_RTL8139;
2242
} else if (STREQ(def->model, "e1000")) {
2243
*vendor = QEMU_PCI_VENDOR_INTEL;
2244
*product = QEMU_PCI_PRODUCT_NIC_E1000;
2245
} else if (STREQ(def->model, "virtio")) {
2246
*vendor = QEMU_PCI_VENDOR_REDHAT;
2247
*product = QEMU_PCI_PRODUCT_NIC_VIRTIO;
2249
VIR_INFO("Unexpected NIC model %s, cannot get PCI address",
2257
qemuProcessGetPCIControllerVendorProduct(virDomainControllerDefPtr def,
2261
switch (def->type) {
2262
case VIR_DOMAIN_CONTROLLER_TYPE_SCSI:
2263
*vendor = QEMU_PCI_VENDOR_LSI_LOGIC;
2264
*product = QEMU_PCI_PRODUCT_CONTROLLER_LSI;
2267
case VIR_DOMAIN_CONTROLLER_TYPE_FDC:
2268
/* XXX we could put in the ISA bridge address, but
2269
that's not technically the FDC's address */
2272
case VIR_DOMAIN_CONTROLLER_TYPE_IDE:
2273
*vendor = QEMU_PCI_VENDOR_INTEL;
2274
*product = QEMU_PCI_PRODUCT_CONTROLLER_PIIX;
2278
VIR_INFO("Unexpected controller type %s, cannot get PCI address",
2279
virDomainControllerTypeToString(def->type));
2287
qemuProcessGetPCIVideoVendorProduct(virDomainVideoDefPtr def,
2291
switch (def->type) {
2292
case VIR_DOMAIN_VIDEO_TYPE_CIRRUS:
2293
*vendor = QEMU_PCI_VENDOR_CIRRUS;
2294
*product = QEMU_PCI_PRODUCT_VGA_CIRRUS;
2297
case VIR_DOMAIN_VIDEO_TYPE_VGA:
2298
*vendor = QEMU_PCI_VENDOR_QEMU;
2299
*product = QEMU_PCI_PRODUCT_VGA_STDVGA;
2302
case VIR_DOMAIN_VIDEO_TYPE_VMVGA:
2303
*vendor = QEMU_PCI_VENDOR_VMWARE;
2304
*product = QEMU_PCI_PRODUCT_VGA_VMWARE;
2314
qemuProcessGetPCISoundVendorProduct(virDomainSoundDefPtr def,
2318
switch (def->model) {
2319
case VIR_DOMAIN_SOUND_MODEL_ES1370:
2320
*vendor = QEMU_PCI_VENDOR_ENSONIQ;
2321
*product = QEMU_PCI_PRODUCT_AUDIO_ES1370;
2324
case VIR_DOMAIN_SOUND_MODEL_AC97:
2325
*vendor = QEMU_PCI_VENDOR_INTEL;
2326
*product = QEMU_PCI_PRODUCT_AUDIO_AC97;
2337
qemuProcessGetPCIWatchdogVendorProduct(virDomainWatchdogDefPtr def,
2341
switch (def->model) {
2342
case VIR_DOMAIN_WATCHDOG_MODEL_I6300ESB:
2343
*vendor = QEMU_PCI_VENDOR_INTEL;
2344
*product = QEMU_PCI_PRODUCT_WATCHDOG_I63000ESB;
2356
qemuProcessGetPCIMemballoonVendorProduct(virDomainMemballoonDefPtr def,
2360
switch (def->model) {
2361
case VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO:
2362
*vendor = QEMU_PCI_VENDOR_REDHAT;
2363
*product = QEMU_PCI_PRODUCT_BALLOON_VIRTIO;
2375
* This entire method assumes that PCI devices in 'info pci'
2376
* match ordering of devices specified on the command line
2377
* wrt to devices of matching vendor+product
2379
* XXXX this might not be a valid assumption if we assign
2380
* some static addrs on CLI. Have to check that...
2383
qemuProcessDetectPCIAddresses(virDomainObjPtr vm,
2384
qemuMonitorPCIAddress *addrs,
2387
unsigned int vendor = 0, product = 0;
2390
/* XXX should all these vendor/product IDs be kept in the
2391
* actual device data structure instead ?
2394
for (i = 0 ; i < vm->def->ndisks ; i++) {
2395
if (qemuProcessGetPCIDiskVendorProduct(vm->def->disks[i], &vendor, &product) < 0)
2398
if (qemuProcessAssignNextPCIAddress(&(vm->def->disks[i]->info),
2400
addrs, naddrs) < 0) {
2401
virReportError(VIR_ERR_INTERNAL_ERROR,
2402
_("cannot find PCI address for VirtIO disk %s"),
2403
vm->def->disks[i]->dst);
2408
for (i = 0 ; i < vm->def->nnets ; i++) {
2409
if (qemuProcessGetPCINetVendorProduct(vm->def->nets[i], &vendor, &product) < 0)
2412
if (qemuProcessAssignNextPCIAddress(&(vm->def->nets[i]->info),
2414
addrs, naddrs) < 0) {
2415
virReportError(VIR_ERR_INTERNAL_ERROR,
2416
_("cannot find PCI address for %s NIC"),
2417
vm->def->nets[i]->model);
2422
for (i = 0 ; i < vm->def->ncontrollers ; i++) {
2423
if (qemuProcessGetPCIControllerVendorProduct(vm->def->controllers[i], &vendor, &product) < 0)
2426
if (qemuProcessAssignNextPCIAddress(&(vm->def->controllers[i]->info),
2428
addrs, naddrs) < 0) {
2429
virReportError(VIR_ERR_INTERNAL_ERROR,
2430
_("cannot find PCI address for controller %s"),
2431
virDomainControllerTypeToString(vm->def->controllers[i]->type));
2436
for (i = 0 ; i < vm->def->nvideos ; i++) {
2437
if (qemuProcessGetPCIVideoVendorProduct(vm->def->videos[i], &vendor, &product) < 0)
2440
if (qemuProcessAssignNextPCIAddress(&(vm->def->videos[i]->info),
2442
addrs, naddrs) < 0) {
2443
virReportError(VIR_ERR_INTERNAL_ERROR,
2444
_("cannot find PCI address for video adapter %s"),
2445
virDomainVideoTypeToString(vm->def->videos[i]->type));
2450
for (i = 0 ; i < vm->def->nsounds ; i++) {
2451
if (qemuProcessGetPCISoundVendorProduct(vm->def->sounds[i], &vendor, &product) < 0)
2454
if (qemuProcessAssignNextPCIAddress(&(vm->def->sounds[i]->info),
2456
addrs, naddrs) < 0) {
2457
virReportError(VIR_ERR_INTERNAL_ERROR,
2458
_("cannot find PCI address for sound adapter %s"),
2459
virDomainSoundModelTypeToString(vm->def->sounds[i]->model));
2465
if (vm->def->watchdog &&
2466
qemuProcessGetPCIWatchdogVendorProduct(vm->def->watchdog, &vendor, &product) == 0) {
2467
if (qemuProcessAssignNextPCIAddress(&(vm->def->watchdog->info),
2469
addrs, naddrs) < 0) {
2470
virReportError(VIR_ERR_INTERNAL_ERROR,
2471
_("cannot find PCI address for watchdog %s"),
2472
virDomainWatchdogModelTypeToString(vm->def->watchdog->model));
2477
if (vm->def->memballoon &&
2478
qemuProcessGetPCIMemballoonVendorProduct(vm->def->memballoon, &vendor, &product) == 0) {
2479
if (qemuProcessAssignNextPCIAddress(&(vm->def->memballoon->info),
2481
addrs, naddrs) < 0) {
2482
virReportError(VIR_ERR_INTERNAL_ERROR,
2483
_("cannot find PCI address for balloon %s"),
2484
virDomainMemballoonModelTypeToString(vm->def->memballoon->model));
2489
/* XXX console (virtio) */
2492
/* ... and now things we don't have in our xml */
2494
/* XXX USB controller ? */
2496
/* XXX what about other PCI devices (ie bridges) */
2502
qemuProcessInitPCIAddresses(struct qemud_driver *driver,
2505
qemuDomainObjPrivatePtr priv = vm->privateData;
2508
qemuMonitorPCIAddress *addrs = NULL;
2510
qemuDomainObjEnterMonitorWithDriver(driver, vm);
2511
naddrs = qemuMonitorGetAllPCIAddresses(priv->mon,
2513
qemuDomainObjExitMonitorWithDriver(driver, vm);
2515
ret = qemuProcessDetectPCIAddresses(vm, addrs, naddrs);
2523
static int qemuProcessNextFreePort(struct qemud_driver *driver,
2528
for (i = startPort ; i < driver->remotePortMax; i++) {
2531
struct sockaddr_in addr;
2534
if (virBitmapGetBit(driver->reservedRemotePorts,
2535
i - driver->remotePortMin, &used) < 0)
2536
VIR_DEBUG("virBitmapGetBit failed on bit %d", i - driver->remotePortMin);
2541
addr.sin_family = AF_INET;
2542
addr.sin_port = htons(i);
2543
addr.sin_addr.s_addr = htonl(INADDR_ANY);
2544
fd = socket(PF_INET, SOCK_STREAM, 0);
2548
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void*)&reuse, sizeof(reuse)) < 0) {
2549
VIR_FORCE_CLOSE(fd);
2553
if (bind(fd, (struct sockaddr*)&addr, sizeof(addr)) == 0) {
2554
/* Not in use, lets grab it */
2555
VIR_FORCE_CLOSE(fd);
2556
/* Add port to bitmap of reserved ports */
2557
if (virBitmapSetBit(driver->reservedRemotePorts,
2558
i - driver->remotePortMin) < 0) {
2559
VIR_DEBUG("virBitmapSetBit failed on bit %d",
2560
i - driver->remotePortMin);
2564
VIR_FORCE_CLOSE(fd);
2566
if (errno == EADDRINUSE) {
2567
/* In use, try next */
2570
/* Some other bad failure, get out.. */
2578
qemuProcessReturnPort(struct qemud_driver *driver,
2581
if (port < driver->remotePortMin)
2584
if (virBitmapClearBit(driver->reservedRemotePorts,
2585
port - driver->remotePortMin) < 0)
2586
VIR_DEBUG("Could not mark port %d as unused", port);
2591
qemuProcessPrepareChardevDevice(virDomainDefPtr def ATTRIBUTE_UNUSED,
2592
virDomainChrDefPtr dev,
2593
void *opaque ATTRIBUTE_UNUSED)
2596
if (dev->source.type != VIR_DOMAIN_CHR_TYPE_FILE)
2599
if ((fd = open(dev->source.data.file.path,
2600
O_CREAT | O_APPEND, S_IRUSR|S_IWUSR)) < 0) {
2601
virReportSystemError(errno,
2602
_("Unable to pre-create chardev file '%s'"),
2603
dev->source.data.file.path);
2607
VIR_FORCE_CLOSE(fd);
2614
qemuProcessLimits(struct qemud_driver *driver)
2618
if (driver->maxProcesses > 0) {
2619
rlim.rlim_cur = rlim.rlim_max = driver->maxProcesses;
2620
if (setrlimit(RLIMIT_NPROC, &rlim) < 0) {
2621
virReportSystemError(errno,
2622
_("cannot limit number of processes to %d"),
2623
driver->maxProcesses);
2628
if (driver->maxFiles > 0) {
2629
/* Max number of opened files is one greater than
2630
* actual limit. See man setrlimit */
2631
rlim.rlim_cur = rlim.rlim_max = driver->maxFiles + 1;
2632
if (setrlimit(RLIMIT_NOFILE, &rlim) < 0) {
2633
virReportSystemError(errno,
2634
_("cannot set max opened files to %d"),
2644
struct qemuProcessHookData {
2647
struct qemud_driver *driver;
2648
virBitmapPtr nodemask;
2651
static int qemuProcessHook(void *data)
2653
struct qemuProcessHookData *h = data;
2657
/* Some later calls want pid present */
2658
h->vm->pid = getpid();
2660
VIR_DEBUG("Obtaining domain lock");
2662
* Since we're going to leak the returned FD to QEMU,
2663
* we need to make sure it gets a sensible label.
2664
* This mildly sucks, because there could be other
2665
* sockets the lock driver opens that we don't want
2666
* labelled. So far we're ok though.
2668
if (virSecurityManagerSetSocketLabel(h->driver->securityManager, h->vm->def) < 0)
2670
if (virDomainLockProcessStart(h->driver->lockManager,
2673
/* QEMU is always paused initially */
2677
if (virSecurityManagerClearSocketLabel(h->driver->securityManager, h->vm->def) < 0)
2680
if (qemuProcessLimits(h->driver) < 0)
2683
/* This must take place before exec(), so that all QEMU
2684
* memory allocation is on the correct NUMA node
2686
VIR_DEBUG("Moving process to cgroup");
2687
if (qemuAddToCgroup(h->driver, h->vm->def) < 0)
2690
/* This must be done after cgroup placement to avoid resetting CPU
2692
if (!h->vm->def->cputune.emulatorpin &&
2693
qemuProcessInitCpuAffinity(h->driver, h->vm, h->nodemask) < 0)
2696
if (qemuProcessInitNumaMemoryPolicy(h->vm, h->nodemask) < 0)
2699
VIR_DEBUG("Setting up security labelling");
2700
if (virSecurityManagerSetProcessLabel(h->driver->securityManager, h->vm->def) < 0)
2706
VIR_DEBUG("Hook complete ret=%d", ret);
2711
qemuProcessPrepareMonitorChr(struct qemud_driver *driver,
2712
virDomainChrSourceDefPtr monConfig,
2715
monConfig->type = VIR_DOMAIN_CHR_TYPE_UNIX;
2716
monConfig->data.nix.listen = true;
2718
if (virAsprintf(&monConfig->data.nix.path, "%s/%s.monitor",
2719
driver->libDir, vm) < 0) {
2720
virReportOOMError();
2729
* Precondition: Both driver and vm must be locked,
2730
* and a job must be active. This method will call
2731
* {Enter,Exit}MonitorWithDriver
2734
qemuProcessStartCPUs(struct qemud_driver *driver, virDomainObjPtr vm,
2735
virConnectPtr conn, virDomainRunningReason reason,
2736
enum qemuDomainAsyncJob asyncJob)
2739
qemuDomainObjPrivatePtr priv = vm->privateData;
2741
VIR_DEBUG("Using lock state '%s'", NULLSTR(priv->lockState));
2742
if (virDomainLockProcessResume(driver->lockManager, driver->uri,
2743
vm, priv->lockState) < 0) {
2744
/* Don't free priv->lockState on error, because we need
2745
* to make sure we have state still present if the user
2746
* tries to resume again
2750
VIR_FREE(priv->lockState);
2752
ret = qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob);
2754
ret = qemuMonitorStartCPUs(priv->mon, conn);
2755
qemuDomainObjExitMonitorWithDriver(driver, vm);
2759
virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, reason);
2761
if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0)
2762
VIR_WARN("Unable to release lease on %s", vm->def->name);
2763
VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
2770
int qemuProcessStopCPUs(struct qemud_driver *driver, virDomainObjPtr vm,
2771
virDomainPausedReason reason,
2772
enum qemuDomainAsyncJob asyncJob)
2775
qemuDomainObjPrivatePtr priv = vm->privateData;
2777
VIR_FREE(priv->lockState);
2779
ret = qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob);
2781
ret = qemuMonitorStopCPUs(priv->mon);
2782
qemuDomainObjExitMonitorWithDriver(driver, vm);
2786
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, reason);
2787
if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0)
2788
VIR_WARN("Unable to release lease on %s", vm->def->name);
2789
VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
2798
qemuProcessNotifyNets(virDomainDefPtr def)
2802
for (ii = 0 ; ii < def->nnets ; ii++) {
2803
virDomainNetDefPtr net = def->nets[ii];
2804
if (networkNotifyActualDevice(net) < 0)
2811
qemuProcessFiltersInstantiate(virConnectPtr conn,
2812
virDomainDefPtr def)
2820
for (i = 0 ; i < def->nnets ; i++) {
2821
virDomainNetDefPtr net = def->nets[i];
2822
if ((net->filter) && (net->ifname)) {
2823
if (virDomainConfNWFilterInstantiate(conn, def->uuid, net) < 0) {
2834
qemuProcessUpdateState(struct qemud_driver *driver, virDomainObjPtr vm)
2836
qemuDomainObjPrivatePtr priv = vm->privateData;
2837
virDomainState state;
2838
virDomainPausedReason reason;
2839
virDomainState newState = VIR_DOMAIN_NOSTATE;
2845
qemuDomainObjEnterMonitorWithDriver(driver, vm);
2846
ret = qemuMonitorGetStatus(priv->mon, &running, &reason);
2847
qemuDomainObjExitMonitorWithDriver(driver, vm);
2849
if (ret < 0 || !virDomainObjIsActive(vm))
2852
state = virDomainObjGetState(vm, NULL);
2854
if (state == VIR_DOMAIN_PAUSED && running) {
2855
newState = VIR_DOMAIN_RUNNING;
2856
newReason = VIR_DOMAIN_RUNNING_UNPAUSED;
2857
msg = strdup("was unpaused");
2858
} else if (state == VIR_DOMAIN_RUNNING && !running) {
2859
if (reason == VIR_DOMAIN_PAUSED_SHUTTING_DOWN) {
2860
newState = VIR_DOMAIN_SHUTDOWN;
2861
newReason = VIR_DOMAIN_SHUTDOWN_UNKNOWN;
2862
msg = strdup("shutdown");
2864
newState = VIR_DOMAIN_PAUSED;
2866
ignore_value(virAsprintf(&msg, "was paused (%s)",
2867
virDomainPausedReasonTypeToString(reason)));
2869
} else if (state == VIR_DOMAIN_SHUTOFF && running) {
2870
newState = VIR_DOMAIN_RUNNING;
2871
newReason = VIR_DOMAIN_RUNNING_BOOTED;
2872
msg = strdup("finished booting");
2875
if (newState != VIR_DOMAIN_NOSTATE) {
2877
virReportOOMError();
2881
VIR_DEBUG("Domain %s %s while its monitor was disconnected;"
2882
" changing state to %s (%s)",
2885
virDomainStateTypeToString(newState),
2886
virDomainStateReasonToString(newState, newReason));
2888
virDomainObjSetState(vm, newState, newReason);
2895
qemuProcessRecoverMigration(struct qemud_driver *driver,
2898
enum qemuDomainAsyncJob job,
2899
enum qemuMigrationJobPhase phase,
2900
virDomainState state,
2903
qemuDomainObjPrivatePtr priv = vm->privateData;
2905
if (job == QEMU_ASYNC_JOB_MIGRATION_IN) {
2907
case QEMU_MIGRATION_PHASE_NONE:
2908
case QEMU_MIGRATION_PHASE_PERFORM2:
2909
case QEMU_MIGRATION_PHASE_BEGIN3:
2910
case QEMU_MIGRATION_PHASE_PERFORM3:
2911
case QEMU_MIGRATION_PHASE_PERFORM3_DONE:
2912
case QEMU_MIGRATION_PHASE_CONFIRM3_CANCELLED:
2913
case QEMU_MIGRATION_PHASE_CONFIRM3:
2914
case QEMU_MIGRATION_PHASE_LAST:
2917
case QEMU_MIGRATION_PHASE_PREPARE:
2918
VIR_DEBUG("Killing unfinished incoming migration for domain %s",
2922
case QEMU_MIGRATION_PHASE_FINISH2:
2923
/* source domain is already killed so let's just resume the domain
2924
* and hope we are all set */
2925
VIR_DEBUG("Incoming migration finished, resuming domain %s",
2927
if (qemuProcessStartCPUs(driver, vm, conn,
2928
VIR_DOMAIN_RUNNING_UNPAUSED,
2929
QEMU_ASYNC_JOB_NONE) < 0) {
2930
VIR_WARN("Could not resume domain %s", vm->def->name);
2934
case QEMU_MIGRATION_PHASE_FINISH3:
2935
/* migration finished, we started resuming the domain but didn't
2936
* confirm success or failure yet; killing it seems safest */
2937
VIR_DEBUG("Killing migrated domain %s", vm->def->name);
2940
} else if (job == QEMU_ASYNC_JOB_MIGRATION_OUT) {
2942
case QEMU_MIGRATION_PHASE_NONE:
2943
case QEMU_MIGRATION_PHASE_PREPARE:
2944
case QEMU_MIGRATION_PHASE_FINISH2:
2945
case QEMU_MIGRATION_PHASE_FINISH3:
2946
case QEMU_MIGRATION_PHASE_LAST:
2949
case QEMU_MIGRATION_PHASE_BEGIN3:
2950
/* nothing happen so far, just forget we were about to migrate the
2954
case QEMU_MIGRATION_PHASE_PERFORM2:
2955
case QEMU_MIGRATION_PHASE_PERFORM3:
2956
/* migration is still in progress, let's cancel it and resume the
2958
VIR_DEBUG("Canceling unfinished outgoing migration of domain %s",
2960
qemuDomainObjEnterMonitor(driver, vm);
2961
ignore_value(qemuMonitorMigrateCancel(priv->mon));
2962
qemuDomainObjExitMonitor(driver, vm);
2963
/* resume the domain but only if it was paused as a result of
2965
if (state == VIR_DOMAIN_PAUSED &&
2966
(reason == VIR_DOMAIN_PAUSED_MIGRATION ||
2967
reason == VIR_DOMAIN_PAUSED_UNKNOWN)) {
2968
if (qemuProcessStartCPUs(driver, vm, conn,
2969
VIR_DOMAIN_RUNNING_UNPAUSED,
2970
QEMU_ASYNC_JOB_NONE) < 0) {
2971
VIR_WARN("Could not resume domain %s", vm->def->name);
2976
case QEMU_MIGRATION_PHASE_PERFORM3_DONE:
2977
/* migration finished but we didn't have a chance to get the result
2978
* of Finish3 step; third party needs to check what to do next
2982
case QEMU_MIGRATION_PHASE_CONFIRM3_CANCELLED:
2983
/* Finish3 failed, we need to resume the domain */
2984
VIR_DEBUG("Resuming domain %s after failed migration",
2986
if (state == VIR_DOMAIN_PAUSED &&
2987
(reason == VIR_DOMAIN_PAUSED_MIGRATION ||
2988
reason == VIR_DOMAIN_PAUSED_UNKNOWN)) {
2989
if (qemuProcessStartCPUs(driver, vm, conn,
2990
VIR_DOMAIN_RUNNING_UNPAUSED,
2991
QEMU_ASYNC_JOB_NONE) < 0) {
2992
VIR_WARN("Could not resume domain %s", vm->def->name);
2997
case QEMU_MIGRATION_PHASE_CONFIRM3:
2998
/* migration completed, we need to kill the domain here */
3007
qemuProcessRecoverJob(struct qemud_driver *driver,
3010
const struct qemuDomainJobObj *job)
3012
qemuDomainObjPrivatePtr priv = vm->privateData;
3013
virDomainState state;
3016
state = virDomainObjGetState(vm, &reason);
3018
switch (job->asyncJob) {
3019
case QEMU_ASYNC_JOB_MIGRATION_OUT:
3020
case QEMU_ASYNC_JOB_MIGRATION_IN:
3021
if (qemuProcessRecoverMigration(driver, vm, conn, job->asyncJob,
3022
job->phase, state, reason) < 0)
3026
case QEMU_ASYNC_JOB_SAVE:
3027
case QEMU_ASYNC_JOB_DUMP:
3028
qemuDomainObjEnterMonitor(driver, vm);
3029
ignore_value(qemuMonitorMigrateCancel(priv->mon));
3030
qemuDomainObjExitMonitor(driver, vm);
3031
/* resume the domain but only if it was paused as a result of
3032
* running save/dump operation. Although we are recovering an
3033
* async job, this function is run at startup and must resume
3034
* things using sync monitor connections. */
3035
if (state == VIR_DOMAIN_PAUSED &&
3036
((job->asyncJob == QEMU_ASYNC_JOB_DUMP &&
3037
reason == VIR_DOMAIN_PAUSED_DUMP) ||
3038
(job->asyncJob == QEMU_ASYNC_JOB_SAVE &&
3039
reason == VIR_DOMAIN_PAUSED_SAVE) ||
3040
reason == VIR_DOMAIN_PAUSED_UNKNOWN)) {
3041
if (qemuProcessStartCPUs(driver, vm, conn,
3042
VIR_DOMAIN_RUNNING_UNPAUSED,
3043
QEMU_ASYNC_JOB_NONE) < 0) {
3044
VIR_WARN("Could not resume domain %s after", vm->def->name);
3049
case QEMU_ASYNC_JOB_NONE:
3050
case QEMU_ASYNC_JOB_LAST:
3054
if (!virDomainObjIsActive(vm))
3057
/* In case any special handling is added for job type that has been ignored
3058
* before, QEMU_DOMAIN_TRACK_JOBS (from qemu_domain.h) needs to be updated
3059
* for the job to be properly tracked in domain state XML.
3061
switch (job->active) {
3062
case QEMU_JOB_QUERY:
3066
case QEMU_JOB_DESTROY:
3067
VIR_DEBUG("Domain %s should have already been destroyed",
3071
case QEMU_JOB_SUSPEND:
3072
/* mostly harmless */
3075
case QEMU_JOB_MODIFY:
3076
/* XXX depending on the command we may be in an inconsistent state and
3077
* we should probably fall back to "monitor error" state and refuse to
3081
case QEMU_JOB_MIGRATION_OP:
3082
case QEMU_JOB_ABORT:
3083
case QEMU_JOB_ASYNC:
3084
case QEMU_JOB_ASYNC_NESTED:
3085
/* async job was already handled above */
3094
struct qemuProcessReconnectData {
3096
struct qemud_driver *driver;
3098
struct qemuDomainJobObj oldjob;
3101
* Open an existing VM's monitor, re-detect VCPU threads
3102
* and re-reserve the security labels in use
3104
* We own the virConnectPtr we are passed here - whoever started
3105
* this thread function has increased the reference counter to it
3106
* so that we now have to close it.
3109
qemuProcessReconnect(void *opaque)
3111
struct qemuProcessReconnectData *data = opaque;
3112
struct qemud_driver *driver = data->driver;
3113
virDomainObjPtr obj = data->payload;
3114
qemuDomainObjPrivatePtr priv;
3115
virConnectPtr conn = data->conn;
3116
struct qemuDomainJobObj oldjob;
3120
memcpy(&oldjob, &data->oldjob, sizeof(oldjob));
3124
qemuDriverLock(driver);
3125
virDomainObjLock(obj);
3128
VIR_DEBUG("Reconnect monitor to %p '%s'", obj, obj->def->name);
3130
priv = obj->privateData;
3132
/* Job was started by the caller for us */
3133
qemuDomainObjTransferJob(obj);
3135
/* Hold an extra reference because we can't allow 'vm' to be
3136
* deleted if qemuConnectMonitor() failed */
3139
/* XXX check PID liveliness & EXE path */
3140
if (qemuConnectMonitor(driver, obj) < 0)
3143
/* Failure to connect to agent shouldn't be fatal */
3144
if (qemuConnectAgent(driver, obj) < 0) {
3145
VIR_WARN("Cannot connect to QEMU guest agent for %s",
3147
virResetLastError();
3148
priv->agentError = true;
3151
if (qemuUpdateActivePciHostdevs(driver, obj->def) < 0) {
3155
if (qemuUpdateActiveUsbHostdevs(driver, obj->def) < 0)
3158
if (qemuProcessUpdateState(driver, obj) < 0)
3161
state = virDomainObjGetState(obj, &reason);
3162
if (state == VIR_DOMAIN_SHUTOFF) {
3163
VIR_DEBUG("Domain '%s' wasn't fully started yet, killing it",
3168
/* If upgrading from old libvirtd we won't have found any
3169
* caps in the domain status, so re-query them
3172
!(priv->caps = qemuCapsCacheLookupCopy(driver->capsCache,
3173
obj->def->emulator)))
3176
/* In case the domain shutdown while we were not running,
3177
* we need to finish the shutdown process. And we need to do it after
3178
* we have qemuCaps filled in.
3180
if (state == VIR_DOMAIN_SHUTDOWN ||
3181
(state == VIR_DOMAIN_PAUSED &&
3182
reason == VIR_DOMAIN_PAUSED_SHUTTING_DOWN)) {
3183
VIR_DEBUG("Finishing shutdown sequence for domain %s",
3185
qemuProcessShutdownOrReboot(driver, obj);
3189
if (qemuCapsGet(priv->caps, QEMU_CAPS_DEVICE))
3190
if ((qemuDomainAssignAddresses(obj->def, priv->caps, obj)) < 0)
3193
if (virSecurityManagerReserveLabel(driver->securityManager, obj->def, obj->pid) < 0)
3196
if (qemuProcessNotifyNets(obj->def) < 0)
3199
if (qemuProcessFiltersInstantiate(conn, obj->def))
3202
if (qemuDomainCheckEjectableMedia(driver, obj, QEMU_ASYNC_JOB_NONE) < 0)
3205
if (qemuProcessRecoverJob(driver, obj, conn, &oldjob) < 0)
3208
/* update domain state XML with possibly updated state in virDomainObj */
3209
if (virDomainSaveStatus(driver->caps, driver->stateDir, obj) < 0)
3212
/* Run an hook to allow admins to do some magic */
3213
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
3214
char *xml = qemuDomainDefFormatXML(driver, obj->def, 0);
3217
hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, obj->def->name,
3218
VIR_HOOK_QEMU_OP_RECONNECT, VIR_HOOK_SUBOP_BEGIN,
3223
* If the script raised an error abort the launch
3229
if (obj->def->id >= driver->nextvmid)
3230
driver->nextvmid = obj->def->id + 1;
3233
if (!qemuDomainObjEndJob(driver, obj))
3236
if (obj && virObjectUnref(obj))
3237
virDomainObjUnlock(obj);
3239
qemuDriverUnlock(driver);
3241
virConnectClose(conn);
3246
if (!qemuDomainObjEndJob(driver, obj))
3250
if (!virDomainObjIsActive(obj)) {
3251
if (virObjectUnref(obj))
3252
virDomainObjUnlock(obj);
3253
qemuDriverUnlock(driver);
3257
if (virObjectUnref(obj)) {
3258
/* We can't get the monitor back, so must kill the VM
3259
* to remove danger of it ending up running twice if
3260
* user tries to start it again later
3262
if (qemuCapsGet(priv->caps, QEMU_CAPS_NO_SHUTDOWN)) {
3263
/* If we couldn't get the monitor and qemu supports
3264
* no-shutdown, we can safely say that the domain
3266
state = VIR_DOMAIN_SHUTOFF_CRASHED;
3268
/* ... but if it doesn't we can't say what the state
3269
* really is and FAILED means "failed to start" */
3270
state = VIR_DOMAIN_SHUTOFF_UNKNOWN;
3272
qemuProcessStop(driver, obj, state, 0);
3273
if (!obj->persistent)
3274
qemuDomainRemoveInactive(driver, obj);
3276
virDomainObjUnlock(obj);
3279
qemuDriverUnlock(driver);
3281
virConnectClose(conn);
3285
qemuProcessReconnectHelper(void *payload,
3286
const void *name ATTRIBUTE_UNUSED,
3290
struct qemuProcessReconnectData *src = opaque;
3291
struct qemuProcessReconnectData *data;
3292
virDomainObjPtr obj = payload;
3294
if (VIR_ALLOC(data) < 0) {
3295
virReportOOMError();
3299
memcpy(data, src, sizeof(*data));
3300
data->payload = payload;
3302
/* This iterator is called with driver being locked.
3303
* We create a separate thread to run qemuProcessReconnect in it.
3304
* However, qemuProcessReconnect needs to:
3306
* 2. just before monitor reconnect do lightweight MonitorEnter
3307
* (increase VM refcount, unlock VM & driver)
3308
* 3. reconnect to monitor
3309
* 4. do lightweight MonitorExit (lock driver & VM)
3310
* 5. continue reconnect process
3314
* It is necessary to NOT hold driver lock for the entire run
3315
* of reconnect, otherwise we will get blocked if there is
3316
* unresponsive qemu.
3317
* However, iterating over hash table MUST be done on locked
3320
* NB, we can't do normal MonitorEnter & MonitorExit because
3321
* these two lock the monitor lock, which does not exists in
3325
virDomainObjLock(obj);
3327
qemuDomainObjRestoreJob(obj, &data->oldjob);
3329
if (qemuDomainObjBeginJobWithDriver(src->driver, obj, QEMU_JOB_MODIFY) < 0)
3332
/* Since we close the connection later on, we have to make sure
3333
* that the threads we start see a valid connection throughout their
3334
* lifetime. We simply increase the reference counter here.
3336
virConnectRef(data->conn);
3338
if (virThreadCreate(&thread, true, qemuProcessReconnect, data) < 0) {
3340
virConnectClose(data->conn);
3342
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
3343
_("Could not create thread. QEMU initialization "
3344
"might be incomplete"));
3345
if (!qemuDomainObjEndJob(src->driver, obj)) {
3347
} else if (virObjectUnref(obj)) {
3348
/* We can't spawn a thread and thus connect to monitor.
3350
qemuProcessStop(src->driver, obj, VIR_DOMAIN_SHUTOFF_FAILED, 0);
3351
if (!obj->persistent)
3352
qemuDomainRemoveInactive(src->driver, obj);
3354
virDomainObjUnlock(obj);
3359
virDomainObjUnlock(obj);
3368
* qemuProcessReconnectAll
3370
* Try to re-open the resources for live VMs that we care
3374
qemuProcessReconnectAll(virConnectPtr conn, struct qemud_driver *driver)
3376
struct qemuProcessReconnectData data = {.conn = conn, .driver = driver};
3377
virHashForEach(driver->domains.objs, qemuProcessReconnectHelper, &data);
3380
int qemuProcessStart(virConnectPtr conn,
3381
struct qemud_driver *driver,
3383
const char *migrateFrom,
3385
const char *stdin_path,
3386
virDomainSnapshotObjPtr snapshot,
3387
enum virNetDevVPortProfileOp vmop,
3395
qemuDomainObjPrivatePtr priv = vm->privateData;
3396
virCommandPtr cmd = NULL;
3397
struct qemuProcessHookData hookData;
3398
unsigned long cur_balloon;
3400
char *nodeset = NULL;
3401
virBitmapPtr nodemask = NULL;
3402
unsigned int stop_flags;
3404
/* Okay, these are just internal flags,
3405
* but doesn't hurt to check */
3406
virCheckFlags(VIR_QEMU_PROCESS_START_COLD |
3407
VIR_QEMU_PROCESS_START_PAUSED |
3408
VIR_QEMU_PROCESS_START_AUTODESROY, -1);
3410
/* From now on until domain security labeling is done:
3411
* if any operation fails and we goto cleanup, we must not
3412
* restore any security label as we would overwrite labels
3413
* we did not set. */
3414
stop_flags = VIR_QEMU_PROCESS_STOP_NO_RELABEL;
3416
hookData.conn = conn;
3418
hookData.driver = driver;
3420
VIR_DEBUG("Beginning VM startup process");
3422
if (virDomainObjIsActive(vm)) {
3423
virReportError(VIR_ERR_OPERATION_INVALID,
3424
"%s", _("VM is already active"));
3428
/* Do this upfront, so any part of the startup process can add
3429
* runtime state to vm->def that won't be persisted. This let's us
3430
* report implicit runtime defaults in the XML, like vnc listen/socket
3432
VIR_DEBUG("Setting current domain def as transient");
3433
if (virDomainObjSetDefTransient(driver->caps, vm, true) < 0)
3436
vm->def->id = driver->nextvmid++;
3437
qemuDomainSetFakeReboot(driver, vm, false);
3438
virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, VIR_DOMAIN_SHUTOFF_UNKNOWN);
3440
/* Run an early hook to set-up missing devices */
3441
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
3442
char *xml = qemuDomainDefFormatXML(driver, vm->def, 0);
3445
hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name,
3446
VIR_HOOK_QEMU_OP_PREPARE, VIR_HOOK_SUBOP_BEGIN,
3451
* If the script raised an error abort the launch
3457
/* Must be run before security labelling */
3458
VIR_DEBUG("Preparing host devices");
3459
if (qemuPrepareHostDevices(driver, vm->def, !migrateFrom) < 0)
3462
VIR_DEBUG("Preparing chr devices");
3463
if (virDomainChrDefForeach(vm->def,
3465
qemuProcessPrepareChardevDevice,
3469
/* If you are using a SecurityDriver with dynamic labelling,
3470
then generate a security label for isolation */
3471
VIR_DEBUG("Generating domain security label (if required)");
3472
if (virSecurityManagerGenLabel(driver->securityManager, vm->def) < 0) {
3473
virDomainAuditSecurityLabel(vm, false);
3476
virDomainAuditSecurityLabel(vm, true);
3478
/* Ensure no historical cgroup for this VM is lying around bogus
3480
VIR_DEBUG("Ensuring no historical cgroup is lying around");
3481
qemuRemoveCgroup(driver, vm, 1);
3483
if (vm->def->ngraphics == 1) {
3484
if (vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
3485
!vm->def->graphics[0]->data.vnc.socket &&
3486
vm->def->graphics[0]->data.vnc.autoport) {
3487
int port = qemuProcessNextFreePort(driver, driver->remotePortMin);
3489
virReportError(VIR_ERR_INTERNAL_ERROR,
3490
"%s", _("Unable to find an unused port for VNC"));
3493
vm->def->graphics[0]->data.vnc.port = port;
3494
} else if (vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
3496
if (vm->def->graphics[0]->data.spice.autoport ||
3497
vm->def->graphics[0]->data.spice.port == -1) {
3498
port = qemuProcessNextFreePort(driver, driver->remotePortMin);
3501
virReportError(VIR_ERR_INTERNAL_ERROR,
3502
"%s", _("Unable to find an unused port for SPICE"));
3506
vm->def->graphics[0]->data.spice.port = port;
3508
if (driver->spiceTLS &&
3509
(vm->def->graphics[0]->data.spice.autoport ||
3510
vm->def->graphics[0]->data.spice.tlsPort == -1)) {
3511
int tlsPort = qemuProcessNextFreePort(driver,
3512
vm->def->graphics[0]->data.spice.port + 1);
3514
virReportError(VIR_ERR_INTERNAL_ERROR,
3515
"%s", _("Unable to find an unused port for SPICE TLS"));
3516
qemuProcessReturnPort(driver, port);
3520
vm->def->graphics[0]->data.spice.tlsPort = tlsPort;
3524
if (vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC ||
3525
vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
3526
virDomainGraphicsDefPtr graphics = vm->def->graphics[0];
3527
if (graphics->nListens == 0) {
3528
if (VIR_EXPAND_N(graphics->listens, graphics->nListens, 1) < 0) {
3529
virReportOOMError();
3532
graphics->listens[0].type = VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS;
3533
if (vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC)
3534
graphics->listens[0].address = strdup(driver->vncListen);
3536
graphics->listens[0].address = strdup(driver->spiceListen);
3537
if (!graphics->listens[0].address) {
3538
VIR_SHRINK_N(graphics->listens, graphics->nListens, 1);
3539
virReportOOMError();
3546
if (virFileMakePath(driver->logDir) < 0) {
3547
virReportSystemError(errno,
3548
_("cannot create log directory %s"),
3553
VIR_DEBUG("Creating domain log file");
3554
if ((logfile = qemuDomainCreateLog(driver, vm, false)) < 0)
3557
if (vm->def->virtType == VIR_DOMAIN_VIRT_KVM) {
3558
VIR_DEBUG("Checking for KVM availability");
3559
if (access("/dev/kvm", F_OK) != 0) {
3560
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
3561
_("Domain requires KVM, but it is not available. "
3562
"Check that virtualization is enabled in the host BIOS, "
3563
"and host configuration is setup to load the kvm modules."));
3568
VIR_DEBUG("Determining emulator version");
3569
virObjectUnref(priv->caps);
3570
if (!(priv->caps = qemuCapsCacheLookupCopy(driver->capsCache,
3571
vm->def->emulator)))
3574
if (qemuAssignDeviceAliases(vm->def, priv->caps) < 0)
3577
VIR_DEBUG("Checking for CDROM and floppy presence");
3578
if (qemuDomainCheckDiskPresence(driver, vm,
3579
flags & VIR_QEMU_PROCESS_START_COLD) < 0)
3582
/* Get the advisory nodeset from numad if 'placement' of
3583
* either <vcpu> or <numatune> is 'auto'.
3585
if ((vm->def->placement_mode ==
3586
VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) ||
3587
(vm->def->numatune.memory.placement_mode ==
3588
VIR_DOMAIN_NUMATUNE_MEM_PLACEMENT_MODE_AUTO)) {
3589
nodeset = qemuGetNumadAdvice(vm->def);
3593
VIR_DEBUG("Nodeset returned from numad: %s", nodeset);
3595
if (virBitmapParse(nodeset, 0, &nodemask,
3596
VIR_DOMAIN_CPUMASK_LEN) < 0)
3599
hookData.nodemask = nodemask;
3601
VIR_DEBUG("Setting up domain cgroup (if required)");
3602
if (qemuSetupCgroup(driver, vm, nodemask) < 0)
3605
if (VIR_ALLOC(priv->monConfig) < 0) {
3606
virReportOOMError();
3610
VIR_DEBUG("Preparing monitor state");
3611
if (qemuProcessPrepareMonitorChr(driver, priv->monConfig, vm->def->name) < 0)
3614
if (qemuCapsGet(priv->caps, QEMU_CAPS_MONITOR_JSON))
3619
priv->monError = false;
3621
priv->gotShutdown = false;
3623
VIR_FREE(priv->pidfile);
3624
if (!(priv->pidfile = virPidFileBuildPath(driver->stateDir, vm->def->name))) {
3625
virReportSystemError(errno,
3626
"%s", _("Failed to build pidfile path."));
3630
if (unlink(priv->pidfile) < 0 &&
3632
virReportSystemError(errno,
3633
_("Cannot remove stale PID file %s"),
3639
* Normally PCI addresses are assigned in the virDomainCreate
3640
* or virDomainDefine methods. We might still need to assign
3641
* some here to cope with the question of upgrades. Regardless
3642
* we also need to populate the PCi address set cache for later
3645
if (qemuCapsGet(priv->caps, QEMU_CAPS_DEVICE)) {
3646
VIR_DEBUG("Assigning domain PCI addresses");
3647
if ((qemuDomainAssignAddresses(vm->def, priv->caps, vm)) < 0)
3651
VIR_DEBUG("Building emulator command line");
3652
if (!(cmd = qemuBuildCommandLine(conn, driver, vm->def, priv->monConfig,
3653
priv->monJSON != 0, priv->caps,
3654
migrateFrom, stdin_fd, snapshot, vmop)))
3657
/* now that we know it is about to start call the hook if present */
3658
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
3659
char *xml = qemuDomainDefFormatXML(driver, vm->def, 0);
3662
hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name,
3663
VIR_HOOK_QEMU_OP_START, VIR_HOOK_SUBOP_BEGIN,
3668
* If the script raised an error abort the launch
3674
if ((timestamp = virTimeStringNow()) == NULL) {
3675
virReportOOMError();
3678
if (safewrite(logfile, timestamp, strlen(timestamp)) < 0 ||
3679
safewrite(logfile, START_POSTFIX, strlen(START_POSTFIX)) < 0) {
3680
VIR_WARN("Unable to write timestamp to logfile: %s",
3681
virStrerror(errno, ebuf, sizeof(ebuf)));
3684
VIR_FREE(timestamp);
3687
virCommandWriteArgLog(cmd, logfile);
3689
qemuDomainObjCheckTaint(driver, vm, logfile);
3691
if ((pos = lseek(logfile, 0, SEEK_END)) < 0)
3692
VIR_WARN("Unable to seek to end of logfile: %s",
3693
virStrerror(errno, ebuf, sizeof(ebuf)));
3695
VIR_DEBUG("Clear emulator capabilities: %d",
3696
driver->clearEmulatorCapabilities);
3697
if (driver->clearEmulatorCapabilities)
3698
virCommandClearCaps(cmd);
3700
/* in case a certain disk is desirous of CAP_SYS_RAWIO, add this */
3701
for (i = 0; i < vm->def->ndisks; i++) {
3702
if (vm->def->disks[i]->rawio == 1)
3703
virCommandAllowCap(cmd, CAP_SYS_RAWIO);
3706
virCommandSetPreExecHook(cmd, qemuProcessHook, &hookData);
3708
virCommandSetOutputFD(cmd, &logfile);
3709
virCommandSetErrorFD(cmd, &logfile);
3710
virCommandNonblockingFDs(cmd);
3711
virCommandSetPidFile(cmd, priv->pidfile);
3712
virCommandDaemonize(cmd);
3713
virCommandRequireHandshake(cmd);
3715
ret = virCommandRun(cmd, NULL);
3717
/* wait for qemu process to show up */
3719
if (virPidFileReadPath(priv->pidfile, &vm->pid) < 0) {
3720
virReportError(VIR_ERR_INTERNAL_ERROR,
3721
_("Domain %s didn't show up"), vm->def->name);
3725
} else if (ret == -2) {
3727
* XXX this is bogus. It isn't safe to set vm->pid = child
3728
* because the child no longer exists.
3731
/* The virCommand process that launches the daemon failed. Pending on
3732
* when it failed (we can't determine for sure), there may be
3733
* extra info in the domain log (if the hook failed for example).
3735
* Pretend like things succeeded, and let 'WaitForMonitor' report
3736
* the log contents for us.
3743
VIR_DEBUG("Writing early domain status to disk");
3744
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) {
3748
VIR_DEBUG("Waiting for handshake from child");
3749
if (virCommandHandshakeWait(cmd) < 0) {
3753
VIR_DEBUG("Setting domain security labels");
3754
if (virSecurityManagerSetAllLabel(driver->securityManager,
3755
vm->def, stdin_path) < 0)
3758
/* Security manager labeled all devices, therefore
3759
* if any operation from now on fails and we goto cleanup,
3760
* where virSecurityManagerRestoreAllLabel() is called
3761
* (hidden under qemuProcessStop) we need to restore labels. */
3762
stop_flags &= ~VIR_QEMU_PROCESS_STOP_NO_RELABEL;
3764
if (stdin_fd != -1) {
3765
/* if there's an fd to migrate from, and it's a pipe, put the
3766
* proper security label on it
3768
struct stat stdin_sb;
3770
VIR_DEBUG("setting security label on pipe used for migration");
3772
if (fstat(stdin_fd, &stdin_sb) < 0) {
3773
virReportSystemError(errno,
3774
_("cannot stat fd %d"), stdin_fd);
3777
if (S_ISFIFO(stdin_sb.st_mode) &&
3778
virSecurityManagerSetImageFDLabel(driver->securityManager, vm->def, stdin_fd) < 0)
3782
VIR_DEBUG("Labelling done, completing handshake to child");
3783
if (virCommandHandshakeNotify(cmd) < 0) {
3786
VIR_DEBUG("Handshake complete, child running");
3789
flags |= VIR_QEMU_PROCESS_START_PAUSED;
3791
if (ret == -1) /* The VM failed to start; tear filters before taps */
3792
virDomainConfVMNWFilterTeardown(vm);
3794
if (ret == -1) /* The VM failed to start */
3797
VIR_DEBUG("Waiting for monitor to show up");
3798
if (qemuProcessWaitForMonitor(driver, vm, priv->caps, pos) < 0)
3801
/* Failure to connect to agent shouldn't be fatal */
3802
if (qemuConnectAgent(driver, vm) < 0) {
3803
VIR_WARN("Cannot connect to QEMU guest agent for %s",
3805
virResetLastError();
3806
priv->agentError = true;
3809
VIR_DEBUG("Detecting VCPU PIDs");
3810
if (qemuProcessDetectVcpuPIDs(driver, vm) < 0)
3813
VIR_DEBUG("Setting cgroup for each VCPU (if required)");
3814
if (qemuSetupCgroupForVcpu(driver, vm) < 0)
3817
VIR_DEBUG("Setting cgroup for emulator (if required)");
3818
if (qemuSetupCgroupForEmulator(driver, vm, nodemask) < 0)
3821
VIR_DEBUG("Setting VCPU affinities");
3822
if (qemuProcessSetVcpuAffinites(conn, vm) < 0)
3825
VIR_DEBUG("Setting affinity of emulator threads");
3826
if (qemuProcessSetEmulatorAffinites(conn, vm) < 0)
3829
VIR_DEBUG("Setting any required VM passwords");
3830
if (qemuProcessInitPasswords(conn, driver, vm) < 0)
3833
/* If we have -device, then addresses are assigned explicitly.
3834
* If not, then we have to detect dynamic ones here */
3835
if (!qemuCapsGet(priv->caps, QEMU_CAPS_DEVICE)) {
3836
VIR_DEBUG("Determining domain device PCI addresses");
3837
if (qemuProcessInitPCIAddresses(driver, vm) < 0)
3841
/* set default link states */
3842
/* qemu doesn't support setting this on the command line, so
3843
* enter the monitor */
3844
VIR_DEBUG("Setting network link states");
3845
qemuDomainObjEnterMonitorWithDriver(driver, vm);
3846
if (qemuProcessSetLinkStates(vm) < 0) {
3847
qemuDomainObjExitMonitorWithDriver(driver, vm);
3851
qemuDomainObjExitMonitorWithDriver(driver, vm);
3853
/* Technically, qemuProcessStart can be called from inside
3854
* QEMU_ASYNC_JOB_MIGRATION_IN, but we are okay treating this like
3855
* a sync job since no other job can call into the domain until
3856
* migration completes. */
3857
VIR_DEBUG("Setting initial memory amount");
3858
cur_balloon = vm->def->mem.cur_balloon;
3859
if (cur_balloon != vm->def->mem.cur_balloon) {
3860
virReportError(VIR_ERR_OVERFLOW,
3861
_("unable to set balloon to %lld"),
3862
vm->def->mem.cur_balloon);
3865
qemuDomainObjEnterMonitorWithDriver(driver, vm);
3866
if (qemuMonitorSetBalloon(priv->mon, cur_balloon) < 0) {
3867
qemuDomainObjExitMonitorWithDriver(driver, vm);
3870
qemuDomainObjExitMonitorWithDriver(driver, vm);
3872
if (!(flags & VIR_QEMU_PROCESS_START_PAUSED)) {
3873
VIR_DEBUG("Starting domain CPUs");
3874
/* Allow the CPUS to start executing */
3875
if (qemuProcessStartCPUs(driver, vm, conn,
3876
VIR_DOMAIN_RUNNING_BOOTED,
3877
QEMU_ASYNC_JOB_NONE) < 0) {
3878
if (virGetLastError() == NULL)
3879
virReportError(VIR_ERR_INTERNAL_ERROR,
3880
"%s", _("resume operation failed"));
3884
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED,
3886
VIR_DOMAIN_PAUSED_MIGRATION :
3887
VIR_DOMAIN_PAUSED_USER);
3890
if (flags & VIR_QEMU_PROCESS_START_AUTODESROY &&
3891
qemuProcessAutoDestroyAdd(driver, vm, conn) < 0)
3894
VIR_DEBUG("Writing domain status to disk");
3895
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
3898
/* finally we can call the 'started' hook script if any */
3899
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
3900
char *xml = qemuDomainDefFormatXML(driver, vm->def, 0);
3903
hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name,
3904
VIR_HOOK_QEMU_OP_STARTED, VIR_HOOK_SUBOP_BEGIN,
3909
* If the script raised an error abort the launch
3915
virCommandFree(cmd);
3916
VIR_FORCE_CLOSE(logfile);
3921
/* We jump here if we failed to start the VM for any reason, or
3922
* if we failed to initialize the now running VM. kill it off and
3923
* pretend we never started it */
3925
virBitmapFree(nodemask);
3926
virCommandFree(cmd);
3927
VIR_FORCE_CLOSE(logfile);
3928
qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_FAILED, stop_flags);
3935
qemuProcessKill(struct qemud_driver *driver,
3936
virDomainObjPtr vm, unsigned int flags)
3940
VIR_DEBUG("vm=%s pid=%d flags=%x",
3941
vm->def->name, vm->pid, flags);
3943
if (!(flags & VIR_QEMU_PROCESS_KILL_NOCHECK)) {
3944
if (!virDomainObjIsActive(vm)) {
3945
VIR_DEBUG("VM '%s' not active", vm->def->name);
3950
if ((flags & VIR_QEMU_PROCESS_KILL_NOWAIT)) {
3951
virProcessKill(vm->pid,
3952
(flags & VIR_QEMU_PROCESS_KILL_FORCE) ?
3958
qemuDriverUnlock(driver);
3960
ret = virProcessKillPainfully(vm->pid,
3961
!!(flags & VIR_QEMU_PROCESS_KILL_FORCE));
3965
virDomainObjUnlock(vm);
3966
qemuDriverLock(driver);
3967
virDomainObjLock(vm);
3975
void qemuProcessStop(struct qemud_driver *driver,
3977
virDomainShutoffReason reason,
3982
qemuDomainObjPrivatePtr priv = vm->privateData;
3983
virErrorPtr orig_err;
3984
virDomainDefPtr def;
3985
virNetDevVPortProfilePtr vport = NULL;
3991
VIR_DEBUG("Shutting down VM '%s' pid=%d flags=%x",
3992
vm->def->name, vm->pid, flags);
3994
if (!virDomainObjIsActive(vm)) {
3995
VIR_DEBUG("VM '%s' not active", vm->def->name);
4000
* We may unlock the driver and vm in qemuProcessKill(), and another thread
4001
* can lock driver and vm, and then call qemuProcessStop(). So we should
4002
* set vm->def->id to -1 here to avoid qemuProcessStop() to be called twice.
4006
if ((logfile = qemuDomainCreateLog(driver, vm, true)) < 0) {
4007
/* To not break the normal domain shutdown process, skip the
4008
* timestamp log writing if failed on opening log file. */
4009
VIR_WARN("Unable to open logfile: %s",
4010
virStrerror(errno, ebuf, sizeof(ebuf)));
4012
if ((timestamp = virTimeStringNow()) == NULL) {
4013
virReportOOMError();
4015
if (safewrite(logfile, timestamp, strlen(timestamp)) < 0 ||
4016
safewrite(logfile, SHUTDOWN_POSTFIX,
4017
strlen(SHUTDOWN_POSTFIX)) < 0) {
4018
VIR_WARN("Unable to write timestamp to logfile: %s",
4019
virStrerror(errno, ebuf, sizeof(ebuf)));
4022
VIR_FREE(timestamp);
4025
if (VIR_CLOSE(logfile) < 0)
4026
VIR_WARN("Unable to close logfile: %s",
4027
virStrerror(errno, ebuf, sizeof(ebuf)));
4030
/* This method is routinely used in clean up paths. Disable error
4031
* reporting so we don't squash a legit error. */
4032
orig_err = virSaveLastError();
4034
virDomainConfVMNWFilterTeardown(vm);
4036
if (driver->macFilter) {
4038
for (i = 0 ; i < def->nnets ; i++) {
4039
virDomainNetDefPtr net = def->nets[i];
4040
if (net->ifname == NULL)
4042
if ((errno = networkDisallowMacOnPort(driver, net->ifname,
4044
virReportSystemError(errno,
4045
_("failed to remove ebtables rule to allow MAC address on '%s'"),
4052
qemuAgentClose(priv->agent);
4054
priv->agentError = false;
4058
qemuMonitorClose(priv->mon);
4062
if (priv->monConfig) {
4063
if (priv->monConfig->type == VIR_DOMAIN_CHR_TYPE_UNIX)
4064
unlink(priv->monConfig->data.nix.path);
4065
virDomainChrSourceDefFree(priv->monConfig);
4066
priv->monConfig = NULL;
4069
/* shut it off for sure */
4070
ignore_value(qemuProcessKill(driver, vm, VIR_QEMU_PROCESS_KILL_FORCE|
4071
VIR_QEMU_PROCESS_KILL_NOCHECK));
4073
qemuDomainCleanupRun(driver, vm);
4075
/* Stop autodestroy in case guest is restarted */
4076
qemuProcessAutoDestroyRemove(driver, vm);
4078
/* now that we know it's stopped call the hook if present */
4079
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
4080
char *xml = qemuDomainDefFormatXML(driver, vm->def, 0);
4082
/* we can't stop the operation even if the script raised an error */
4083
virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name,
4084
VIR_HOOK_QEMU_OP_STOPPED, VIR_HOOK_SUBOP_END,
4089
/* Reset Security Labels unless caller don't want us to */
4090
if (!(flags & VIR_QEMU_PROCESS_STOP_NO_RELABEL))
4091
virSecurityManagerRestoreAllLabel(driver->securityManager,
4093
flags & VIR_QEMU_PROCESS_STOP_MIGRATED);
4094
virSecurityManagerReleaseLabel(driver->securityManager, vm->def);
4096
/* Clear out dynamically assigned labels */
4097
for (i = 0; i < vm->def->nseclabels; i++) {
4098
if (vm->def->seclabels[i]->type == VIR_DOMAIN_SECLABEL_DYNAMIC) {
4099
VIR_FREE(vm->def->seclabels[i]->label);
4101
VIR_FREE(vm->def->seclabels[i]->imagelabel);
4104
virDomainDefClearDeviceAliases(vm->def);
4105
if (!priv->persistentAddrs) {
4106
virDomainDefClearPCIAddresses(vm->def);
4107
qemuDomainPCIAddressSetFree(priv->pciaddrs);
4108
priv->pciaddrs = NULL;
4111
qemuDomainReAttachHostDevices(driver, vm->def);
4114
for (i = 0; i < def->nnets; i++) {
4115
virDomainNetDefPtr net = def->nets[i];
4116
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
4117
ignore_value(virNetDevMacVLanDeleteWithVPortProfile(
4118
net->ifname, &net->mac,
4119
virDomainNetGetActualDirectDev(net),
4120
virDomainNetGetActualDirectMode(net),
4121
virDomainNetGetActualVirtPortProfile(net),
4123
VIR_FREE(net->ifname);
4125
/* release the physical device (or any other resources used by
4126
* this interface in the network driver
4128
vport = virDomainNetGetActualVirtPortProfile(net);
4129
if (vport && vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH)
4130
ignore_value(virNetDevOpenvswitchRemovePort(
4131
virDomainNetGetActualBridgeName(net),
4134
networkReleaseActualDevice(net);
4138
if ((ret = qemuRemoveCgroup(driver, vm, 0)) < 0) {
4139
if (ret == -EBUSY && (retries++ < 5)) {
4143
VIR_WARN("Failed to remove cgroup for %s",
4147
qemuProcessRemoveDomainStatus(driver, vm);
4149
/* Remove VNC port from port reservation bitmap, but only if it was
4150
reserved by the driver (autoport=yes)
4152
if ((vm->def->ngraphics == 1) &&
4153
vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
4154
vm->def->graphics[0]->data.vnc.autoport) {
4155
qemuProcessReturnPort(driver, vm->def->graphics[0]->data.vnc.port);
4157
if ((vm->def->ngraphics == 1) &&
4158
vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
4159
vm->def->graphics[0]->data.spice.autoport) {
4160
qemuProcessReturnPort(driver, vm->def->graphics[0]->data.spice.port);
4161
qemuProcessReturnPort(driver, vm->def->graphics[0]->data.spice.tlsPort);
4166
virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, reason);
4167
VIR_FREE(priv->vcpupids);
4168
priv->nvcpupids = 0;
4169
virObjectUnref(priv->caps);
4171
VIR_FREE(priv->pidfile);
4173
/* The "release" hook cleans up additional resources */
4174
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
4175
char *xml = qemuDomainDefFormatXML(driver, vm->def, 0);
4177
/* we can't stop the operation even if the script raised an error */
4178
virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name,
4179
VIR_HOOK_QEMU_OP_RELEASE, VIR_HOOK_SUBOP_END,
4185
virDomainDefFree(vm->def);
4186
vm->def = vm->newDef;
4192
virSetError(orig_err);
4193
virFreeError(orig_err);
4198
int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
4199
struct qemud_driver *driver,
4202
const char *pidfile,
4203
virDomainChrSourceDefPtr monConfig,
4210
qemuDomainObjPrivatePtr priv = vm->privateData;
4211
bool running = true;
4212
virDomainPausedReason reason;
4213
virSecurityLabelPtr seclabel = NULL;
4214
virSecurityLabelDefPtr seclabeldef = NULL;
4215
virSecurityManagerPtr* sec_managers = NULL;
4218
VIR_DEBUG("Beginning VM attach process");
4220
if (virDomainObjIsActive(vm)) {
4221
virReportError(VIR_ERR_OPERATION_INVALID,
4222
"%s", _("VM is already active"));
4226
/* Do this upfront, so any part of the startup process can add
4227
* runtime state to vm->def that won't be persisted. This let's us
4228
* report implicit runtime defaults in the XML, like vnc listen/socket
4230
VIR_DEBUG("Setting current domain def as transient");
4231
if (virDomainObjSetDefTransient(driver->caps, vm, true) < 0)
4234
vm->def->id = driver->nextvmid++;
4236
if (virFileMakePath(driver->logDir) < 0) {
4237
virReportSystemError(errno,
4238
_("cannot create log directory %s"),
4243
VIR_FREE(priv->pidfile);
4245
!(priv->pidfile = strdup(pidfile)))
4248
VIR_DEBUG("Detect security driver config");
4249
sec_managers = virSecurityManagerGetNested(driver->securityManager);
4250
if (sec_managers == NULL) {
4254
for (i = 0; sec_managers[i]; i++) {
4255
model = virSecurityManagerGetModel(sec_managers[i]);
4256
seclabeldef = virDomainDefGetSecurityLabelDef(vm->def, model);
4257
if (seclabeldef == NULL) {
4260
seclabeldef->type = VIR_DOMAIN_SECLABEL_STATIC;
4261
if (VIR_ALLOC(seclabel) < 0)
4263
if (virSecurityManagerGetProcessLabel(driver->securityManager,
4264
vm->def, vm->pid, seclabel) < 0)
4267
if (!(seclabeldef->model = strdup(model)))
4270
if (!(seclabeldef->label = strdup(seclabel->label)))
4275
VIR_DEBUG("Creating domain log file");
4276
if ((logfile = qemuDomainCreateLog(driver, vm, false)) < 0)
4279
VIR_DEBUG("Determining emulator version");
4280
virObjectUnref(priv->caps);
4281
if (!(priv->caps = qemuCapsCacheLookupCopy(driver->capsCache,
4282
vm->def->emulator)))
4285
VIR_DEBUG("Preparing monitor state");
4286
priv->monConfig = monConfig;
4288
priv->monJSON = monJSON;
4290
priv->gotShutdown = false;
4293
* Normally PCI addresses are assigned in the virDomainCreate
4294
* or virDomainDefine methods. We might still need to assign
4295
* some here to cope with the question of upgrades. Regardless
4296
* we also need to populate the PCi address set cache for later
4299
if (qemuCapsGet(priv->caps, QEMU_CAPS_DEVICE)) {
4300
VIR_DEBUG("Assigning domain PCI addresses");
4301
if ((qemuDomainAssignAddresses(vm->def, priv->caps, vm)) < 0)
4305
if ((timestamp = virTimeStringNow()) == NULL) {
4306
virReportOOMError();
4309
if (safewrite(logfile, timestamp, strlen(timestamp)) < 0 ||
4310
safewrite(logfile, ATTACH_POSTFIX, strlen(ATTACH_POSTFIX)) < 0) {
4311
VIR_WARN("Unable to write timestamp to logfile: %s",
4312
virStrerror(errno, ebuf, sizeof(ebuf)));
4315
VIR_FREE(timestamp);
4318
qemuDomainObjTaint(driver, vm, VIR_DOMAIN_TAINT_EXTERNAL_LAUNCH, logfile);
4322
VIR_DEBUG("Waiting for monitor to show up");
4323
if (qemuProcessWaitForMonitor(driver, vm, priv->caps, -1) < 0)
4326
/* Failure to connect to agent shouldn't be fatal */
4327
if (qemuConnectAgent(driver, vm) < 0) {
4328
VIR_WARN("Cannot connect to QEMU guest agent for %s",
4330
virResetLastError();
4331
priv->agentError = true;
4334
VIR_DEBUG("Detecting VCPU PIDs");
4335
if (qemuProcessDetectVcpuPIDs(driver, vm) < 0)
4338
/* If we have -device, then addresses are assigned explicitly.
4339
* If not, then we have to detect dynamic ones here */
4340
if (!qemuCapsGet(priv->caps, QEMU_CAPS_DEVICE)) {
4341
VIR_DEBUG("Determining domain device PCI addresses");
4342
if (qemuProcessInitPCIAddresses(driver, vm) < 0)
4346
VIR_DEBUG("Getting initial memory amount");
4347
qemuDomainObjEnterMonitorWithDriver(driver, vm);
4348
if (qemuMonitorGetBalloonInfo(priv->mon, &vm->def->mem.cur_balloon) < 0) {
4349
qemuDomainObjExitMonitorWithDriver(driver, vm);
4352
if (qemuMonitorGetStatus(priv->mon, &running, &reason) < 0) {
4353
qemuDomainObjExitMonitorWithDriver(driver, vm);
4356
if (qemuMonitorGetVirtType(priv->mon, &vm->def->virtType) < 0) {
4357
qemuDomainObjExitMonitorWithDriver(driver, vm);
4360
qemuDomainObjExitMonitorWithDriver(driver, vm);
4362
if (!virDomainObjIsActive(vm))
4366
virDomainObjSetState(vm, VIR_DOMAIN_RUNNING,
4367
VIR_DOMAIN_RUNNING_UNPAUSED);
4369
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, reason);
4371
VIR_DEBUG("Writing domain status to disk");
4372
if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
4375
/* Run an hook to allow admins to do some magic */
4376
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
4377
char *xml = qemuDomainDefFormatXML(driver, vm->def, 0);
4380
hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name,
4381
VIR_HOOK_QEMU_OP_ATTACH, VIR_HOOK_SUBOP_BEGIN,
4386
* If the script raised an error abort the launch
4392
VIR_FORCE_CLOSE(logfile);
4394
VIR_FREE(sec_managers);
4399
virReportOOMError();
4401
/* We jump here if we failed to start the VM for any reason, or
4402
* if we failed to initialize the now running VM. kill it off and
4403
* pretend we never started it */
4404
VIR_FORCE_CLOSE(logfile);
4406
VIR_FREE(sec_managers);
4407
virDomainChrSourceDefFree(monConfig);
4412
static virDomainObjPtr
4413
qemuProcessAutoDestroy(struct qemud_driver *driver,
4414
virDomainObjPtr dom,
4417
qemuDomainObjPrivatePtr priv = dom->privateData;
4418
virDomainEventPtr event = NULL;
4420
VIR_DEBUG("vm=%s, conn=%p", dom->def->name, conn);
4422
if (priv->job.asyncJob) {
4423
VIR_DEBUG("vm=%s has long-term job active, cancelling",
4425
qemuDomainObjDiscardAsyncJob(driver, dom);
4428
if (qemuDomainObjBeginJobWithDriver(driver, dom,
4429
QEMU_JOB_DESTROY) < 0)
4432
VIR_DEBUG("Killing domain");
4433
qemuProcessStop(driver, dom, VIR_DOMAIN_SHUTOFF_DESTROYED,
4434
VIR_QEMU_PROCESS_STOP_MIGRATED);
4435
virDomainAuditStop(dom, "destroyed");
4436
event = virDomainEventNewFromObj(dom,
4437
VIR_DOMAIN_EVENT_STOPPED,
4438
VIR_DOMAIN_EVENT_STOPPED_DESTROYED);
4440
if (!qemuDomainObjEndJob(driver, dom))
4442
if (dom && !dom->persistent)
4443
qemuDomainRemoveInactive(driver, dom);
4445
qemuDomainEventQueue(driver, event);
4451
int qemuProcessAutoDestroyAdd(struct qemud_driver *driver,
4455
VIR_DEBUG("vm=%s, conn=%p", vm->def->name, conn);
4456
return qemuDriverCloseCallbackSet(driver, vm, conn,
4457
qemuProcessAutoDestroy);
4460
int qemuProcessAutoDestroyRemove(struct qemud_driver *driver,
4463
VIR_DEBUG("vm=%s", vm->def->name);
4464
return qemuDriverCloseCallbackUnset(driver, vm, qemuProcessAutoDestroy);
4467
bool qemuProcessAutoDestroyActive(struct qemud_driver *driver,
4470
qemuDriverCloseCallback cb;
4471
VIR_DEBUG("vm=%s", vm->def->name);
4472
cb = qemuDriverCloseCallbackGet(driver, vm, NULL);
4473
return cb == qemuProcessAutoDestroy;