cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

exec.c (2270B)


      1/*
      2 * QEMU live migration
      3 *
      4 * Copyright IBM, Corp. 2008
      5 * Copyright Dell MessageOne 2008
      6 * Copyright Red Hat, Inc. 2015-2016
      7 *
      8 * Authors:
      9 *  Anthony Liguori   <aliguori@us.ibm.com>
     10 *  Charles Duffy     <charles_duffy@messageone.com>
     11 *  Daniel P. Berrange <berrange@redhat.com>
     12 *
     13 * This work is licensed under the terms of the GNU GPL, version 2.  See
     14 * the COPYING file in the top-level directory.
     15 *
     16 * Contributions after 2012-01-13 are licensed under the terms of the
     17 * GNU GPL, version 2 or (at your option) any later version.
     18 */
     19
     20#include "qemu/osdep.h"
     21#include "channel.h"
     22#include "exec.h"
     23#include "migration.h"
     24#include "io/channel-command.h"
     25#include "trace.h"
     26
     27
     28void exec_start_outgoing_migration(MigrationState *s, const char *command, Error **errp)
     29{
     30    QIOChannel *ioc;
     31    const char *argv[] = { "/bin/sh", "-c", command, NULL };
     32
     33    trace_migration_exec_outgoing(command);
     34    ioc = QIO_CHANNEL(qio_channel_command_new_spawn(argv,
     35                                                    O_RDWR,
     36                                                    errp));
     37    if (!ioc) {
     38        return;
     39    }
     40
     41    qio_channel_set_name(ioc, "migration-exec-outgoing");
     42    migration_channel_connect(s, ioc, NULL, NULL);
     43    object_unref(OBJECT(ioc));
     44}
     45
     46static gboolean exec_accept_incoming_migration(QIOChannel *ioc,
     47                                               GIOCondition condition,
     48                                               gpointer opaque)
     49{
     50    migration_channel_process_incoming(ioc);
     51    object_unref(OBJECT(ioc));
     52    return G_SOURCE_REMOVE;
     53}
     54
     55void exec_start_incoming_migration(const char *command, Error **errp)
     56{
     57    QIOChannel *ioc;
     58    const char *argv[] = { "/bin/sh", "-c", command, NULL };
     59
     60    trace_migration_exec_incoming(command);
     61    ioc = QIO_CHANNEL(qio_channel_command_new_spawn(argv,
     62                                                    O_RDWR,
     63                                                    errp));
     64    if (!ioc) {
     65        return;
     66    }
     67
     68    qio_channel_set_name(ioc, "migration-exec-incoming");
     69    qio_channel_add_watch_full(ioc, G_IO_IN,
     70                               exec_accept_incoming_migration,
     71                               NULL, NULL,
     72                               g_main_context_get_thread_default());
     73}