mirror of https://github.com/xemu-project/xemu.git
HMP pull
Note, I had seen a fail in the vhost-user/flags-mismatch on one host in one build, but not others with the same patches; and these patches go nowhere near that, so I think that's a separate vhost-user issue. -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJYrIu1AAoJEAUWMx68W/3nijIQAKZx3O1qPo4l9Fwl/Tkzb3ub jeLlJnujBmI4MfdDZmhOPs4vXSTXC7MqCpTUsOzKGbeXbikZK1Jq/dMT2/7s9DMU Vz7JjOMdpfINk34ObeurVa7HUIUpcZH+M1wR0sD7EzL/0qlkonH+J2f5496EZ9Qu kXND4PHx+KWOPPpFpvngOvrdPB+YPFD0tr4/tQt/rlsUgeEbAGmadeEiLem8I6ul U0/cPWG7nU4h2hxxky1qxReDefDluFLFBeBxf2cvRlkXQAakDzatyYS8OTACdnH2 AeTyn2L3xZR5CZTF7IPIjkGuHGmMfeyxbACxCG3tyArqjWN/Wkr0REeH17171B/G aa4pYD4nEmoR0nKfWtXnNPL4Zcrkjq2b1mmjYFqAQ4Fu5IGGXpOgIMT3ldn62G/m sGnevWMmy1XpMqt4OTmX+sJqhZOg3DgNGKeyEH61XcW8bSFqSAlVwokVxr//3Coz SyH8zmXjhNIWUAyZLzYhtHpq9mhIVc/4wSZOUc40ztkXblDARfhmR3bXzmecqkfL 69gn4TSqSD/0yuiWiBr+tkWXhm6hKD1fcZ/lgoN4KCvbQVvGAn2596PrSN5dKSvT d9LsnxS3S/x0rHKlydxJxGrKAU4BKD/03+TYK9CRWaQD3pyaK9QFNHNRHr5FIZzG lYa52qL4Sr4iqa5Fc0Sc =eKOl -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/dgilbert/tags/pull-hmp-20170221' into staging HMP pull Note, I had seen a fail in the vhost-user/flags-mismatch on one host in one build, but not others with the same patches; and these patches go nowhere near that, so I think that's a separate vhost-user issue. # gpg: Signature made Tue 21 Feb 2017 18:49:25 GMT # gpg: using RSA key 0x0516331EBC5BFDE7 # gpg: Good signature from "Dr. David Alan Gilbert (RH2) <dgilbert@redhat.com>" # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 45F5 C71B 4A0C B7FB 977A 9FA9 0516 331E BC5B FDE7 * remotes/dgilbert/tags/pull-hmp-20170221: monitor: Fix crashes when using HMP commands without CPU monitor: add poll-* properties into query-iothreads result hmp: fix block_set_io_throttle Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
e295a154c2
18
hmp.c
18
hmp.c
|
@ -1014,8 +1014,14 @@ void hmp_memsave(Monitor *mon, const QDict *qdict)
|
|||
const char *filename = qdict_get_str(qdict, "filename");
|
||||
uint64_t addr = qdict_get_int(qdict, "val");
|
||||
Error *err = NULL;
|
||||
int cpu_index = monitor_get_cpu_index();
|
||||
|
||||
qmp_memsave(addr, size, filename, true, monitor_get_cpu_index(), &err);
|
||||
if (cpu_index < 0) {
|
||||
monitor_printf(mon, "No CPU available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
qmp_memsave(addr, size, filename, true, cpu_index, &err);
|
||||
hmp_handle_error(mon, &err);
|
||||
}
|
||||
|
||||
|
@ -1552,6 +1558,7 @@ void hmp_block_set_io_throttle(Monitor *mon, const QDict *qdict)
|
|||
{
|
||||
Error *err = NULL;
|
||||
BlockIOThrottle throttle = {
|
||||
.has_device = true,
|
||||
.device = (char *) qdict_get_str(qdict, "device"),
|
||||
.bps = qdict_get_int(qdict, "bps"),
|
||||
.bps_rd = qdict_get_int(qdict, "bps_rd"),
|
||||
|
@ -2148,10 +2155,15 @@ void hmp_info_iothreads(Monitor *mon, const QDict *qdict)
|
|||
{
|
||||
IOThreadInfoList *info_list = qmp_query_iothreads(NULL);
|
||||
IOThreadInfoList *info;
|
||||
IOThreadInfo *value;
|
||||
|
||||
for (info = info_list; info; info = info->next) {
|
||||
monitor_printf(mon, "%s: thread_id=%" PRId64 "\n",
|
||||
info->value->id, info->value->thread_id);
|
||||
value = info->value;
|
||||
monitor_printf(mon, "%s:\n", value->id);
|
||||
monitor_printf(mon, " thread_id=%" PRId64 "\n", value->thread_id);
|
||||
monitor_printf(mon, " poll-max-ns=%" PRId64 "\n", value->poll_max_ns);
|
||||
monitor_printf(mon, " poll-grow=%" PRId64 "\n", value->poll_grow);
|
||||
monitor_printf(mon, " poll-shrink=%" PRId64 "\n", value->poll_shrink);
|
||||
}
|
||||
|
||||
qapi_free_IOThreadInfoList(info_list);
|
||||
|
|
|
@ -268,6 +268,9 @@ static int query_one_iothread(Object *object, void *opaque)
|
|||
info = g_new0(IOThreadInfo, 1);
|
||||
info->id = iothread_get_id(iothread);
|
||||
info->thread_id = iothread->thread_id;
|
||||
info->poll_max_ns = iothread->poll_max_ns;
|
||||
info->poll_grow = iothread->poll_grow;
|
||||
info->poll_shrink = iothread->poll_shrink;
|
||||
|
||||
elem = g_new0(IOThreadInfoList, 1);
|
||||
elem->value = info;
|
||||
|
|
42
monitor.c
42
monitor.c
|
@ -1026,6 +1026,9 @@ int monitor_set_cpu(int cpu_index)
|
|||
CPUState *mon_get_cpu(void)
|
||||
{
|
||||
if (!cur_mon->mon_cpu) {
|
||||
if (!first_cpu) {
|
||||
return NULL;
|
||||
}
|
||||
monitor_set_cpu(first_cpu->cpu_index);
|
||||
}
|
||||
cpu_synchronize_state(cur_mon->mon_cpu);
|
||||
|
@ -1034,17 +1037,27 @@ CPUState *mon_get_cpu(void)
|
|||
|
||||
CPUArchState *mon_get_cpu_env(void)
|
||||
{
|
||||
return mon_get_cpu()->env_ptr;
|
||||
CPUState *cs = mon_get_cpu();
|
||||
|
||||
return cs ? cs->env_ptr : NULL;
|
||||
}
|
||||
|
||||
int monitor_get_cpu_index(void)
|
||||
{
|
||||
return mon_get_cpu()->cpu_index;
|
||||
CPUState *cs = mon_get_cpu();
|
||||
|
||||
return cs ? cs->cpu_index : UNASSIGNED_CPU_INDEX;
|
||||
}
|
||||
|
||||
static void hmp_info_registers(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
cpu_dump_state(mon_get_cpu(), (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
|
||||
CPUState *cs = mon_get_cpu();
|
||||
|
||||
if (!cs) {
|
||||
monitor_printf(mon, "No CPU available\n");
|
||||
return;
|
||||
}
|
||||
cpu_dump_state(cs, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
|
||||
}
|
||||
|
||||
static void hmp_info_jit(Monitor *mon, const QDict *qdict)
|
||||
|
@ -1077,7 +1090,13 @@ static void hmp_info_history(Monitor *mon, const QDict *qdict)
|
|||
|
||||
static void hmp_info_cpustats(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
cpu_dump_statistics(mon_get_cpu(), (FILE *)mon, &monitor_fprintf, 0);
|
||||
CPUState *cs = mon_get_cpu();
|
||||
|
||||
if (!cs) {
|
||||
monitor_printf(mon, "No CPU available\n");
|
||||
return;
|
||||
}
|
||||
cpu_dump_statistics(cs, (FILE *)mon, &monitor_fprintf, 0);
|
||||
}
|
||||
|
||||
static void hmp_info_trace_events(Monitor *mon, const QDict *qdict)
|
||||
|
@ -1236,6 +1255,12 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize,
|
|||
int l, line_size, i, max_digits, len;
|
||||
uint8_t buf[16];
|
||||
uint64_t v;
|
||||
CPUState *cs = mon_get_cpu();
|
||||
|
||||
if (!cs && (format == 'i' || !is_physical)) {
|
||||
monitor_printf(mon, "Can not dump without CPU\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (format == 'i') {
|
||||
int flags = 0;
|
||||
|
@ -1265,7 +1290,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize,
|
|||
flags = msr_le << 16;
|
||||
flags |= env->bfd_mach;
|
||||
#endif
|
||||
monitor_disas(mon, mon_get_cpu(), addr, count, is_physical, flags);
|
||||
monitor_disas(mon, cs, addr, count, is_physical, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1304,7 +1329,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize,
|
|||
if (is_physical) {
|
||||
cpu_physical_memory_read(addr, buf, l);
|
||||
} else {
|
||||
if (cpu_memory_rw_debug(mon_get_cpu(), addr, buf, l, 0) < 0) {
|
||||
if (cpu_memory_rw_debug(cs, addr, buf, l, 0) < 0) {
|
||||
monitor_printf(mon, " Cannot access memory\n");
|
||||
break;
|
||||
}
|
||||
|
@ -2189,11 +2214,12 @@ expr_error(Monitor *mon, const char *fmt, ...)
|
|||
static int get_monitor_def(target_long *pval, const char *name)
|
||||
{
|
||||
const MonitorDef *md = target_monitor_defs();
|
||||
CPUState *cs = mon_get_cpu();
|
||||
void *ptr;
|
||||
uint64_t tmp = 0;
|
||||
int ret;
|
||||
|
||||
if (md == NULL) {
|
||||
if (cs == NULL || md == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -2220,7 +2246,7 @@ static int get_monitor_def(target_long *pval, const char *name)
|
|||
}
|
||||
}
|
||||
|
||||
ret = target_get_monitor_def(mon_get_cpu(), name, &tmp);
|
||||
ret = target_get_monitor_def(cs, name, &tmp);
|
||||
if (!ret) {
|
||||
*pval = (target_long) tmp;
|
||||
}
|
||||
|
|
|
@ -1427,10 +1427,23 @@
|
|||
#
|
||||
# @thread-id: ID of the underlying host thread
|
||||
#
|
||||
# @poll-max-ns: maximum polling time in ns, 0 means polling is disabled
|
||||
# (since 2.9)
|
||||
#
|
||||
# @poll-grow: how many ns will be added to polling time, 0 means that it's not
|
||||
# configured (since 2.9)
|
||||
#
|
||||
# @poll-shrink: how many ns will be removed from polling time, 0 means that
|
||||
# it's not configured (since 2.9)
|
||||
#
|
||||
# Since: 2.0
|
||||
##
|
||||
{ 'struct': 'IOThreadInfo',
|
||||
'data': {'id': 'str', 'thread-id': 'int'} }
|
||||
'data': {'id': 'str',
|
||||
'thread-id': 'int',
|
||||
'poll-max-ns': 'int',
|
||||
'poll-grow': 'int',
|
||||
'poll-shrink': 'int' } }
|
||||
|
||||
##
|
||||
# @query-iothreads:
|
||||
|
|
|
@ -210,6 +210,10 @@ void hmp_info_tlb(Monitor *mon, const QDict *qdict)
|
|||
CPUArchState *env;
|
||||
|
||||
env = mon_get_cpu_env();
|
||||
if (!env) {
|
||||
monitor_printf(mon, "No CPU available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(env->cr[0] & CR0_PG_MASK)) {
|
||||
monitor_printf(mon, "PG disabled\n");
|
||||
|
@ -529,6 +533,10 @@ void hmp_info_mem(Monitor *mon, const QDict *qdict)
|
|||
CPUArchState *env;
|
||||
|
||||
env = mon_get_cpu_env();
|
||||
if (!env) {
|
||||
monitor_printf(mon, "No CPU available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(env->cr[0] & CR0_PG_MASK)) {
|
||||
monitor_printf(mon, "PG disabled\n");
|
||||
|
@ -624,7 +632,13 @@ const MonitorDef *target_monitor_defs(void)
|
|||
|
||||
void hmp_info_local_apic(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
x86_cpu_dump_local_apic_state(mon_get_cpu(), (FILE *)mon, monitor_fprintf,
|
||||
CPUState *cs = mon_get_cpu();
|
||||
|
||||
if (!cs) {
|
||||
monitor_printf(mon, "No CPU available\n");
|
||||
return;
|
||||
}
|
||||
x86_cpu_dump_local_apic_state(cs, (FILE *)mon, monitor_fprintf,
|
||||
CPU_DUMP_FPU);
|
||||
}
|
||||
|
||||
|
|
|
@ -62,6 +62,10 @@ void hmp_info_tlb(Monitor *mon, const QDict *qdict)
|
|||
{
|
||||
CPUArchState *env1 = mon_get_cpu_env();
|
||||
|
||||
if (!env1) {
|
||||
monitor_printf(mon, "No CPU available\n");
|
||||
return;
|
||||
}
|
||||
dump_mmu((FILE*)mon, (fprintf_function)monitor_printf, env1);
|
||||
}
|
||||
|
||||
|
|
|
@ -44,6 +44,11 @@ void hmp_info_tlb(Monitor *mon, const QDict *qdict)
|
|||
CPUArchState *env = mon_get_cpu_env();
|
||||
int i;
|
||||
|
||||
if (!env) {
|
||||
monitor_printf(mon, "No CPU available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
monitor_printf (mon, "ITLB:\n");
|
||||
for (i = 0 ; i < ITLB_SIZE ; i++)
|
||||
print_tlb (mon, i, &env->itlb[i]);
|
||||
|
|
|
@ -32,6 +32,10 @@ void hmp_info_tlb(Monitor *mon, const QDict *qdict)
|
|||
{
|
||||
CPUArchState *env1 = mon_get_cpu_env();
|
||||
|
||||
if (!env1) {
|
||||
monitor_printf(mon, "No CPU available\n");
|
||||
return;
|
||||
}
|
||||
dump_mmu((FILE*)mon, (fprintf_function)monitor_printf, env1);
|
||||
}
|
||||
|
||||
|
|
|
@ -31,5 +31,9 @@ void hmp_info_tlb(Monitor *mon, const QDict *qdict)
|
|||
{
|
||||
CPUArchState *env1 = mon_get_cpu_env();
|
||||
|
||||
if (!env1) {
|
||||
monitor_printf(mon, "No CPU available\n");
|
||||
return;
|
||||
}
|
||||
dump_mmu((FILE*)mon, (fprintf_function)monitor_printf, env1);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue