From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LQ3Cb-00029N-WB for qemu-devel@nongnu.org; Thu, 22 Jan 2009 12:18:50 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LQ3Ca-00027Y-IJ for qemu-devel@nongnu.org; Thu, 22 Jan 2009 12:18:49 -0500 Received: from [199.232.76.173] (port=40303 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LQ3Ca-00027K-25 for qemu-devel@nongnu.org; Thu, 22 Jan 2009 12:18:48 -0500 Received: from e6.ny.us.ibm.com ([32.97.182.146]:54836) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LQ3CZ-0006Me-O5 for qemu-devel@nongnu.org; Thu, 22 Jan 2009 12:18:47 -0500 Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by e6.ny.us.ibm.com (8.13.1/8.13.1) with ESMTP id n0MHJ6uB011780 for ; Thu, 22 Jan 2009 12:19:06 -0500 Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay02.pok.ibm.com (8.13.8/8.13.8/NCO v9.1) with ESMTP id n0MHIkPq130562 for ; Thu, 22 Jan 2009 12:18:46 -0500 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n0MHIkWC004808 for ; Thu, 22 Jan 2009 12:18:46 -0500 Received: from squirrel.codemonkey.ws (sig-9-65-90-232.mts.ibm.com [9.65.90.232]) by d01av03.pok.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id n0MHIjBL004788 for ; Thu, 22 Jan 2009 12:18:46 -0500 Message-ID: <4978AA6A.4060007@us.ibm.com> Date: Thu, 22 Jan 2009 11:18:34 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] Rework vm_state_change notifiers References: <4971076D.5030106@web.de> In-Reply-To: <4971076D.5030106@web.de> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Jan Kiszka wrote: > [ Now tested and found working. ] > > Enhance the vm_state_change notifier API to pass also a change reason. > This allows for replacing the vm_stop_cb with it and drop related code. > > Converting gdb_vm_stopped to gdb_vm_state_change also includes that this > callback will now officially only handle EXCP_DEBUG and EXCP_INTERRUPT > stop reasons. That allows to define and use new (non-zero) stop reasons > without disturbing the gdbstub. > Applied but this was missing a Signed-off-by. Can you send one so that there's at least a record of it in the mailing list? The missing Signed-off-by caused my scripts to eat your commit message too. Sorry about that. Regards, Anthony Liguori > --- > > audio/audio.c | 3 ++- > gdbstub.c | 11 +++++------ > sysemu.h | 6 +----- > vl.c | 29 ++++------------------------- > 4 files changed, 12 insertions(+), 37 deletions(-) > > diff --git a/audio/audio.c b/audio/audio.c > index 762c2e3..e2635c0 100644 > --- a/audio/audio.c > +++ b/audio/audio.c > @@ -1622,7 +1622,8 @@ static int audio_driver_init (AudioState *s, struct audio_driver *drv) > } > } > > -static void audio_vm_change_state_handler (void *opaque, int running) > +static void audio_vm_change_state_handler (void *opaque, int running, > + int reason) > { > AudioState *s = opaque; > HWVoiceOut *hwo = NULL; > diff --git a/gdbstub.c b/gdbstub.c > index 99a4772..bb9b405 100644 > --- a/gdbstub.c > +++ b/gdbstub.c > @@ -1867,7 +1867,7 @@ void gdb_set_stop_cpu(CPUState *env) > } > > #ifndef CONFIG_USER_ONLY > -static void gdb_vm_stopped(void *opaque, int reason) > +static void gdb_vm_state_change(void *opaque, int running, int reason) > { > GDBState *s = gdbserver_state; > CPUState *env = s->c_cpu; > @@ -1875,7 +1875,8 @@ static void gdb_vm_stopped(void *opaque, int reason) > const char *type; > int ret; > > - if (s->state == RS_SYSCALL) > + if (running || (reason != EXCP_DEBUG && reason != EXCP_INTERRUPT) || > + s->state == RS_SYSCALL) > return; > > /* disable single step if it was enable */ > @@ -1904,10 +1905,8 @@ static void gdb_vm_stopped(void *opaque, int reason) > } > tb_flush(env); > ret = GDB_SIGNAL_TRAP; > - } else if (reason == EXCP_INTERRUPT) { > - ret = GDB_SIGNAL_INT; > } else { > - ret = 0; > + ret = GDB_SIGNAL_INT; > } > snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, env->cpu_index+1); > put_packet(s, buf); > @@ -2300,7 +2299,7 @@ int gdbserver_start(const char *port) > gdbserver_state = s; > qemu_chr_add_handlers(chr, gdb_chr_can_receive, gdb_chr_receive, > gdb_chr_event, NULL); > - qemu_add_vm_stop_handler(gdb_vm_stopped, NULL); > + qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL); > return 0; > } > #endif > diff --git a/sysemu.h b/sysemu.h > index 56eb9b3..abd8e81 100644 > --- a/sysemu.h > +++ b/sysemu.h > @@ -12,16 +12,12 @@ extern uint8_t qemu_uuid[]; > #define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx" > > typedef struct vm_change_state_entry VMChangeStateEntry; > -typedef void VMChangeStateHandler(void *opaque, int running); > -typedef void VMStopHandler(void *opaque, int reason); > +typedef void VMChangeStateHandler(void *opaque, int running, int reason); > > VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb, > void *opaque); > void qemu_del_vm_change_state_handler(VMChangeStateEntry *e); > > -int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque); > -void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque); > - > void vm_start(void); > void vm_stop(int reason); > > diff --git a/vl.c b/vl.c > index 34ddc07..77f7234 100644 > --- a/vl.c > +++ b/vl.c > @@ -3420,37 +3420,21 @@ void qemu_del_vm_change_state_handler(VMChangeStateEntry *e) > qemu_free (e); > } > > -static void vm_state_notify(int running) > +static void vm_state_notify(int running, int reason) > { > VMChangeStateEntry *e; > > for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) { > - e->cb(e->opaque, running); > + e->cb(e->opaque, running, reason); > } > } > > -/* XXX: support several handlers */ > -static VMStopHandler *vm_stop_cb; > -static void *vm_stop_opaque; > - > -int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque) > -{ > - vm_stop_cb = cb; > - vm_stop_opaque = opaque; > - return 0; > -} > - > -void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque) > -{ > - vm_stop_cb = NULL; > -} > - > void vm_start(void) > { > if (!vm_running) { > cpu_enable_ticks(); > vm_running = 1; > - vm_state_notify(1); > + vm_state_notify(1, 0); > qemu_rearm_alarm_timer(alarm_timer); > } > } > @@ -3460,12 +3444,7 @@ void vm_stop(int reason) > if (vm_running) { > cpu_disable_ticks(); > vm_running = 0; > - if (reason != 0) { > - if (vm_stop_cb) { > - vm_stop_cb(vm_stop_opaque, reason); > - } > - } > - vm_state_notify(0); > + vm_state_notify(0, reason); > } > } > > > > >