Commit 3d002df3 authored by Michael S. Tsirkin's avatar Michael S. Tsirkin
Browse files

migration: allow rate > 4g



I'd like to disable bandwidth limit or make it very high,
Use int64_t all over to make values >= 4g work.

Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Tested-by: default avatarJason Wang <jasowang@redhat.com>
parent b2e0a138
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -206,20 +206,23 @@ static int buffered_rate_limit(void *opaque)
    return 0;
}

static size_t buffered_set_rate_limit(void *opaque, size_t new_rate)
static int64_t buffered_set_rate_limit(void *opaque, int64_t new_rate)
{
    QEMUFileBuffered *s = opaque;

    if (s->has_error)
        goto out;

    if (new_rate > SIZE_MAX) {
        new_rate = SIZE_MAX;
    }

    s->xfer_limit = new_rate / 10;
    
out:
    return s->xfer_limit;
}

static size_t buffered_get_rate_limit(void *opaque)
static int64_t buffered_get_rate_limit(void *opaque)
{
    QEMUFileBuffered *s = opaque;
  
+4 −4
Original line number Diff line number Diff line
@@ -39,8 +39,8 @@ typedef int (QEMUFileRateLimit)(void *opaque);
 * the new actual bandwidth. It should be new_rate if everything goes ok, and
 * the old rate otherwise
 */
typedef size_t (QEMUFileSetRateLimit)(void *opaque, size_t new_rate);
typedef size_t (QEMUFileGetRateLimit)(void *opaque);
typedef int64_t (QEMUFileSetRateLimit)(void *opaque, int64_t new_rate);
typedef int64_t (QEMUFileGetRateLimit)(void *opaque);

QEMUFile *qemu_fopen_ops(void *opaque, QEMUFilePutBufferFunc *put_buffer,
                         QEMUFileGetBufferFunc *get_buffer,
@@ -83,8 +83,8 @@ unsigned int qemu_get_be16(QEMUFile *f);
unsigned int qemu_get_be32(QEMUFile *f);
uint64_t qemu_get_be64(QEMUFile *f);
int qemu_file_rate_limit(QEMUFile *f);
size_t qemu_file_set_rate_limit(QEMUFile *f, size_t new_rate);
size_t qemu_file_get_rate_limit(QEMUFile *f);
int64_t qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate);
int64_t qemu_file_get_rate_limit(QEMUFile *f);
int qemu_file_has_error(QEMUFile *f);
void qemu_file_set_error(QEMUFile *f);

+4 −2
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@
#endif

/* Migration speed throttling */
static uint32_t max_throttle = (32 << 20);
static int64_t max_throttle = (32 << 20);

static MigrationState *current_migration;

@@ -136,7 +136,9 @@ int do_migrate_set_speed(Monitor *mon, const QDict *qdict, QObject **ret_data)
    FdMigrationState *s;

    d = qdict_get_int(qdict, "value");
    d = MAX(0, MIN(UINT32_MAX, d));
    if (d < 0) {
        d = 0;
    }
    max_throttle = d;

    s = migrate_to_fms(current_migration);
+2 −2
Original line number Diff line number Diff line
@@ -611,7 +611,7 @@ int qemu_file_rate_limit(QEMUFile *f)
    return 0;
}

size_t qemu_file_get_rate_limit(QEMUFile *f)
int64_t qemu_file_get_rate_limit(QEMUFile *f)
{
    if (f->get_rate_limit)
        return f->get_rate_limit(f->opaque);
@@ -619,7 +619,7 @@ size_t qemu_file_get_rate_limit(QEMUFile *f)
    return 0;
}

size_t qemu_file_set_rate_limit(QEMUFile *f, size_t new_rate)
int64_t qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate)
{
    /* any failed or completed migration keeps its state to allow probing of
     * migration data, but has no associated file anymore */