mirror of https://gitee.com/openkylin/qemu.git
trivial patches for 2015-03-04
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJU/n5LAAoJEL7lnXSkw9fbexYH/3/oXotpOj/iAZzu7Feirne0 OuiPejS5k9awYkZir6fiOGopFsbYVafFfikh35CSkFTM9z5dbFVq0Kb6M3oGQaRQ qotXKYjAlc1SOvjPRvPmosgqdZpoOc2ZfalqzFpuhh7GcYtrNsPceVQsbyJISper u+av15JiZqaTLv9YO+RSXEiQJEwSld4h32Jz0LOpdH9zXN3yxoWJaZdFe/4Um0jn cse8HnO3aVxhUHFka2pAGIg2JJKzNYcniju1J5dEMY2P/65V7DYg/y1wbmo5Ro4q h0mYg4QsnG6Nc1AUCR2HAECu3hViqKx9QWj/YbnLekuY/YGNDdRfoS2k7moDmkg= =iK8H -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/mjt/tags/pull-trivial-patches-2015-03-04' into staging trivial patches for 2015-03-04 # gpg: Signature made Tue Mar 10 05:16:59 2015 GMT using RSA key ID A4C3D7DB # gpg: Good signature from "Michael Tokarev <mjt@tls.msk.ru>" # gpg: aka "Michael Tokarev <mjt@corpit.ru>" # gpg: aka "Michael Tokarev <mjt@debian.org>" * remotes/mjt/tags/pull-trivial-patches-2015-03-04: (44 commits) 9pfs: remove useless return gdbstub: avoid possible NULL pointer dereference milkymist-pfpu: fix GCC 5.0.0 aggressive-loop-optimizations warning fix GCC 5.0.0 logical-not-parentheses warnings migration: Fix coding style (whitespace issues) oslib-posix: Fix compiler warning (-Wclobbered) and simplify the code disas/microblaze: Fix warnings caused by missing 'static' attribute disas/arm: Fix warnings caused by missing 'static' attribute vhost_net: Add missing 'static' attribute e500: fix memory leak gitignore: Ignore new tests gitignore: Track common.env in iotests gitignore sysbus: fix memory leak milkymist.c: fix memory leak macio: fix possible memory leak sparc/leon3.c: fix memory leak nbd: fix resource leak qemu-char: add cyrillic key 'numerosign' to Russian keymap qemu-char: add cyrillic characters 'numerosign' to VNC keysyms qapi-schema: Fix SpiceChannel docs ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
8437f7be3b
|
@ -109,4 +109,3 @@ cscope.*
|
||||||
tags
|
tags
|
||||||
TAGS
|
TAGS
|
||||||
*~
|
*~
|
||||||
/tests/qemu-iotests/common.env
|
|
||||||
|
|
|
@ -291,7 +291,7 @@ static int qemu_archipelago_init(BDRVArchipelagoState *s)
|
||||||
|
|
||||||
ret = qemu_archipelago_xseg_init(s);
|
ret = qemu_archipelago_xseg_init(s);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
error_report("Cannot initialize XSEG. Aborting...\n");
|
error_report("Cannot initialize XSEG. Aborting...");
|
||||||
goto err_exit;
|
goto err_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -645,7 +645,7 @@ static int qemu_archipelago_create_volume(Error **errp, const char *volname,
|
||||||
|
|
||||||
target = xseg_get_target(xseg, req);
|
target = xseg_get_target(xseg, req);
|
||||||
if (!target) {
|
if (!target) {
|
||||||
error_setg(errp, "Cannot get XSEG target.\n");
|
error_setg(errp, "Cannot get XSEG target.");
|
||||||
goto err_exit;
|
goto err_exit;
|
||||||
}
|
}
|
||||||
memcpy(target, volname, targetlen);
|
memcpy(target, volname, targetlen);
|
||||||
|
@ -889,7 +889,7 @@ static BlockAIOCB *qemu_archipelago_aio_rw(BlockDriverState *bs,
|
||||||
return &aio_cb->common;
|
return &aio_cb->common;
|
||||||
|
|
||||||
err_exit:
|
err_exit:
|
||||||
error_report("qemu_archipelago_aio_rw(): I/O Error\n");
|
error_report("qemu_archipelago_aio_rw(): I/O Error");
|
||||||
qemu_aio_unref(aio_cb);
|
qemu_aio_unref(aio_cb);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -274,6 +274,7 @@ static int nbd_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
*/
|
*/
|
||||||
sock = nbd_establish_connection(bs, errp);
|
sock = nbd_establish_connection(bs, errp);
|
||||||
if (sock < 0) {
|
if (sock < 0) {
|
||||||
|
g_free(export);
|
||||||
return sock;
|
return sock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
cpus.c
4
cpus.c
|
@ -1474,6 +1474,7 @@ void qmp_memsave(int64_t addr, int64_t size, const char *filename,
|
||||||
uint32_t l;
|
uint32_t l;
|
||||||
CPUState *cpu;
|
CPUState *cpu;
|
||||||
uint8_t buf[1024];
|
uint8_t buf[1024];
|
||||||
|
int64_t orig_addr = addr, orig_size = size;
|
||||||
|
|
||||||
if (!has_cpu) {
|
if (!has_cpu) {
|
||||||
cpu_index = 0;
|
cpu_index = 0;
|
||||||
|
@ -1497,7 +1498,8 @@ void qmp_memsave(int64_t addr, int64_t size, const char *filename,
|
||||||
if (l > size)
|
if (l > size)
|
||||||
l = size;
|
l = size;
|
||||||
if (cpu_memory_rw_debug(cpu, addr, buf, l, 0) != 0) {
|
if (cpu_memory_rw_debug(cpu, addr, buf, l, 0) != 0) {
|
||||||
error_setg(errp, "Invalid addr 0x%016" PRIx64 "specified", addr);
|
error_setg(errp, "Invalid addr 0x%016" PRIx64 "/size %" PRId64
|
||||||
|
" specified", orig_addr, orig_size);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
if (fwrite(buf, 1, l, f) != l) {
|
if (fwrite(buf, 1, l, f) != l) {
|
||||||
|
|
128
disas/arm.c
128
disas/arm.c
|
@ -1549,10 +1549,6 @@ enum map_type {
|
||||||
MAP_DATA
|
MAP_DATA
|
||||||
};
|
};
|
||||||
|
|
||||||
enum map_type last_type;
|
|
||||||
int last_mapping_sym = -1;
|
|
||||||
bfd_vma last_mapping_addr = 0;
|
|
||||||
|
|
||||||
/* Decode a bitfield of the form matching regexp (N(-N)?,)*N(-N)?.
|
/* Decode a bitfield of the form matching regexp (N(-N)?,)*N(-N)?.
|
||||||
Returns pointer to following character of the format string and
|
Returns pointer to following character of the format string and
|
||||||
fills in *VALUEP and *WIDTHP with the extracted value and number of
|
fills in *VALUEP and *WIDTHP with the extracted value and number of
|
||||||
|
@ -3878,135 +3874,11 @@ print_insn_arm (bfd_vma pc, struct disassemble_info *info)
|
||||||
int is_data = false;
|
int is_data = false;
|
||||||
unsigned int size = 4;
|
unsigned int size = 4;
|
||||||
void (*printer) (bfd_vma, struct disassemble_info *, long);
|
void (*printer) (bfd_vma, struct disassemble_info *, long);
|
||||||
#if 0
|
|
||||||
bfd_boolean found = false;
|
|
||||||
|
|
||||||
if (info->disassembler_options)
|
|
||||||
{
|
|
||||||
parse_disassembler_options (info->disassembler_options);
|
|
||||||
|
|
||||||
/* To avoid repeated parsing of these options, we remove them here. */
|
|
||||||
info->disassembler_options = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* First check the full symtab for a mapping symbol, even if there
|
|
||||||
are no usable non-mapping symbols for this address. */
|
|
||||||
if (info->symtab != NULL
|
|
||||||
&& bfd_asymbol_flavour (*info->symtab) == bfd_target_elf_flavour)
|
|
||||||
{
|
|
||||||
bfd_vma addr;
|
|
||||||
int n;
|
|
||||||
int last_sym = -1;
|
|
||||||
enum map_type type = MAP_ARM;
|
|
||||||
|
|
||||||
if (pc <= last_mapping_addr)
|
|
||||||
last_mapping_sym = -1;
|
|
||||||
is_thumb = (last_type == MAP_THUMB);
|
|
||||||
found = false;
|
|
||||||
/* Start scanning at the start of the function, or wherever
|
|
||||||
we finished last time. */
|
|
||||||
n = info->symtab_pos + 1;
|
|
||||||
if (n < last_mapping_sym)
|
|
||||||
n = last_mapping_sym;
|
|
||||||
|
|
||||||
/* Scan up to the location being disassembled. */
|
|
||||||
for (; n < info->symtab_size; n++)
|
|
||||||
{
|
|
||||||
addr = bfd_asymbol_value (info->symtab[n]);
|
|
||||||
if (addr > pc)
|
|
||||||
break;
|
|
||||||
if ((info->section == NULL
|
|
||||||
|| info->section == info->symtab[n]->section)
|
|
||||||
&& get_sym_code_type (info, n, &type))
|
|
||||||
{
|
|
||||||
last_sym = n;
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!found)
|
|
||||||
{
|
|
||||||
n = info->symtab_pos;
|
|
||||||
if (n < last_mapping_sym - 1)
|
|
||||||
n = last_mapping_sym - 1;
|
|
||||||
|
|
||||||
/* No mapping symbol found at this address. Look backwards
|
|
||||||
for a preceding one. */
|
|
||||||
for (; n >= 0; n--)
|
|
||||||
{
|
|
||||||
if (get_sym_code_type (info, n, &type))
|
|
||||||
{
|
|
||||||
last_sym = n;
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
last_mapping_sym = last_sym;
|
|
||||||
last_type = type;
|
|
||||||
is_thumb = (last_type == MAP_THUMB);
|
|
||||||
is_data = (last_type == MAP_DATA);
|
|
||||||
|
|
||||||
/* Look a little bit ahead to see if we should print out
|
|
||||||
two or four bytes of data. If there's a symbol,
|
|
||||||
mapping or otherwise, after two bytes then don't
|
|
||||||
print more. */
|
|
||||||
if (is_data)
|
|
||||||
{
|
|
||||||
size = 4 - (pc & 3);
|
|
||||||
for (n = last_sym + 1; n < info->symtab_size; n++)
|
|
||||||
{
|
|
||||||
addr = bfd_asymbol_value (info->symtab[n]);
|
|
||||||
if (addr > pc)
|
|
||||||
{
|
|
||||||
if (addr - pc < size)
|
|
||||||
size = addr - pc;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* If the next symbol is after three bytes, we need to
|
|
||||||
print only part of the data, so that we can use either
|
|
||||||
.byte or .short. */
|
|
||||||
if (size == 3)
|
|
||||||
size = (pc & 1) ? 1 : 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (info->symbols != NULL)
|
|
||||||
{
|
|
||||||
if (bfd_asymbol_flavour (*info->symbols) == bfd_target_coff_flavour)
|
|
||||||
{
|
|
||||||
coff_symbol_type * cs;
|
|
||||||
|
|
||||||
cs = coffsymbol (*info->symbols);
|
|
||||||
is_thumb = ( cs->native->u.syment.n_sclass == C_THUMBEXT
|
|
||||||
|| cs->native->u.syment.n_sclass == C_THUMBSTAT
|
|
||||||
|| cs->native->u.syment.n_sclass == C_THUMBLABEL
|
|
||||||
|| cs->native->u.syment.n_sclass == C_THUMBEXTFUNC
|
|
||||||
|| cs->native->u.syment.n_sclass == C_THUMBSTATFUNC);
|
|
||||||
}
|
|
||||||
else if (bfd_asymbol_flavour (*info->symbols) == bfd_target_elf_flavour
|
|
||||||
&& !found)
|
|
||||||
{
|
|
||||||
/* If no mapping symbol has been found then fall back to the type
|
|
||||||
of the function symbol. */
|
|
||||||
elf_symbol_type * es;
|
|
||||||
unsigned int type;
|
|
||||||
|
|
||||||
es = *(elf_symbol_type **)(info->symbols);
|
|
||||||
type = ELF_ST_TYPE (es->internal_elf_sym.st_info);
|
|
||||||
|
|
||||||
is_thumb = (type == STT_ARM_TFUNC) || (type == STT_ARM_16BIT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
int little;
|
int little;
|
||||||
|
|
||||||
little = (info->endian == BFD_ENDIAN_LITTLE);
|
little = (info->endian == BFD_ENDIAN_LITTLE);
|
||||||
is_thumb |= (pc & 1);
|
is_thumb |= (pc & 1);
|
||||||
pc &= ~(bfd_vma)1;
|
pc &= ~(bfd_vma)1;
|
||||||
#endif
|
|
||||||
|
|
||||||
if (force_thumb)
|
if (force_thumb)
|
||||||
is_thumb = true;
|
is_thumb = true;
|
||||||
|
|
|
@ -275,7 +275,7 @@ enum microblaze_instr_type {
|
||||||
|
|
||||||
#define MAX_OPCODES 280
|
#define MAX_OPCODES 280
|
||||||
|
|
||||||
struct op_code_struct {
|
static struct op_code_struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
short inst_type; /* registers and immediate values involved */
|
short inst_type; /* registers and immediate values involved */
|
||||||
short inst_offset_type; /* immediate vals offset from PC? (= 1 for branches) */
|
short inst_offset_type; /* immediate vals offset from PC? (= 1 for branches) */
|
||||||
|
@ -567,10 +567,9 @@ struct op_code_struct {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* prefix for register names */
|
/* prefix for register names */
|
||||||
char register_prefix[] = "r";
|
static const char register_prefix[] = "r";
|
||||||
char special_register_prefix[] = "spr";
|
static const char fsl_register_prefix[] = "rfsl";
|
||||||
char fsl_register_prefix[] = "rfsl";
|
static const char pvr_register_prefix[] = "rpvr";
|
||||||
char pvr_register_prefix[] = "rpvr";
|
|
||||||
|
|
||||||
|
|
||||||
/* #defines for valid immediate range */
|
/* #defines for valid immediate range */
|
||||||
|
@ -738,7 +737,9 @@ get_field_special (long instr, struct op_code_struct * op)
|
||||||
default :
|
default :
|
||||||
{
|
{
|
||||||
if ( ((((instr & IMM_MASK) >> IMM_LOW) ^ op->immval_mask) & 0xE000) == REG_PVR_MASK) {
|
if ( ((((instr & IMM_MASK) >> IMM_LOW) ^ op->immval_mask) & 0xE000) == REG_PVR_MASK) {
|
||||||
sprintf(tmpstr, "%spvr%d", register_prefix, (unsigned short)(((instr & IMM_MASK) >> IMM_LOW) ^ op->immval_mask) ^ REG_PVR_MASK);
|
sprintf(tmpstr, "%s%u", pvr_register_prefix,
|
||||||
|
(unsigned short)(((instr & IMM_MASK) >> IMM_LOW) ^
|
||||||
|
op->immval_mask) ^ REG_PVR_MASK);
|
||||||
return(strdup(tmpstr));
|
return(strdup(tmpstr));
|
||||||
} else {
|
} else {
|
||||||
strcpy(spr, "pc");
|
strcpy(spr, "pc");
|
||||||
|
|
2
exec.c
2
exec.c
|
@ -1188,7 +1188,7 @@ static void *file_ram_alloc(RAMBlock *block,
|
||||||
|
|
||||||
error:
|
error:
|
||||||
if (mem_prealloc) {
|
if (mem_prealloc) {
|
||||||
error_report("%s\n", error_get_pretty(*errp));
|
error_report("%s", error_get_pretty(*errp));
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -1443,15 +1443,17 @@ void gdb_exit(CPUArchState *env, int code)
|
||||||
if (gdbserver_fd < 0 || s->fd < 0) {
|
if (gdbserver_fd < 0 || s->fd < 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (!s->chr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
|
snprintf(buf, sizeof(buf), "W%02x", (uint8_t)code);
|
||||||
put_packet(s, buf);
|
put_packet(s, buf);
|
||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
if (s->chr) {
|
qemu_chr_delete(s->chr);
|
||||||
qemu_chr_delete(s->chr);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -332,7 +332,6 @@ static ssize_t local_readlink(FsContext *fs_ctx, V9fsPath *fs_path,
|
||||||
tsize = read(fd, (void *)buf, bufsz);
|
tsize = read(fd, (void *)buf, bufsz);
|
||||||
} while (tsize == -1 && errno == EINTR);
|
} while (tsize == -1 && errno == EINTR);
|
||||||
close(fd);
|
close(fd);
|
||||||
return tsize;
|
|
||||||
} else if ((fs_ctx->export_flags & V9FS_SM_PASSTHROUGH) ||
|
} else if ((fs_ctx->export_flags & V9FS_SM_PASSTHROUGH) ||
|
||||||
(fs_ctx->export_flags & V9FS_SM_NONE)) {
|
(fs_ctx->export_flags & V9FS_SM_NONE)) {
|
||||||
buffer = rpath(fs_ctx, path);
|
buffer = rpath(fs_ctx, path);
|
||||||
|
|
|
@ -65,7 +65,7 @@ static void digic4_board_init(DigicBoard *board)
|
||||||
s->digic = DIGIC(object_new(TYPE_DIGIC));
|
s->digic = DIGIC(object_new(TYPE_DIGIC));
|
||||||
object_property_set_bool(OBJECT(s->digic), true, "realized", &err);
|
object_property_set_bool(OBJECT(s->digic), true, "realized", &err);
|
||||||
if (err != NULL) {
|
if (err != NULL) {
|
||||||
error_report("Couldn't realize DIGIC SoC: %s\n",
|
error_report("Couldn't realize DIGIC SoC: %s",
|
||||||
error_get_pretty(err));
|
error_get_pretty(err));
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -104,13 +104,13 @@ static void digic_load_rom(DigicBoardState *s, hwaddr addr,
|
||||||
char *fn = qemu_find_file(QEMU_FILE_TYPE_BIOS, filename);
|
char *fn = qemu_find_file(QEMU_FILE_TYPE_BIOS, filename);
|
||||||
|
|
||||||
if (!fn) {
|
if (!fn) {
|
||||||
error_report("Couldn't find rom image '%s'.\n", filename);
|
error_report("Couldn't find rom image '%s'.", filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
rom_size = load_image_targphys(fn, addr, max_size);
|
rom_size = load_image_targphys(fn, addr, max_size);
|
||||||
if (rom_size < 0 || rom_size > max_size) {
|
if (rom_size < 0 || rom_size > max_size) {
|
||||||
error_report("Couldn't load rom image '%s'.\n", filename);
|
error_report("Couldn't load rom image '%s'.", filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -393,7 +393,7 @@ static void nand_realize(DeviceState *dev, Error **errp)
|
||||||
nand_init_2048(s);
|
nand_init_2048(s);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error_setg(errp, "Unsupported NAND block size %#x\n",
|
error_setg(errp, "Unsupported NAND block size %#x",
|
||||||
1 << s->page_shift);
|
1 << s->page_shift);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,6 +91,8 @@ bool sysbus_has_irq(SysBusDevice *dev, int n)
|
||||||
ObjectProperty *r;
|
ObjectProperty *r;
|
||||||
|
|
||||||
r = object_property_find(OBJECT(dev), prop, NULL);
|
r = object_property_find(OBJECT(dev), prop, NULL);
|
||||||
|
g_free(prop);
|
||||||
|
|
||||||
return (r != NULL);
|
return (r != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1566,7 +1566,7 @@ static void pl330_realize(DeviceState *dev, Error **errp)
|
||||||
s->cfg[1] |= 5;
|
s->cfg[1] |= 5;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error_setg(errp, "Bad value for i-cache_len property: %" PRIx8 "\n",
|
error_setg(errp, "Bad value for i-cache_len property: %" PRIx8,
|
||||||
s->i_cache_len);
|
s->i_cache_len);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1601,7 +1601,7 @@ static void pl330_realize(DeviceState *dev, Error **errp)
|
||||||
s->cfg[CFG_CRD] |= 0x4;
|
s->cfg[CFG_CRD] |= 0x4;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error_setg(errp, "Bad value for data_width property: %" PRIx8 "\n",
|
error_setg(errp, "Bad value for data_width property: %" PRIx8,
|
||||||
s->data_width);
|
s->data_width);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,7 +99,7 @@ static int32_t bmdma_prepare_buf(IDEDMA *dma, int is_write)
|
||||||
* This should accommodate the largest ATA transaction
|
* This should accommodate the largest ATA transaction
|
||||||
* for LBA48 (65,536 sectors) and 32K sector sizes. */
|
* for LBA48 (65,536 sectors) and 32K sector sizes. */
|
||||||
if (s->sg.size > INT32_MAX) {
|
if (s->sg.size > INT32_MAX) {
|
||||||
error_report("IDE: sglist describes more than 2GiB.\n");
|
error_report("IDE: sglist describes more than 2GiB.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
bm->cur_prd_addr += l;
|
bm->cur_prd_addr += l;
|
||||||
|
|
|
@ -155,6 +155,7 @@ milkymist_init(MachineState *machine)
|
||||||
bios_name);
|
bios_name);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
g_free(bios_filename);
|
||||||
|
|
||||||
milkymist_uart_create(0x60000000, irq[0]);
|
milkymist_uart_create(0x60000000, irq[0]);
|
||||||
milkymist_sysctl_create(0x60001000, irq[1], irq[2], irq[3],
|
milkymist_sysctl_create(0x60001000, irq[1], irq[2], irq[3],
|
||||||
|
|
|
@ -185,7 +185,7 @@ void microblaze_load_kernel(MicroBlazeCPU *cpu, hwaddr ddr_base,
|
||||||
ram_size - initrd_offset);
|
ram_size - initrd_offset);
|
||||||
}
|
}
|
||||||
if (initrd_size < 0) {
|
if (initrd_size < 0) {
|
||||||
error_report("qemu: could not load initrd '%s'\n",
|
error_report("qemu: could not load initrd '%s'",
|
||||||
initrd_filename);
|
initrd_filename);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -273,7 +273,7 @@ static int macio_newworld_initfn(PCIDevice *d)
|
||||||
MacIOState *s = MACIO(d);
|
MacIOState *s = MACIO(d);
|
||||||
NewWorldMacIOState *ns = NEWWORLD_MACIO(d);
|
NewWorldMacIOState *ns = NEWWORLD_MACIO(d);
|
||||||
SysBusDevice *sysbus_dev;
|
SysBusDevice *sysbus_dev;
|
||||||
MemoryRegion *timer_memory = g_new(MemoryRegion, 1);
|
MemoryRegion *timer_memory = NULL;
|
||||||
int i;
|
int i;
|
||||||
int cur_irq = 0;
|
int cur_irq = 0;
|
||||||
int ret = macio_common_initfn(d);
|
int ret = macio_common_initfn(d);
|
||||||
|
@ -301,6 +301,7 @@ static int macio_newworld_initfn(PCIDevice *d)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Timer */
|
/* Timer */
|
||||||
|
timer_memory = g_new(MemoryRegion, 1);
|
||||||
memory_region_init_io(timer_memory, OBJECT(s), &timer_ops, NULL, "timer",
|
memory_region_init_io(timer_memory, OBJECT(s), &timer_ops, NULL, "timer",
|
||||||
0x1000);
|
0x1000);
|
||||||
memory_region_add_subregion(&s->bar, 0x15000, timer_memory);
|
memory_region_add_subregion(&s->bar, 0x15000, timer_memory);
|
||||||
|
|
|
@ -362,7 +362,7 @@ static void pfpu_start(MilkymistPFPUState *s)
|
||||||
i = 0;
|
i = 0;
|
||||||
while (pfpu_decode_insn(s)) {
|
while (pfpu_decode_insn(s)) {
|
||||||
/* decode at most MICROCODE_WORDS instructions */
|
/* decode at most MICROCODE_WORDS instructions */
|
||||||
if (i++ >= MICROCODE_WORDS) {
|
if (++i >= MICROCODE_WORDS) {
|
||||||
error_report("milkymist_pfpu: too many instructions "
|
error_report("milkymist_pfpu: too many instructions "
|
||||||
"executed in microcode. No VECTOUT?");
|
"executed in microcode. No VECTOUT?");
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -56,7 +56,7 @@ static const int kernel_feature_bits[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Features supported by others. */
|
/* Features supported by others. */
|
||||||
const int user_feature_bits[] = {
|
static const int user_feature_bits[] = {
|
||||||
VIRTIO_F_NOTIFY_ON_EMPTY,
|
VIRTIO_F_NOTIFY_ON_EMPTY,
|
||||||
VIRTIO_RING_F_INDIRECT_DESC,
|
VIRTIO_RING_F_INDIRECT_DESC,
|
||||||
VIRTIO_RING_F_EVENT_IDX,
|
VIRTIO_RING_F_EVENT_IDX,
|
||||||
|
|
|
@ -120,8 +120,8 @@ static void virtio_net_vhost_status(VirtIONet *n, uint8_t status)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!!n->vhost_started ==
|
if ((virtio_net_started(n, status) && !nc->peer->link_down) ==
|
||||||
(virtio_net_started(n, status) && !nc->peer->link_down)) {
|
!!n->vhost_started) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!n->vhost_started) {
|
if (!n->vhost_started) {
|
||||||
|
|
|
@ -146,6 +146,7 @@ eth_write(void *opaque, hwaddr addr,
|
||||||
if (!(value & CTRL_S)) {
|
if (!(value & CTRL_S)) {
|
||||||
qemu_flush_queued_packets(qemu_get_queue(s->nic));
|
qemu_flush_queued_packets(qemu_get_queue(s->nic));
|
||||||
}
|
}
|
||||||
|
/* fall through */
|
||||||
case R_TX_LEN0:
|
case R_TX_LEN0:
|
||||||
case R_TX_LEN1:
|
case R_TX_LEN1:
|
||||||
case R_TX_GIE0:
|
case R_TX_GIE0:
|
||||||
|
|
|
@ -308,6 +308,7 @@ static int ppce500_load_device_tree(MachineState *machine,
|
||||||
}
|
}
|
||||||
|
|
||||||
fdt = load_device_tree(filename, &fdt_size);
|
fdt = load_device_tree(filename, &fdt_size);
|
||||||
|
g_free(filename);
|
||||||
if (!fdt) {
|
if (!fdt) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,7 +83,7 @@ static int vhost_scsi_start(VHostSCSI *s)
|
||||||
if (abi_version > VHOST_SCSI_ABI_VERSION) {
|
if (abi_version > VHOST_SCSI_ABI_VERSION) {
|
||||||
error_report("vhost-scsi: The running tcm_vhost kernel abi_version:"
|
error_report("vhost-scsi: The running tcm_vhost kernel abi_version:"
|
||||||
" %d is greater than vhost_scsi userspace supports: %d, please"
|
" %d is greater than vhost_scsi userspace supports: %d, please"
|
||||||
" upgrade your version of QEMU\n", abi_version,
|
" upgrade your version of QEMU", abi_version,
|
||||||
VHOST_SCSI_ABI_VERSION);
|
VHOST_SCSI_ABI_VERSION);
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
@ -141,7 +141,7 @@ static void vhost_scsi_stop(VHostSCSI *s)
|
||||||
if (k->set_guest_notifiers) {
|
if (k->set_guest_notifiers) {
|
||||||
ret = k->set_guest_notifiers(qbus->parent, s->dev.nvqs, false);
|
ret = k->set_guest_notifiers(qbus->parent, s->dev.nvqs, false);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
error_report("vhost guest notifier cleanup failed: %d\n", ret);
|
error_report("vhost guest notifier cleanup failed: %d", ret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(ret >= 0);
|
assert(ret >= 0);
|
||||||
|
@ -186,7 +186,7 @@ static void vhost_scsi_set_status(VirtIODevice *vdev, uint8_t val)
|
||||||
|
|
||||||
ret = vhost_scsi_start(s);
|
ret = vhost_scsi_start(s);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
error_report("virtio-scsi: unable to start vhost: %s\n",
|
error_report("virtio-scsi: unable to start vhost: %s",
|
||||||
strerror(-ret));
|
strerror(-ret));
|
||||||
|
|
||||||
/* There is no userspace virtio-scsi fallback so exit */
|
/* There is no userspace virtio-scsi fallback so exit */
|
||||||
|
|
|
@ -186,6 +186,7 @@ static void leon3_generic_hw_init(MachineState *machine)
|
||||||
fprintf(stderr, "Can't read bios image %s\n", filename);
|
fprintf(stderr, "Can't read bios image %s\n", filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
g_free(filename);
|
||||||
|
|
||||||
/* Can directly load an application. */
|
/* Can directly load an application. */
|
||||||
if (kernel_filename != NULL) {
|
if (kernel_filename != NULL) {
|
||||||
|
|
|
@ -289,7 +289,7 @@ static void a9_gtimer_realize(DeviceState *dev, Error **errp)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (s->num_cpu < 1 || s->num_cpu > A9_GTIMER_MAX_CPUS) {
|
if (s->num_cpu < 1 || s->num_cpu > A9_GTIMER_MAX_CPUS) {
|
||||||
error_setg(errp, "%s: num-cpu must be between 1 and %d\n",
|
error_setg(errp, "%s: num-cpu must be between 1 and %d",
|
||||||
__func__, A9_GTIMER_MAX_CPUS);
|
__func__, A9_GTIMER_MAX_CPUS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,7 +143,7 @@ static int tpm_passthrough_unix_tx_bufs(TPMPassthruState *tpm_pt,
|
||||||
if (!tpm_pt->tpm_op_canceled ||
|
if (!tpm_pt->tpm_op_canceled ||
|
||||||
(tpm_pt->tpm_op_canceled && errno != ECANCELED)) {
|
(tpm_pt->tpm_op_canceled && errno != ECANCELED)) {
|
||||||
error_report("tpm_passthrough: error while transmitting data "
|
error_report("tpm_passthrough: error while transmitting data "
|
||||||
"to TPM: %s (%i)\n",
|
"to TPM: %s (%i)",
|
||||||
strerror(errno), errno);
|
strerror(errno), errno);
|
||||||
}
|
}
|
||||||
goto err_exit;
|
goto err_exit;
|
||||||
|
@ -156,14 +156,14 @@ static int tpm_passthrough_unix_tx_bufs(TPMPassthruState *tpm_pt,
|
||||||
if (!tpm_pt->tpm_op_canceled ||
|
if (!tpm_pt->tpm_op_canceled ||
|
||||||
(tpm_pt->tpm_op_canceled && errno != ECANCELED)) {
|
(tpm_pt->tpm_op_canceled && errno != ECANCELED)) {
|
||||||
error_report("tpm_passthrough: error while reading data from "
|
error_report("tpm_passthrough: error while reading data from "
|
||||||
"TPM: %s (%i)\n",
|
"TPM: %s (%i)",
|
||||||
strerror(errno), errno);
|
strerror(errno), errno);
|
||||||
}
|
}
|
||||||
} else if (ret < sizeof(struct tpm_resp_hdr) ||
|
} else if (ret < sizeof(struct tpm_resp_hdr) ||
|
||||||
tpm_passthrough_get_size_from_buffer(out) != ret) {
|
tpm_passthrough_get_size_from_buffer(out) != ret) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
error_report("tpm_passthrough: received invalid response "
|
error_report("tpm_passthrough: received invalid response "
|
||||||
"packet from TPM\n");
|
"packet from TPM");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_selftest && (ret >= sizeof(struct tpm_resp_hdr))) {
|
if (is_selftest && (ret >= sizeof(struct tpm_resp_hdr))) {
|
||||||
|
@ -309,7 +309,7 @@ static void tpm_passthrough_cancel_cmd(TPMBackend *tb)
|
||||||
if (tpm_pt->cancel_fd >= 0) {
|
if (tpm_pt->cancel_fd >= 0) {
|
||||||
n = write(tpm_pt->cancel_fd, "-", 1);
|
n = write(tpm_pt->cancel_fd, "-", 1);
|
||||||
if (n != 1) {
|
if (n != 1) {
|
||||||
error_report("Canceling TPM command failed: %s\n",
|
error_report("Canceling TPM command failed: %s",
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
} else {
|
} else {
|
||||||
tpm_pt->tpm_op_canceled = true;
|
tpm_pt->tpm_op_canceled = true;
|
||||||
|
@ -440,13 +440,13 @@ static int tpm_passthrough_handle_device_opts(QemuOpts *opts, TPMBackend *tb)
|
||||||
|
|
||||||
tpm_pt->tpm_fd = qemu_open(tpm_pt->tpm_dev, O_RDWR);
|
tpm_pt->tpm_fd = qemu_open(tpm_pt->tpm_dev, O_RDWR);
|
||||||
if (tpm_pt->tpm_fd < 0) {
|
if (tpm_pt->tpm_fd < 0) {
|
||||||
error_report("Cannot access TPM device using '%s': %s\n",
|
error_report("Cannot access TPM device using '%s': %s",
|
||||||
tpm_pt->tpm_dev, strerror(errno));
|
tpm_pt->tpm_dev, strerror(errno));
|
||||||
goto err_free_parameters;
|
goto err_free_parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tpm_passthrough_test_tpmdev(tpm_pt->tpm_fd)) {
|
if (tpm_passthrough_test_tpmdev(tpm_pt->tpm_fd)) {
|
||||||
error_report("'%s' is not a TPM device.\n",
|
error_report("'%s' is not a TPM device.",
|
||||||
tpm_pt->tpm_dev);
|
tpm_pt->tpm_dev);
|
||||||
goto err_close_tpmdev;
|
goto err_close_tpmdev;
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,7 +201,7 @@ static int vfio_dma_unmap(VFIOContainer *container,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (ioctl(container->fd, VFIO_IOMMU_UNMAP_DMA, &unmap)) {
|
if (ioctl(container->fd, VFIO_IOMMU_UNMAP_DMA, &unmap)) {
|
||||||
error_report("VFIO_UNMAP_DMA: %d\n", -errno);
|
error_report("VFIO_UNMAP_DMA: %d", -errno);
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ static int vfio_dma_map(VFIOContainer *container, hwaddr iova,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
error_report("VFIO_MAP_DMA: %d\n", -errno);
|
error_report("VFIO_MAP_DMA: %d", -errno);
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,7 +274,7 @@ static void vfio_iommu_map_notify(Notifier *n, void *data)
|
||||||
iotlb->translated_addr,
|
iotlb->translated_addr,
|
||||||
&xlat, &len, iotlb->perm & IOMMU_WO);
|
&xlat, &len, iotlb->perm & IOMMU_WO);
|
||||||
if (!memory_region_is_ram(mr)) {
|
if (!memory_region_is_ram(mr)) {
|
||||||
error_report("iommu map to non memory area %"HWADDR_PRIx"\n",
|
error_report("iommu map to non memory area %"HWADDR_PRIx"",
|
||||||
xlat);
|
xlat);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -283,7 +283,7 @@ static void vfio_iommu_map_notify(Notifier *n, void *data)
|
||||||
* check that it did not truncate too much.
|
* check that it did not truncate too much.
|
||||||
*/
|
*/
|
||||||
if (len & iotlb->addr_mask) {
|
if (len & iotlb->addr_mask) {
|
||||||
error_report("iommu has granularity incompatible with target AS\n");
|
error_report("iommu has granularity incompatible with target AS");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -566,7 +566,7 @@ static void vfio_kvm_device_add_group(VFIOGroup *group)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (kvm_vm_ioctl(kvm_state, KVM_CREATE_DEVICE, &cd)) {
|
if (kvm_vm_ioctl(kvm_state, KVM_CREATE_DEVICE, &cd)) {
|
||||||
error_report("Failed to create KVM VFIO device: %m\n");
|
error_report("Failed to create KVM VFIO device: %m");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ int vhost_set_backend_type(struct vhost_dev *dev, VhostBackendType backend_type)
|
||||||
dev->vhost_ops = &user_ops;
|
dev->vhost_ops = &user_ops;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error_report("Unknown vhost backend type\n");
|
error_report("Unknown vhost backend type");
|
||||||
r = -1;
|
r = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -360,15 +360,13 @@ static uint64_t xen_pt_get_bar_size(PCIIORegion *r)
|
||||||
}
|
}
|
||||||
|
|
||||||
static XenPTBarFlag xen_pt_bar_reg_parse(XenPCIPassthroughState *s,
|
static XenPTBarFlag xen_pt_bar_reg_parse(XenPCIPassthroughState *s,
|
||||||
XenPTRegInfo *reg)
|
int index)
|
||||||
{
|
{
|
||||||
PCIDevice *d = &s->dev;
|
PCIDevice *d = &s->dev;
|
||||||
XenPTRegion *region = NULL;
|
XenPTRegion *region = NULL;
|
||||||
PCIIORegion *r;
|
PCIIORegion *r;
|
||||||
int index = 0;
|
|
||||||
|
|
||||||
/* check 64bit BAR */
|
/* check 64bit BAR */
|
||||||
index = xen_pt_bar_offset_to_index(reg->offset);
|
|
||||||
if ((0 < index) && (index < PCI_ROM_SLOT)) {
|
if ((0 < index) && (index < PCI_ROM_SLOT)) {
|
||||||
int type = s->real_device.io_regions[index - 1].type;
|
int type = s->real_device.io_regions[index - 1].type;
|
||||||
|
|
||||||
|
@ -422,7 +420,7 @@ static int xen_pt_bar_reg_init(XenPCIPassthroughState *s, XenPTRegInfo *reg,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set BAR flag */
|
/* set BAR flag */
|
||||||
s->bases[index].bar_flag = xen_pt_bar_reg_parse(s, reg);
|
s->bases[index].bar_flag = xen_pt_bar_reg_parse(s, index);
|
||||||
if (s->bases[index].bar_flag == XEN_PT_BAR_FLAG_UNUSED) {
|
if (s->bases[index].bar_flag == XEN_PT_BAR_FLAG_UNUSED) {
|
||||||
reg_field = XEN_PT_INVALID_REG;
|
reg_field = XEN_PT_INVALID_REG;
|
||||||
}
|
}
|
||||||
|
@ -440,7 +438,7 @@ static int xen_pt_bar_reg_read(XenPCIPassthroughState *s, XenPTReg *cfg_entry,
|
||||||
|
|
||||||
/* get BAR index */
|
/* get BAR index */
|
||||||
index = xen_pt_bar_offset_to_index(reg->offset);
|
index = xen_pt_bar_offset_to_index(reg->offset);
|
||||||
if (index < 0 || index >= PCI_NUM_REGIONS) {
|
if (index < 0 || index >= PCI_NUM_REGIONS - 1) {
|
||||||
XEN_PT_ERR(&s->dev, "Internal error: Invalid BAR index [%d].\n", index);
|
XEN_PT_ERR(&s->dev, "Internal error: Invalid BAR index [%d].\n", index);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ static void xtensa_sim_init(MachineState *machine)
|
||||||
for (n = 0; n < smp_cpus; n++) {
|
for (n = 0; n < smp_cpus; n++) {
|
||||||
cpu = cpu_xtensa_init(cpu_model);
|
cpu = cpu_xtensa_init(cpu_model);
|
||||||
if (cpu == NULL) {
|
if (cpu == NULL) {
|
||||||
error_report("unable to find CPU definition '%s'\n",
|
error_report("unable to find CPU definition '%s'",
|
||||||
cpu_model);
|
cpu_model);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -207,7 +207,7 @@ static void lx_init(const LxBoardDesc *board, MachineState *machine)
|
||||||
for (n = 0; n < smp_cpus; n++) {
|
for (n = 0; n < smp_cpus; n++) {
|
||||||
cpu = cpu_xtensa_init(cpu_model);
|
cpu = cpu_xtensa_init(cpu_model);
|
||||||
if (cpu == NULL) {
|
if (cpu == NULL) {
|
||||||
error_report("unable to find CPU definition '%s'\n",
|
error_report("unable to find CPU definition '%s'",
|
||||||
cpu_model);
|
cpu_model);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
@ -253,7 +253,7 @@ static void lx_init(const LxBoardDesc *board, MachineState *machine)
|
||||||
board->flash_size / board->flash_sector_size,
|
board->flash_size / board->flash_sector_size,
|
||||||
4, 0x0000, 0x0000, 0x0000, 0x0000, be);
|
4, 0x0000, 0x0000, 0x0000, 0x0000, be);
|
||||||
if (flash == NULL) {
|
if (flash == NULL) {
|
||||||
error_report("unable to mount pflash\n");
|
error_report("unable to mount pflash");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -305,7 +305,7 @@ static void lx_init(const LxBoardDesc *board, MachineState *machine)
|
||||||
uint32_t dtb_addr = tswap32(cur_lowmem);
|
uint32_t dtb_addr = tswap32(cur_lowmem);
|
||||||
|
|
||||||
if (!fdt) {
|
if (!fdt) {
|
||||||
error_report("could not load DTB '%s'\n", dtb_filename);
|
error_report("could not load DTB '%s'", dtb_filename);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -325,7 +325,7 @@ static void lx_init(const LxBoardDesc *board, MachineState *machine)
|
||||||
lowmem_end - cur_lowmem);
|
lowmem_end - cur_lowmem);
|
||||||
}
|
}
|
||||||
if (initrd_size < 0) {
|
if (initrd_size < 0) {
|
||||||
error_report("could not load initrd '%s'\n", initrd_filename);
|
error_report("could not load initrd '%s'", initrd_filename);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
initrd_location.start = tswap32(cur_lowmem);
|
initrd_location.start = tswap32(cur_lowmem);
|
||||||
|
@ -351,7 +351,7 @@ static void lx_init(const LxBoardDesc *board, MachineState *machine)
|
||||||
if (success > 0 && is_linux) {
|
if (success > 0 && is_linux) {
|
||||||
entry_point = ep;
|
entry_point = ep;
|
||||||
} else {
|
} else {
|
||||||
error_report("could not load kernel '%s'\n",
|
error_report("could not load kernel '%s'",
|
||||||
kernel_filename);
|
kernel_filename);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,6 @@ int xen_pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num);
|
||||||
void xen_piix3_set_irq(void *opaque, int irq_num, int level);
|
void xen_piix3_set_irq(void *opaque, int irq_num, int level);
|
||||||
void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int len);
|
void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int len);
|
||||||
void xen_hvm_inject_msi(uint64_t addr, uint32_t data);
|
void xen_hvm_inject_msi(uint64_t addr, uint32_t data);
|
||||||
void xen_cmos_set_s3_resume(void *opaque, int irq, int level);
|
|
||||||
|
|
||||||
qemu_irq *xen_interrupt_controller_init(void);
|
qemu_irq *xen_interrupt_controller_init(void);
|
||||||
|
|
||||||
|
|
|
@ -37,12 +37,12 @@ void qerror_report_err(Error *err);
|
||||||
#define QERR_BASE_NOT_FOUND \
|
#define QERR_BASE_NOT_FOUND \
|
||||||
ERROR_CLASS_GENERIC_ERROR, "Base '%s' not found"
|
ERROR_CLASS_GENERIC_ERROR, "Base '%s' not found"
|
||||||
|
|
||||||
#define QERR_BLOCK_JOB_NOT_READY \
|
|
||||||
ERROR_CLASS_GENERIC_ERROR, "The active block job for device '%s' cannot be completed"
|
|
||||||
|
|
||||||
#define QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED \
|
#define QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED \
|
||||||
ERROR_CLASS_GENERIC_ERROR, "Block format '%s' used by device '%s' does not support feature '%s'"
|
ERROR_CLASS_GENERIC_ERROR, "Block format '%s' used by device '%s' does not support feature '%s'"
|
||||||
|
|
||||||
|
#define QERR_BLOCK_JOB_NOT_READY \
|
||||||
|
ERROR_CLASS_GENERIC_ERROR, "The active block job for device '%s' cannot be completed"
|
||||||
|
|
||||||
#define QERR_BUS_NO_HOTPLUG \
|
#define QERR_BUS_NO_HOTPLUG \
|
||||||
ERROR_CLASS_GENERIC_ERROR, "Bus '%s' does not support hotplugging"
|
ERROR_CLASS_GENERIC_ERROR, "Bus '%s' does not support hotplugging"
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,6 @@ typedef struct QEMUPutLEDEntry QEMUPutLEDEntry;
|
||||||
|
|
||||||
QEMUPutKbdEntry *qemu_add_kbd_event_handler(QEMUPutKBDEvent *func,
|
QEMUPutKbdEntry *qemu_add_kbd_event_handler(QEMUPutKBDEvent *func,
|
||||||
void *opaque);
|
void *opaque);
|
||||||
void qemu_remove_kbd_event_handler(QEMUPutKbdEntry *entry);
|
|
||||||
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
|
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
|
||||||
void *opaque, int absolute,
|
void *opaque, int absolute,
|
||||||
const char *name);
|
const char *name);
|
||||||
|
@ -194,7 +193,6 @@ DisplaySurface *qemu_create_displaysurface_guestmem(int width, int height,
|
||||||
pixman_format_code_t format,
|
pixman_format_code_t format,
|
||||||
int linesize,
|
int linesize,
|
||||||
uint64_t addr);
|
uint64_t addr);
|
||||||
PixelFormat qemu_different_endianness_pixelformat(int bpp);
|
|
||||||
PixelFormat qemu_default_pixelformat(int bpp);
|
PixelFormat qemu_default_pixelformat(int bpp);
|
||||||
|
|
||||||
DisplaySurface *qemu_create_displaysurface(int width, int height);
|
DisplaySurface *qemu_create_displaysurface(int width, int height);
|
||||||
|
@ -322,7 +320,6 @@ void qemu_console_resize(QemuConsole *con, int width, int height);
|
||||||
void qemu_console_copy(QemuConsole *con, int src_x, int src_y,
|
void qemu_console_copy(QemuConsole *con, int src_x, int src_y,
|
||||||
int dst_x, int dst_y, int w, int h);
|
int dst_x, int dst_y, int w, int h);
|
||||||
DisplaySurface *qemu_console_surface(QemuConsole *con);
|
DisplaySurface *qemu_console_surface(QemuConsole *con);
|
||||||
DisplayState *qemu_console_displaystate(QemuConsole *console);
|
|
||||||
|
|
||||||
/* sdl.c */
|
/* sdl.c */
|
||||||
void sdl_display_init(DisplayState *ds, int full_screen, int no_frame);
|
void sdl_display_init(DisplayState *ds, int full_screen, int no_frame);
|
||||||
|
|
|
@ -366,7 +366,7 @@ static void kvm_log_stop(MemoryListener *listener,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int kvm_set_migration_log(int enable)
|
static int kvm_set_migration_log(bool enable)
|
||||||
{
|
{
|
||||||
KVMState *s = kvm_state;
|
KVMState *s = kvm_state;
|
||||||
KVMSlot *mem;
|
KVMSlot *mem;
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
* QEMU System Emulator
|
* QEMU System Emulator
|
||||||
*
|
*
|
||||||
* Copyright (c) 2003-2008 Fabrice Bellard
|
* Copyright (c) 2003-2008 Fabrice Bellard
|
||||||
|
* Copyright (c) 2014 IBM Corp.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Stefan Berger <stefanb@linux.vnet.ibm.com>
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -702,7 +702,7 @@ static void qemu_rdma_dump_id(const char *who, struct ibv_context *verbs)
|
||||||
verbs->device->ibdev_path,
|
verbs->device->ibdev_path,
|
||||||
port.link_layer,
|
port.link_layer,
|
||||||
(port.link_layer == IBV_LINK_LAYER_INFINIBAND) ? "Infiniband" :
|
(port.link_layer == IBV_LINK_LAYER_INFINIBAND) ? "Infiniband" :
|
||||||
((port.link_layer == IBV_LINK_LAYER_ETHERNET)
|
((port.link_layer == IBV_LINK_LAYER_ETHERNET)
|
||||||
? "Ethernet" : "Unknown"));
|
? "Ethernet" : "Unknown"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -737,7 +737,7 @@ static void qemu_rdma_dump_gid(const char *who, struct rdma_cm_id *id)
|
||||||
* and validate what time of hardware it is.
|
* and validate what time of hardware it is.
|
||||||
*
|
*
|
||||||
* Unfortunately, this puts the user in a fix:
|
* Unfortunately, this puts the user in a fix:
|
||||||
*
|
*
|
||||||
* If the source VM connects with an IPv4 address without knowing that the
|
* If the source VM connects with an IPv4 address without knowing that the
|
||||||
* destination has bound to '[::]' the migration will unconditionally fail
|
* destination has bound to '[::]' the migration will unconditionally fail
|
||||||
* unless the management software is explicitly listening on the the IPv4
|
* unless the management software is explicitly listening on the the IPv4
|
||||||
|
@ -745,13 +745,13 @@ static void qemu_rdma_dump_gid(const char *who, struct rdma_cm_id *id)
|
||||||
*
|
*
|
||||||
* If the source VM connects with an IPv6 address, then we're OK because we can
|
* If the source VM connects with an IPv6 address, then we're OK because we can
|
||||||
* throw an error on the source (and similarly on the destination).
|
* throw an error on the source (and similarly on the destination).
|
||||||
*
|
*
|
||||||
* But in mixed environments, this will be broken for a while until it is fixed
|
* But in mixed environments, this will be broken for a while until it is fixed
|
||||||
* inside linux.
|
* inside linux.
|
||||||
*
|
*
|
||||||
* We do provide a *tiny* bit of help in this function: We can list all of the
|
* We do provide a *tiny* bit of help in this function: We can list all of the
|
||||||
* devices in the system and check to see if all the devices are RoCE or
|
* devices in the system and check to see if all the devices are RoCE or
|
||||||
* Infiniband.
|
* Infiniband.
|
||||||
*
|
*
|
||||||
* If we detect that we have a *pure* RoCE environment, then we can safely
|
* If we detect that we have a *pure* RoCE environment, then we can safely
|
||||||
* thrown an error even if the management software has specified '[::]' as the
|
* thrown an error even if the management software has specified '[::]' as the
|
||||||
|
@ -770,17 +770,17 @@ static int qemu_rdma_broken_ipv6_kernel(Error **errp, struct ibv_context *verbs)
|
||||||
/* This bug only exists in linux, to our knowledge. */
|
/* This bug only exists in linux, to our knowledge. */
|
||||||
#ifdef CONFIG_LINUX
|
#ifdef CONFIG_LINUX
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Verbs are only NULL if management has bound to '[::]'.
|
* Verbs are only NULL if management has bound to '[::]'.
|
||||||
*
|
*
|
||||||
* Let's iterate through all the devices and see if there any pure IB
|
* Let's iterate through all the devices and see if there any pure IB
|
||||||
* devices (non-ethernet).
|
* devices (non-ethernet).
|
||||||
*
|
*
|
||||||
* If not, then we can safely proceed with the migration.
|
* If not, then we can safely proceed with the migration.
|
||||||
* Otherwise, there are no guarantees until the bug is fixed in linux.
|
* Otherwise, there are no guarantees until the bug is fixed in linux.
|
||||||
*/
|
*/
|
||||||
if (!verbs) {
|
if (!verbs) {
|
||||||
int num_devices, x;
|
int num_devices, x;
|
||||||
struct ibv_device ** dev_list = ibv_get_device_list(&num_devices);
|
struct ibv_device ** dev_list = ibv_get_device_list(&num_devices);
|
||||||
bool roce_found = false;
|
bool roce_found = false;
|
||||||
bool ib_found = false;
|
bool ib_found = false;
|
||||||
|
@ -825,8 +825,8 @@ static int qemu_rdma_broken_ipv6_kernel(Error **errp, struct ibv_context *verbs)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we have a verbs context, that means that some other than '[::]' was
|
* If we have a verbs context, that means that some other than '[::]' was
|
||||||
* used by the management software for binding. In which case we can actually
|
* used by the management software for binding. In which case we can
|
||||||
* warn the user about a potential broken kernel;
|
* actually warn the user about a potentially broken kernel.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* IB ports start with 1, not 0 */
|
/* IB ports start with 1, not 0 */
|
||||||
|
@ -1626,7 +1626,7 @@ static int qemu_rdma_exchange_get_response(RDMAContext *rdma,
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
if (head->len > RDMA_CONTROL_MAX_BUFFER - sizeof(*head)) {
|
if (head->len > RDMA_CONTROL_MAX_BUFFER - sizeof(*head)) {
|
||||||
error_report("too long length: %d\n", head->len);
|
error_report("too long length: %d", head->len);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
if (sizeof(*head) + head->len != byte_len) {
|
if (sizeof(*head) + head->len != byte_len) {
|
||||||
|
|
|
@ -121,12 +121,12 @@ static void net_vhost_user_event(void *opaque, int event)
|
||||||
case CHR_EVENT_OPENED:
|
case CHR_EVENT_OPENED:
|
||||||
vhost_user_start(s);
|
vhost_user_start(s);
|
||||||
net_vhost_link_down(s, false);
|
net_vhost_link_down(s, false);
|
||||||
error_report("chardev \"%s\" went up\n", s->chr->label);
|
error_report("chardev \"%s\" went up", s->chr->label);
|
||||||
break;
|
break;
|
||||||
case CHR_EVENT_CLOSED:
|
case CHR_EVENT_CLOSED:
|
||||||
net_vhost_link_down(s, true);
|
net_vhost_link_down(s, true);
|
||||||
vhost_user_stop(s);
|
vhost_user_stop(s);
|
||||||
error_report("chardev \"%s\" went down\n", s->chr->label);
|
error_report("chardev \"%s\" went down", s->chr->label);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
6
numa.c
6
numa.c
|
@ -66,7 +66,7 @@ static void numa_node_parse(NumaNodeOptions *node, QemuOpts *opts, Error **errp)
|
||||||
|
|
||||||
if (nodenr >= MAX_NODES) {
|
if (nodenr >= MAX_NODES) {
|
||||||
error_setg(errp, "Max number of NUMA nodes reached: %"
|
error_setg(errp, "Max number of NUMA nodes reached: %"
|
||||||
PRIu16 "\n", nodenr);
|
PRIu16 "", nodenr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ static void numa_node_parse(NumaNodeOptions *node, QemuOpts *opts, Error **errp)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node->has_mem && node->has_memdev) {
|
if (node->has_mem && node->has_memdev) {
|
||||||
error_setg(errp, "qemu: cannot specify both mem= and memdev=\n");
|
error_setg(errp, "qemu: cannot specify both mem= and memdev=");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ static void numa_node_parse(NumaNodeOptions *node, QemuOpts *opts, Error **errp)
|
||||||
}
|
}
|
||||||
if (node->has_memdev != have_memdevs) {
|
if (node->has_memdev != have_memdevs) {
|
||||||
error_setg(errp, "qemu: memdev option must be specified for either "
|
error_setg(errp, "qemu: memdev option must be specified for either "
|
||||||
"all or no nodes\n");
|
"all or no nodes");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ map 0x419
|
||||||
exclam 0x02 shift
|
exclam 0x02 shift
|
||||||
at 0x03 shift
|
at 0x03 shift
|
||||||
quotedbl 0x03 shift altgr
|
quotedbl 0x03 shift altgr
|
||||||
numbersign 0x04 shift
|
numerosign 0x04 shift
|
||||||
dollar 0x05 shift
|
dollar 0x05 shift
|
||||||
asterisk 0x05 shift altgr
|
asterisk 0x05 shift altgr
|
||||||
percent 0x06 shift
|
percent 0x06 shift
|
||||||
|
|
|
@ -871,9 +871,9 @@
|
||||||
# @connection-id: SPICE connection id number. All channels with the same id
|
# @connection-id: SPICE connection id number. All channels with the same id
|
||||||
# belong to the same SPICE session.
|
# belong to the same SPICE session.
|
||||||
#
|
#
|
||||||
# @connection-type: SPICE channel type number. "1" is the main control
|
# @channel-type: SPICE channel type number. "1" is the main control
|
||||||
# channel, filter for this one if you want to track spice
|
# channel, filter for this one if you want to track spice
|
||||||
# sessions only
|
# sessions only
|
||||||
#
|
#
|
||||||
# @channel-id: SPICE channel ID number. Usually "0", might be different when
|
# @channel-id: SPICE channel ID number. Usually "0", might be different when
|
||||||
# multiple channels of the same type exist, such as multiple
|
# multiple channels of the same type exist, such as multiple
|
||||||
|
|
|
@ -976,7 +976,8 @@ static int is_allocated_sectors_min(const uint8_t *buf, int n, int *pnum,
|
||||||
static int compare_sectors(const uint8_t *buf1, const uint8_t *buf2, int n,
|
static int compare_sectors(const uint8_t *buf1, const uint8_t *buf2, int n,
|
||||||
int *pnum)
|
int *pnum)
|
||||||
{
|
{
|
||||||
int res, i;
|
bool res;
|
||||||
|
int i;
|
||||||
|
|
||||||
if (n <= 0) {
|
if (n <= 0) {
|
||||||
*pnum = 0;
|
*pnum = 0;
|
||||||
|
@ -1645,7 +1646,7 @@ static int img_convert(int argc, char **argv)
|
||||||
if (skip_create) {
|
if (skip_create) {
|
||||||
int64_t output_sectors = blk_nb_sectors(out_blk);
|
int64_t output_sectors = blk_nb_sectors(out_blk);
|
||||||
if (output_sectors < 0) {
|
if (output_sectors < 0) {
|
||||||
error_report("unable to get output image length: %s\n",
|
error_report("unable to get output image length: %s",
|
||||||
strerror(-output_sectors));
|
strerror(-output_sectors));
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
@ -1376,11 +1376,25 @@ ETEXI
|
||||||
DEF("smbios", HAS_ARG, QEMU_OPTION_smbios,
|
DEF("smbios", HAS_ARG, QEMU_OPTION_smbios,
|
||||||
"-smbios file=binary\n"
|
"-smbios file=binary\n"
|
||||||
" load SMBIOS entry from binary file\n"
|
" load SMBIOS entry from binary file\n"
|
||||||
"-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d][,uefi=on|off]\n"
|
"-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d]\n"
|
||||||
|
" [,uefi=on|off]\n"
|
||||||
" specify SMBIOS type 0 fields\n"
|
" specify SMBIOS type 0 fields\n"
|
||||||
"-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]\n"
|
"-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]\n"
|
||||||
" [,uuid=uuid][,sku=str][,family=str]\n"
|
" [,uuid=uuid][,sku=str][,family=str]\n"
|
||||||
" specify SMBIOS type 1 fields\n", QEMU_ARCH_I386)
|
" specify SMBIOS type 1 fields\n"
|
||||||
|
"-smbios type=2[,manufacturer=str][,product=str][,version=str][,serial=str]\n"
|
||||||
|
" [,asset=str][,location=str]\n"
|
||||||
|
" specify SMBIOS type 2 fields\n"
|
||||||
|
"-smbios type=3[,manufacturer=str][,version=str][,serial=str][,asset=str]\n"
|
||||||
|
" [,sku=str]\n"
|
||||||
|
" specify SMBIOS type 3 fields\n"
|
||||||
|
"-smbios type=4[,sock_pfx=str][,manufacturer=str][,version=str][,serial=str]\n"
|
||||||
|
" [,asset=str][,part=str]\n"
|
||||||
|
" specify SMBIOS type 4 fields\n"
|
||||||
|
"-smbios type=17[,loc_pfx=str][,bank=str][,manufacturer=str][,serial=str]\n"
|
||||||
|
" [,asset=str][,part=str]\n"
|
||||||
|
" specify SMBIOS type 17 fields\n",
|
||||||
|
QEMU_ARCH_I386)
|
||||||
STEXI
|
STEXI
|
||||||
@item -smbios file=@var{binary}
|
@item -smbios file=@var{binary}
|
||||||
@findex -smbios
|
@findex -smbios
|
||||||
|
@ -1389,8 +1403,20 @@ Load SMBIOS entry from binary file.
|
||||||
@item -smbios type=0[,vendor=@var{str}][,version=@var{str}][,date=@var{str}][,release=@var{%d.%d}][,uefi=on|off]
|
@item -smbios type=0[,vendor=@var{str}][,version=@var{str}][,date=@var{str}][,release=@var{%d.%d}][,uefi=on|off]
|
||||||
Specify SMBIOS type 0 fields
|
Specify SMBIOS type 0 fields
|
||||||
|
|
||||||
@item -smbios type=1[,manufacturer=@var{str}][,product=@var{str}] [,version=@var{str}][,serial=@var{str}][,uuid=@var{uuid}][,sku=@var{str}] [,family=@var{str}]
|
@item -smbios type=1[,manufacturer=@var{str}][,product=@var{str}][,version=@var{str}][,serial=@var{str}][,uuid=@var{uuid}][,sku=@var{str}][,family=@var{str}]
|
||||||
Specify SMBIOS type 1 fields
|
Specify SMBIOS type 1 fields
|
||||||
|
|
||||||
|
@item -smbios type=2[,manufacturer=@var{str}][,product=@var{str}][,version=@var{str}][,serial=@var{str}][,asset=@var{str}][,location=@var{str}][,family=@var{str}]
|
||||||
|
Specify SMBIOS type 2 fields
|
||||||
|
|
||||||
|
@item -smbios type=3[,manufacturer=@var{str}][,version=@var{str}][,serial=@var{str}][,asset=@var{str}][,sku=@var{str}]
|
||||||
|
Specify SMBIOS type 3 fields
|
||||||
|
|
||||||
|
@item -smbios type=4[,sock_pfx=@var{str}][,manufacturer=@var{str}][,version=@var{str}][,serial=@var{str}][,asset=@var{str}][,part=@var{str}]
|
||||||
|
Specify SMBIOS type 4 fields
|
||||||
|
|
||||||
|
@item -smbios type=17[,loc_pfx=@var{str}][,bank=@var{str}][,manufacturer=@var{str}][,serial=@var{str}][,asset=@var{str}][,part=@var{str}]
|
||||||
|
Specify SMBIOS type 17 fields
|
||||||
ETEXI
|
ETEXI
|
||||||
|
|
||||||
STEXI
|
STEXI
|
||||||
|
@ -3181,12 +3207,30 @@ Set TB size.
|
||||||
ETEXI
|
ETEXI
|
||||||
|
|
||||||
DEF("incoming", HAS_ARG, QEMU_OPTION_incoming, \
|
DEF("incoming", HAS_ARG, QEMU_OPTION_incoming, \
|
||||||
"-incoming p prepare for incoming migration, listen on port p\n",
|
"-incoming tcp:[host]:port[,to=maxport][,ipv4][,ipv6]\n" \
|
||||||
|
"-incoming rdma:host:port[,ipv4][,ipv6]\n" \
|
||||||
|
"-incoming unix:socketpath\n" \
|
||||||
|
" prepare for incoming migration, listen on\n" \
|
||||||
|
" specified protocol and socket address\n" \
|
||||||
|
"-incoming fd:fd\n" \
|
||||||
|
"-incoming exec:cmdline\n" \
|
||||||
|
" accept incoming migration on given file descriptor\n" \
|
||||||
|
" or from given external command\n",
|
||||||
QEMU_ARCH_ALL)
|
QEMU_ARCH_ALL)
|
||||||
STEXI
|
STEXI
|
||||||
@item -incoming @var{port}
|
@item -incoming tcp:[@var{host}]:@var{port}[,to=@var{maxport}][,ipv4][,ipv6]
|
||||||
|
@item -incoming rdma:@var{host}:@var{port}[,ipv4][,ipv6]
|
||||||
@findex -incoming
|
@findex -incoming
|
||||||
Prepare for incoming migration, listen on @var{port}.
|
Prepare for incoming migration, listen on a given tcp port.
|
||||||
|
|
||||||
|
@item -incoming unix:@var{socketpath}
|
||||||
|
Prepare for incoming migration, listen on a given unix socket.
|
||||||
|
|
||||||
|
@item -incoming fd:@var{fd}
|
||||||
|
Accept incoming migration from a given filedescriptor.
|
||||||
|
|
||||||
|
@item -incoming exec:@var{cmdline}
|
||||||
|
Accept incoming migration as an output from specified external command.
|
||||||
ETEXI
|
ETEXI
|
||||||
|
|
||||||
DEF("nodefaults", 0, QEMU_OPTION_nodefaults, \
|
DEF("nodefaults", 0, QEMU_OPTION_nodefaults, \
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
HXCOMM QMP dispatch table and documentation
|
HXCOMM QMP dispatch table and documentation
|
||||||
HXCOMM Text between SQMP and EQMP is copied to the QMP documention file and
|
HXCOMM Text between SQMP and EQMP is copied to the QMP documentation file and
|
||||||
HXCOMM does not show up in the other formats.
|
HXCOMM does not show up in the other formats.
|
||||||
|
|
||||||
SQMP
|
SQMP
|
||||||
|
@ -1767,7 +1767,7 @@ Arguments:
|
||||||
|
|
||||||
- "protocol": protocol name (json-string)
|
- "protocol": protocol name (json-string)
|
||||||
- "password": password (json-string)
|
- "password": password (json-string)
|
||||||
- "connected": [ keep | disconnect | fail ] (josn-string, optional)
|
- "connected": [ keep | disconnect | fail ] (json-string, optional)
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
@ -2922,7 +2922,7 @@ Channels are described by a json-object, each one contain the following:
|
||||||
- "channel-id": channel id. Usually "0", might be different needed when
|
- "channel-id": channel id. Usually "0", might be different needed when
|
||||||
multiple channels of the same type exist, such as multiple
|
multiple channels of the same type exist, such as multiple
|
||||||
display channels in a multihead setup (json-int)
|
display channels in a multihead setup (json-int)
|
||||||
- "tls": whevener the channel is encrypted (json-bool)
|
- "tls": whether the channel is encrypted (json-bool)
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
|
|
@ -211,7 +211,7 @@ void kvm_s390_reset_vcpu(S390CPU *cpu)
|
||||||
* Before this ioctl cpu_synchronize_state() is called in common kvm
|
* Before this ioctl cpu_synchronize_state() is called in common kvm
|
||||||
* code (kvm-all) */
|
* code (kvm-all) */
|
||||||
if (kvm_vcpu_ioctl(cs, KVM_S390_INITIAL_RESET, NULL)) {
|
if (kvm_vcpu_ioctl(cs, KVM_S390_INITIAL_RESET, NULL)) {
|
||||||
error_report("Initial CPU reset failed on CPU %i\n", cs->cpu_index);
|
error_report("Initial CPU reset failed on CPU %i", cs->cpu_index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ check-qjson
|
||||||
check-qlist
|
check-qlist
|
||||||
check-qstring
|
check-qstring
|
||||||
check-qom-interface
|
check-qom-interface
|
||||||
|
rcutorture
|
||||||
test-aio
|
test-aio
|
||||||
test-bitops
|
test-bitops
|
||||||
test-coroutine
|
test-coroutine
|
||||||
|
@ -26,6 +27,7 @@ test-qmp-input-strict
|
||||||
test-qmp-input-visitor
|
test-qmp-input-visitor
|
||||||
test-qmp-marshal.c
|
test-qmp-marshal.c
|
||||||
test-qmp-output-visitor
|
test-qmp-output-visitor
|
||||||
|
test-rcu-list
|
||||||
test-rfifolock
|
test-rfifolock
|
||||||
test-string-input-visitor
|
test-string-input-visitor
|
||||||
test-string-output-visitor
|
test-string-output-visitor
|
||||||
|
@ -33,6 +35,7 @@ test-thread-pool
|
||||||
test-throttle
|
test-throttle
|
||||||
test-visitor-serialization
|
test-visitor-serialization
|
||||||
test-vmstate
|
test-vmstate
|
||||||
|
test-write-threshold
|
||||||
test-x86-cpuid
|
test-x86-cpuid
|
||||||
test-xbzrle
|
test-xbzrle
|
||||||
*-test
|
*-test
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
check.log
|
check.log
|
||||||
check.time
|
check.time
|
||||||
|
common.env
|
||||||
*.out.bad
|
*.out.bad
|
||||||
*.notrun
|
*.notrun
|
||||||
socket_scm_helper
|
socket_scm_helper
|
||||||
|
|
2
tpm.c
2
tpm.c
|
@ -134,7 +134,7 @@ static int configure_tpm(QemuOpts *opts)
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
if (!QLIST_EMPTY(&tpm_backends)) {
|
if (!QLIST_EMPTY(&tpm_backends)) {
|
||||||
error_report("Only one TPM is allowed.\n");
|
error_report("Only one TPM is allowed.");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,7 @@ static void trace_init_events(const char *fname)
|
||||||
error_report("WARNING: trace event '%s' does not exist",
|
error_report("WARNING: trace event '%s' does not exist",
|
||||||
line_ptr);
|
line_ptr);
|
||||||
} else if (!trace_event_get_state_static(ev)) {
|
} else if (!trace_event_get_state_static(ev)) {
|
||||||
error_report("WARNING: trace event '%s' is not traceable\n",
|
error_report("WARNING: trace event '%s' is not traceable",
|
||||||
line_ptr);
|
line_ptr);
|
||||||
} else {
|
} else {
|
||||||
trace_event_set_state_dynamic(ev, enable);
|
trace_event_set_state_dynamic(ev, enable);
|
||||||
|
|
12
ui/console.c
12
ui/console.c
|
@ -2005,18 +2005,6 @@ DisplaySurface *qemu_console_surface(QemuConsole *console)
|
||||||
return console->surface;
|
return console->surface;
|
||||||
}
|
}
|
||||||
|
|
||||||
DisplayState *qemu_console_displaystate(QemuConsole *console)
|
|
||||||
{
|
|
||||||
return console->ds;
|
|
||||||
}
|
|
||||||
|
|
||||||
PixelFormat qemu_different_endianness_pixelformat(int bpp)
|
|
||||||
{
|
|
||||||
pixman_format_code_t fmt = qemu_default_pixman_format(bpp, false);
|
|
||||||
PixelFormat pf = qemu_pixelformat_from_pixman(fmt);
|
|
||||||
return pf;
|
|
||||||
}
|
|
||||||
|
|
||||||
PixelFormat qemu_default_pixelformat(int bpp)
|
PixelFormat qemu_default_pixelformat(int bpp)
|
||||||
{
|
{
|
||||||
pixman_format_code_t fmt = qemu_default_pixman_format(bpp, true);
|
pixman_format_code_t fmt = qemu_default_pixman_format(bpp, true);
|
||||||
|
|
|
@ -121,15 +121,6 @@ static void cookey(register unsigned long *raw1)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cpkey(register unsigned long *into)
|
|
||||||
{
|
|
||||||
register unsigned long *from, *endp;
|
|
||||||
|
|
||||||
from = KnL, endp = &KnL[32];
|
|
||||||
while( from < endp ) *into++ = *from++;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void usekey(register unsigned long *from)
|
void usekey(register unsigned long *from)
|
||||||
{
|
{
|
||||||
register unsigned long *to, *endp;
|
register unsigned long *to, *endp;
|
||||||
|
|
|
@ -36,12 +36,6 @@ void usekey(unsigned long *);
|
||||||
* Loads the internal key register with the data in cookedkey.
|
* Loads the internal key register with the data in cookedkey.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void cpkey(unsigned long *);
|
|
||||||
/* cookedkey[32]
|
|
||||||
* Copies the contents of the internal key register into the storage
|
|
||||||
* located at &cookedkey[0].
|
|
||||||
*/
|
|
||||||
|
|
||||||
void des(unsigned char *, unsigned char *);
|
void des(unsigned char *, unsigned char *);
|
||||||
/* from[8] to[8]
|
/* from[8] to[8]
|
||||||
* Encrypts/Decrypts (according to the key currently loaded in the
|
* Encrypts/Decrypts (according to the key currently loaded in the
|
||||||
|
|
|
@ -143,12 +143,6 @@ QEMUPutKbdEntry *qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
void qemu_remove_kbd_event_handler(QEMUPutKbdEntry *entry)
|
|
||||||
{
|
|
||||||
qemu_input_handler_unregister(entry->s);
|
|
||||||
g_free(entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void legacy_mouse_event(DeviceState *dev, QemuConsole *src,
|
static void legacy_mouse_event(DeviceState *dev, QemuConsole *src,
|
||||||
InputEvent *evt)
|
InputEvent *evt)
|
||||||
{
|
{
|
||||||
|
|
|
@ -342,16 +342,3 @@ void vnc_start_worker_thread(void)
|
||||||
QEMU_THREAD_DETACHED);
|
QEMU_THREAD_DETACHED);
|
||||||
queue = q; /* Set global queue */
|
queue = q; /* Set global queue */
|
||||||
}
|
}
|
||||||
|
|
||||||
void vnc_stop_worker_thread(void)
|
|
||||||
{
|
|
||||||
if (!vnc_worker_thread_running())
|
|
||||||
return ;
|
|
||||||
|
|
||||||
/* Remove all jobs and wake up the thread */
|
|
||||||
vnc_lock_queue(queue);
|
|
||||||
queue->exit = true;
|
|
||||||
vnc_unlock_queue(queue);
|
|
||||||
vnc_jobs_clear(NULL);
|
|
||||||
qemu_cond_broadcast(&queue->cond);
|
|
||||||
}
|
|
||||||
|
|
|
@ -40,7 +40,6 @@ void vnc_jobs_join(VncState *vs);
|
||||||
|
|
||||||
void vnc_jobs_consume_buffer(VncState *vs);
|
void vnc_jobs_consume_buffer(VncState *vs);
|
||||||
void vnc_start_worker_thread(void);
|
void vnc_start_worker_thread(void);
|
||||||
void vnc_stop_worker_thread(void);
|
|
||||||
|
|
||||||
/* Locks */
|
/* Locks */
|
||||||
static inline int vnc_trylock_display(VncDisplay *vd)
|
static inline int vnc_trylock_display(VncDisplay *vd)
|
||||||
|
|
|
@ -404,6 +404,7 @@ static const name2keysym_t name2keysym[]={
|
||||||
{"breve", 0x01a2}, /* U+02D8 BREVE */
|
{"breve", 0x01a2}, /* U+02D8 BREVE */
|
||||||
{"caron", 0x01b7}, /* U+02C7 CARON */
|
{"caron", 0x01b7}, /* U+02C7 CARON */
|
||||||
{"Ccaron", 0x01c8}, /* U+010C LATIN CAPITAL LETTER C WITH CARON */
|
{"Ccaron", 0x01c8}, /* U+010C LATIN CAPITAL LETTER C WITH CARON */
|
||||||
|
{"numerosign", 0x06b0}, /* U+2116 NUMERO SIGN */
|
||||||
{"Cyrillic_a", 0x06c1}, /* U+0430 CYRILLIC SMALL LETTER A */
|
{"Cyrillic_a", 0x06c1}, /* U+0430 CYRILLIC SMALL LETTER A */
|
||||||
{"Cyrillic_A", 0x06e1}, /* U+0410 CYRILLIC CAPITAL LETTER A */
|
{"Cyrillic_A", 0x06e1}, /* U+0410 CYRILLIC CAPITAL LETTER A */
|
||||||
{"Cyrillic_be", 0x06c2}, /* U+0431 CYRILLIC SMALL LETTER BE */
|
{"Cyrillic_be", 0x06c2}, /* U+0431 CYRILLIC SMALL LETTER BE */
|
||||||
|
|
|
@ -537,16 +537,17 @@ int parse_debug_env(const char *name, int max, int initial)
|
||||||
{
|
{
|
||||||
char *debug_env = getenv(name);
|
char *debug_env = getenv(name);
|
||||||
char *inv = NULL;
|
char *inv = NULL;
|
||||||
int debug;
|
long debug;
|
||||||
|
|
||||||
if (!debug_env) {
|
if (!debug_env) {
|
||||||
return initial;
|
return initial;
|
||||||
}
|
}
|
||||||
|
errno = 0;
|
||||||
debug = strtol(debug_env, &inv, 10);
|
debug = strtol(debug_env, &inv, 10);
|
||||||
if (inv == debug_env) {
|
if (inv == debug_env) {
|
||||||
return initial;
|
return initial;
|
||||||
}
|
}
|
||||||
if (debug < 0 || debug > max) {
|
if (debug < 0 || debug > max || errno != 0) {
|
||||||
fprintf(stderr, "warning: %s not in [0, %d]", name, max);
|
fprintf(stderr, "warning: %s not in [0, %d]", name, max);
|
||||||
return initial;
|
return initial;
|
||||||
}
|
}
|
||||||
|
|
|
@ -399,10 +399,10 @@ void os_mem_prealloc(int fd, char *area, size_t memory)
|
||||||
} else {
|
} else {
|
||||||
int i;
|
int i;
|
||||||
size_t hpagesize = fd_getpagesize(fd);
|
size_t hpagesize = fd_getpagesize(fd);
|
||||||
|
size_t numpages = DIV_ROUND_UP(memory, hpagesize);
|
||||||
|
|
||||||
/* MAP_POPULATE silently ignores failures */
|
/* MAP_POPULATE silently ignores failures */
|
||||||
memory = (memory + hpagesize - 1) & -hpagesize;
|
for (i = 0; i < numpages; i++) {
|
||||||
for (i = 0; i < (memory / hpagesize); i++) {
|
|
||||||
memset(area + (hpagesize * i), 0, 1);
|
memset(area + (hpagesize * i), 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,10 +30,6 @@ void xen_hvm_inject_msi(uint64_t addr, uint32_t data)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void xen_cmos_set_s3_resume(void *opaque, int irq, int level)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, MemoryRegion *mr)
|
void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, MemoryRegion *mr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue