Compare commits
51
Commits
v2.8.0-rc2
...
v2.8.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0737f32daf | ||
|
|
6a928d25b6 | ||
|
|
66d1c4c19f | ||
|
|
d70678a538 | ||
|
|
a08156321a | ||
|
|
3753c75db8 | ||
|
|
a92f7fe5a8 | ||
|
|
4230e5d128 | ||
|
|
a9353fe897 | ||
|
|
d750c3a966 | ||
|
|
b5b7b5deb4 | ||
|
|
68701de136 | ||
|
|
a3e1505dae | ||
|
|
ce1f3e88f8 | ||
|
|
8a04c80f9f | ||
|
|
5d3074f0db | ||
|
|
8a844b2603 | ||
|
|
e24f095e44 | ||
|
|
9f5832d34b | ||
|
|
76b5550f70 | ||
|
|
7103d9165b | ||
|
|
1a417e46ae | ||
|
|
5460da501a | ||
|
|
5072f7b38b | ||
|
|
9f2a70e465 | ||
|
|
4d5c8bc42f | ||
|
|
c5927e7abf | ||
|
|
49687ace02 | ||
|
|
95cd8fd909 | ||
|
|
29a6731afb | ||
|
|
1792d7d0a2 | ||
|
|
043b5a4951 | ||
|
|
bc66cedb41 | ||
|
|
4299b90e9b | ||
|
|
64f441d2e5 | ||
|
|
77d54985b8 | ||
|
|
2d1cd6c7a9 | ||
|
|
42a8dadc74 | ||
|
|
6c7565028c | ||
|
|
e6e2784cac | ||
|
|
b5a587b613 | ||
|
|
bb7cab5f34 | ||
|
|
9099a36b4b | ||
|
|
bd8ef5060d | ||
|
|
2cfe5d7bc2 | ||
|
|
5c0139a8c2 | ||
|
|
9730280d54 | ||
|
|
1b57bd4f2f | ||
|
|
aa6c6ae843 | ||
|
|
6cb99acc28 | ||
|
|
5449c230fa |
No files matched your search
+19
-19
@@ -48,7 +48,7 @@ typedef struct BDRVGlusterState {
|
||||
struct glfs_fd *fd;
|
||||
char *logfile;
|
||||
bool supports_seek_data;
|
||||
int debug_level;
|
||||
int debug;
|
||||
} BDRVGlusterState;
|
||||
|
||||
typedef struct BDRVGlusterReopenState {
|
||||
@@ -434,7 +434,7 @@ static struct glfs *qemu_gluster_glfs_init(BlockdevOptionsGluster *gconf,
|
||||
}
|
||||
}
|
||||
|
||||
ret = glfs_set_logging(glfs, gconf->logfile, gconf->debug_level);
|
||||
ret = glfs_set_logging(glfs, gconf->logfile, gconf->debug);
|
||||
if (ret < 0) {
|
||||
goto out;
|
||||
}
|
||||
@@ -788,17 +788,17 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options,
|
||||
|
||||
filename = qemu_opt_get(opts, GLUSTER_OPT_FILENAME);
|
||||
|
||||
s->debug_level = qemu_opt_get_number(opts, GLUSTER_OPT_DEBUG,
|
||||
GLUSTER_DEBUG_DEFAULT);
|
||||
if (s->debug_level < 0) {
|
||||
s->debug_level = 0;
|
||||
} else if (s->debug_level > GLUSTER_DEBUG_MAX) {
|
||||
s->debug_level = GLUSTER_DEBUG_MAX;
|
||||
s->debug = qemu_opt_get_number(opts, GLUSTER_OPT_DEBUG,
|
||||
GLUSTER_DEBUG_DEFAULT);
|
||||
if (s->debug < 0) {
|
||||
s->debug = 0;
|
||||
} else if (s->debug > GLUSTER_DEBUG_MAX) {
|
||||
s->debug = GLUSTER_DEBUG_MAX;
|
||||
}
|
||||
|
||||
gconf = g_new0(BlockdevOptionsGluster, 1);
|
||||
gconf->debug_level = s->debug_level;
|
||||
gconf->has_debug_level = true;
|
||||
gconf->debug = s->debug;
|
||||
gconf->has_debug = true;
|
||||
|
||||
logfile = qemu_opt_get(opts, GLUSTER_OPT_LOGFILE);
|
||||
s->logfile = g_strdup(logfile ? logfile : GLUSTER_LOGFILE_DEFAULT);
|
||||
@@ -874,8 +874,8 @@ static int qemu_gluster_reopen_prepare(BDRVReopenState *state,
|
||||
qemu_gluster_parse_flags(state->flags, &open_flags);
|
||||
|
||||
gconf = g_new0(BlockdevOptionsGluster, 1);
|
||||
gconf->debug_level = s->debug_level;
|
||||
gconf->has_debug_level = true;
|
||||
gconf->debug = s->debug;
|
||||
gconf->has_debug = true;
|
||||
gconf->logfile = g_strdup(s->logfile);
|
||||
gconf->has_logfile = true;
|
||||
reop_s->glfs = qemu_gluster_init(gconf, state->bs->filename, NULL, errp);
|
||||
@@ -1011,14 +1011,14 @@ static int qemu_gluster_create(const char *filename,
|
||||
char *tmp = NULL;
|
||||
|
||||
gconf = g_new0(BlockdevOptionsGluster, 1);
|
||||
gconf->debug_level = qemu_opt_get_number_del(opts, GLUSTER_OPT_DEBUG,
|
||||
GLUSTER_DEBUG_DEFAULT);
|
||||
if (gconf->debug_level < 0) {
|
||||
gconf->debug_level = 0;
|
||||
} else if (gconf->debug_level > GLUSTER_DEBUG_MAX) {
|
||||
gconf->debug_level = GLUSTER_DEBUG_MAX;
|
||||
gconf->debug = qemu_opt_get_number_del(opts, GLUSTER_OPT_DEBUG,
|
||||
GLUSTER_DEBUG_DEFAULT);
|
||||
if (gconf->debug < 0) {
|
||||
gconf->debug = 0;
|
||||
} else if (gconf->debug > GLUSTER_DEBUG_MAX) {
|
||||
gconf->debug = GLUSTER_DEBUG_MAX;
|
||||
}
|
||||
gconf->has_debug_level = true;
|
||||
gconf->has_debug = true;
|
||||
|
||||
gconf->logfile = qemu_opt_get_del(opts, GLUSTER_OPT_LOGFILE);
|
||||
if (!gconf->logfile) {
|
||||
|
||||
+2
-2
@@ -134,7 +134,7 @@ static int nfs_parse_uri(const char *filename, QDict *options, Error **errp)
|
||||
qdict_put(options, "page-cache-size",
|
||||
qstring_from_str(qp->p[i].value));
|
||||
} else if (!strcmp(qp->p[i].name, "debug")) {
|
||||
qdict_put(options, "debug-level",
|
||||
qdict_put(options, "debug",
|
||||
qstring_from_str(qp->p[i].value));
|
||||
} else {
|
||||
error_setg(errp, "Unknown NFS parameter name: %s",
|
||||
@@ -165,7 +165,7 @@ static bool nfs_has_filename_options_conflict(QDict *options, Error **errp)
|
||||
!strcmp(qe->key, "tcp-syn-count") ||
|
||||
!strcmp(qe->key, "readahead-size") ||
|
||||
!strcmp(qe->key, "page-cache-size") ||
|
||||
!strcmp(qe->key, "debug-level") ||
|
||||
!strcmp(qe->key, "debug") ||
|
||||
strstart(qe->key, "server.", NULL))
|
||||
{
|
||||
error_setg(errp, "Option %s cannot be used with a filename",
|
||||
|
||||
+2
-1
@@ -2808,7 +2808,8 @@ static int qcow2_make_empty(BlockDriverState *bs)
|
||||
{
|
||||
BDRVQcow2State *s = bs->opaque;
|
||||
uint64_t start_sector;
|
||||
int sector_step = INT_MAX / BDRV_SECTOR_SIZE;
|
||||
int sector_step = (QEMU_ALIGN_DOWN(INT_MAX, s->cluster_size) /
|
||||
BDRV_SECTOR_SIZE);
|
||||
int l1_clusters, ret = 0;
|
||||
|
||||
l1_clusters = DIV_ROUND_UP(s->l1_size, s->cluster_size / sizeof(uint64_t));
|
||||
|
||||
+10
-10
@@ -123,22 +123,22 @@ The communication consists of master sending message requests and slave sending
|
||||
message replies. Most of the requests don't require replies. Here is a list of
|
||||
the ones that do:
|
||||
|
||||
* VHOST_GET_FEATURES
|
||||
* VHOST_GET_PROTOCOL_FEATURES
|
||||
* VHOST_GET_VRING_BASE
|
||||
* VHOST_SET_LOG_BASE (if VHOST_USER_PROTOCOL_F_LOG_SHMFD)
|
||||
* VHOST_USER_GET_FEATURES
|
||||
* VHOST_USER_GET_PROTOCOL_FEATURES
|
||||
* VHOST_USER_GET_VRING_BASE
|
||||
* VHOST_USER_SET_LOG_BASE (if VHOST_USER_PROTOCOL_F_LOG_SHMFD)
|
||||
|
||||
[ Also see the section on REPLY_ACK protocol extension. ]
|
||||
|
||||
There are several messages that the master sends with file descriptors passed
|
||||
in the ancillary data:
|
||||
|
||||
* VHOST_SET_MEM_TABLE
|
||||
* VHOST_SET_LOG_BASE (if VHOST_USER_PROTOCOL_F_LOG_SHMFD)
|
||||
* VHOST_SET_LOG_FD
|
||||
* VHOST_SET_VRING_KICK
|
||||
* VHOST_SET_VRING_CALL
|
||||
* VHOST_SET_VRING_ERR
|
||||
* VHOST_USER_SET_MEM_TABLE
|
||||
* VHOST_USER_SET_LOG_BASE (if VHOST_USER_PROTOCOL_F_LOG_SHMFD)
|
||||
* VHOST_USER_SET_LOG_FD
|
||||
* VHOST_USER_SET_VRING_KICK
|
||||
* VHOST_USER_SET_VRING_CALL
|
||||
* VHOST_USER_SET_VRING_ERR
|
||||
|
||||
If Master is unable to send the full message or receives a wrong reply it will
|
||||
close the connection. An optional reconnection mechanism can be implemented.
|
||||
|
||||
@@ -684,28 +684,15 @@ void cpu_exec_realizefn(CPUState *cpu, Error **errp)
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(CONFIG_USER_ONLY)
|
||||
static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
|
||||
{
|
||||
mmap_lock();
|
||||
tb_lock();
|
||||
tb_invalidate_phys_page_range(pc, pc + 1, 0);
|
||||
tb_unlock();
|
||||
mmap_unlock();
|
||||
/* Flush the whole TB as this will not have race conditions
|
||||
* even if we don't have proper locking yet.
|
||||
* Ideally we would just invalidate the TBs for the
|
||||
* specified PC.
|
||||
*/
|
||||
tb_flush(cpu);
|
||||
}
|
||||
#else
|
||||
static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
|
||||
{
|
||||
MemTxAttrs attrs;
|
||||
hwaddr phys = cpu_get_phys_page_attrs_debug(cpu, pc, &attrs);
|
||||
int asidx = cpu_asidx_from_attrs(cpu, attrs);
|
||||
if (phys != -1) {
|
||||
/* Locks grabbed by tb_invalidate_phys_addr */
|
||||
tb_invalidate_phys_addr(cpu->cpu_ases[asidx].as,
|
||||
phys | (pc & ~TARGET_PAGE_MASK));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_USER_ONLY)
|
||||
void cpu_watchpoint_remove_all(CPUState *cpu, int mask)
|
||||
|
||||
@@ -809,7 +809,7 @@ static MemoryRegion *acpi_add_rom_blob(AcpiBuildState *build_state,
|
||||
uint64_t max_size)
|
||||
{
|
||||
return rom_add_blob(name, blob->data, acpi_data_len(blob), max_size, -1,
|
||||
name, virt_acpi_build_update, build_state);
|
||||
name, virt_acpi_build_update, build_state, NULL);
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_virt_acpi_build = {
|
||||
|
||||
+4
-2
@@ -818,7 +818,7 @@ static QTAILQ_HEAD(, Rom) roms = QTAILQ_HEAD_INITIALIZER(roms);
|
||||
|
||||
static inline bool rom_order_compare(Rom *rom, Rom *item)
|
||||
{
|
||||
return (rom->as > item->as) ||
|
||||
return ((uintptr_t)(void *)rom->as > (uintptr_t)(void *)item->as) ||
|
||||
(rom->as == item->as && rom->addr >= item->addr);
|
||||
}
|
||||
|
||||
@@ -978,7 +978,8 @@ err:
|
||||
|
||||
MemoryRegion *rom_add_blob(const char *name, const void *blob, size_t len,
|
||||
size_t max_len, hwaddr addr, const char *fw_file_name,
|
||||
FWCfgReadCallback fw_callback, void *callback_opaque)
|
||||
FWCfgReadCallback fw_callback, void *callback_opaque,
|
||||
AddressSpace *as)
|
||||
{
|
||||
MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
|
||||
Rom *rom;
|
||||
@@ -986,6 +987,7 @@ MemoryRegion *rom_add_blob(const char *name, const void *blob, size_t len,
|
||||
|
||||
rom = g_malloc0(sizeof(*rom));
|
||||
rom->name = g_strdup(name);
|
||||
rom->as = as;
|
||||
rom->addr = addr;
|
||||
rom->romsize = max_len ? max_len : len;
|
||||
rom->datasize = len;
|
||||
|
||||
+10
-4
@@ -272,6 +272,9 @@ static void cirrus_update_memory_access(CirrusVGAState *s);
|
||||
static bool blit_region_is_unsafe(struct CirrusVGAState *s,
|
||||
int32_t pitch, int32_t addr)
|
||||
{
|
||||
if (!pitch) {
|
||||
return true;
|
||||
}
|
||||
if (pitch < 0) {
|
||||
int64_t min = addr
|
||||
+ ((int64_t)s->cirrus_blt_height-1) * pitch;
|
||||
@@ -715,7 +718,7 @@ static int cirrus_bitblt_videotovideo_patterncopy(CirrusVGAState * s)
|
||||
s->cirrus_addr_mask));
|
||||
}
|
||||
|
||||
static void cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h)
|
||||
static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h)
|
||||
{
|
||||
int sx = 0, sy = 0;
|
||||
int dx = 0, dy = 0;
|
||||
@@ -729,6 +732,9 @@ static void cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h)
|
||||
int width, height;
|
||||
|
||||
depth = s->vga.get_bpp(&s->vga) / 8;
|
||||
if (!depth) {
|
||||
return 0;
|
||||
}
|
||||
s->vga.get_resolution(&s->vga, &width, &height);
|
||||
|
||||
/* extra x, y */
|
||||
@@ -783,6 +789,8 @@ static void cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h)
|
||||
cirrus_invalidate_region(s, s->cirrus_blt_dstaddr,
|
||||
s->cirrus_blt_dstpitch, s->cirrus_blt_width,
|
||||
s->cirrus_blt_height);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int cirrus_bitblt_videotovideo_copy(CirrusVGAState * s)
|
||||
@@ -790,11 +798,9 @@ static int cirrus_bitblt_videotovideo_copy(CirrusVGAState * s)
|
||||
if (blit_is_unsafe(s))
|
||||
return 0;
|
||||
|
||||
cirrus_do_copy(s, s->cirrus_blt_dstaddr - s->vga.start_addr,
|
||||
return cirrus_do_copy(s, s->cirrus_blt_dstaddr - s->vga.start_addr,
|
||||
s->cirrus_blt_srcaddr - s->vga.start_addr,
|
||||
s->cirrus_blt_width, s->cirrus_blt_height);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/***************************************
|
||||
|
||||
+36
-1
@@ -992,6 +992,34 @@ static uint32_t qxl_crc32(const uint8_t *p, unsigned len)
|
||||
return crc32(0xffffffff, p, len) ^ 0xffffffff;
|
||||
}
|
||||
|
||||
static bool qxl_rom_monitors_config_changed(QXLRom *rom,
|
||||
VDAgentMonitorsConfig *monitors_config,
|
||||
unsigned int max_outputs)
|
||||
{
|
||||
int i;
|
||||
unsigned int monitors_count;
|
||||
|
||||
monitors_count = MIN(monitors_config->num_of_monitors, max_outputs);
|
||||
|
||||
if (rom->client_monitors_config.count != monitors_count) {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (i = 0 ; i < rom->client_monitors_config.count ; ++i) {
|
||||
VDAgentMonConfig *monitor = &monitors_config->monitors[i];
|
||||
QXLURect *rect = &rom->client_monitors_config.heads[i];
|
||||
/* monitor->depth ignored */
|
||||
if ((rect->left != monitor->x) ||
|
||||
(rect->top != monitor->y) ||
|
||||
(rect->right != monitor->x + monitor->width) ||
|
||||
(rect->bottom != monitor->y + monitor->height)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* called from main context only */
|
||||
static int interface_client_monitors_config(QXLInstance *sin,
|
||||
VDAgentMonitorsConfig *monitors_config)
|
||||
@@ -1000,6 +1028,7 @@ static int interface_client_monitors_config(QXLInstance *sin,
|
||||
QXLRom *rom = memory_region_get_ram_ptr(&qxl->rom_bar);
|
||||
int i;
|
||||
unsigned max_outputs = ARRAY_SIZE(rom->client_monitors_config.heads);
|
||||
bool config_changed = false;
|
||||
|
||||
if (qxl->revision < 4) {
|
||||
trace_qxl_client_monitors_config_unsupported_by_device(qxl->id,
|
||||
@@ -1030,6 +1059,10 @@ static int interface_client_monitors_config(QXLInstance *sin,
|
||||
}
|
||||
#endif
|
||||
|
||||
config_changed = qxl_rom_monitors_config_changed(rom,
|
||||
monitors_config,
|
||||
max_outputs);
|
||||
|
||||
memset(&rom->client_monitors_config, 0,
|
||||
sizeof(rom->client_monitors_config));
|
||||
rom->client_monitors_config.count = monitors_config->num_of_monitors;
|
||||
@@ -1059,7 +1092,9 @@ static int interface_client_monitors_config(QXLInstance *sin,
|
||||
trace_qxl_interrupt_client_monitors_config(qxl->id,
|
||||
rom->client_monitors_config.count,
|
||||
rom->client_monitors_config.heads);
|
||||
qxl_send_events(qxl, QXL_INTERRUPT_CLIENT_MONITORS_CONFIG);
|
||||
if (config_changed) {
|
||||
qxl_send_events(qxl, QXL_INTERRUPT_CLIENT_MONITORS_CONFIG);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -347,6 +347,7 @@ static void virgl_cmd_get_capset_info(VirtIOGPU *g,
|
||||
|
||||
VIRTIO_GPU_FILL_CMD(info);
|
||||
|
||||
memset(&resp, 0, sizeof(resp));
|
||||
if (info.capset_index == 0) {
|
||||
resp.capset_id = VIRTIO_GPU_CAPSET_VIRGL;
|
||||
virgl_renderer_get_cap_set(resp.capset_id,
|
||||
|
||||
@@ -84,6 +84,7 @@ static void update_cursor_data_virgl(VirtIOGPU *g,
|
||||
|
||||
if (width != s->current_cursor->width ||
|
||||
height != s->current_cursor->height) {
|
||||
free(data);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -2936,7 +2936,7 @@ static MemoryRegion *acpi_add_rom_blob(AcpiBuildState *build_state,
|
||||
uint64_t max_size)
|
||||
{
|
||||
return rom_add_blob(name, blob->data, acpi_data_len(blob), max_size, -1,
|
||||
name, acpi_build_update, build_state);
|
||||
name, acpi_build_update, build_state, NULL);
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_acpi_build = {
|
||||
|
||||
@@ -988,6 +988,7 @@ static void vtd_context_device_invalidate(IntelIOMMUState *s,
|
||||
mask = 7; /* Mask bit 2:0 in the SID field */
|
||||
break;
|
||||
}
|
||||
mask = ~mask;
|
||||
VTD_DPRINTF(INV, "device-selective invalidation source 0x%"PRIx16
|
||||
" mask %"PRIu16, source_id, mask);
|
||||
vtd_bus = vtd_find_as_from_bus_num(s, VTD_SID_TO_BUS(source_id));
|
||||
|
||||
@@ -75,7 +75,7 @@ static inline void hwsetup_create_rom(HWSetup *hw,
|
||||
hwaddr base)
|
||||
{
|
||||
rom_add_blob("hwsetup", hw->data, TARGET_PAGE_SIZE,
|
||||
TARGET_PAGE_SIZE, base, NULL, NULL, NULL);
|
||||
TARGET_PAGE_SIZE, base, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
static inline void hwsetup_add_u8(HWSetup *hw, uint8_t u)
|
||||
|
||||
@@ -348,8 +348,8 @@ static ssize_t etsec_receive(NetClientState *nc,
|
||||
eTSEC *etsec = qemu_get_nic_opaque(nc);
|
||||
|
||||
#if defined(HEX_DUMP)
|
||||
fprintf(stderr, "%s receive size:%d\n", etsec->nic->nc.name, size);
|
||||
qemu_hexdump(buf, stderr, "", size);
|
||||
fprintf(stderr, "%s receive size:%zd\n", nc->name, size);
|
||||
qemu_hexdump((void *)buf, stderr, "", size);
|
||||
#endif
|
||||
/* Flush is unnecessary as are already in receiving path */
|
||||
etsec->need_flush = false;
|
||||
|
||||
@@ -474,6 +474,14 @@ static void rx_init_frame(eTSEC *etsec, const uint8_t *buf, size_t size)
|
||||
/* CRC padding (We don't have to compute the CRC) */
|
||||
etsec->rx_padding = 4;
|
||||
|
||||
/*
|
||||
* Ensure that payload length + CRC length is at least 802.3
|
||||
* minimum MTU size bytes long (64)
|
||||
*/
|
||||
if (etsec->rx_buffer_len < 60) {
|
||||
etsec->rx_padding += 60 - etsec->rx_buffer_len;
|
||||
}
|
||||
|
||||
etsec->rx_first_in_frame = 1;
|
||||
etsec->rx_remaining_data = etsec->rx_buffer_len;
|
||||
RING_DEBUG("%s: rx_buffer_len:%u rx_padding+crc:%u\n", __func__,
|
||||
|
||||
+1
-1
@@ -393,7 +393,7 @@ static void mcf_fec_write(void *opaque, hwaddr addr,
|
||||
s->tx_descriptor = s->etdsr;
|
||||
break;
|
||||
case 0x188:
|
||||
s->emrbr = value & 0x7f0;
|
||||
s->emrbr = value > 0 ? value & 0x7F0 : 0x7F0;
|
||||
break;
|
||||
default:
|
||||
hw_error("mcf_fec_write Bad address 0x%x\n", (int)addr);
|
||||
|
||||
@@ -2290,6 +2290,11 @@ static void spapr_add_lmbs(DeviceState *dev, uint64_t addr_start, uint64_t size,
|
||||
drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
|
||||
drck->attach(drc, dev, fdt, fdt_offset, !dev->hotplugged, errp);
|
||||
addr += SPAPR_MEMORY_BLOCK_SIZE;
|
||||
if (!dev->hotplugged) {
|
||||
/* guests expect coldplugged LMBs to be pre-allocated */
|
||||
drck->set_allocation_state(drc, SPAPR_DR_ALLOCATION_STATE_USABLE);
|
||||
drck->set_isolation_state(drc, SPAPR_DR_ISOLATION_STATE_UNISOLATED);
|
||||
}
|
||||
}
|
||||
/* send hotplug notification to the
|
||||
* guest only in case of hotplugged memory
|
||||
|
||||
@@ -838,7 +838,7 @@ static Property virtio_crypto_properties[] = {
|
||||
static void virtio_crypto_get_config(VirtIODevice *vdev, uint8_t *config)
|
||||
{
|
||||
VirtIOCrypto *c = VIRTIO_CRYPTO(vdev);
|
||||
struct virtio_crypto_config crypto_cfg;
|
||||
struct virtio_crypto_config crypto_cfg = {};
|
||||
|
||||
/*
|
||||
* Virtio-crypto device conforms to VIRTIO 1.0 which is always LE,
|
||||
|
||||
@@ -1580,7 +1580,8 @@ static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
|
||||
* Virtio capabilities present without
|
||||
* VIRTIO_F_VERSION_1 confuses guests
|
||||
*/
|
||||
if (!virtio_has_feature(vdev->host_features, VIRTIO_F_VERSION_1)) {
|
||||
if (!proxy->ignore_backend_features &&
|
||||
!virtio_has_feature(vdev->host_features, VIRTIO_F_VERSION_1)) {
|
||||
virtio_pci_disable_modern(proxy);
|
||||
|
||||
if (!legacy) {
|
||||
@@ -1852,6 +1853,8 @@ static Property virtio_pci_properties[] = {
|
||||
VIRTIO_PCI_FLAG_DISABLE_PCIE_BIT, false),
|
||||
DEFINE_PROP_BIT("page-per-vq", VirtIOPCIProxy, flags,
|
||||
VIRTIO_PCI_FLAG_PAGE_PER_VQ_BIT, false),
|
||||
DEFINE_PROP_BOOL("x-ignore-backend-features", VirtIOPCIProxy,
|
||||
ignore_backend_features, false),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
|
||||
@@ -153,6 +153,7 @@ struct VirtIOPCIProxy {
|
||||
int config_cap;
|
||||
uint32_t flags;
|
||||
bool disable_modern;
|
||||
bool ignore_backend_features;
|
||||
OnOffAuto disable_legacy;
|
||||
uint32_t class_code;
|
||||
uint32_t nvectors;
|
||||
|
||||
@@ -18,6 +18,10 @@
|
||||
.driver = "intel-iommu",\
|
||||
.property = "x-buggy-eim",\
|
||||
.value = "true",\
|
||||
},{\
|
||||
.driver = "virtio-pci",\
|
||||
.property = "x-ignore-backend-features",\
|
||||
.value = "on",\
|
||||
},
|
||||
|
||||
#define HW_COMPAT_2_6 \
|
||||
|
||||
+3
-3
@@ -180,7 +180,7 @@ MemoryRegion *rom_add_blob(const char *name, const void *blob, size_t len,
|
||||
size_t max_len, hwaddr addr,
|
||||
const char *fw_file_name,
|
||||
FWCfgReadCallback fw_callback,
|
||||
void *callback_opaque);
|
||||
void *callback_opaque, AddressSpace *as);
|
||||
int rom_add_elf_program(const char *name, void *data, size_t datasize,
|
||||
size_t romsize, hwaddr addr, AddressSpace *as);
|
||||
int rom_check_and_register_reset(void);
|
||||
@@ -194,7 +194,7 @@ void hmp_info_roms(Monitor *mon, const QDict *qdict);
|
||||
#define rom_add_file_fixed(_f, _a, _i) \
|
||||
rom_add_file(_f, NULL, _a, _i, false, NULL, NULL)
|
||||
#define rom_add_blob_fixed(_f, _b, _l, _a) \
|
||||
rom_add_blob(_f, _b, _l, _l, _a, NULL, NULL, NULL)
|
||||
rom_add_blob(_f, _b, _l, _l, _a, NULL, NULL, NULL, NULL)
|
||||
#define rom_add_file_mr(_f, _mr, _i) \
|
||||
rom_add_file(_f, NULL, 0, _i, false, _mr, NULL)
|
||||
#define rom_add_file_as(_f, _as, _i) \
|
||||
@@ -202,7 +202,7 @@ void hmp_info_roms(Monitor *mon, const QDict *qdict);
|
||||
#define rom_add_file_fixed_as(_f, _a, _i, _as) \
|
||||
rom_add_file(_f, NULL, _a, _i, false, NULL, _as)
|
||||
#define rom_add_blob_fixed_as(_f, _b, _l, _a, _as) \
|
||||
rom_add_blob(_f, _b, _l, _l, _a, NULL, NULL, _as)
|
||||
rom_add_blob(_f, _b, _l, _l, _a, NULL, NULL, NULL, _as)
|
||||
|
||||
#define PC_ROM_MIN_VGA 0xc0000
|
||||
#define PC_ROM_MIN_OPTION 0xc8000
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: QEMU 2.6.50\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-06-26 10:16+0300\n"
|
||||
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
|
||||
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
|
||||
"PO-Revision-Date: 2016-06-09 15:54+0300\n"
|
||||
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
|
||||
"Language-Team: Bulgarian <dict@ludost.net>\n"
|
||||
@@ -17,74 +17,74 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ui/gtk.c:274
|
||||
#: ui/gtk.c:275
|
||||
msgid " - Press Ctrl+Alt+G to release grab"
|
||||
msgstr " — натиснете Ctrl+Alt+G, за да освободите фокуса"
|
||||
|
||||
#: ui/gtk.c:278
|
||||
#: ui/gtk.c:279
|
||||
msgid " [Paused]"
|
||||
msgstr " [пауза]"
|
||||
|
||||
#: ui/gtk.c:1906
|
||||
#: ui/gtk.c:1922
|
||||
msgid "_Pause"
|
||||
msgstr "_Пауза"
|
||||
|
||||
#: ui/gtk.c:1912
|
||||
#: ui/gtk.c:1928
|
||||
msgid "_Reset"
|
||||
msgstr "_Рестартиране"
|
||||
|
||||
#: ui/gtk.c:1915
|
||||
#: ui/gtk.c:1931
|
||||
msgid "Power _Down"
|
||||
msgstr "_Изключване"
|
||||
|
||||
#: ui/gtk.c:1921
|
||||
#: ui/gtk.c:1937
|
||||
msgid "_Quit"
|
||||
msgstr "_Спиране на програмата"
|
||||
|
||||
#: ui/gtk.c:2013
|
||||
#: ui/gtk.c:2029
|
||||
msgid "_Fullscreen"
|
||||
msgstr "На _цял екран"
|
||||
|
||||
#: ui/gtk.c:2016
|
||||
#: ui/gtk.c:2032
|
||||
msgid "_Copy"
|
||||
msgstr "_Копиране"
|
||||
|
||||
#: ui/gtk.c:2032
|
||||
#: ui/gtk.c:2048
|
||||
msgid "Zoom _In"
|
||||
msgstr "_Увеличаване"
|
||||
|
||||
#: ui/gtk.c:2039
|
||||
#: ui/gtk.c:2055
|
||||
msgid "Zoom _Out"
|
||||
msgstr "_Намаляване"
|
||||
|
||||
#: ui/gtk.c:2046
|
||||
#: ui/gtk.c:2062
|
||||
msgid "Best _Fit"
|
||||
msgstr "По_местване"
|
||||
|
||||
#: ui/gtk.c:2053
|
||||
#: ui/gtk.c:2069
|
||||
msgid "Zoom To _Fit"
|
||||
msgstr "Напас_ване"
|
||||
|
||||
#: ui/gtk.c:2059
|
||||
#: ui/gtk.c:2075
|
||||
msgid "Grab On _Hover"
|
||||
msgstr "Прихващане при посо_чване"
|
||||
|
||||
#: ui/gtk.c:2062
|
||||
#: ui/gtk.c:2078
|
||||
msgid "_Grab Input"
|
||||
msgstr "Прихващане на _фокуса"
|
||||
|
||||
#: ui/gtk.c:2091
|
||||
#: ui/gtk.c:2107
|
||||
msgid "Show _Tabs"
|
||||
msgstr "Подпро_зорци"
|
||||
|
||||
#: ui/gtk.c:2094
|
||||
#: ui/gtk.c:2110
|
||||
msgid "Detach Tab"
|
||||
msgstr "Към самостоятелен подпрозорец"
|
||||
|
||||
#: ui/gtk.c:2106
|
||||
#: ui/gtk.c:2122
|
||||
msgid "_Machine"
|
||||
msgstr "_Машина"
|
||||
|
||||
#: ui/gtk.c:2111
|
||||
#: ui/gtk.c:2127
|
||||
msgid "_View"
|
||||
msgstr "_Изглед"
|
||||
+22
-18
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: QEMU 1.4.50\n"
|
||||
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
|
||||
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
|
||||
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
|
||||
"PO-Revision-Date: 2012-02-28 16:00+0100\n"
|
||||
"Last-Translator: Kevin Wolf <kwolf@redhat.com>\n"
|
||||
"Language-Team: Deutsch <de@li.org>\n"
|
||||
@@ -16,70 +16,74 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||
|
||||
#: ui/gtk.c:273
|
||||
#: ui/gtk.c:275
|
||||
msgid " - Press Ctrl+Alt+G to release grab"
|
||||
msgstr " - Strg+Alt+G drücken, um Eingabegeräte freizugeben"
|
||||
|
||||
#: ui/gtk.c:277
|
||||
#: ui/gtk.c:279
|
||||
msgid " [Paused]"
|
||||
msgstr " [Angehalten]"
|
||||
|
||||
#: ui/gtk.c:1833
|
||||
#: ui/gtk.c:1922
|
||||
msgid "_Pause"
|
||||
msgstr "_Angehalten"
|
||||
|
||||
#: ui/gtk.c:1839
|
||||
#: ui/gtk.c:1928
|
||||
msgid "_Reset"
|
||||
msgstr "_Reset"
|
||||
|
||||
#: ui/gtk.c:1842
|
||||
#: ui/gtk.c:1931
|
||||
msgid "Power _Down"
|
||||
msgstr "_Herunterfahren"
|
||||
|
||||
#: ui/gtk.c:1848
|
||||
#: ui/gtk.c:1937
|
||||
msgid "_Quit"
|
||||
msgstr "_Beenden"
|
||||
|
||||
#: ui/gtk.c:1940
|
||||
#: ui/gtk.c:2029
|
||||
msgid "_Fullscreen"
|
||||
msgstr "_Vollbild"
|
||||
|
||||
#: ui/gtk.c:1954
|
||||
#: ui/gtk.c:2032
|
||||
msgid "_Copy"
|
||||
msgstr "_Kopieren"
|
||||
|
||||
#: ui/gtk.c:2048
|
||||
msgid "Zoom _In"
|
||||
msgstr "_Heranzoomen"
|
||||
|
||||
#: ui/gtk.c:1961
|
||||
#: ui/gtk.c:2055
|
||||
msgid "Zoom _Out"
|
||||
msgstr "_Wegzoomen"
|
||||
|
||||
#: ui/gtk.c:1968
|
||||
#: ui/gtk.c:2062
|
||||
msgid "Best _Fit"
|
||||
msgstr "_Einpassen"
|
||||
|
||||
#: ui/gtk.c:1975
|
||||
#: ui/gtk.c:2069
|
||||
msgid "Zoom To _Fit"
|
||||
msgstr "Auf _Fenstergröße skalieren"
|
||||
|
||||
#: ui/gtk.c:1981
|
||||
#: ui/gtk.c:2075
|
||||
msgid "Grab On _Hover"
|
||||
msgstr "Tastatur _automatisch einfangen"
|
||||
|
||||
#: ui/gtk.c:1984
|
||||
#: ui/gtk.c:2078
|
||||
msgid "_Grab Input"
|
||||
msgstr "_Eingabegeräte einfangen"
|
||||
|
||||
#: ui/gtk.c:2013
|
||||
#: ui/gtk.c:2107
|
||||
msgid "Show _Tabs"
|
||||
msgstr "Reiter anzeigen"
|
||||
|
||||
#: ui/gtk.c:2016
|
||||
#: ui/gtk.c:2110
|
||||
msgid "Detach Tab"
|
||||
msgstr "Reiter abtrennen"
|
||||
|
||||
#: ui/gtk.c:2028
|
||||
#: ui/gtk.c:2122
|
||||
msgid "_Machine"
|
||||
msgstr "_Maschine"
|
||||
|
||||
#: ui/gtk.c:2033
|
||||
#: ui/gtk.c:2127
|
||||
msgid "_View"
|
||||
msgstr "_Ansicht"
|
||||
+22
-18
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: QEMU 1.4.50\n"
|
||||
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
|
||||
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
|
||||
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
|
||||
"PO-Revision-Date: 2014-07-28 23:25+0200\n"
|
||||
"Last-Translator: Aurelien Jarno <aurelien@aurel32.net>\n"
|
||||
"Language-Team: French <FR@li.org>\n"
|
||||
@@ -17,70 +17,74 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 1.4\n"
|
||||
|
||||
#: ui/gtk.c:273
|
||||
#: ui/gtk.c:275
|
||||
msgid " - Press Ctrl+Alt+G to release grab"
|
||||
msgstr "- Appuyer sur Ctrl+Alt+G pour arrêter la capture"
|
||||
|
||||
#: ui/gtk.c:277
|
||||
#: ui/gtk.c:279
|
||||
msgid " [Paused]"
|
||||
msgstr " [En pause]"
|
||||
|
||||
#: ui/gtk.c:1833
|
||||
#: ui/gtk.c:1922
|
||||
msgid "_Pause"
|
||||
msgstr "_Pause"
|
||||
|
||||
#: ui/gtk.c:1839
|
||||
#: ui/gtk.c:1928
|
||||
msgid "_Reset"
|
||||
msgstr "_Réinitialiser"
|
||||
|
||||
#: ui/gtk.c:1842
|
||||
#: ui/gtk.c:1931
|
||||
msgid "Power _Down"
|
||||
msgstr "_Éteindre"
|
||||
|
||||
#: ui/gtk.c:1848
|
||||
#: ui/gtk.c:1937
|
||||
msgid "_Quit"
|
||||
msgstr "_Quitter"
|
||||
|
||||
#: ui/gtk.c:1940
|
||||
#: ui/gtk.c:2029
|
||||
msgid "_Fullscreen"
|
||||
msgstr "Mode _plein écran"
|
||||
|
||||
#: ui/gtk.c:1954
|
||||
#: ui/gtk.c:2032
|
||||
msgid "_Copy"
|
||||
msgstr "_Copier"
|
||||
|
||||
#: ui/gtk.c:2048
|
||||
msgid "Zoom _In"
|
||||
msgstr "Zoom _avant"
|
||||
|
||||
#: ui/gtk.c:1961
|
||||
#: ui/gtk.c:2055
|
||||
msgid "Zoom _Out"
|
||||
msgstr "_Zoom arrière"
|
||||
|
||||
#: ui/gtk.c:1968
|
||||
#: ui/gtk.c:2062
|
||||
msgid "Best _Fit"
|
||||
msgstr "Zoom _idéal"
|
||||
|
||||
#: ui/gtk.c:1975
|
||||
#: ui/gtk.c:2069
|
||||
msgid "Zoom To _Fit"
|
||||
msgstr "Zoomer pour a_juster"
|
||||
|
||||
#: ui/gtk.c:1981
|
||||
#: ui/gtk.c:2075
|
||||
msgid "Grab On _Hover"
|
||||
msgstr "Capturer en _survolant"
|
||||
|
||||
#: ui/gtk.c:1984
|
||||
#: ui/gtk.c:2078
|
||||
msgid "_Grab Input"
|
||||
msgstr "_Capturer les entrées"
|
||||
|
||||
#: ui/gtk.c:2013
|
||||
#: ui/gtk.c:2107
|
||||
msgid "Show _Tabs"
|
||||
msgstr "Montrer les _onglets"
|
||||
|
||||
#: ui/gtk.c:2016
|
||||
#: ui/gtk.c:2110
|
||||
msgid "Detach Tab"
|
||||
msgstr "_Détacher l'onglet"
|
||||
|
||||
#: ui/gtk.c:2028
|
||||
#: ui/gtk.c:2122
|
||||
msgid "_Machine"
|
||||
msgstr "_Machine"
|
||||
|
||||
#: ui/gtk.c:2033
|
||||
#: ui/gtk.c:2127
|
||||
msgid "_View"
|
||||
msgstr "_Vue"
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: QEMU 1.4.50\n"
|
||||
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
|
||||
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
|
||||
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
|
||||
"PO-Revision-Date: 2013-05-06 20:42+0200\n"
|
||||
"Last-Translator: Ákos Kovács <akoskovacs@gmx.com>\n"
|
||||
"Language-Team: Hungarian <hu@li.org>\n"
|
||||
@@ -15,73 +15,77 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ui/gtk.c:273
|
||||
#: ui/gtk.c:275
|
||||
msgid " - Press Ctrl+Alt+G to release grab"
|
||||
msgstr " - Nyomj Ctrl+Alt+G-t a bemeneti eszközök elengedéséhez"
|
||||
|
||||
#: ui/gtk.c:277
|
||||
#: ui/gtk.c:279
|
||||
msgid " [Paused]"
|
||||
msgstr " [Megállítva]"
|
||||
|
||||
#: ui/gtk.c:1833
|
||||
#: ui/gtk.c:1922
|
||||
msgid "_Pause"
|
||||
msgstr "_Megállítás"
|
||||
|
||||
#: ui/gtk.c:1839
|
||||
#: ui/gtk.c:1928
|
||||
msgid "_Reset"
|
||||
msgstr "Új_raindítás"
|
||||
|
||||
#: ui/gtk.c:1842
|
||||
#: ui/gtk.c:1931
|
||||
msgid "Power _Down"
|
||||
msgstr "_Leállítás"
|
||||
|
||||
#: ui/gtk.c:1848
|
||||
#: ui/gtk.c:1937
|
||||
msgid "_Quit"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1940
|
||||
#: ui/gtk.c:2029
|
||||
msgid "_Fullscreen"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1954
|
||||
#: ui/gtk.c:2032
|
||||
msgid "_Copy"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:2048
|
||||
#, fuzzy
|
||||
msgid "Zoom _In"
|
||||
msgstr "Ablakmérethez _igazítás"
|
||||
|
||||
#: ui/gtk.c:1961
|
||||
#: ui/gtk.c:2055
|
||||
#, fuzzy
|
||||
msgid "Zoom _Out"
|
||||
msgstr "Ablakmérethez _igazítás"
|
||||
|
||||
#: ui/gtk.c:1968
|
||||
#: ui/gtk.c:2062
|
||||
msgid "Best _Fit"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1975
|
||||
#: ui/gtk.c:2069
|
||||
msgid "Zoom To _Fit"
|
||||
msgstr "Ablakmérethez _igazítás"
|
||||
|
||||
#: ui/gtk.c:1981
|
||||
#: ui/gtk.c:2075
|
||||
msgid "Grab On _Hover"
|
||||
msgstr "Automatikus _elfogás"
|
||||
|
||||
#: ui/gtk.c:1984
|
||||
#: ui/gtk.c:2078
|
||||
msgid "_Grab Input"
|
||||
msgstr "_Bemeneti eszközök megragadása"
|
||||
|
||||
#: ui/gtk.c:2013
|
||||
#: ui/gtk.c:2107
|
||||
msgid "Show _Tabs"
|
||||
msgstr "_Fülek megjelenítése"
|
||||
|
||||
#: ui/gtk.c:2016
|
||||
#: ui/gtk.c:2110
|
||||
msgid "Detach Tab"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:2028
|
||||
#: ui/gtk.c:2122
|
||||
msgid "_Machine"
|
||||
msgstr "_Gép"
|
||||
|
||||
#: ui/gtk.c:2033
|
||||
#: ui/gtk.c:2127
|
||||
msgid "_View"
|
||||
msgstr "_Nézet"
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: QEMU 1.4.50\n"
|
||||
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
|
||||
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
|
||||
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
|
||||
"PO-Revision-Date: 2014-07-29 08:25+0200\n"
|
||||
"Last-Translator: Paolo Bonzini <pbonzini@redhat.com>\n"
|
||||
"Language-Team: Italian <it@li.org>\n"
|
||||
@@ -16,70 +16,74 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
|
||||
#: ui/gtk.c:273
|
||||
#: ui/gtk.c:275
|
||||
msgid " - Press Ctrl+Alt+G to release grab"
|
||||
msgstr " - Premere Ctrl+Alt+G per rilasciare l'input"
|
||||
|
||||
#: ui/gtk.c:277
|
||||
#: ui/gtk.c:279
|
||||
msgid " [Paused]"
|
||||
msgstr " [Pausa]"
|
||||
|
||||
#: ui/gtk.c:1833
|
||||
#: ui/gtk.c:1922
|
||||
msgid "_Pause"
|
||||
msgstr "_Pausa"
|
||||
|
||||
#: ui/gtk.c:1839
|
||||
#: ui/gtk.c:1928
|
||||
msgid "_Reset"
|
||||
msgstr "_Reset"
|
||||
|
||||
#: ui/gtk.c:1842
|
||||
#: ui/gtk.c:1931
|
||||
msgid "Power _Down"
|
||||
msgstr "_Spegni"
|
||||
|
||||
#: ui/gtk.c:1848
|
||||
#: ui/gtk.c:1937
|
||||
msgid "_Quit"
|
||||
msgstr "_Esci"
|
||||
|
||||
#: ui/gtk.c:1940
|
||||
#: ui/gtk.c:2029
|
||||
msgid "_Fullscreen"
|
||||
msgstr ""
|
||||
msgstr "A t_utto schermo"
|
||||
|
||||
#: ui/gtk.c:1954
|
||||
#: ui/gtk.c:2032
|
||||
msgid "_Copy"
|
||||
msgstr "_Copia"
|
||||
|
||||
#: ui/gtk.c:2048
|
||||
msgid "Zoom _In"
|
||||
msgstr "_Aumenta zoom"
|
||||
|
||||
#: ui/gtk.c:1961
|
||||
#: ui/gtk.c:2055
|
||||
msgid "Zoom _Out"
|
||||
msgstr "_Riduci zoom"
|
||||
|
||||
#: ui/gtk.c:1968
|
||||
#: ui/gtk.c:2062
|
||||
msgid "Best _Fit"
|
||||
msgstr "A_nnulla zoom"
|
||||
|
||||
#: ui/gtk.c:1975
|
||||
#: ui/gtk.c:2069
|
||||
msgid "Zoom To _Fit"
|
||||
msgstr "Adatta alla _finestra"
|
||||
|
||||
#: ui/gtk.c:1981
|
||||
#: ui/gtk.c:2075
|
||||
msgid "Grab On _Hover"
|
||||
msgstr "Cattura _automatica input"
|
||||
|
||||
#: ui/gtk.c:1984
|
||||
#: ui/gtk.c:2078
|
||||
msgid "_Grab Input"
|
||||
msgstr "_Cattura input"
|
||||
|
||||
#: ui/gtk.c:2013
|
||||
#: ui/gtk.c:2107
|
||||
msgid "Show _Tabs"
|
||||
msgstr "Mostra _tab"
|
||||
|
||||
#: ui/gtk.c:2016
|
||||
#: ui/gtk.c:2110
|
||||
msgid "Detach Tab"
|
||||
msgstr "_Sposta in una nuova finestra"
|
||||
|
||||
#: ui/gtk.c:2028
|
||||
#: ui/gtk.c:2122
|
||||
msgid "_Machine"
|
||||
msgstr "_Macchina virtuale"
|
||||
|
||||
#: ui/gtk.c:2033
|
||||
#: ui/gtk.c:2127
|
||||
msgid "_View"
|
||||
msgstr "_Visualizza"
|
||||
+23
-19
@@ -5,9 +5,9 @@
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: QEMU 2.5.92\n"
|
||||
"Project-Id-Version: QEMU 2.7.93\n"
|
||||
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
|
||||
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
|
||||
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -16,70 +16,74 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ui/gtk.c:273
|
||||
#: ui/gtk.c:275
|
||||
msgid " - Press Ctrl+Alt+G to release grab"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:277
|
||||
#: ui/gtk.c:279
|
||||
msgid " [Paused]"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1833
|
||||
#: ui/gtk.c:1922
|
||||
msgid "_Pause"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1839
|
||||
#: ui/gtk.c:1928
|
||||
msgid "_Reset"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1842
|
||||
#: ui/gtk.c:1931
|
||||
msgid "Power _Down"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1848
|
||||
#: ui/gtk.c:1937
|
||||
msgid "_Quit"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1940
|
||||
#: ui/gtk.c:2029
|
||||
msgid "_Fullscreen"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1954
|
||||
#: ui/gtk.c:2032
|
||||
msgid "_Copy"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:2048
|
||||
msgid "Zoom _In"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1961
|
||||
#: ui/gtk.c:2055
|
||||
msgid "Zoom _Out"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1968
|
||||
#: ui/gtk.c:2062
|
||||
msgid "Best _Fit"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1975
|
||||
#: ui/gtk.c:2069
|
||||
msgid "Zoom To _Fit"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1981
|
||||
#: ui/gtk.c:2075
|
||||
msgid "Grab On _Hover"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1984
|
||||
#: ui/gtk.c:2078
|
||||
msgid "_Grab Input"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:2013
|
||||
#: ui/gtk.c:2107
|
||||
msgid "Show _Tabs"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:2016
|
||||
#: ui/gtk.c:2110
|
||||
msgid "Detach Tab"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:2028
|
||||
#: ui/gtk.c:2122
|
||||
msgid "_Machine"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:2033
|
||||
#: ui/gtk.c:2127
|
||||
msgid "_View"
|
||||
msgstr ""
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: QEMU 1.4.50\n"
|
||||
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
|
||||
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
|
||||
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
|
||||
"PO-Revision-Date: 2013-04-22 18:35+0300\n"
|
||||
"Last-Translator: Ozan Çağlayan <ozancag@gmail.com>\n"
|
||||
"Language-Team: Türkçe <>\n"
|
||||
@@ -17,72 +17,76 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Gtranslator 2.91.6\n"
|
||||
|
||||
#: ui/gtk.c:273
|
||||
#: ui/gtk.c:275
|
||||
msgid " - Press Ctrl+Alt+G to release grab"
|
||||
msgstr " - Yakalamayı durdurmak için Ctrl+Alt+G tuşlarına basın"
|
||||
|
||||
#: ui/gtk.c:277
|
||||
#: ui/gtk.c:279
|
||||
msgid " [Paused]"
|
||||
msgstr " [Duraklatıldı]"
|
||||
|
||||
#: ui/gtk.c:1833
|
||||
#: ui/gtk.c:1922
|
||||
msgid "_Pause"
|
||||
msgstr "_Duraklat"
|
||||
|
||||
#: ui/gtk.c:1839
|
||||
#: ui/gtk.c:1928
|
||||
msgid "_Reset"
|
||||
msgstr "_Sıfırla"
|
||||
|
||||
#: ui/gtk.c:1842
|
||||
#: ui/gtk.c:1931
|
||||
msgid "Power _Down"
|
||||
msgstr "_Kapat"
|
||||
|
||||
#: ui/gtk.c:1848
|
||||
#: ui/gtk.c:1937
|
||||
msgid "_Quit"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1940
|
||||
#: ui/gtk.c:2029
|
||||
msgid "_Fullscreen"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1954
|
||||
#: ui/gtk.c:2032
|
||||
msgid "_Copy"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:2048
|
||||
#, fuzzy
|
||||
msgid "Zoom _In"
|
||||
msgstr "Yakınlaş ve Sığ_dır"
|
||||
|
||||
#: ui/gtk.c:1961
|
||||
#: ui/gtk.c:2055
|
||||
#, fuzzy
|
||||
msgid "Zoom _Out"
|
||||
msgstr "Yakınlaş ve Sığ_dır"
|
||||
|
||||
#: ui/gtk.c:1968
|
||||
#: ui/gtk.c:2062
|
||||
msgid "Best _Fit"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:1975
|
||||
#: ui/gtk.c:2069
|
||||
msgid "Zoom To _Fit"
|
||||
msgstr "Yakınlaş ve Sığ_dır"
|
||||
|
||||
#: ui/gtk.c:1981
|
||||
#: ui/gtk.c:2075
|
||||
msgid "Grab On _Hover"
|
||||
msgstr "Ü_zerindeyken Yakala"
|
||||
|
||||
#: ui/gtk.c:1984
|
||||
#: ui/gtk.c:2078
|
||||
msgid "_Grab Input"
|
||||
msgstr "Girdiyi _Yakala"
|
||||
|
||||
#: ui/gtk.c:2013
|
||||
#: ui/gtk.c:2107
|
||||
msgid "Show _Tabs"
|
||||
msgstr "Se_kmeleri Göster"
|
||||
|
||||
#: ui/gtk.c:2016
|
||||
#: ui/gtk.c:2110
|
||||
msgid "Detach Tab"
|
||||
msgstr ""
|
||||
|
||||
#: ui/gtk.c:2028
|
||||
#: ui/gtk.c:2122
|
||||
msgid "_Machine"
|
||||
msgstr "_Makine"
|
||||
|
||||
#: ui/gtk.c:2033
|
||||
#: ui/gtk.c:2127
|
||||
msgid "_View"
|
||||
msgstr "_Görüntüle"
|
||||
+22
-18
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: QEMU 2.2\n"
|
||||
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
|
||||
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
|
||||
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
|
||||
"PO-Revision-Date: 2014-07-31 10:00+0800\n"
|
||||
"Last-Translator: Fam Zheng <famz@redhat.com>\n"
|
||||
"Language-Team: Chinese <zh@li.org>\n"
|
||||
@@ -17,70 +17,74 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 1.4\n"
|
||||
|
||||
#: ui/gtk.c:273
|
||||
#: ui/gtk.c:275
|
||||
msgid " - Press Ctrl+Alt+G to release grab"
|
||||
msgstr " - 按下 Ctrl+Alt+G 取消捕获"
|
||||
|
||||
#: ui/gtk.c:277
|
||||
#: ui/gtk.c:279
|
||||
msgid " [Paused]"
|
||||
msgstr " [已暂停]"
|
||||
|
||||
#: ui/gtk.c:1833
|
||||
#: ui/gtk.c:1922
|
||||
msgid "_Pause"
|
||||
msgstr "暂停(_P)"
|
||||
|
||||
#: ui/gtk.c:1839
|
||||
#: ui/gtk.c:1928
|
||||
msgid "_Reset"
|
||||
msgstr "重置(_R)"
|
||||
|
||||
#: ui/gtk.c:1842
|
||||
#: ui/gtk.c:1931
|
||||
msgid "Power _Down"
|
||||
msgstr "关闭电源(_D)"
|
||||
|
||||
#: ui/gtk.c:1848
|
||||
#: ui/gtk.c:1937
|
||||
msgid "_Quit"
|
||||
msgstr "退出(_Q)"
|
||||
|
||||
#: ui/gtk.c:1940
|
||||
#: ui/gtk.c:2029
|
||||
msgid "_Fullscreen"
|
||||
msgstr "全屏(_F)"
|
||||
|
||||
#: ui/gtk.c:1954
|
||||
#: ui/gtk.c:2032
|
||||
msgid "_Copy"
|
||||
msgstr "复制(_C)"
|
||||
|
||||
#: ui/gtk.c:2048
|
||||
msgid "Zoom _In"
|
||||
msgstr "放大(_I)"
|
||||
|
||||
#: ui/gtk.c:1961
|
||||
#: ui/gtk.c:2055
|
||||
msgid "Zoom _Out"
|
||||
msgstr "缩小(_O)"
|
||||
|
||||
#: ui/gtk.c:1968
|
||||
#: ui/gtk.c:2062
|
||||
msgid "Best _Fit"
|
||||
msgstr "最合适大小(_F)"
|
||||
|
||||
#: ui/gtk.c:1975
|
||||
#: ui/gtk.c:2069
|
||||
msgid "Zoom To _Fit"
|
||||
msgstr "缩放以适应大小(_F)"
|
||||
|
||||
#: ui/gtk.c:1981
|
||||
#: ui/gtk.c:2075
|
||||
msgid "Grab On _Hover"
|
||||
msgstr "鼠标经过时捕获(_H)"
|
||||
|
||||
#: ui/gtk.c:1984
|
||||
#: ui/gtk.c:2078
|
||||
msgid "_Grab Input"
|
||||
msgstr "捕获输入(_G)"
|
||||
|
||||
#: ui/gtk.c:2013
|
||||
#: ui/gtk.c:2107
|
||||
msgid "Show _Tabs"
|
||||
msgstr "显示标签页(_T)"
|
||||
|
||||
#: ui/gtk.c:2016
|
||||
#: ui/gtk.c:2110
|
||||
msgid "Detach Tab"
|
||||
msgstr "分离标签页"
|
||||
|
||||
#: ui/gtk.c:2028
|
||||
#: ui/gtk.c:2122
|
||||
msgid "_Machine"
|
||||
msgstr "虚拟机(_M)"
|
||||
|
||||
#: ui/gtk.c:2033
|
||||
#: ui/gtk.c:2127
|
||||
msgid "_View"
|
||||
msgstr "视图(_V)"
|
||||
+178
-168
File diff suppressed because it is too large.
Load diff
+110
-108
@@ -6,7 +6,7 @@
|
||||
{ 'include': 'common.json' }
|
||||
|
||||
##
|
||||
# @SnapshotInfo
|
||||
# @SnapshotInfo:
|
||||
#
|
||||
# @id: unique snapshot id
|
||||
#
|
||||
@@ -213,7 +213,7 @@
|
||||
'*filename': 'str' } }
|
||||
|
||||
##
|
||||
# @BlockdevCacheInfo
|
||||
# @BlockdevCacheInfo:
|
||||
#
|
||||
# Cache mode information for a block device
|
||||
#
|
||||
@@ -378,7 +378,7 @@
|
||||
# @offset: if present, the image file stores the data for this range in
|
||||
# raw format at the given offset.
|
||||
#
|
||||
# Since 1.7
|
||||
# Since: 1.7
|
||||
##
|
||||
{ 'struct': 'BlockDeviceMapEntry',
|
||||
'data': { 'start': 'int', 'length': 'int', 'depth': 'int', 'zero': 'bool',
|
||||
@@ -790,7 +790,7 @@
|
||||
'*node-name': 'str', 'password': 'str'} }
|
||||
|
||||
##
|
||||
# @block_resize
|
||||
# @block_resize:
|
||||
#
|
||||
# Resize a block image while a guest is running.
|
||||
#
|
||||
@@ -812,7 +812,7 @@
|
||||
'size': 'int' }}
|
||||
|
||||
##
|
||||
# @NewImageMode
|
||||
# @NewImageMode:
|
||||
#
|
||||
# An enumeration that tells QEMU how to set the backing file path in
|
||||
# a new image file.
|
||||
@@ -829,7 +829,7 @@
|
||||
'data': [ 'existing', 'absolute-paths' ] }
|
||||
|
||||
##
|
||||
# @BlockdevSnapshotSync
|
||||
# @BlockdevSnapshotSync:
|
||||
#
|
||||
# Either @device or @node-name must be set but not both.
|
||||
#
|
||||
@@ -852,7 +852,7 @@
|
||||
'*format': 'str', '*mode': 'NewImageMode' } }
|
||||
|
||||
##
|
||||
# @BlockdevSnapshot
|
||||
# @BlockdevSnapshot:
|
||||
#
|
||||
# @node: device or node name that will have a snapshot created.
|
||||
#
|
||||
@@ -861,13 +861,13 @@
|
||||
# It must not have a current backing file (this can be
|
||||
# achieved by passing "backing": "" to blockdev-add).
|
||||
#
|
||||
# Since 2.5
|
||||
# Since: 2.5
|
||||
##
|
||||
{ 'struct': 'BlockdevSnapshot',
|
||||
'data': { 'node': 'str', 'overlay': 'str' } }
|
||||
|
||||
##
|
||||
# @DriveBackup
|
||||
# @DriveBackup:
|
||||
#
|
||||
# @job-id: #optional identifier for the newly-created block job. If
|
||||
# omitted, the device name will be used. (Since 2.7)
|
||||
@@ -905,9 +905,9 @@
|
||||
# default 'report' (no limitations, since this applies to
|
||||
# a different block device than @device).
|
||||
#
|
||||
# Note that @on-source-error and @on-target-error only affect background I/O.
|
||||
# If an error occurs during a guest write request, the device's rerror/werror
|
||||
# actions will be used.
|
||||
# Note: @on-source-error and @on-target-error only affect background
|
||||
# I/O. If an error occurs during a guest write request, the device's
|
||||
# rerror/werror actions will be used.
|
||||
#
|
||||
# Since: 1.6
|
||||
##
|
||||
@@ -919,7 +919,7 @@
|
||||
'*on-target-error': 'BlockdevOnError' } }
|
||||
|
||||
##
|
||||
# @BlockdevBackup
|
||||
# @BlockdevBackup:
|
||||
#
|
||||
# @job-id: #optional identifier for the newly-created block job. If
|
||||
# omitted, the device name will be used. (Since 2.7)
|
||||
@@ -946,9 +946,9 @@
|
||||
# default 'report' (no limitations, since this applies to
|
||||
# a different block device than @device).
|
||||
#
|
||||
# Note that @on-source-error and @on-target-error only affect background I/O.
|
||||
# If an error occurs during a guest write request, the device's rerror/werror
|
||||
# actions will be used.
|
||||
# Note: @on-source-error and @on-target-error only affect background
|
||||
# I/O. If an error occurs during a guest write request, the device's
|
||||
# rerror/werror actions will be used.
|
||||
#
|
||||
# Since: 2.3
|
||||
##
|
||||
@@ -961,7 +961,7 @@
|
||||
'*on-target-error': 'BlockdevOnError' } }
|
||||
|
||||
##
|
||||
# @blockdev-snapshot-sync
|
||||
# @blockdev-snapshot-sync:
|
||||
#
|
||||
# Generates a synchronous snapshot of a block device.
|
||||
#
|
||||
@@ -970,26 +970,26 @@
|
||||
# Returns: nothing on success
|
||||
# If @device is not a valid block device, DeviceNotFound
|
||||
#
|
||||
# Since 0.14.0
|
||||
# Since: 0.14.0
|
||||
##
|
||||
{ 'command': 'blockdev-snapshot-sync',
|
||||
'data': 'BlockdevSnapshotSync' }
|
||||
|
||||
|
||||
##
|
||||
# @blockdev-snapshot
|
||||
# @blockdev-snapshot:
|
||||
#
|
||||
# Generates a snapshot of a block device.
|
||||
#
|
||||
# For the arguments, see the documentation of BlockdevSnapshot.
|
||||
#
|
||||
# Since 2.5
|
||||
# Since: 2.5
|
||||
##
|
||||
{ 'command': 'blockdev-snapshot',
|
||||
'data': 'BlockdevSnapshot' }
|
||||
|
||||
##
|
||||
# @change-backing-file
|
||||
# @change-backing-file:
|
||||
#
|
||||
# Change the backing file in the image file metadata. This does not
|
||||
# cause QEMU to reopen the image file to reparse the backing filename
|
||||
@@ -1016,7 +1016,7 @@
|
||||
'backing-file': 'str' } }
|
||||
|
||||
##
|
||||
# @block-commit
|
||||
# @block-commit:
|
||||
#
|
||||
# Live commit of data from overlay image nodes into backing nodes - i.e.,
|
||||
# writes data between 'top' and 'base' into 'base'.
|
||||
@@ -1079,7 +1079,7 @@
|
||||
'*backing-file': 'str', '*speed': 'int' } }
|
||||
|
||||
##
|
||||
# @drive-backup
|
||||
# @drive-backup:
|
||||
#
|
||||
# Start a point-in-time copy of a block device to a new destination. The
|
||||
# status of ongoing drive-backup operations can be checked with
|
||||
@@ -1092,13 +1092,13 @@
|
||||
# Returns: nothing on success
|
||||
# If @device is not a valid block device, GenericError
|
||||
#
|
||||
# Since 1.6
|
||||
# Since: 1.6
|
||||
##
|
||||
{ 'command': 'drive-backup', 'boxed': true,
|
||||
'data': 'DriveBackup' }
|
||||
|
||||
##
|
||||
# @blockdev-backup
|
||||
# @blockdev-backup:
|
||||
#
|
||||
# Start a point-in-time copy of a block device to a new destination. The
|
||||
# status of ongoing blockdev-backup operations can be checked with
|
||||
@@ -1111,25 +1111,25 @@
|
||||
# Returns: nothing on success
|
||||
# If @device is not a valid block device, DeviceNotFound
|
||||
#
|
||||
# Since 2.3
|
||||
# Since: 2.3
|
||||
##
|
||||
{ 'command': 'blockdev-backup', 'boxed': true,
|
||||
'data': 'BlockdevBackup' }
|
||||
|
||||
|
||||
##
|
||||
# @query-named-block-nodes
|
||||
# @query-named-block-nodes:
|
||||
#
|
||||
# Get the named block driver list
|
||||
#
|
||||
# Returns: the list of BlockDeviceInfo
|
||||
#
|
||||
# Since 2.0
|
||||
# Since: 2.0
|
||||
##
|
||||
{ 'command': 'query-named-block-nodes', 'returns': [ 'BlockDeviceInfo' ] }
|
||||
|
||||
##
|
||||
# @drive-mirror
|
||||
# @drive-mirror:
|
||||
#
|
||||
# Start mirroring a block device's writes to a new destination.
|
||||
#
|
||||
@@ -1138,13 +1138,13 @@
|
||||
# Returns: nothing on success
|
||||
# If @device is not a valid block device, GenericError
|
||||
#
|
||||
# Since 1.3
|
||||
# Since: 1.3
|
||||
##
|
||||
{ 'command': 'drive-mirror', 'boxed': true,
|
||||
'data': 'DriveMirror' }
|
||||
|
||||
##
|
||||
# DriveMirror
|
||||
# @DriveMirror:
|
||||
#
|
||||
# A set of parameters describing drive mirror setup.
|
||||
#
|
||||
@@ -1198,7 +1198,7 @@
|
||||
# written. Both will result in identical contents.
|
||||
# Default is true. (Since 2.4)
|
||||
#
|
||||
# Since 1.3
|
||||
# Since: 1.3
|
||||
##
|
||||
{ 'struct': 'DriveMirror',
|
||||
'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
|
||||
@@ -1210,19 +1210,19 @@
|
||||
'*unmap': 'bool' } }
|
||||
|
||||
##
|
||||
# @BlockDirtyBitmap
|
||||
# @BlockDirtyBitmap:
|
||||
#
|
||||
# @node: name of device/node which the bitmap is tracking
|
||||
#
|
||||
# @name: name of the dirty bitmap
|
||||
#
|
||||
# Since 2.4
|
||||
# Since: 2.4
|
||||
##
|
||||
{ 'struct': 'BlockDirtyBitmap',
|
||||
'data': { 'node': 'str', 'name': 'str' } }
|
||||
|
||||
##
|
||||
# @BlockDirtyBitmapAdd
|
||||
# @BlockDirtyBitmapAdd:
|
||||
#
|
||||
# @node: name of device/node which the bitmap is tracking
|
||||
#
|
||||
@@ -1231,13 +1231,13 @@
|
||||
# @granularity: #optional the bitmap granularity, default is 64k for
|
||||
# block-dirty-bitmap-add
|
||||
#
|
||||
# Since 2.4
|
||||
# Since: 2.4
|
||||
##
|
||||
{ 'struct': 'BlockDirtyBitmapAdd',
|
||||
'data': { 'node': 'str', 'name': 'str', '*granularity': 'uint32' } }
|
||||
|
||||
##
|
||||
# @block-dirty-bitmap-add
|
||||
# @block-dirty-bitmap-add:
|
||||
#
|
||||
# Create a dirty bitmap with a name on the node
|
||||
#
|
||||
@@ -1245,13 +1245,13 @@
|
||||
# If @node is not a valid block device or node, DeviceNotFound
|
||||
# If @name is already taken, GenericError with an explanation
|
||||
#
|
||||
# Since 2.4
|
||||
# Since: 2.4
|
||||
##
|
||||
{ 'command': 'block-dirty-bitmap-add',
|
||||
'data': 'BlockDirtyBitmapAdd' }
|
||||
|
||||
##
|
||||
# @block-dirty-bitmap-remove
|
||||
# @block-dirty-bitmap-remove:
|
||||
#
|
||||
# Remove a dirty bitmap on the node
|
||||
#
|
||||
@@ -1260,13 +1260,13 @@
|
||||
# If @name is not found, GenericError with an explanation
|
||||
# if @name is frozen by an operation, GenericError
|
||||
#
|
||||
# Since 2.4
|
||||
# Since: 2.4
|
||||
##
|
||||
{ 'command': 'block-dirty-bitmap-remove',
|
||||
'data': 'BlockDirtyBitmap' }
|
||||
|
||||
##
|
||||
# @block-dirty-bitmap-clear
|
||||
# @block-dirty-bitmap-clear:
|
||||
#
|
||||
# Clear (reset) a dirty bitmap on the device
|
||||
#
|
||||
@@ -1274,13 +1274,13 @@
|
||||
# If @node is not a valid block device, DeviceNotFound
|
||||
# If @name is not found, GenericError with an explanation
|
||||
#
|
||||
# Since 2.4
|
||||
# Since: 2.4
|
||||
##
|
||||
{ 'command': 'block-dirty-bitmap-clear',
|
||||
'data': 'BlockDirtyBitmap' }
|
||||
|
||||
##
|
||||
# @blockdev-mirror
|
||||
# @blockdev-mirror:
|
||||
#
|
||||
# Start mirroring a block device's writes to a new destination.
|
||||
#
|
||||
@@ -1321,7 +1321,7 @@
|
||||
#
|
||||
# Returns: nothing on success.
|
||||
#
|
||||
# Since 2.6
|
||||
# Since: 2.6
|
||||
##
|
||||
{ 'command': 'blockdev-mirror',
|
||||
'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
|
||||
@@ -1368,7 +1368,7 @@
|
||||
'data': 'BlockIOThrottle' }
|
||||
|
||||
##
|
||||
# BlockIOThrottle
|
||||
# @BlockIOThrottle:
|
||||
#
|
||||
# A set of parameters describing block throttling.
|
||||
#
|
||||
@@ -1650,7 +1650,7 @@
|
||||
{ 'command': 'block-job-complete', 'data': { 'device': 'str' } }
|
||||
|
||||
##
|
||||
# @BlockdevDiscardOptions
|
||||
# @BlockdevDiscardOptions:
|
||||
#
|
||||
# Determines how to handle discard requests.
|
||||
#
|
||||
@@ -1663,7 +1663,7 @@
|
||||
'data': [ 'ignore', 'unmap' ] }
|
||||
|
||||
##
|
||||
# @BlockdevDetectZeroesOptions
|
||||
# @BlockdevDetectZeroesOptions:
|
||||
#
|
||||
# Describes the operation mode for the automatic conversion of plain
|
||||
# zero writes by the OS to driver specific optimized zero write commands.
|
||||
@@ -1679,7 +1679,7 @@
|
||||
'data': [ 'off', 'on', 'unmap' ] }
|
||||
|
||||
##
|
||||
# @BlockdevAioOptions
|
||||
# @BlockdevAioOptions:
|
||||
#
|
||||
# Selects the AIO backend to handle I/O requests
|
||||
#
|
||||
@@ -1692,7 +1692,7 @@
|
||||
'data': [ 'threads', 'native' ] }
|
||||
|
||||
##
|
||||
# @BlockdevCacheOptions
|
||||
# @BlockdevCacheOptions:
|
||||
#
|
||||
# Includes cache-related options for block devices
|
||||
#
|
||||
@@ -1708,13 +1708,17 @@
|
||||
'*no-flush': 'bool' } }
|
||||
|
||||
##
|
||||
# @BlockdevDriver
|
||||
# @BlockdevDriver:
|
||||
#
|
||||
# Drivers that are supported in block device operations.
|
||||
#
|
||||
# @host_device, @host_cdrom: Since 2.1
|
||||
# @host_device: Since 2.1
|
||||
# @host_cdrom: Since 2.1
|
||||
# @gluster: Since 2.7
|
||||
# @nbd, @nfs, @replication, @ssh: Since 2.8
|
||||
# @nbd: Since 2.8
|
||||
# @nfs: Since 2.8
|
||||
# @replication: Since 2.8
|
||||
# @ssh: Since 2.8
|
||||
#
|
||||
# Since: 2.0
|
||||
##
|
||||
@@ -1727,7 +1731,7 @@
|
||||
'vvfat' ] }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsFile
|
||||
# @BlockdevOptionsFile:
|
||||
#
|
||||
# Driver specific block device options for the file backend.
|
||||
#
|
||||
@@ -1741,7 +1745,7 @@
|
||||
'*aio': 'BlockdevAioOptions' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsNull
|
||||
# @BlockdevOptionsNull:
|
||||
#
|
||||
# Driver specific block device options for the null backend.
|
||||
#
|
||||
@@ -1756,7 +1760,7 @@
|
||||
'data': { '*size': 'int', '*latency-ns': 'uint64' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsVVFAT
|
||||
# @BlockdevOptionsVVFAT:
|
||||
#
|
||||
# Driver specific block device options for the vvfat protocol.
|
||||
#
|
||||
@@ -1777,7 +1781,7 @@
|
||||
'*label': 'str', '*rw': 'bool' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsGenericFormat
|
||||
# @BlockdevOptionsGenericFormat:
|
||||
#
|
||||
# Driver specific block device options for image format that have no option
|
||||
# besides their data source.
|
||||
@@ -1790,7 +1794,7 @@
|
||||
'data': { 'file': 'BlockdevRef' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsLUKS
|
||||
# @BlockdevOptionsLUKS:
|
||||
#
|
||||
# Driver specific block device options for LUKS.
|
||||
#
|
||||
@@ -1806,7 +1810,7 @@
|
||||
|
||||
|
||||
##
|
||||
# @BlockdevOptionsGenericCOWFormat
|
||||
# @BlockdevOptionsGenericCOWFormat:
|
||||
#
|
||||
# Driver specific block device options for image format that have no option
|
||||
# besides their data source and an optional backing file.
|
||||
@@ -1823,7 +1827,7 @@
|
||||
'data': { '*backing': 'BlockdevRef' } }
|
||||
|
||||
##
|
||||
# @Qcow2OverlapCheckMode
|
||||
# @Qcow2OverlapCheckMode:
|
||||
#
|
||||
# General overlap check modes.
|
||||
#
|
||||
@@ -1843,7 +1847,7 @@
|
||||
'data': [ 'none', 'constant', 'cached', 'all' ] }
|
||||
|
||||
##
|
||||
# @Qcow2OverlapCheckFlags
|
||||
# @Qcow2OverlapCheckFlags:
|
||||
#
|
||||
# Structure of flags for each metadata structure. Setting a field to 'true'
|
||||
# makes qemu guard that structure against unintended overwriting. The default
|
||||
@@ -1866,7 +1870,7 @@
|
||||
'*inactive-l2': 'bool' } }
|
||||
|
||||
##
|
||||
# @Qcow2OverlapChecks
|
||||
# @Qcow2OverlapChecks:
|
||||
#
|
||||
# Specifies which metadata structures should be guarded against unintended
|
||||
# overwriting.
|
||||
@@ -1883,7 +1887,7 @@
|
||||
'mode': 'Qcow2OverlapCheckMode' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsQcow2
|
||||
# @BlockdevOptionsQcow2:
|
||||
#
|
||||
# Driver specific block device options for qcow2.
|
||||
#
|
||||
@@ -1933,7 +1937,7 @@
|
||||
|
||||
|
||||
##
|
||||
# @BlockdevOptionsArchipelago
|
||||
# @BlockdevOptionsArchipelago:
|
||||
#
|
||||
# Driver specific block device options for Archipelago.
|
||||
#
|
||||
@@ -1962,7 +1966,7 @@
|
||||
'*segment': 'str' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsSsh
|
||||
# @BlockdevOptionsSsh:
|
||||
#
|
||||
# @server: host address
|
||||
#
|
||||
@@ -1973,7 +1977,7 @@
|
||||
#
|
||||
# TODO: Expose the host_key_check option in QMP
|
||||
#
|
||||
# Since 2.8
|
||||
# Since: 2.8
|
||||
##
|
||||
{ 'struct': 'BlockdevOptionsSsh',
|
||||
'data': { 'server': 'InetSocketAddress',
|
||||
@@ -1982,7 +1986,7 @@
|
||||
|
||||
|
||||
##
|
||||
# @BlkdebugEvent
|
||||
# @BlkdebugEvent:
|
||||
#
|
||||
# Trigger events supported by blkdebug.
|
||||
#
|
||||
@@ -2005,7 +2009,7 @@
|
||||
'pwritev_zero', 'pwritev_done', 'empty_image_prepare' ] }
|
||||
|
||||
##
|
||||
# @BlkdebugInjectErrorOptions
|
||||
# @BlkdebugInjectErrorOptions:
|
||||
#
|
||||
# Describes a single error injection for blkdebug.
|
||||
#
|
||||
@@ -2037,7 +2041,7 @@
|
||||
'*immediately': 'bool' } }
|
||||
|
||||
##
|
||||
# @BlkdebugSetStateOptions
|
||||
# @BlkdebugSetStateOptions:
|
||||
#
|
||||
# Describes a single state-change event for blkdebug.
|
||||
#
|
||||
@@ -2057,7 +2061,7 @@
|
||||
'new_state': 'int' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsBlkdebug
|
||||
# @BlockdevOptionsBlkdebug:
|
||||
#
|
||||
# Driver specific block device options for blkdebug.
|
||||
#
|
||||
@@ -2082,7 +2086,7 @@
|
||||
'*set-state': ['BlkdebugSetStateOptions'] } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsBlkverify
|
||||
# @BlockdevOptionsBlkverify:
|
||||
#
|
||||
# Driver specific block device options for blkverify.
|
||||
#
|
||||
@@ -2097,7 +2101,7 @@
|
||||
'raw': 'BlockdevRef' } }
|
||||
|
||||
##
|
||||
# @QuorumReadPattern
|
||||
# @QuorumReadPattern:
|
||||
#
|
||||
# An enumeration of quorum read patterns.
|
||||
#
|
||||
@@ -2110,7 +2114,7 @@
|
||||
{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo' ] }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsQuorum
|
||||
# @BlockdevOptionsQuorum:
|
||||
#
|
||||
# Driver specific block device options for Quorum
|
||||
#
|
||||
@@ -2137,7 +2141,7 @@
|
||||
'*read-pattern': 'QuorumReadPattern' } }
|
||||
|
||||
##
|
||||
# @GlusterTransport
|
||||
# @GlusterTransport:
|
||||
#
|
||||
# An enumeration of Gluster transport types
|
||||
#
|
||||
@@ -2152,7 +2156,7 @@
|
||||
|
||||
|
||||
##
|
||||
# @GlusterServer
|
||||
# @GlusterServer:
|
||||
#
|
||||
# Captures the address of a socket
|
||||
#
|
||||
@@ -2160,10 +2164,6 @@
|
||||
#
|
||||
# @type: Transport type used for gluster connection
|
||||
#
|
||||
# @unix: socket file
|
||||
#
|
||||
# @tcp: host address and port number
|
||||
#
|
||||
# This is similar to SocketAddress, only distinction:
|
||||
#
|
||||
# 1. GlusterServer is a flat union, SocketAddress is a simple union.
|
||||
@@ -2185,7 +2185,7 @@
|
||||
'tcp': 'InetSocketAddress' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsGluster
|
||||
# @BlockdevOptionsGluster:
|
||||
#
|
||||
# Driver specific block device options for Gluster
|
||||
#
|
||||
@@ -2195,7 +2195,8 @@
|
||||
#
|
||||
# @server: gluster servers description
|
||||
#
|
||||
# @debug-level: #optional libgfapi log level (default '4' which is Error)
|
||||
# @debug: #optional libgfapi log level (default '4' which is Error)
|
||||
# (Since 2.8)
|
||||
#
|
||||
# @logfile: #optional libgfapi log file (default /dev/stderr) (Since 2.8)
|
||||
#
|
||||
@@ -2205,11 +2206,11 @@
|
||||
'data': { 'volume': 'str',
|
||||
'path': 'str',
|
||||
'server': ['GlusterServer'],
|
||||
'*debug-level': 'int',
|
||||
'*debug': 'int',
|
||||
'*logfile': 'str' } }
|
||||
|
||||
##
|
||||
# @ReplicationMode
|
||||
# @ReplicationMode:
|
||||
#
|
||||
# An enumeration of replication modes.
|
||||
#
|
||||
@@ -2222,7 +2223,7 @@
|
||||
{ 'enum' : 'ReplicationMode', 'data' : [ 'primary', 'secondary' ] }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsReplication
|
||||
# @BlockdevOptionsReplication:
|
||||
#
|
||||
# Driver specific block device options for replication
|
||||
#
|
||||
@@ -2240,19 +2241,19 @@
|
||||
'*top-id': 'str' } }
|
||||
|
||||
##
|
||||
# @NFSTransport
|
||||
# @NFSTransport:
|
||||
#
|
||||
# An enumeration of NFS transport types
|
||||
#
|
||||
# @inet: TCP transport
|
||||
#
|
||||
# Since 2.8
|
||||
# Since: 2.8
|
||||
##
|
||||
{ 'enum': 'NFSTransport',
|
||||
'data': [ 'inet' ] }
|
||||
|
||||
##
|
||||
# @NFSServer
|
||||
# @NFSServer:
|
||||
#
|
||||
# Captures the address of the socket
|
||||
#
|
||||
@@ -2260,14 +2261,14 @@
|
||||
#
|
||||
# @host: host address for NFS server
|
||||
#
|
||||
# Since 2.8
|
||||
# Since: 2.8
|
||||
##
|
||||
{ 'struct': 'NFSServer',
|
||||
'data': { 'type': 'NFSTransport',
|
||||
'host': 'str' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsNfs
|
||||
# @BlockdevOptionsNfs:
|
||||
#
|
||||
# Driver specific block device option for NFS
|
||||
#
|
||||
@@ -2292,10 +2293,10 @@
|
||||
# @page-cache-size: #optional set the pagecache size in bytes (defaults
|
||||
# to libnfs default)
|
||||
#
|
||||
# @debug-level: #optional set the NFS debug level (max 2) (defaults
|
||||
# @debug: #optional set the NFS debug level (max 2) (defaults
|
||||
# to libnfs default)
|
||||
#
|
||||
# Since 2.8
|
||||
# Since: 2.8
|
||||
##
|
||||
{ 'struct': 'BlockdevOptionsNfs',
|
||||
'data': { 'server': 'NFSServer',
|
||||
@@ -2305,10 +2306,10 @@
|
||||
'*tcp-syn-count': 'int',
|
||||
'*readahead-size': 'int',
|
||||
'*page-cache-size': 'int',
|
||||
'*debug-level': 'int' } }
|
||||
'*debug': 'int' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsCurl
|
||||
# @BlockdevOptionsCurl:
|
||||
#
|
||||
# Driver specific block device options for the curl backend.
|
||||
#
|
||||
@@ -2320,7 +2321,7 @@
|
||||
'data': { 'filename': 'str' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsNbd
|
||||
# @BlockdevOptionsNbd:
|
||||
#
|
||||
# Driver specific block device options for NBD.
|
||||
#
|
||||
@@ -2338,7 +2339,7 @@
|
||||
'*tls-creds': 'str' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptionsRaw
|
||||
# @BlockdevOptionsRaw:
|
||||
#
|
||||
# Driver specific block device options for the raw driver.
|
||||
#
|
||||
@@ -2352,7 +2353,7 @@
|
||||
'data': { '*offset': 'int', '*size': 'int' } }
|
||||
|
||||
##
|
||||
# @BlockdevOptions
|
||||
# @BlockdevOptions:
|
||||
#
|
||||
# Options for creating a block device. Many options are available for all
|
||||
# block devices, independent of the block driver:
|
||||
@@ -2418,7 +2419,7 @@
|
||||
} }
|
||||
|
||||
##
|
||||
# @BlockdevRef
|
||||
# @BlockdevRef:
|
||||
#
|
||||
# Reference to a block device.
|
||||
#
|
||||
@@ -2616,7 +2617,7 @@
|
||||
|
||||
|
||||
##
|
||||
# @BlockErrorAction
|
||||
# @BlockErrorAction:
|
||||
#
|
||||
# An enumeration of action that has been taken when a DISK I/O occurs
|
||||
#
|
||||
@@ -2633,7 +2634,7 @@
|
||||
|
||||
|
||||
##
|
||||
# @BLOCK_IMAGE_CORRUPTED
|
||||
# @BLOCK_IMAGE_CORRUPTED:
|
||||
#
|
||||
# Emitted when a corruption has been detected in a disk image
|
||||
#
|
||||
@@ -2668,7 +2669,7 @@
|
||||
'fatal' : 'bool' } }
|
||||
|
||||
##
|
||||
# @BLOCK_IO_ERROR
|
||||
# @BLOCK_IO_ERROR:
|
||||
#
|
||||
# Emitted when a disk I/O error occurs
|
||||
#
|
||||
@@ -2704,7 +2705,7 @@
|
||||
'reason': 'str' } }
|
||||
|
||||
##
|
||||
# @BLOCK_JOB_COMPLETED
|
||||
# @BLOCK_JOB_COMPLETED:
|
||||
#
|
||||
# Emitted when a block job has completed
|
||||
#
|
||||
@@ -2736,7 +2737,7 @@
|
||||
'*error': 'str' } }
|
||||
|
||||
##
|
||||
# @BLOCK_JOB_CANCELLED
|
||||
# @BLOCK_JOB_CANCELLED:
|
||||
#
|
||||
# Emitted when a block job has been cancelled
|
||||
#
|
||||
@@ -2762,7 +2763,7 @@
|
||||
'speed' : 'int' } }
|
||||
|
||||
##
|
||||
# @BLOCK_JOB_ERROR
|
||||
# @BLOCK_JOB_ERROR:
|
||||
#
|
||||
# Emitted when a block job encounters an error
|
||||
#
|
||||
@@ -2781,7 +2782,7 @@
|
||||
'action' : 'BlockErrorAction' } }
|
||||
|
||||
##
|
||||
# @BLOCK_JOB_READY
|
||||
# @BLOCK_JOB_READY:
|
||||
#
|
||||
# Emitted when a block job is ready to complete
|
||||
#
|
||||
@@ -2809,7 +2810,8 @@
|
||||
'offset': 'int',
|
||||
'speed' : 'int' } }
|
||||
|
||||
# @PreallocMode
|
||||
##
|
||||
# @PreallocMode:
|
||||
#
|
||||
# Preallocation mode of QEMU image file
|
||||
#
|
||||
@@ -2821,13 +2823,13 @@
|
||||
# space is really available. @full preallocation also sets up
|
||||
# metadata correctly.
|
||||
#
|
||||
# Since 2.2
|
||||
# Since: 2.2
|
||||
##
|
||||
{ 'enum': 'PreallocMode',
|
||||
'data': [ 'off', 'metadata', 'falloc', 'full' ] }
|
||||
|
||||
##
|
||||
# @BLOCK_WRITE_THRESHOLD
|
||||
# @BLOCK_WRITE_THRESHOLD:
|
||||
#
|
||||
# Emitted when writes on block device reaches or exceeds the
|
||||
# configured write threshold. For thin-provisioned devices, this
|
||||
@@ -2850,7 +2852,7 @@
|
||||
'write-threshold': 'uint64' } }
|
||||
|
||||
##
|
||||
# @block-set-write-threshold
|
||||
# @block-set-write-threshold:
|
||||
#
|
||||
# Change the write threshold for a block drive. An event will be delivered
|
||||
# if a write to this block drive crosses the configured threshold.
|
||||
@@ -2868,7 +2870,7 @@
|
||||
'data': { 'node-name': 'str', 'write-threshold': 'uint64' } }
|
||||
|
||||
##
|
||||
# @x-blockdev-change
|
||||
# @x-blockdev-change:
|
||||
#
|
||||
# Dynamically reconfigure the block driver state graph. It can be used
|
||||
# to add, remove, insert or replace a graph node. Currently only the
|
||||
|
||||
+9
-9
@@ -40,7 +40,7 @@
|
||||
'data': ['auto', 'none', 'lba', 'large', 'rechs']}
|
||||
|
||||
##
|
||||
# @FloppyDriveType
|
||||
# @FloppyDriveType:
|
||||
#
|
||||
# Type of Floppy drive to be emulated by the Floppy Disk Controller.
|
||||
#
|
||||
@@ -56,7 +56,7 @@
|
||||
'data': ['144', '288', '120', 'none', 'auto']}
|
||||
|
||||
##
|
||||
# @BlockdevSnapshotInternal
|
||||
# @BlockdevSnapshotInternal:
|
||||
#
|
||||
# @device: the device name or node-name of a root node to generate the snapshot
|
||||
# from
|
||||
@@ -73,7 +73,7 @@
|
||||
'data': { 'device': 'str', 'name': 'str' } }
|
||||
|
||||
##
|
||||
# @blockdev-snapshot-internal-sync
|
||||
# @blockdev-snapshot-internal-sync:
|
||||
#
|
||||
# Synchronously take an internal snapshot of a block device, when the format
|
||||
# of the image used supports it.
|
||||
@@ -87,13 +87,13 @@
|
||||
# If the format of the image used does not support it,
|
||||
# BlockFormatFeatureNotSupported
|
||||
#
|
||||
# Since 1.7
|
||||
# Since: 1.7
|
||||
##
|
||||
{ 'command': 'blockdev-snapshot-internal-sync',
|
||||
'data': 'BlockdevSnapshotInternal' }
|
||||
|
||||
##
|
||||
# @blockdev-snapshot-delete-internal-sync
|
||||
# @blockdev-snapshot-delete-internal-sync:
|
||||
#
|
||||
# Synchronously delete an internal snapshot of a block device, when the format
|
||||
# of the image used support it. The snapshot is identified by name or id or
|
||||
@@ -114,7 +114,7 @@
|
||||
# BlockFormatFeatureNotSupported
|
||||
# If @id and @name are both not specified, GenericError
|
||||
#
|
||||
# Since 1.7
|
||||
# Since: 1.7
|
||||
##
|
||||
{ 'command': 'blockdev-snapshot-delete-internal-sync',
|
||||
'data': { 'device': 'str', '*id': 'str', '*name': 'str'},
|
||||
@@ -190,7 +190,7 @@
|
||||
{ 'command': 'nbd-server-stop' }
|
||||
|
||||
##
|
||||
# @DEVICE_TRAY_MOVED
|
||||
# @DEVICE_TRAY_MOVED:
|
||||
#
|
||||
# Emitted whenever the tray of a removable device is moved by the guest or by
|
||||
# HMP/QMP commands
|
||||
@@ -199,7 +199,7 @@
|
||||
# reasons, but it can be empty ("") if the image does not
|
||||
# have a device name associated.
|
||||
#
|
||||
# @id: The name or QOM path of the guest device
|
||||
# @id: The name or QOM path of the guest device (since 2.8)
|
||||
#
|
||||
# @tray-open: true if the tray has been opened or false if it has been closed
|
||||
#
|
||||
@@ -209,7 +209,7 @@
|
||||
'data': { 'device': 'str', 'id': 'str', 'tray-open': 'bool' } }
|
||||
|
||||
##
|
||||
# @QuorumOpType
|
||||
# @QuorumOpType:
|
||||
#
|
||||
# An enumeration of the quorum operation types
|
||||
#
|
||||
|
||||
+7
-7
@@ -3,7 +3,7 @@
|
||||
# QAPI common definitions
|
||||
|
||||
##
|
||||
# @QapiErrorClass
|
||||
# @QapiErrorClass:
|
||||
#
|
||||
# QEMU error classes
|
||||
#
|
||||
@@ -30,15 +30,15 @@
|
||||
'DeviceNotActive', 'DeviceNotFound', 'KVMMissingCap' ] }
|
||||
|
||||
##
|
||||
# @VersionTriple
|
||||
# @VersionTriple:
|
||||
#
|
||||
# A three-part version number.
|
||||
#
|
||||
# @qemu.major: The major version number.
|
||||
# @major: The major version number.
|
||||
#
|
||||
# @qemu.minor: The minor version number.
|
||||
# @minor: The minor version number.
|
||||
#
|
||||
# @qemu.micro: The micro version number.
|
||||
# @micro: The micro version number.
|
||||
#
|
||||
# Since: 2.4
|
||||
##
|
||||
@@ -101,7 +101,7 @@
|
||||
{ 'command': 'query-commands', 'returns': ['CommandInfo'] }
|
||||
|
||||
##
|
||||
# @OnOffAuto
|
||||
# @OnOffAuto:
|
||||
#
|
||||
# An enumeration of three options: on, off, and auto
|
||||
#
|
||||
@@ -117,7 +117,7 @@
|
||||
'data': [ 'auto', 'on', 'off' ] }
|
||||
|
||||
##
|
||||
# @OnOffSplit
|
||||
# @OnOffSplit:
|
||||
#
|
||||
# An enumeration of three values: on, off, and split
|
||||
#
|
||||
|
||||
+18
-18
@@ -3,7 +3,7 @@
|
||||
# QAPI crypto definitions
|
||||
|
||||
##
|
||||
# QCryptoTLSCredsEndpoint:
|
||||
# @QCryptoTLSCredsEndpoint:
|
||||
#
|
||||
# The type of network endpoint that will be using the credentials.
|
||||
# Most types of credential require different setup / structures
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
|
||||
##
|
||||
# QCryptoSecretFormat:
|
||||
# @QCryptoSecretFormat:
|
||||
#
|
||||
# The data format that the secret is provided in
|
||||
#
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
|
||||
##
|
||||
# QCryptoHashAlgorithm:
|
||||
# @QCryptoHashAlgorithm:
|
||||
#
|
||||
# The supported algorithms for computing content digests
|
||||
#
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
|
||||
##
|
||||
# QCryptoCipherAlgorithm:
|
||||
# @QCryptoCipherAlgorithm:
|
||||
#
|
||||
# The supported algorithms for content encryption ciphers
|
||||
#
|
||||
@@ -82,7 +82,7 @@
|
||||
|
||||
|
||||
##
|
||||
# QCryptoCipherMode:
|
||||
# @QCryptoCipherMode:
|
||||
#
|
||||
# The supported modes for content encryption ciphers
|
||||
#
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
|
||||
##
|
||||
# QCryptoIVGenAlgorithm:
|
||||
# @QCryptoIVGenAlgorithm:
|
||||
#
|
||||
# The supported algorithms for generating initialization
|
||||
# vectors for full disk encryption. The 'plain' generator
|
||||
@@ -116,7 +116,7 @@
|
||||
'data': ['plain', 'plain64', 'essiv']}
|
||||
|
||||
##
|
||||
# QCryptoBlockFormat:
|
||||
# @QCryptoBlockFormat:
|
||||
#
|
||||
# The supported full disk encryption formats
|
||||
#
|
||||
@@ -131,7 +131,7 @@
|
||||
'data': ['qcow', 'luks']}
|
||||
|
||||
##
|
||||
# QCryptoBlockOptionsBase:
|
||||
# @QCryptoBlockOptionsBase:
|
||||
#
|
||||
# The common options that apply to all full disk
|
||||
# encryption formats
|
||||
@@ -144,7 +144,7 @@
|
||||
'data': { 'format': 'QCryptoBlockFormat' }}
|
||||
|
||||
##
|
||||
# QCryptoBlockOptionsQCow:
|
||||
# @QCryptoBlockOptionsQCow:
|
||||
#
|
||||
# The options that apply to QCow/QCow2 AES-CBC encryption format
|
||||
#
|
||||
@@ -158,7 +158,7 @@
|
||||
'data': { '*key-secret': 'str' }}
|
||||
|
||||
##
|
||||
# QCryptoBlockOptionsLUKS:
|
||||
# @QCryptoBlockOptionsLUKS:
|
||||
#
|
||||
# The options that apply to LUKS encryption format
|
||||
#
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
|
||||
##
|
||||
# QCryptoBlockCreateOptionsLUKS:
|
||||
# @QCryptoBlockCreateOptionsLUKS:
|
||||
#
|
||||
# The options that apply to LUKS encryption format initialization
|
||||
#
|
||||
@@ -202,7 +202,7 @@
|
||||
|
||||
|
||||
##
|
||||
# QCryptoBlockOpenOptions:
|
||||
# @QCryptoBlockOpenOptions:
|
||||
#
|
||||
# The options that are available for all encryption formats
|
||||
# when opening an existing volume
|
||||
@@ -217,7 +217,7 @@
|
||||
|
||||
|
||||
##
|
||||
# QCryptoBlockCreateOptions:
|
||||
# @QCryptoBlockCreateOptions:
|
||||
#
|
||||
# The options that are available for all encryption formats
|
||||
# when initializing a new volume
|
||||
@@ -232,7 +232,7 @@
|
||||
|
||||
|
||||
##
|
||||
# QCryptoBlockInfoBase:
|
||||
# @QCryptoBlockInfoBase:
|
||||
#
|
||||
# The common information that applies to all full disk
|
||||
# encryption formats
|
||||
@@ -246,7 +246,7 @@
|
||||
|
||||
|
||||
##
|
||||
# QCryptoBlockInfoLUKSSlot:
|
||||
# @QCryptoBlockInfoLUKSSlot:
|
||||
#
|
||||
# Information about the LUKS block encryption key
|
||||
# slot options
|
||||
@@ -266,7 +266,7 @@
|
||||
|
||||
|
||||
##
|
||||
# QCryptoBlockInfoLUKS:
|
||||
# @QCryptoBlockInfoLUKS:
|
||||
#
|
||||
# Information about the LUKS block encryption options
|
||||
#
|
||||
@@ -294,7 +294,7 @@
|
||||
'slots': [ 'QCryptoBlockInfoLUKSSlot' ] }}
|
||||
|
||||
##
|
||||
# QCryptoBlockInfoQCow:
|
||||
# @QCryptoBlockInfoQCow:
|
||||
#
|
||||
# Information about the QCow block encryption options
|
||||
#
|
||||
@@ -305,7 +305,7 @@
|
||||
|
||||
|
||||
##
|
||||
# QCryptoBlockInfo:
|
||||
# @QCryptoBlockInfo:
|
||||
#
|
||||
# Information about the block encryption options
|
||||
#
|
||||
|
||||
+29
-29
@@ -1,5 +1,5 @@
|
||||
##
|
||||
# @SHUTDOWN
|
||||
# @SHUTDOWN:
|
||||
#
|
||||
# Emitted when the virtual machine has shut down, indicating that qemu is
|
||||
# about to exit.
|
||||
@@ -12,7 +12,7 @@
|
||||
{ 'event': 'SHUTDOWN' }
|
||||
|
||||
##
|
||||
# @POWERDOWN
|
||||
# @POWERDOWN:
|
||||
#
|
||||
# Emitted when the virtual machine is powered down through the power control
|
||||
# system, such as via ACPI.
|
||||
@@ -22,7 +22,7 @@
|
||||
{ 'event': 'POWERDOWN' }
|
||||
|
||||
##
|
||||
# @RESET
|
||||
# @RESET:
|
||||
#
|
||||
# Emitted when the virtual machine is reset
|
||||
#
|
||||
@@ -31,7 +31,7 @@
|
||||
{ 'event': 'RESET' }
|
||||
|
||||
##
|
||||
# @STOP
|
||||
# @STOP:
|
||||
#
|
||||
# Emitted when the virtual machine is stopped
|
||||
#
|
||||
@@ -40,7 +40,7 @@
|
||||
{ 'event': 'STOP' }
|
||||
|
||||
##
|
||||
# @RESUME
|
||||
# @RESUME:
|
||||
#
|
||||
# Emitted when the virtual machine resumes execution
|
||||
#
|
||||
@@ -49,7 +49,7 @@
|
||||
{ 'event': 'RESUME' }
|
||||
|
||||
##
|
||||
# @SUSPEND
|
||||
# @SUSPEND:
|
||||
#
|
||||
# Emitted when guest enters a hardware suspension state, for example, S3 state,
|
||||
# which is sometimes called standby state
|
||||
@@ -59,7 +59,7 @@
|
||||
{ 'event': 'SUSPEND' }
|
||||
|
||||
##
|
||||
# @SUSPEND_DISK
|
||||
# @SUSPEND_DISK:
|
||||
#
|
||||
# Emitted when guest enters a hardware suspension state with data saved on
|
||||
# disk, for example, S4 state, which is sometimes called hibernate state
|
||||
@@ -71,7 +71,7 @@
|
||||
{ 'event': 'SUSPEND_DISK' }
|
||||
|
||||
##
|
||||
# @WAKEUP
|
||||
# @WAKEUP:
|
||||
#
|
||||
# Emitted when the guest has woken up from suspend state and is running
|
||||
#
|
||||
@@ -80,7 +80,7 @@
|
||||
{ 'event': 'WAKEUP' }
|
||||
|
||||
##
|
||||
# @RTC_CHANGE
|
||||
# @RTC_CHANGE:
|
||||
#
|
||||
# Emitted when the guest changes the RTC time.
|
||||
#
|
||||
@@ -93,7 +93,7 @@
|
||||
'data': { 'offset': 'int' } }
|
||||
|
||||
##
|
||||
# @WATCHDOG
|
||||
# @WATCHDOG:
|
||||
#
|
||||
# Emitted when the watchdog device's timer is expired
|
||||
#
|
||||
@@ -108,7 +108,7 @@
|
||||
'data': { 'action': 'WatchdogExpirationAction' } }
|
||||
|
||||
##
|
||||
# @DEVICE_DELETED
|
||||
# @DEVICE_DELETED:
|
||||
#
|
||||
# Emitted whenever the device removal completion is acknowledged by the guest.
|
||||
# At this point, it's safe to reuse the specified device ID. Device removal can
|
||||
@@ -124,7 +124,7 @@
|
||||
'data': { '*device': 'str', 'path': 'str' } }
|
||||
|
||||
##
|
||||
# @NIC_RX_FILTER_CHANGED
|
||||
# @NIC_RX_FILTER_CHANGED:
|
||||
#
|
||||
# Emitted once until the 'query-rx-filter' command is executed, the first event
|
||||
# will always be emitted
|
||||
@@ -139,7 +139,7 @@
|
||||
'data': { '*name': 'str', 'path': 'str' } }
|
||||
|
||||
##
|
||||
# @VNC_CONNECTED
|
||||
# @VNC_CONNECTED:
|
||||
#
|
||||
# Emitted when a VNC client establishes a connection
|
||||
#
|
||||
@@ -157,7 +157,7 @@
|
||||
'client': 'VncBasicInfo' } }
|
||||
|
||||
##
|
||||
# @VNC_INITIALIZED
|
||||
# @VNC_INITIALIZED:
|
||||
#
|
||||
# Emitted after authentication takes place (if any) and the VNC session is
|
||||
# made active
|
||||
@@ -173,7 +173,7 @@
|
||||
'client': 'VncClientInfo' } }
|
||||
|
||||
##
|
||||
# @VNC_DISCONNECTED
|
||||
# @VNC_DISCONNECTED:
|
||||
#
|
||||
# Emitted when the connection is closed
|
||||
#
|
||||
@@ -188,7 +188,7 @@
|
||||
'client': 'VncClientInfo' } }
|
||||
|
||||
##
|
||||
# @SPICE_CONNECTED
|
||||
# @SPICE_CONNECTED:
|
||||
#
|
||||
# Emitted when a SPICE client establishes a connection
|
||||
#
|
||||
@@ -203,7 +203,7 @@
|
||||
'client': 'SpiceBasicInfo' } }
|
||||
|
||||
##
|
||||
# @SPICE_INITIALIZED
|
||||
# @SPICE_INITIALIZED:
|
||||
#
|
||||
# Emitted after initial handshake and authentication takes place (if any)
|
||||
# and the SPICE channel is up and running
|
||||
@@ -219,7 +219,7 @@
|
||||
'client': 'SpiceChannel' } }
|
||||
|
||||
##
|
||||
# @SPICE_DISCONNECTED
|
||||
# @SPICE_DISCONNECTED:
|
||||
#
|
||||
# Emitted when the SPICE connection is closed
|
||||
#
|
||||
@@ -234,7 +234,7 @@
|
||||
'client': 'SpiceBasicInfo' } }
|
||||
|
||||
##
|
||||
# @SPICE_MIGRATE_COMPLETED
|
||||
# @SPICE_MIGRATE_COMPLETED:
|
||||
#
|
||||
# Emitted when SPICE migration has completed
|
||||
#
|
||||
@@ -243,7 +243,7 @@
|
||||
{ 'event': 'SPICE_MIGRATE_COMPLETED' }
|
||||
|
||||
##
|
||||
# @MIGRATION
|
||||
# @MIGRATION:
|
||||
#
|
||||
# Emitted when a migration event happens
|
||||
#
|
||||
@@ -255,7 +255,7 @@
|
||||
'data': {'status': 'MigrationStatus'}}
|
||||
|
||||
##
|
||||
# @MIGRATION_PASS
|
||||
# @MIGRATION_PASS:
|
||||
#
|
||||
# Emitted from the source side of a migration at the start of each pass
|
||||
# (when it syncs the dirty bitmap)
|
||||
@@ -268,7 +268,7 @@
|
||||
'data': { 'pass': 'int' } }
|
||||
|
||||
##
|
||||
# @ACPI_DEVICE_OST
|
||||
# @ACPI_DEVICE_OST:
|
||||
#
|
||||
# Emitted when guest executes ACPI _OST method.
|
||||
#
|
||||
@@ -280,7 +280,7 @@
|
||||
'data': { 'info': 'ACPIOSTInfo' } }
|
||||
|
||||
##
|
||||
# @BALLOON_CHANGE
|
||||
# @BALLOON_CHANGE:
|
||||
#
|
||||
# Emitted when the guest changes the actual BALLOON level. This value is
|
||||
# equivalent to the @actual field return by the 'query-balloon' command
|
||||
@@ -293,7 +293,7 @@
|
||||
'data': { 'actual': 'int' } }
|
||||
|
||||
##
|
||||
# @GUEST_PANICKED
|
||||
# @GUEST_PANICKED:
|
||||
#
|
||||
# Emitted when guest OS panic is detected
|
||||
#
|
||||
@@ -305,7 +305,7 @@
|
||||
'data': { 'action': 'GuestPanicAction' } }
|
||||
|
||||
##
|
||||
# @QUORUM_FAILURE
|
||||
# @QUORUM_FAILURE:
|
||||
#
|
||||
# Emitted by the Quorum block driver if it fails to establish a quorum
|
||||
#
|
||||
@@ -321,7 +321,7 @@
|
||||
'data': { 'reference': 'str', 'sector-num': 'int', 'sectors-count': 'int' } }
|
||||
|
||||
##
|
||||
# @QUORUM_REPORT_BAD
|
||||
# @QUORUM_REPORT_BAD:
|
||||
#
|
||||
# Emitted to report a corruption of a Quorum file
|
||||
#
|
||||
@@ -345,7 +345,7 @@
|
||||
'sector-num': 'int', 'sectors-count': 'int' } }
|
||||
|
||||
##
|
||||
# @VSERPORT_CHANGE
|
||||
# @VSERPORT_CHANGE:
|
||||
#
|
||||
# Emitted when the guest opens or closes a virtio-serial port.
|
||||
#
|
||||
@@ -359,7 +359,7 @@
|
||||
'data': { 'id': 'str', 'open': 'bool' } }
|
||||
|
||||
##
|
||||
# @MEM_UNPLUG_ERROR
|
||||
# @MEM_UNPLUG_ERROR:
|
||||
#
|
||||
# Emitted when memory hot unplug error occurs.
|
||||
#
|
||||
@@ -373,7 +373,7 @@
|
||||
'data': { 'device': 'str', 'msg': 'str' } }
|
||||
|
||||
##
|
||||
# @DUMP_COMPLETED
|
||||
# @DUMP_COMPLETED:
|
||||
#
|
||||
# Emitted when background dump has completed
|
||||
#
|
||||
|
||||
+14
-14
@@ -11,7 +11,7 @@
|
||||
# See the COPYING file in the top-level directory.
|
||||
|
||||
##
|
||||
# @query-qmp-schema
|
||||
# @query-qmp-schema:
|
||||
#
|
||||
# Command query-qmp-schema exposes the QMP wire ABI as an array of
|
||||
# SchemaInfo. This lets QMP clients figure out what commands and
|
||||
@@ -49,7 +49,7 @@
|
||||
'gen': false } # just to simplify qmp_query_json()
|
||||
|
||||
##
|
||||
# @SchemaMetaType
|
||||
# @SchemaMetaType:
|
||||
#
|
||||
# This is a @SchemaInfo's meta type, i.e. the kind of entity it
|
||||
# describes.
|
||||
@@ -75,7 +75,7 @@
|
||||
'command', 'event' ] }
|
||||
|
||||
##
|
||||
# @SchemaInfo
|
||||
# @SchemaInfo:
|
||||
#
|
||||
# @name: the entity's name, inherited from @base.
|
||||
# Commands and events have the name defined in the QAPI schema.
|
||||
@@ -105,7 +105,7 @@
|
||||
'event': 'SchemaInfoEvent' } }
|
||||
|
||||
##
|
||||
# @SchemaInfoBuiltin
|
||||
# @SchemaInfoBuiltin:
|
||||
#
|
||||
# Additional SchemaInfo members for meta-type 'builtin'.
|
||||
#
|
||||
@@ -117,7 +117,7 @@
|
||||
'data': { 'json-type': 'JSONType' } }
|
||||
|
||||
##
|
||||
# @JSONType
|
||||
# @JSONType:
|
||||
#
|
||||
# The four primitive and two structured types according to RFC 7159
|
||||
# section 1, plus 'int' (split off 'number'), plus the obvious top
|
||||
@@ -130,7 +130,7 @@
|
||||
'object', 'array', 'value' ] }
|
||||
|
||||
##
|
||||
# @SchemaInfoEnum
|
||||
# @SchemaInfoEnum:
|
||||
#
|
||||
# Additional SchemaInfo members for meta-type 'enum'.
|
||||
#
|
||||
@@ -144,7 +144,7 @@
|
||||
'data': { 'values': ['str'] } }
|
||||
|
||||
##
|
||||
# @SchemaInfoArray
|
||||
# @SchemaInfoArray:
|
||||
#
|
||||
# Additional SchemaInfo members for meta-type 'array'.
|
||||
#
|
||||
@@ -158,7 +158,7 @@
|
||||
'data': { 'element-type': 'str' } }
|
||||
|
||||
##
|
||||
# @SchemaInfoObject
|
||||
# @SchemaInfoObject:
|
||||
#
|
||||
# Additional SchemaInfo members for meta-type 'object'.
|
||||
#
|
||||
@@ -183,7 +183,7 @@
|
||||
'*variants': [ 'SchemaInfoObjectVariant' ] } }
|
||||
|
||||
##
|
||||
# @SchemaInfoObjectMember
|
||||
# @SchemaInfoObjectMember:
|
||||
#
|
||||
# An object member.
|
||||
#
|
||||
@@ -206,7 +206,7 @@
|
||||
# @default's type must be null or match @type
|
||||
|
||||
##
|
||||
# @SchemaInfoObjectVariant
|
||||
# @SchemaInfoObjectVariant:
|
||||
#
|
||||
# The variant members for a value of the type tag.
|
||||
#
|
||||
@@ -221,7 +221,7 @@
|
||||
'data': { 'case': 'str', 'type': 'str' } }
|
||||
|
||||
##
|
||||
# @SchemaInfoAlternate
|
||||
# @SchemaInfoAlternate:
|
||||
#
|
||||
# Additional SchemaInfo members for meta-type 'alternate'.
|
||||
#
|
||||
@@ -237,7 +237,7 @@
|
||||
'data': { 'members': [ 'SchemaInfoAlternateMember' ] } }
|
||||
|
||||
##
|
||||
# @SchemaInfoAlternateMember
|
||||
# @SchemaInfoAlternateMember:
|
||||
#
|
||||
# An alternate member.
|
||||
#
|
||||
@@ -249,7 +249,7 @@
|
||||
'data': { 'type': 'str' } }
|
||||
|
||||
##
|
||||
# @SchemaInfoCommand
|
||||
# @SchemaInfoCommand:
|
||||
#
|
||||
# Additional SchemaInfo members for meta-type 'command'.
|
||||
#
|
||||
@@ -266,7 +266,7 @@
|
||||
'data': { 'arg-type': 'str', 'ret-type': 'str' } }
|
||||
|
||||
##
|
||||
# @SchemaInfoEvent
|
||||
# @SchemaInfoEvent:
|
||||
#
|
||||
# Additional SchemaInfo members for meta-type 'event'.
|
||||
#
|
||||
|
||||
+4
-13
@@ -35,21 +35,12 @@ static void timestamp_put(QDict *qdict)
|
||||
int err;
|
||||
QObject *obj;
|
||||
qemu_timeval tv;
|
||||
int64_t sec, usec;
|
||||
|
||||
err = qemu_gettimeofday(&tv);
|
||||
if (err < 0) {
|
||||
/* Put -1 to indicate failure of getting host time */
|
||||
sec = -1;
|
||||
usec = -1;
|
||||
} else {
|
||||
sec = tv.tv_sec;
|
||||
usec = tv.tv_usec;
|
||||
}
|
||||
|
||||
obj = qobject_from_jsonf("{ 'seconds': %" PRId64 ", "
|
||||
"'microseconds': %" PRId64 " }",
|
||||
sec, usec);
|
||||
/* Put -1 to indicate failure of getting host time */
|
||||
obj = qobject_from_jsonf("{ 'seconds': %lld, 'microseconds': %lld }",
|
||||
err < 0 ? -1LL : (long long)tv.tv_sec,
|
||||
err < 0 ? -1LL : (long long)tv.tv_usec);
|
||||
qdict_put_obj(qdict, "timestamp", obj);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
##
|
||||
# @Rocker:
|
||||
# @RockerSwitch:
|
||||
#
|
||||
# Rocker switch information.
|
||||
#
|
||||
|
||||
+4
-4
@@ -17,7 +17,7 @@
|
||||
#
|
||||
# @enabled: The event is dynamically enabled.
|
||||
#
|
||||
# Since 2.2
|
||||
# Since: 2.2
|
||||
##
|
||||
{ 'enum': 'TraceEventState',
|
||||
'data': ['unavailable', 'disabled', 'enabled'] }
|
||||
@@ -34,7 +34,7 @@
|
||||
# An event is per-vCPU if it has the "vcpu" property in the "trace-events"
|
||||
# files.
|
||||
#
|
||||
# Since 2.2
|
||||
# Since: 2.2
|
||||
##
|
||||
{ 'struct': 'TraceEventInfo',
|
||||
'data': {'name': 'str', 'state': 'TraceEventState', 'vcpu': 'bool'} }
|
||||
@@ -58,7 +58,7 @@
|
||||
# exact match, @vcpu is given and the event does not have the "vcpu" property,
|
||||
# an error is returned.
|
||||
#
|
||||
# Since 2.2
|
||||
# Since: 2.2
|
||||
##
|
||||
{ 'command': 'trace-event-get-state',
|
||||
'data': {'name': 'str', '*vcpu': 'int'},
|
||||
@@ -83,7 +83,7 @@
|
||||
# match, @vcpu is given and the event does not have the "vcpu" property, an
|
||||
# error is returned.
|
||||
#
|
||||
# Since 2.2
|
||||
# Since: 2.2
|
||||
##
|
||||
{ 'command': 'trace-event-set-state',
|
||||
'data': {'name': 'str', 'enable': 'bool', '*ignore-unavailable': 'bool',
|
||||
|
||||
+45
-14
@@ -1041,35 +1041,55 @@ GlusterFS is an user space distributed file system.
|
||||
|
||||
You can boot from the GlusterFS disk image with the command:
|
||||
@example
|
||||
qemu-system-x86_64 -drive file=gluster[+@var{transport}]://[@var{server}[:@var{port}]]/@var{volname}/@var{image}[?socket=...]
|
||||
URI:
|
||||
qemu-system-x86_64 -drive file=gluster[+@var{type}]://[@var{host}[:@var{port}]]/@var{volume}/@var{path}
|
||||
[?socket=...][,file.debug=9][,file.logfile=...]
|
||||
|
||||
JSON:
|
||||
qemu-system-x86_64 'json:@{"driver":"qcow2",
|
||||
"file":@{"driver":"gluster",
|
||||
"volume":"testvol","path":"a.img","debug":9,"logfile":"...",
|
||||
"server":[@{"type":"tcp","host":"...","port":"..."@},
|
||||
@{"type":"unix","socket":"..."@}]@}@}'
|
||||
@end example
|
||||
|
||||
@var{gluster} is the protocol.
|
||||
|
||||
@var{transport} specifies the transport type used to connect to gluster
|
||||
@var{type} specifies the transport type used to connect to gluster
|
||||
management daemon (glusterd). Valid transport types are
|
||||
tcp, unix and rdma. If a transport type isn't specified, then tcp
|
||||
type is assumed.
|
||||
tcp and unix. In the URI form, if a transport type isn't specified,
|
||||
then tcp type is assumed.
|
||||
|
||||
@var{server} specifies the server where the volume file specification for
|
||||
the given volume resides. This can be either hostname, ipv4 address
|
||||
or ipv6 address. ipv6 address needs to be within square brackets [ ].
|
||||
If transport type is unix, then @var{server} field should not be specified.
|
||||
@var{host} specifies the server where the volume file specification for
|
||||
the given volume resides. This can be either a hostname or an ipv4 address.
|
||||
If transport type is unix, then @var{host} field should not be specified.
|
||||
Instead @var{socket} field needs to be populated with the path to unix domain
|
||||
socket.
|
||||
|
||||
@var{port} is the port number on which glusterd is listening. This is optional
|
||||
and if not specified, QEMU will send 0 which will make gluster to use the
|
||||
default port. If the transport type is unix, then @var{port} should not be
|
||||
specified.
|
||||
and if not specified, it defaults to port 24007. If the transport type is unix,
|
||||
then @var{port} should not be specified.
|
||||
|
||||
@var{volume} is the name of the gluster volume which contains the disk image.
|
||||
|
||||
@var{path} is the path to the actual disk image that resides on gluster volume.
|
||||
|
||||
@var{debug} is the logging level of the gluster protocol driver. Debug levels
|
||||
are 0-9, with 9 being the most verbose, and 0 representing no debugging output.
|
||||
The default level is 4. The current logging levels defined in the gluster source
|
||||
are 0 - None, 1 - Emergency, 2 - Alert, 3 - Critical, 4 - Error, 5 - Warning,
|
||||
6 - Notice, 7 - Info, 8 - Debug, 9 - Trace
|
||||
|
||||
@var{logfile} is a commandline option to mention log file path which helps in
|
||||
logging to the specified file and also help in persisting the gfapi logs. The
|
||||
default is stderr.
|
||||
|
||||
|
||||
@var{volname} is the name of the gluster volume which contains the disk image.
|
||||
|
||||
@var{image} is the path to the actual disk image that resides on gluster volume.
|
||||
|
||||
You can create a GlusterFS disk image with the command:
|
||||
@example
|
||||
qemu-img create gluster://@var{server}/@var{volname}/@var{image} @var{size}
|
||||
qemu-img create gluster://@var{host}/@var{volume}/@var{path} @var{size}
|
||||
@end example
|
||||
|
||||
Examples
|
||||
@@ -1082,6 +1102,17 @@ qemu-system-x86_64 -drive file=gluster+tcp://[1:2:3:4:5:6:7:8]:24007/testvol/dir
|
||||
qemu-system-x86_64 -drive file=gluster+tcp://server.domain.com:24007/testvol/dir/a.img
|
||||
qemu-system-x86_64 -drive file=gluster+unix:///testvol/dir/a.img?socket=/tmp/glusterd.socket
|
||||
qemu-system-x86_64 -drive file=gluster+rdma://1.2.3.4:24007/testvol/a.img
|
||||
qemu-system-x86_64 -drive file=gluster://1.2.3.4/testvol/a.img,file.debug=9,file.logfile=/var/log/qemu-gluster.log
|
||||
qemu-system-x86_64 'json:@{"driver":"qcow2",
|
||||
"file":@{"driver":"gluster",
|
||||
"volume":"testvol","path":"a.img",
|
||||
"debug":9,"logfile":"/var/log/qemu-gluster.log",
|
||||
"server":[@{"type":"tcp","host":"1.2.3.4","port":24007@},
|
||||
@{"type":"unix","socket":"/var/run/glusterd.socket"@}]@}@}'
|
||||
qemu-system-x86_64 -drive driver=qcow2,file.driver=gluster,file.volume=testvol,file.path=/path/a.img,
|
||||
file.debug=9,file.logfile=/var/log/qemu-gluster.log,
|
||||
file.server.0.type=tcp,file.server.0.host=1.2.3.4,file.server.0.port=24007,
|
||||
file.server.1.type=unix,file.server.1.socket=/var/run/glusterd.socket
|
||||
@end example
|
||||
|
||||
@node disk_images_ssh
|
||||
|
||||
+23
-2
@@ -2595,13 +2595,34 @@ TCP, Unix Domain Sockets and RDMA transport protocols.
|
||||
|
||||
Syntax for specifying a VM disk image on GlusterFS volume is
|
||||
@example
|
||||
gluster[+transport]://[server[:port]]/volname/image[?socket=...]
|
||||
|
||||
URI:
|
||||
gluster[+type]://[host[:port]]/volume/path[?socket=...][,debug=N][,logfile=...]
|
||||
|
||||
JSON:
|
||||
'json:@{"driver":"qcow2","file":@{"driver":"gluster","volume":"testvol","path":"a.img","debug":N,"logfile":"...",
|
||||
@ "server":[@{"type":"tcp","host":"...","port":"..."@},
|
||||
@ @{"type":"unix","socket":"..."@}]@}@}'
|
||||
@end example
|
||||
|
||||
|
||||
Example
|
||||
@example
|
||||
qemu-system-x86_64 --drive file=gluster://192.0.2.1/testvol/a.img
|
||||
URI:
|
||||
qemu-system-x86_64 --drive file=gluster://192.0.2.1/testvol/a.img,
|
||||
@ file.debug=9,file.logfile=/var/log/qemu-gluster.log
|
||||
|
||||
JSON:
|
||||
qemu-system-x86_64 'json:@{"driver":"qcow2",
|
||||
@ "file":@{"driver":"gluster",
|
||||
@ "volume":"testvol","path":"a.img",
|
||||
@ "debug":9,"logfile":"/var/log/qemu-gluster.log",
|
||||
@ "server":[@{"type":"tcp","host":"1.2.3.4","port":24007@},
|
||||
@ @{"type":"unix","socket":"/var/run/glusterd.socket"@}]@}@}'
|
||||
qemu-system-x86_64 -drive driver=qcow2,file.driver=gluster,file.volume=testvol,file.path=/path/a.img,
|
||||
@ file.debug=9,file.logfile=/var/log/qemu-gluster.log,
|
||||
@ file.server.0.type=tcp,file.server.0.host=1.2.3.4,file.server.0.port=24007,
|
||||
@ file.server.1.type=unix,file.server.1.socket=/var/run/glusterd.socket
|
||||
@end example
|
||||
|
||||
See also @url{http://www.gluster.org}.
|
||||
|
||||
+27
-25
@@ -102,7 +102,7 @@
|
||||
#
|
||||
# Returns: Time in nanoseconds.
|
||||
#
|
||||
# Since 1.5
|
||||
# Since: 1.5
|
||||
##
|
||||
{ 'command': 'guest-get-time',
|
||||
'returns': 'int' }
|
||||
@@ -149,13 +149,13 @@
|
||||
# @success-response: whether command returns a response on success
|
||||
# (since 1.7)
|
||||
#
|
||||
# Since 1.1.0
|
||||
# Since: 1.1.0
|
||||
##
|
||||
{ 'struct': 'GuestAgentCommandInfo',
|
||||
'data': { 'name': 'str', 'enabled': 'bool', 'success-response': 'bool' } }
|
||||
|
||||
##
|
||||
# @GuestAgentInfo
|
||||
# @GuestAgentInfo:
|
||||
#
|
||||
# Information about guest agent.
|
||||
#
|
||||
@@ -163,7 +163,7 @@
|
||||
#
|
||||
# @supported_commands: Information about guest agent commands
|
||||
#
|
||||
# Since 0.15.0
|
||||
# Since: 0.15.0
|
||||
##
|
||||
{ 'struct': 'GuestAgentInfo',
|
||||
'data': { 'version': 'str',
|
||||
@@ -203,7 +203,7 @@
|
||||
#
|
||||
# Open a file in the guest and retrieve a file handle for it
|
||||
#
|
||||
# @filepath: Full path to the file in the guest to open.
|
||||
# @path: Full path to the file in the guest to open.
|
||||
#
|
||||
# @mode: #optional open mode, as per fopen(), "r" is the default.
|
||||
#
|
||||
@@ -230,7 +230,7 @@
|
||||
'data': { 'handle': 'int' } }
|
||||
|
||||
##
|
||||
# @GuestFileRead
|
||||
# @GuestFileRead:
|
||||
#
|
||||
# Result of guest agent file-read operation
|
||||
#
|
||||
@@ -264,7 +264,7 @@
|
||||
'returns': 'GuestFileRead' }
|
||||
|
||||
##
|
||||
# @GuestFileWrite
|
||||
# @GuestFileWrite:
|
||||
#
|
||||
# Result of guest agent file-write operation
|
||||
#
|
||||
@@ -300,7 +300,7 @@
|
||||
|
||||
|
||||
##
|
||||
# @GuestFileSeek
|
||||
# @GuestFileSeek:
|
||||
#
|
||||
# Result of guest agent file-seek operation
|
||||
#
|
||||
@@ -378,7 +378,7 @@
|
||||
'data': { 'handle': 'int' } }
|
||||
|
||||
##
|
||||
# @GuestFsFreezeStatus
|
||||
# @GuestFsfreezeStatus:
|
||||
#
|
||||
# An enumeration of filesystem freeze states
|
||||
#
|
||||
@@ -455,7 +455,7 @@
|
||||
'returns': 'int' }
|
||||
|
||||
##
|
||||
# @GuestFilesystemTrimResult
|
||||
# @GuestFilesystemTrimResult:
|
||||
#
|
||||
# @path: path that was trimmed
|
||||
# @error: an error message when trim failed
|
||||
@@ -469,7 +469,7 @@
|
||||
'*trimmed': 'int', '*minimum': 'int', '*error': 'str'} }
|
||||
|
||||
##
|
||||
# @GuestFilesystemTrimResponse
|
||||
# @GuestFilesystemTrimResponse:
|
||||
#
|
||||
# @paths: list of @GuestFilesystemTrimResult per path that was trimmed
|
||||
#
|
||||
@@ -501,7 +501,7 @@
|
||||
'returns': 'GuestFilesystemTrimResponse' }
|
||||
|
||||
##
|
||||
# @guest-suspend-disk
|
||||
# @guest-suspend-disk:
|
||||
#
|
||||
# Suspend guest to disk.
|
||||
#
|
||||
@@ -529,7 +529,7 @@
|
||||
{ 'command': 'guest-suspend-disk', 'success-response': false }
|
||||
|
||||
##
|
||||
# @guest-suspend-ram
|
||||
# @guest-suspend-ram:
|
||||
#
|
||||
# Suspend guest to ram.
|
||||
#
|
||||
@@ -561,7 +561,7 @@
|
||||
{ 'command': 'guest-suspend-ram', 'success-response': false }
|
||||
|
||||
##
|
||||
# @guest-suspend-hybrid
|
||||
# @guest-suspend-hybrid:
|
||||
#
|
||||
# Save guest state to disk and suspend to ram.
|
||||
#
|
||||
@@ -720,7 +720,7 @@
|
||||
'returns': 'int' }
|
||||
|
||||
##
|
||||
# @GuestDiskBusType
|
||||
# @GuestDiskBusType:
|
||||
#
|
||||
# An enumeration of bus type of disks
|
||||
#
|
||||
@@ -770,7 +770,7 @@
|
||||
# @GuestDiskAddress:
|
||||
#
|
||||
# @pci-controller: controller's PCI address
|
||||
# @type: bus type
|
||||
# @bus-type: bus type
|
||||
# @bus: bus id
|
||||
# @target: target id
|
||||
# @unit: unit id
|
||||
@@ -783,7 +783,7 @@
|
||||
'bus': 'int', 'target': 'int', 'unit': 'int'} }
|
||||
|
||||
##
|
||||
# @GuestFilesystemInfo
|
||||
# @GuestFilesystemInfo:
|
||||
#
|
||||
# @name: disk name
|
||||
# @mountpoint: mount point path
|
||||
@@ -811,7 +811,7 @@
|
||||
'returns': ['GuestFilesystemInfo'] }
|
||||
|
||||
##
|
||||
# @guest-set-user-password
|
||||
# @guest-set-user-password:
|
||||
#
|
||||
# @username: the user account whose password to change
|
||||
# @password: the new password entry string, base64 encoded
|
||||
@@ -832,11 +832,12 @@
|
||||
#
|
||||
# Returns: Nothing on success.
|
||||
#
|
||||
# Since 2.3
|
||||
# Since: 2.3
|
||||
##
|
||||
{ 'command': 'guest-set-user-password',
|
||||
'data': { 'username': 'str', 'password': 'str', 'crypted': 'bool' } }
|
||||
|
||||
##
|
||||
# @GuestMemoryBlock:
|
||||
#
|
||||
# @phys-index: Arbitrary guest-specific unique identifier of the MEMORY BLOCK.
|
||||
@@ -872,7 +873,7 @@
|
||||
'returns': ['GuestMemoryBlock'] }
|
||||
|
||||
##
|
||||
# @GuestMemoryBlockResponseType
|
||||
# @GuestMemoryBlockResponseType:
|
||||
#
|
||||
# An enumeration of memory block operation result.
|
||||
#
|
||||
@@ -936,6 +937,7 @@
|
||||
'data': {'mem-blks': ['GuestMemoryBlock'] },
|
||||
'returns': ['GuestMemoryBlockResponse'] }
|
||||
|
||||
##
|
||||
# @GuestMemoryBlockInfo:
|
||||
#
|
||||
# @size: the size (in bytes) of the guest memory blocks,
|
||||
@@ -952,14 +954,14 @@
|
||||
#
|
||||
# Get information relating to guest memory blocks.
|
||||
#
|
||||
# Returns: memory block size in bytes.
|
||||
# Returns: @GuestMemoryBlockInfo
|
||||
#
|
||||
# Since 2.3
|
||||
# Since: 2.3
|
||||
##
|
||||
{ 'command': 'guest-get-memory-block-info',
|
||||
'returns': 'GuestMemoryBlockInfo' }
|
||||
|
||||
##
|
||||
# @GuestExecStatus:
|
||||
#
|
||||
# @exited: true if process has already terminated.
|
||||
@@ -982,7 +984,7 @@
|
||||
'*out-data': 'str', '*err-data': 'str',
|
||||
'*out-truncated': 'bool', '*err-truncated': 'bool' }}
|
||||
##
|
||||
# @guest-exec-status
|
||||
# @guest-exec-status:
|
||||
#
|
||||
# Check status of process associated with PID retrieved via guest-exec.
|
||||
# Reap the process and associated metadata if it has exited.
|
||||
@@ -991,7 +993,7 @@
|
||||
#
|
||||
# Returns: GuestExecStatus on success.
|
||||
#
|
||||
# Since 2.5
|
||||
# Since: 2.5
|
||||
##
|
||||
{ 'command': 'guest-exec-status',
|
||||
'data': { 'pid': 'int' },
|
||||
@@ -1001,7 +1003,7 @@
|
||||
# @GuestExec:
|
||||
# @pid: pid of child process in guest OS
|
||||
#
|
||||
#Since: 2.5
|
||||
# Since: 2.5
|
||||
##
|
||||
{ 'struct': 'GuestExec',
|
||||
'data': { 'pid': 'int'} }
|
||||
|
||||
+19
-23
@@ -1839,41 +1839,37 @@ static void disas_b_exc_sys(DisasContext *s, uint32_t insn)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Load/Store exclusive instructions are implemented by remembering
|
||||
* the value/address loaded, and seeing if these are the same
|
||||
* when the store is performed. This is not actually the architecturally
|
||||
* mandated semantics, but it works for typical guest code sequences
|
||||
* and avoids having to monitor regular stores.
|
||||
*
|
||||
* The store exclusive uses the atomic cmpxchg primitives to avoid
|
||||
* races in multi-threaded linux-user and when MTTCG softmmu is
|
||||
* enabled.
|
||||
*/
|
||||
static void gen_load_exclusive(DisasContext *s, int rt, int rt2,
|
||||
TCGv_i64 addr, int size, bool is_pair)
|
||||
{
|
||||
TCGv_i64 tmp = tcg_temp_new_i64();
|
||||
TCGMemOp be = s->be_data;
|
||||
TCGMemOp memop = s->be_data + size;
|
||||
|
||||
g_assert(size <= 3);
|
||||
tcg_gen_qemu_ld_i64(tmp, addr, get_mem_index(s), memop);
|
||||
|
||||
if (is_pair) {
|
||||
TCGv_i64 addr2 = tcg_temp_new_i64();
|
||||
TCGv_i64 hitmp = tcg_temp_new_i64();
|
||||
|
||||
if (size == 3) {
|
||||
TCGv_i64 addr2 = tcg_temp_new_i64();
|
||||
|
||||
tcg_gen_qemu_ld_i64(tmp, addr, get_mem_index(s),
|
||||
MO_64 | MO_ALIGN_16 | be);
|
||||
tcg_gen_addi_i64(addr2, addr, 8);
|
||||
tcg_gen_qemu_ld_i64(hitmp, addr2, get_mem_index(s),
|
||||
MO_64 | MO_ALIGN | be);
|
||||
tcg_temp_free_i64(addr2);
|
||||
} else {
|
||||
g_assert(size == 2);
|
||||
tcg_gen_qemu_ld_i64(tmp, addr, get_mem_index(s),
|
||||
MO_64 | MO_ALIGN | be);
|
||||
if (be == MO_LE) {
|
||||
tcg_gen_extr32_i64(tmp, hitmp, tmp);
|
||||
} else {
|
||||
tcg_gen_extr32_i64(hitmp, tmp, tmp);
|
||||
}
|
||||
}
|
||||
|
||||
g_assert(size >= 2);
|
||||
tcg_gen_addi_i64(addr2, addr, 1 << size);
|
||||
tcg_gen_qemu_ld_i64(hitmp, addr2, get_mem_index(s), memop);
|
||||
tcg_temp_free_i64(addr2);
|
||||
tcg_gen_mov_i64(cpu_exclusive_high, hitmp);
|
||||
tcg_gen_mov_i64(cpu_reg(s, rt2), hitmp);
|
||||
tcg_temp_free_i64(hitmp);
|
||||
} else {
|
||||
tcg_gen_qemu_ld_i64(tmp, addr, get_mem_index(s), size | MO_ALIGN | be);
|
||||
}
|
||||
|
||||
tcg_gen_mov_i64(cpu_exclusive_val, tmp);
|
||||
|
||||
@@ -3477,7 +3477,7 @@ target_ulong helper_dextp(target_ulong ac, target_ulong size, CPUMIPSState *env)
|
||||
|
||||
if (sub >= -1) {
|
||||
temp = (tempB << (64 - len)) | (tempA >> len);
|
||||
temp = temp & ((0x01 << (size + 1)) - 1);
|
||||
temp = temp & ((1ULL << (size + 1)) - 1);
|
||||
set_DSPControl_efi(0, env);
|
||||
} else {
|
||||
set_DSPControl_efi(1, env);
|
||||
@@ -3506,7 +3506,7 @@ target_ulong helper_dextpdp(target_ulong ac, target_ulong size,
|
||||
|
||||
if (sub >= -1) {
|
||||
temp = (tempB << (64 - len)) | (tempA >> len);
|
||||
temp = temp & ((0x01 << (size + 1)) - 1);
|
||||
temp = temp & ((1ULL << (size + 1)) - 1);
|
||||
set_DSPControl_pos(sub, env);
|
||||
set_DSPControl_efi(0, env);
|
||||
} else {
|
||||
|
||||
@@ -3871,6 +3871,7 @@ static void gen_loongson_multimedia(DisasContext *ctx, int rd, int rs, int rt)
|
||||
break;
|
||||
}
|
||||
|
||||
check_cp1_enabled(ctx);
|
||||
gen_load_fpr64(ctx, t0, rs);
|
||||
gen_load_fpr64(ctx, t1, rt);
|
||||
|
||||
@@ -3945,8 +3946,11 @@ static void gen_loongson_multimedia(DisasContext *ctx, int rd, int rs, int rt)
|
||||
LMI_DIRECT(XOR_CP2, xor, xor);
|
||||
LMI_DIRECT(NOR_CP2, nor, nor);
|
||||
LMI_DIRECT(AND_CP2, and, and);
|
||||
LMI_DIRECT(PANDN, pandn, andc);
|
||||
LMI_DIRECT(OR, or, or);
|
||||
LMI_DIRECT(OR_CP2, or, or);
|
||||
|
||||
case OPC_PANDN:
|
||||
tcg_gen_andc_i64(t0, t1, t0);
|
||||
break;
|
||||
|
||||
case OPC_PINSRH_0:
|
||||
tcg_gen_deposit_i64(t0, t0, t1, 0, 16);
|
||||
|
||||
@@ -16,6 +16,7 @@ test-bitops
|
||||
test-blockjob
|
||||
test-blockjob-txn
|
||||
test-bufferiszero
|
||||
test-char
|
||||
test-clone-visitor
|
||||
test-coroutine
|
||||
test-crypto-afsplit
|
||||
|
||||
+3
-3
@@ -964,7 +964,7 @@ static void vararg_number(void)
|
||||
QInt *qint;
|
||||
QFloat *qfloat;
|
||||
int value = 0x2342;
|
||||
int64_t value64 = 0x2342342343LL;
|
||||
long long value_ll = 0x2342342343LL;
|
||||
double valuef = 2.323423423;
|
||||
|
||||
obj = qobject_from_jsonf("%d", value);
|
||||
@@ -976,12 +976,12 @@ static void vararg_number(void)
|
||||
|
||||
QDECREF(qint);
|
||||
|
||||
obj = qobject_from_jsonf("%" PRId64, value64);
|
||||
obj = qobject_from_jsonf("%lld", value_ll);
|
||||
g_assert(obj != NULL);
|
||||
g_assert(qobject_type(obj) == QTYPE_QINT);
|
||||
|
||||
qint = qobject_to_qint(obj);
|
||||
g_assert(qint_get_int(qint) == value64);
|
||||
g_assert(qint_get_int(qint) == value_ll);
|
||||
|
||||
QDECREF(qint);
|
||||
|
||||
|
||||
+25
-16
@@ -46,7 +46,7 @@ _supported_proto file
|
||||
_supported_os Linux
|
||||
|
||||
|
||||
# Four passes:
|
||||
# Four main passes:
|
||||
# 0: Two-layer backing chain, commit to upper backing file (implicitly)
|
||||
# (in this case, the top image will be emptied)
|
||||
# 1: Two-layer backing chain, commit to upper backing file (explicitly)
|
||||
@@ -56,22 +56,30 @@ _supported_os Linux
|
||||
# 3: Two-layer backing chain, commit to lower backing file
|
||||
# (in this case, the top image will implicitly stay unchanged)
|
||||
#
|
||||
# Each pass is run twice, since qcow2 has different code paths for cleaning
|
||||
# an image depending on whether it has a snapshot.
|
||||
#
|
||||
# 020 already tests committing, so this only tests whether image chains are
|
||||
# working properly and that all images above the base are emptied; therefore,
|
||||
# no complicated patterns are necessary
|
||||
# no complicated patterns are necessary. Check near the 2G mark, as qcow2
|
||||
# has been buggy at that boundary in the past.
|
||||
for i in 0 1 2 3; do
|
||||
for j in 0 1; do
|
||||
|
||||
echo
|
||||
echo "=== Test pass $i ==="
|
||||
echo "=== Test pass $i.$j ==="
|
||||
echo
|
||||
|
||||
TEST_IMG="$TEST_IMG.base" _make_test_img 64M
|
||||
TEST_IMG="$TEST_IMG.itmd" _make_test_img -b "$TEST_IMG.base" 64M
|
||||
_make_test_img -b "$TEST_IMG.itmd" 64M
|
||||
TEST_IMG="$TEST_IMG.base" _make_test_img 2100M
|
||||
TEST_IMG="$TEST_IMG.itmd" _make_test_img -b "$TEST_IMG.base" 2100M
|
||||
_make_test_img -b "$TEST_IMG.itmd" 2100M
|
||||
if [ $j -eq 0 ]; then
|
||||
$QEMU_IMG snapshot -c snap "$TEST_IMG"
|
||||
fi
|
||||
|
||||
$QEMU_IO -c 'write -P 1 0 192k' "$TEST_IMG.base" | _filter_qemu_io
|
||||
$QEMU_IO -c 'write -P 2 64k 128k' "$TEST_IMG.itmd" | _filter_qemu_io
|
||||
$QEMU_IO -c 'write -P 3 128k 64k' "$TEST_IMG" | _filter_qemu_io
|
||||
$QEMU_IO -c 'write -P 1 0x7ffd0000 192k' "$TEST_IMG.base" | _filter_qemu_io
|
||||
$QEMU_IO -c 'write -P 2 0x7ffe0000 128k' "$TEST_IMG.itmd" | _filter_qemu_io
|
||||
$QEMU_IO -c 'write -P 3 0x7fff0000 64k' "$TEST_IMG" | _filter_qemu_io
|
||||
|
||||
if [ $i -lt 3 ]; then
|
||||
if [ $i == 0 ]; then
|
||||
@@ -88,12 +96,12 @@ if [ $i -lt 3 ]; then
|
||||
fi
|
||||
|
||||
# Bottom should be unchanged
|
||||
$QEMU_IO -c 'read -P 1 0 192k' "$TEST_IMG.base" | _filter_qemu_io
|
||||
$QEMU_IO -c 'read -P 1 0x7ffd0000 192k' "$TEST_IMG.base" | _filter_qemu_io
|
||||
|
||||
# Intermediate should contain changes from top
|
||||
$QEMU_IO -c 'read -P 1 0 64k' "$TEST_IMG.itmd" | _filter_qemu_io
|
||||
$QEMU_IO -c 'read -P 2 64k 64k' "$TEST_IMG.itmd" | _filter_qemu_io
|
||||
$QEMU_IO -c 'read -P 3 128k 64k' "$TEST_IMG.itmd" | _filter_qemu_io
|
||||
$QEMU_IO -c 'read -P 1 0x7ffd0000 64k' "$TEST_IMG.itmd" | _filter_qemu_io
|
||||
$QEMU_IO -c 'read -P 2 0x7ffe0000 64k' "$TEST_IMG.itmd" | _filter_qemu_io
|
||||
$QEMU_IO -c 'read -P 3 0x7fff0000 64k' "$TEST_IMG.itmd" | _filter_qemu_io
|
||||
|
||||
# And in pass 0, the top image should be empty, whereas in both other passes
|
||||
# it should be unchanged (which is both checked by qemu-img map)
|
||||
@@ -101,9 +109,9 @@ else
|
||||
$QEMU_IMG commit -b "$TEST_IMG.base" "$TEST_IMG"
|
||||
|
||||
# Bottom should contain all changes
|
||||
$QEMU_IO -c 'read -P 1 0 64k' "$TEST_IMG.base" | _filter_qemu_io
|
||||
$QEMU_IO -c 'read -P 2 64k 64k' "$TEST_IMG.base" | _filter_qemu_io
|
||||
$QEMU_IO -c 'read -P 3 128k 64k' "$TEST_IMG.base" | _filter_qemu_io
|
||||
$QEMU_IO -c 'read -P 1 0x7ffd0000 64k' "$TEST_IMG.base" | _filter_qemu_io
|
||||
$QEMU_IO -c 'read -P 2 0x7ffe0000 64k' "$TEST_IMG.base" | _filter_qemu_io
|
||||
$QEMU_IO -c 'read -P 3 0x7fff0000 64k' "$TEST_IMG.base" | _filter_qemu_io
|
||||
|
||||
# Both top and intermediate should be unchanged
|
||||
fi
|
||||
@@ -113,6 +121,7 @@ $QEMU_IMG map "$TEST_IMG.itmd" | _filter_qemu_img_map
|
||||
$QEMU_IMG map "$TEST_IMG" | _filter_qemu_img_map
|
||||
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
# success, all done
|
||||
|
||||
+183
-66
@@ -1,119 +1,236 @@
|
||||
QA output created by 097
|
||||
|
||||
=== Test pass 0 ===
|
||||
=== Test pass 0.0 ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
|
||||
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.itmd
|
||||
wrote 196608/196608 bytes at offset 0
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
|
||||
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
|
||||
wrote 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 131072/131072 bytes at offset 65536
|
||||
wrote 131072/131072 bytes at offset 2147352576
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 65536/65536 bytes at offset 131072
|
||||
wrote 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Image committed.
|
||||
read 196608/196608 bytes at offset 0
|
||||
read 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 0
|
||||
read 65536/65536 bytes at offset 2147287040
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 65536
|
||||
read 65536/65536 bytes at offset 2147352576
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 131072
|
||||
read 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Offset Length File
|
||||
0 0x30000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
|
||||
Offset Length File
|
||||
0 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
Offset Length File
|
||||
0 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
|
||||
=== Test pass 1 ===
|
||||
=== Test pass 0.1 ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
|
||||
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.itmd
|
||||
wrote 196608/196608 bytes at offset 0
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
|
||||
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
|
||||
wrote 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 131072/131072 bytes at offset 65536
|
||||
wrote 131072/131072 bytes at offset 2147352576
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 65536/65536 bytes at offset 131072
|
||||
wrote 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Image committed.
|
||||
read 196608/196608 bytes at offset 0
|
||||
read 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 0
|
||||
read 65536/65536 bytes at offset 2147287040
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 65536
|
||||
read 65536/65536 bytes at offset 2147352576
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 131072
|
||||
read 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Offset Length File
|
||||
0 0x30000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
|
||||
Offset Length File
|
||||
0 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
Offset Length File
|
||||
0 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x10000 0x10000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x20000 0x10000 TEST_DIR/t.IMGFMT
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
|
||||
=== Test pass 2 ===
|
||||
=== Test pass 1.0 ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
|
||||
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.itmd
|
||||
wrote 196608/196608 bytes at offset 0
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
|
||||
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
|
||||
wrote 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 131072/131072 bytes at offset 65536
|
||||
wrote 131072/131072 bytes at offset 2147352576
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 65536/65536 bytes at offset 131072
|
||||
wrote 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Image committed.
|
||||
read 196608/196608 bytes at offset 0
|
||||
read 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 0
|
||||
read 65536/65536 bytes at offset 2147287040
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 65536
|
||||
read 65536/65536 bytes at offset 2147352576
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 131072
|
||||
read 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Offset Length File
|
||||
0 0x30000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
|
||||
Offset Length File
|
||||
0 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
Offset Length File
|
||||
0 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x10000 0x10000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x20000 0x10000 TEST_DIR/t.IMGFMT
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
|
||||
|
||||
=== Test pass 3 ===
|
||||
=== Test pass 1.1 ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
|
||||
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.itmd
|
||||
wrote 196608/196608 bytes at offset 0
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
|
||||
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
|
||||
wrote 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 131072/131072 bytes at offset 65536
|
||||
wrote 131072/131072 bytes at offset 2147352576
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 65536/65536 bytes at offset 131072
|
||||
wrote 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Image committed.
|
||||
read 65536/65536 bytes at offset 0
|
||||
read 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 2147287040
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 65536
|
||||
read 65536/65536 bytes at offset 2147352576
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 131072
|
||||
read 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Offset Length File
|
||||
0 0x30000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
|
||||
Offset Length File
|
||||
0 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
Offset Length File
|
||||
0 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x10000 0x10000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x20000 0x10000 TEST_DIR/t.IMGFMT
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
|
||||
|
||||
=== Test pass 2.0 ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
|
||||
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
|
||||
wrote 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 131072/131072 bytes at offset 2147352576
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Image committed.
|
||||
read 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 2147287040
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 2147352576
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Offset Length File
|
||||
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
|
||||
Offset Length File
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
Offset Length File
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
|
||||
|
||||
=== Test pass 2.1 ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
|
||||
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
|
||||
wrote 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 131072/131072 bytes at offset 2147352576
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Image committed.
|
||||
read 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 2147287040
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 2147352576
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Offset Length File
|
||||
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
|
||||
Offset Length File
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
Offset Length File
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
|
||||
|
||||
=== Test pass 3.0 ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
|
||||
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
|
||||
wrote 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 131072/131072 bytes at offset 2147352576
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Image committed.
|
||||
read 65536/65536 bytes at offset 2147287040
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 2147352576
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Offset Length File
|
||||
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
|
||||
Offset Length File
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
Offset Length File
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
|
||||
|
||||
=== Test pass 3.1 ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
|
||||
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
|
||||
wrote 196608/196608 bytes at offset 2147287040
|
||||
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 131072/131072 bytes at offset 2147352576
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Image committed.
|
||||
read 65536/65536 bytes at offset 2147287040
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 2147352576
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 2147418112
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Offset Length File
|
||||
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
|
||||
Offset Length File
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
|
||||
Offset Length File
|
||||
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
|
||||
0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
|
||||
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
|
||||
*** done
|
||||
+5
-2
@@ -837,6 +837,7 @@ static void test_qga_guest_exec(gconstpointer fix)
|
||||
int64_t pid, now, exitcode;
|
||||
gsize len;
|
||||
bool exited;
|
||||
char *cmd;
|
||||
|
||||
/* exec 'echo foo bar' */
|
||||
ret = qmp_fd(fixture->fd, "{'execute': 'guest-exec', 'arguments': {"
|
||||
@@ -851,9 +852,10 @@ static void test_qga_guest_exec(gconstpointer fix)
|
||||
|
||||
/* wait for completion */
|
||||
now = g_get_monotonic_time();
|
||||
cmd = g_strdup_printf("{'execute': 'guest-exec-status',"
|
||||
" 'arguments': { 'pid': %" PRId64 " } }", pid);
|
||||
do {
|
||||
ret = qmp_fd(fixture->fd, "{'execute': 'guest-exec-status',"
|
||||
" 'arguments': { 'pid': %" PRId64 " } }", pid);
|
||||
ret = qmp_fd(fixture->fd, cmd);
|
||||
g_assert_nonnull(ret);
|
||||
val = qdict_get_qdict(ret, "return");
|
||||
exited = qdict_get_bool(val, "exited");
|
||||
@@ -863,6 +865,7 @@ static void test_qga_guest_exec(gconstpointer fix)
|
||||
} while (!exited &&
|
||||
g_get_monotonic_time() < now + 5 * G_TIME_SPAN_SECOND);
|
||||
g_assert(exited);
|
||||
g_free(cmd);
|
||||
|
||||
/* check stdout */
|
||||
exitcode = qdict_get_int(val, "exitcode");
|
||||
|
||||
@@ -83,10 +83,11 @@ static Visitor *visitor_input_test_init_raw(TestInputVisitorData *data,
|
||||
static void test_visitor_in_int(TestInputVisitorData *data,
|
||||
const void *unused)
|
||||
{
|
||||
int64_t res = 0, value = -42;
|
||||
int64_t res = 0;
|
||||
int value = -42;
|
||||
Visitor *v;
|
||||
|
||||
v = visitor_input_test_init(data, "%" PRId64, value);
|
||||
v = visitor_input_test_init(data, "%d", value);
|
||||
|
||||
visit_type_int(v, NULL, &res, &error_abort);
|
||||
g_assert_cmpint(res, ==, value);
|
||||
|
||||
@@ -1581,6 +1581,9 @@ static void gd_change_page(GtkNotebook *nb, gpointer arg1, guint arg2,
|
||||
TRUE);
|
||||
}
|
||||
gtk_widget_set_sensitive(s->grab_item, on_vga);
|
||||
#ifdef CONFIG_VTE
|
||||
gtk_widget_set_sensitive(s->copy_item, vc->type == GD_VC_VTE);
|
||||
#endif
|
||||
|
||||
gd_update_windowsize(vc);
|
||||
gd_update_cursor(vc);
|
||||
@@ -2246,6 +2249,11 @@ void gtk_display_init(DisplayState *ds, bool full_screen, bool grab_on_hover)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_VTE
|
||||
gtk_widget_set_sensitive(s->copy_item,
|
||||
gd_vc_find_current(s)->type == GD_VC_VTE);
|
||||
#endif
|
||||
|
||||
if (full_screen) {
|
||||
gtk_menu_item_activate(GTK_MENU_ITEM(s->full_screen_item));
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user