* [Qemu-devel] [PATCH 1/6] monitor: Don't check for mon_get_cpu() failure
2010-01-15 16:25 [Qemu-devel] [PATCH 0/6] Convert memsave, pmemsave, cpu to QObject+QError Markus Armbruster
@ 2010-01-15 16:25 ` Markus Armbruster
2010-01-15 16:25 ` [Qemu-devel] [PATCH 2/6] QError: New QERR_FOPEN_FAILED Markus Armbruster
` (4 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2010-01-15 16:25 UTC (permalink / raw)
To: qemu-devel
mon_get_cpu() can't return null pointer, because it passes its return
value to cpu_synchronize_state() first, which crashes if its argument
is null.
Remove the (pretty cheesy) handling of this non-existing error.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
monitor.c | 39 +++------------------------------------
1 files changed, 3 insertions(+), 36 deletions(-)
diff --git a/monitor.c b/monitor.c
index b824e7c..988de73 100644
--- a/monitor.c
+++ b/monitor.c
@@ -682,8 +682,6 @@ static void do_info_registers(Monitor *mon)
{
CPUState *env;
env = mon_get_cpu();
- if (!env)
- return;
#ifdef TARGET_I386
cpu_dump_state(env, (FILE *)mon, monitor_fprintf,
X86_DUMP_FPU);
@@ -1117,7 +1115,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize,
int flags;
flags = 0;
env = mon_get_cpu();
- if (!env && !is_physical)
+ if (!is_physical)
return;
#ifdef TARGET_I386
if (wsize == 2) {
@@ -1179,8 +1177,6 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize,
cpu_physical_memory_rw(addr, buf, l, 0);
} else {
env = mon_get_cpu();
- if (!env)
- break;
if (cpu_memory_rw_debug(env, addr, buf, l, 0) < 0) {
monitor_printf(mon, " Cannot access memory\n");
break;
@@ -1307,8 +1303,6 @@ static void do_memory_save(Monitor *mon, const QDict *qdict, QObject **ret_data)
uint8_t buf[1024];
env = mon_get_cpu();
- if (!env)
- return;
f = fopen(filename, "wb");
if (!f) {
@@ -1743,8 +1737,6 @@ static void tlb_info(Monitor *mon)
uint32_t pgd, pde, pte;
env = mon_get_cpu();
- if (!env)
- return;
if (!(env->cr[0] & CR0_PG_MASK)) {
monitor_printf(mon, "PG disabled\n");
@@ -1801,8 +1793,6 @@ static void mem_info(Monitor *mon)
uint32_t pgd, pde, pte, start, end;
env = mon_get_cpu();
- if (!env)
- return;
if (!(env->cr[0] & CR0_PG_MASK)) {
monitor_printf(mon, "PG disabled\n");
@@ -2648,8 +2638,6 @@ typedef struct MonitorDef {
static target_long monitor_get_pc (const struct MonitorDef *md, int val)
{
CPUState *env = mon_get_cpu();
- if (!env)
- return 0;
return env->eip + env->segs[R_CS].base;
}
#endif
@@ -2661,9 +2649,6 @@ static target_long monitor_get_ccr (const struct MonitorDef *md, int val)
unsigned int u;
int i;
- if (!env)
- return 0;
-
u = 0;
for (i = 0; i < 8; i++)
u |= env->crf[i] << (32 - (4 * i));
@@ -2674,40 +2659,30 @@ static target_long monitor_get_ccr (const struct MonitorDef *md, int val)
static target_long monitor_get_msr (const struct MonitorDef *md, int val)
{
CPUState *env = mon_get_cpu();
- if (!env)
- return 0;
return env->msr;
}
static target_long monitor_get_xer (const struct MonitorDef *md, int val)
{
CPUState *env = mon_get_cpu();
- if (!env)
- return 0;
return env->xer;
}
static target_long monitor_get_decr (const struct MonitorDef *md, int val)
{
CPUState *env = mon_get_cpu();
- if (!env)
- return 0;
return cpu_ppc_load_decr(env);
}
static target_long monitor_get_tbu (const struct MonitorDef *md, int val)
{
CPUState *env = mon_get_cpu();
- if (!env)
- return 0;
return cpu_ppc_load_tbu(env);
}
static target_long monitor_get_tbl (const struct MonitorDef *md, int val)
{
CPUState *env = mon_get_cpu();
- if (!env)
- return 0;
return cpu_ppc_load_tbl(env);
}
#endif
@@ -2717,8 +2692,6 @@ static target_long monitor_get_tbl (const struct MonitorDef *md, int val)
static target_long monitor_get_psr (const struct MonitorDef *md, int val)
{
CPUState *env = mon_get_cpu();
- if (!env)
- return 0;
return GET_PSR(env);
}
#endif
@@ -2726,8 +2699,6 @@ static target_long monitor_get_psr (const struct MonitorDef *md, int val)
static target_long monitor_get_reg(const struct MonitorDef *md, int val)
{
CPUState *env = mon_get_cpu();
- if (!env)
- return 0;
return env->regwptr[val];
}
#endif
@@ -2979,7 +2950,7 @@ static void expr_error(Monitor *mon, const char *msg)
longjmp(expr_env, 1);
}
-/* return 0 if OK, -1 if not found, -2 if no CPU defined */
+/* return 0 if OK, -1 if not found */
static int get_monitor_def(target_long *pval, const char *name)
{
const MonitorDef *md;
@@ -2991,8 +2962,6 @@ static int get_monitor_def(target_long *pval, const char *name)
*pval = md->get_value(md, md->offset);
} else {
CPUState *env = mon_get_cpu();
- if (!env)
- return -2;
ptr = (uint8_t *)env + md->offset;
switch(md->type) {
case MD_I32:
@@ -3079,10 +3048,8 @@ static int64_t expr_unary(Monitor *mon)
pch++;
*q = 0;
ret = get_monitor_def(®, buf);
- if (ret == -1)
+ if (ret < 0)
expr_error(mon, "unknown register");
- else if (ret == -2)
- expr_error(mon, "no cpu defined");
n = reg;
}
break;
--
1.6.5.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH 2/6] QError: New QERR_FOPEN_FAILED
2010-01-15 16:25 [Qemu-devel] [PATCH 0/6] Convert memsave, pmemsave, cpu to QObject+QError Markus Armbruster
2010-01-15 16:25 ` [Qemu-devel] [PATCH 1/6] monitor: Don't check for mon_get_cpu() failure Markus Armbruster
@ 2010-01-15 16:25 ` Markus Armbruster
2010-01-18 14:23 ` Luiz Capitulino
2010-01-15 16:25 ` [Qemu-devel] [PATCH 3/6] monitor: convert do_memory_save() to QError Markus Armbruster
` (3 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Markus Armbruster @ 2010-01-15 16:25 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
qerror.c | 4 ++++
qerror.h | 3 +++
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/qerror.c b/qerror.c
index 5f8fc5d..e7b8ca7 100644
--- a/qerror.c
+++ b/qerror.c
@@ -73,6 +73,10 @@ static const QErrorStringTable qerror_table[] = {
.desc = "No file descriptor supplied via SCM_RIGHTS",
},
{
+ .error_fmt = QERR_FOPEN_FAILED,
+ .desc = "Could not open '%{filename}'",
+ },
+ {
.error_fmt = QERR_INVALID_BLOCK_FORMAT,
.desc = "Invalid block format %(name)",
},
diff --git a/qerror.h b/qerror.h
index 9e220d6..8701570 100644
--- a/qerror.h
+++ b/qerror.h
@@ -64,6 +64,9 @@ QError *qobject_to_qerror(const QObject *obj);
#define QERR_FD_NOT_SUPPLIED \
"{ 'class': 'FdNotSupplied', 'data': {} }"
+#define QERR_FOPEN_FAILED \
+ "{ 'class': 'FopenFailed', 'data': { 'filename': %s } }"
+
#define QERR_INVALID_BLOCK_FORMAT \
"{ 'class': 'InvalidBlockFormat', 'data': { 'name': %s } }"
--
1.6.5.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH 2/6] QError: New QERR_FOPEN_FAILED
2010-01-15 16:25 ` [Qemu-devel] [PATCH 2/6] QError: New QERR_FOPEN_FAILED Markus Armbruster
@ 2010-01-18 14:23 ` Luiz Capitulino
2010-01-18 14:38 ` Luiz Capitulino
2010-01-18 14:52 ` Markus Armbruster
0 siblings, 2 replies; 11+ messages in thread
From: Luiz Capitulino @ 2010-01-18 14:23 UTC (permalink / raw)
To: Markus Armbruster; +Cc: qemu-devel
On Fri, 15 Jan 2010 17:25:25 +0100
Markus Armbruster <armbru@redhat.com> wrote:
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
> qerror.c | 4 ++++
> qerror.h | 3 +++
> 2 files changed, 7 insertions(+), 0 deletions(-)
>
> diff --git a/qerror.c b/qerror.c
> index 5f8fc5d..e7b8ca7 100644
> --- a/qerror.c
> +++ b/qerror.c
> @@ -73,6 +73,10 @@ static const QErrorStringTable qerror_table[] = {
> .desc = "No file descriptor supplied via SCM_RIGHTS",
> },
> {
> + .error_fmt = QERR_FOPEN_FAILED,
> + .desc = "Could not open '%{filename}'",
> + },
Shouldn't this be something like QERR_OPEN_FAILED, so that we
can use the same error for all open functions?
Also, we have to think a way to specify the reason from errno.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH 2/6] QError: New QERR_FOPEN_FAILED
2010-01-18 14:23 ` Luiz Capitulino
@ 2010-01-18 14:38 ` Luiz Capitulino
2010-01-18 14:52 ` Markus Armbruster
1 sibling, 0 replies; 11+ messages in thread
From: Luiz Capitulino @ 2010-01-18 14:38 UTC (permalink / raw)
To: Markus Armbruster; +Cc: qemu-devel
On Mon, 18 Jan 2010 12:23:28 -0200
Luiz Capitulino <lcapitulino@redhat.com> wrote:
> On Fri, 15 Jan 2010 17:25:25 +0100
> Markus Armbruster <armbru@redhat.com> wrote:
>
> >
> > Signed-off-by: Markus Armbruster <armbru@redhat.com>
> > ---
> > qerror.c | 4 ++++
> > qerror.h | 3 +++
> > 2 files changed, 7 insertions(+), 0 deletions(-)
> >
> > diff --git a/qerror.c b/qerror.c
> > index 5f8fc5d..e7b8ca7 100644
> > --- a/qerror.c
> > +++ b/qerror.c
> > @@ -73,6 +73,10 @@ static const QErrorStringTable qerror_table[] = {
> > .desc = "No file descriptor supplied via SCM_RIGHTS",
> > },
> > {
> > + .error_fmt = QERR_FOPEN_FAILED,
> > + .desc = "Could not open '%{filename}'",
> > + },
>
> Shouldn't this be something like QERR_OPEN_FAILED, so that we
> can use the same error for all open functions?
Something I forgot to mention, 'FopenFailed' doesn't seem
interesting to clients. Maybe 'OpenFileFailed'?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH 2/6] QError: New QERR_FOPEN_FAILED
2010-01-18 14:23 ` Luiz Capitulino
2010-01-18 14:38 ` Luiz Capitulino
@ 2010-01-18 14:52 ` Markus Armbruster
2010-01-18 16:49 ` Luiz Capitulino
1 sibling, 1 reply; 11+ messages in thread
From: Markus Armbruster @ 2010-01-18 14:52 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: qemu-devel
Luiz Capitulino <lcapitulino@redhat.com> writes:
> On Fri, 15 Jan 2010 17:25:25 +0100
> Markus Armbruster <armbru@redhat.com> wrote:
>
>>
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>> qerror.c | 4 ++++
>> qerror.h | 3 +++
>> 2 files changed, 7 insertions(+), 0 deletions(-)
>>
>> diff --git a/qerror.c b/qerror.c
>> index 5f8fc5d..e7b8ca7 100644
>> --- a/qerror.c
>> +++ b/qerror.c
>> @@ -73,6 +73,10 @@ static const QErrorStringTable qerror_table[] = {
>> .desc = "No file descriptor supplied via SCM_RIGHTS",
>> },
>> {
>> + .error_fmt = QERR_FOPEN_FAILED,
>> + .desc = "Could not open '%{filename}'",
>> + },
>
> Shouldn't this be something like QERR_OPEN_FAILED, so that we
> can use the same error for all open functions?
Whatever name you like best. The intention is certainly to use this for
*file* open errors regardless of the precise function used to open.
> Also, we have to think a way to specify the reason from errno.
Yes only if client programs use this for handling the error, not just to
pass it to a human user.
Although most errors are standardized, their numeric encoding is not, so
we can't just transmit errno. strerror() is right out, because that's
for humans.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH 2/6] QError: New QERR_FOPEN_FAILED
2010-01-18 14:52 ` Markus Armbruster
@ 2010-01-18 16:49 ` Luiz Capitulino
0 siblings, 0 replies; 11+ messages in thread
From: Luiz Capitulino @ 2010-01-18 16:49 UTC (permalink / raw)
To: Markus Armbruster; +Cc: qemu-devel
On Mon, 18 Jan 2010 15:52:13 +0100
Markus Armbruster <armbru@redhat.com> wrote:
> Luiz Capitulino <lcapitulino@redhat.com> writes:
>
> > On Fri, 15 Jan 2010 17:25:25 +0100
> > Markus Armbruster <armbru@redhat.com> wrote:
> >
> >>
> >> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> >> ---
> >> qerror.c | 4 ++++
> >> qerror.h | 3 +++
> >> 2 files changed, 7 insertions(+), 0 deletions(-)
> >>
> >> diff --git a/qerror.c b/qerror.c
> >> index 5f8fc5d..e7b8ca7 100644
> >> --- a/qerror.c
> >> +++ b/qerror.c
> >> @@ -73,6 +73,10 @@ static const QErrorStringTable qerror_table[] = {
> >> .desc = "No file descriptor supplied via SCM_RIGHTS",
> >> },
> >> {
> >> + .error_fmt = QERR_FOPEN_FAILED,
> >> + .desc = "Could not open '%{filename}'",
> >> + },
> >
> > Shouldn't this be something like QERR_OPEN_FAILED, so that we
> > can use the same error for all open functions?
>
> Whatever name you like best. The intention is certainly to use this for
> *file* open errors regardless of the precise function used to open.
Probably OpenFileFailed or CantOpenFile.
> > Also, we have to think a way to specify the reason from errno.
>
> Yes only if client programs use this for handling the error, not just to
> pass it to a human user.
>
> Although most errors are standardized, their numeric encoding is not, so
> we can't just transmit errno. strerror() is right out, because that's
> for humans.
IIRC we had a conversation about this and the conclusion was that we
will need our own qerror_strerror() or something like that.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH 3/6] monitor: convert do_memory_save() to QError
2010-01-15 16:25 [Qemu-devel] [PATCH 0/6] Convert memsave, pmemsave, cpu to QObject+QError Markus Armbruster
2010-01-15 16:25 ` [Qemu-devel] [PATCH 1/6] monitor: Don't check for mon_get_cpu() failure Markus Armbruster
2010-01-15 16:25 ` [Qemu-devel] [PATCH 2/6] QError: New QERR_FOPEN_FAILED Markus Armbruster
@ 2010-01-15 16:25 ` Markus Armbruster
2010-01-15 16:25 ` [Qemu-devel] [PATCH 4/6] monitor: convert do_physical_memory_save() " Markus Armbruster
` (2 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2010-01-15 16:25 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
monitor.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/monitor.c b/monitor.c
index 988de73..2da3800 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1306,7 +1306,7 @@ static void do_memory_save(Monitor *mon, const QDict *qdict, QObject **ret_data)
f = fopen(filename, "wb");
if (!f) {
- monitor_printf(mon, "could not open '%s'\n", filename);
+ qemu_error_new(QERR_FOPEN_FAILED, filename);
return;
}
while (size != 0) {
--
1.6.5.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH 4/6] monitor: convert do_physical_memory_save() to QError
2010-01-15 16:25 [Qemu-devel] [PATCH 0/6] Convert memsave, pmemsave, cpu to QObject+QError Markus Armbruster
` (2 preceding siblings ...)
2010-01-15 16:25 ` [Qemu-devel] [PATCH 3/6] monitor: convert do_memory_save() to QError Markus Armbruster
@ 2010-01-15 16:25 ` Markus Armbruster
2010-01-15 16:25 ` [Qemu-devel] [PATCH 5/6] QError: New QERR_INVALID_CPU_INDEX Markus Armbruster
2010-01-15 16:25 ` [Qemu-devel] [PATCH 6/6] monitor: convert do_cpu_set() to QObject, QError Markus Armbruster
5 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2010-01-15 16:25 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
monitor.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/monitor.c b/monitor.c
index 2da3800..6664a04 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1333,7 +1333,7 @@ static void do_physical_memory_save(Monitor *mon, const QDict *qdict,
f = fopen(filename, "wb");
if (!f) {
- monitor_printf(mon, "could not open '%s'\n", filename);
+ qemu_error_new(QERR_FOPEN_FAILED, filename);
return;
}
while (size != 0) {
--
1.6.5.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH 5/6] QError: New QERR_INVALID_CPU_INDEX
2010-01-15 16:25 [Qemu-devel] [PATCH 0/6] Convert memsave, pmemsave, cpu to QObject+QError Markus Armbruster
` (3 preceding siblings ...)
2010-01-15 16:25 ` [Qemu-devel] [PATCH 4/6] monitor: convert do_physical_memory_save() " Markus Armbruster
@ 2010-01-15 16:25 ` Markus Armbruster
2010-01-15 16:25 ` [Qemu-devel] [PATCH 6/6] monitor: convert do_cpu_set() to QObject, QError Markus Armbruster
5 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2010-01-15 16:25 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
qerror.c | 4 ++++
qerror.h | 3 +++
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/qerror.c b/qerror.c
index e7b8ca7..1c0b35e 100644
--- a/qerror.c
+++ b/qerror.c
@@ -81,6 +81,10 @@ static const QErrorStringTable qerror_table[] = {
.desc = "Invalid block format %(name)",
},
{
+ .error_fmt = QERR_INVALID_CPU_INDEX,
+ .desc = "Invalid CPU index",
+ },
+ {
.error_fmt = QERR_INVALID_PARAMETER,
.desc = "Invalid parameter %(name)",
},
diff --git a/qerror.h b/qerror.h
index 8701570..7cae922 100644
--- a/qerror.h
+++ b/qerror.h
@@ -70,6 +70,9 @@ QError *qobject_to_qerror(const QObject *obj);
#define QERR_INVALID_BLOCK_FORMAT \
"{ 'class': 'InvalidBlockFormat', 'data': { 'name': %s } }"
+#define QERR_INVALID_CPU_INDEX \
+ "{ 'class': 'InvalidCPUIndex', 'data': {} }"
+
#define QERR_INVALID_PARAMETER \
"{ 'class': 'InvalidParameter', 'data': { 'name': %s } }"
--
1.6.5.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH 6/6] monitor: convert do_cpu_set() to QObject, QError
2010-01-15 16:25 [Qemu-devel] [PATCH 0/6] Convert memsave, pmemsave, cpu to QObject+QError Markus Armbruster
` (4 preceding siblings ...)
2010-01-15 16:25 ` [Qemu-devel] [PATCH 5/6] QError: New QERR_INVALID_CPU_INDEX Markus Armbruster
@ 2010-01-15 16:25 ` Markus Armbruster
5 siblings, 0 replies; 11+ messages in thread
From: Markus Armbruster @ 2010-01-15 16:25 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
monitor.c | 4 ++--
qemu-monitor.hx | 3 ++-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/monitor.c b/monitor.c
index 6664a04..5f0a54c 100644
--- a/monitor.c
+++ b/monitor.c
@@ -797,11 +797,11 @@ static void do_info_cpus(Monitor *mon, QObject **ret_data)
*ret_data = QOBJECT(cpu_list);
}
-static void do_cpu_set(Monitor *mon, const QDict *qdict)
+static void do_cpu_set(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
int index = qdict_get_int(qdict, "index");
if (mon_set_cpu(index) < 0)
- monitor_printf(mon, "Invalid CPU index\n");
+ qemu_error_new(QERR_INVALID_CPU_INDEX);
}
static void do_info_jit(Monitor *mon)
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index 1aa7818..415734a 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -573,7 +573,8 @@ ETEXI
.args_type = "index:i",
.params = "index",
.help = "set the default CPU",
- .mhandler.cmd = do_cpu_set,
+ .user_print = monitor_user_noop,
+ .mhandler.cmd_new = do_cpu_set,
},
STEXI
--
1.6.5.2
^ permalink raw reply related [flat|nested] 11+ messages in thread