Loading migration/migration.c +1 −17 Original line number Diff line number Diff line Loading @@ -1373,24 +1373,8 @@ void qmp_migrate_set_cache_size(int64_t value, Error **errp) MigrationState *s = migrate_get_current(); int64_t new_size; /* Check for truncation */ if (value != (size_t)value) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", "exceeding address space"); return; } /* Cache should not be larger than guest ram size */ if (value > ram_bytes_total()) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", "exceeds guest ram size "); return; } new_size = xbzrle_cache_resize(value); new_size = xbzrle_cache_resize(value, errp); if (new_size < 0) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", "is smaller than page size"); return; } Loading migration/ram.c +20 −2 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ #include "postcopy-ram.h" #include "migration/page_cache.h" #include "qemu/error-report.h" #include "qapi/qmp/qerror.h" #include "trace.h" #include "exec/ram_addr.h" #include "qemu/rcu_queue.h" Loading Loading @@ -113,13 +114,30 @@ static void XBZRLE_cache_unlock(void) * Returns the new_size or negative in case of error. * * @new_size: new cache size * @errp: set *errp if the check failed, with reason */ int64_t xbzrle_cache_resize(int64_t new_size) int64_t xbzrle_cache_resize(int64_t new_size, Error **errp) { PageCache *new_cache; int64_t ret; /* Check for truncation */ if (new_size != (size_t)new_size) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", "exceeding address space"); return -1; } /* Cache should not be larger than guest ram size */ if (new_size > ram_bytes_total()) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", "exceeds guest ram size"); return -1; } if (new_size < TARGET_PAGE_SIZE) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", "is smaller than one target page size"); return -1; } Loading @@ -132,7 +150,7 @@ int64_t xbzrle_cache_resize(int64_t new_size) new_cache = cache_init(new_size / TARGET_PAGE_SIZE, TARGET_PAGE_SIZE); if (!new_cache) { error_report("Error creating cache"); error_setg(errp, "Error creating cache"); ret = -1; goto out; } Loading migration/ram.h +1 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ extern MigrationStats ram_counters; extern XBZRLECacheStats xbzrle_counters; int64_t xbzrle_cache_resize(int64_t new_size); int64_t xbzrle_cache_resize(int64_t new_size, Error **errp); uint64_t ram_bytes_remaining(void); uint64_t ram_bytes_total(void); Loading Loading
migration/migration.c +1 −17 Original line number Diff line number Diff line Loading @@ -1373,24 +1373,8 @@ void qmp_migrate_set_cache_size(int64_t value, Error **errp) MigrationState *s = migrate_get_current(); int64_t new_size; /* Check for truncation */ if (value != (size_t)value) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", "exceeding address space"); return; } /* Cache should not be larger than guest ram size */ if (value > ram_bytes_total()) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", "exceeds guest ram size "); return; } new_size = xbzrle_cache_resize(value); new_size = xbzrle_cache_resize(value, errp); if (new_size < 0) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", "is smaller than page size"); return; } Loading
migration/ram.c +20 −2 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ #include "postcopy-ram.h" #include "migration/page_cache.h" #include "qemu/error-report.h" #include "qapi/qmp/qerror.h" #include "trace.h" #include "exec/ram_addr.h" #include "qemu/rcu_queue.h" Loading Loading @@ -113,13 +114,30 @@ static void XBZRLE_cache_unlock(void) * Returns the new_size or negative in case of error. * * @new_size: new cache size * @errp: set *errp if the check failed, with reason */ int64_t xbzrle_cache_resize(int64_t new_size) int64_t xbzrle_cache_resize(int64_t new_size, Error **errp) { PageCache *new_cache; int64_t ret; /* Check for truncation */ if (new_size != (size_t)new_size) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", "exceeding address space"); return -1; } /* Cache should not be larger than guest ram size */ if (new_size > ram_bytes_total()) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", "exceeds guest ram size"); return -1; } if (new_size < TARGET_PAGE_SIZE) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", "is smaller than one target page size"); return -1; } Loading @@ -132,7 +150,7 @@ int64_t xbzrle_cache_resize(int64_t new_size) new_cache = cache_init(new_size / TARGET_PAGE_SIZE, TARGET_PAGE_SIZE); if (!new_cache) { error_report("Error creating cache"); error_setg(errp, "Error creating cache"); ret = -1; goto out; } Loading
migration/ram.h +1 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ extern MigrationStats ram_counters; extern XBZRLECacheStats xbzrle_counters; int64_t xbzrle_cache_resize(int64_t new_size); int64_t xbzrle_cache_resize(int64_t new_size, Error **errp); uint64_t ram_bytes_remaining(void); uint64_t ram_bytes_total(void); Loading