Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type

2011-07-12 Thread Markus Armbruster
Luiz Capitulino lcapitul...@redhat.com writes:

 We need to track the VM status so that QMP can report it to clients.

 This commit adds the VMStatus type and related functions. The
 vm_status_set() function is used to keep track of the current
 VM status.

 The current statuses are:

Nitpicking about names, bear with me.

 - debug: guest is running under gdb
 - inmigrate: guest is paused waiting for an incoming migration

incoming-migration?

 - postmigrate: guest is paused following a successful migration

post-migrate?

 - internal-error: Fatal internal error that prevents further guest
 execution
 - load-state-error: guest is paused following a failed 'loadvm'

Less than obvious.  If you like concrete, name it loadvm-failed.  If you
like abstract, name it restore-vm-failed.

 - io-error: the last IOP has failed and the device is configured
 to pause on I/O errors
 - watchdog-error: the watchdog action is configured to pause and
   has been triggered

Sounds like the watchdog suffered an error.  watchdog-fired?

 - paused: guest has been paused via the 'stop' command

stop-command?

 - prelaunch: QEMU was started with -S and guest has not started

unstarted?

 - running: guest is actively running
 - shutdown: guest is shut down (and -no-shutdown is in use)

 Signed-off-by: Luiz Capitulino lcapitul...@redhat.com
 ---
  gdbstub.c   |4 
  hw/ide/core.c   |1 +
  hw/scsi-disk.c  |1 +
  hw/virtio-blk.c |1 +
  hw/watchdog.c   |1 +
  kvm-all.c   |1 +
  migration.c |3 +++
  monitor.c   |5 -
  sysemu.h|   19 +++
  vl.c|   37 +
  10 files changed, 72 insertions(+), 1 deletions(-)

 diff --git a/gdbstub.c b/gdbstub.c
 index c085a5a..61b700a 100644
 --- a/gdbstub.c
 +++ b/gdbstub.c
 @@ -2358,6 +2358,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, const 
 char *fmt, ...)
  s-state = RS_SYSCALL;
  #ifndef CONFIG_USER_ONLY
  vm_stop(VMSTOP_DEBUG);
 +vm_status_set(VMST_DEBUG);
  #endif
  s-state = RS_IDLE;
  va_start(va, fmt);
 @@ -2432,6 +2433,7 @@ static void gdb_read_byte(GDBState *s, int ch)
  /* when the CPU is running, we cannot do anything except stop
 it when receiving a char */
  vm_stop(VMSTOP_USER);
 +vm_status_set(VMST_DEBUG);
  } else
  #endif
  {
 @@ -2694,6 +2696,7 @@ static void gdb_chr_event(void *opaque, int event)
  switch (event) {
  case CHR_EVENT_OPENED:
  vm_stop(VMSTOP_USER);
 +vm_status_set(VMST_DEBUG);
  gdb_has_xml = 0;
  break;
  default:

Previous hunk has VMST_DEBUG with VMST_DEBUG.  Odd.

 @@ -2735,6 +2738,7 @@ static void gdb_sigterm_handler(int signal)
  {
  if (vm_running) {
  vm_stop(VMSTOP_USER);
 +vm_status_set(VMST_DEBUG);
  }
  }
  #endif
 diff --git a/hw/ide/core.c b/hw/ide/core.c
 index ca17a43..bf9df41 100644
 --- a/hw/ide/core.c
 +++ b/hw/ide/core.c
 @@ -523,6 +523,7 @@ static int ide_handle_rw_error(IDEState *s, int error, 
 int op)
  s-bus-error_status = op;
  bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
  vm_stop(VMSTOP_DISKFULL);
 +vm_status_set(VMST_IOERROR);
  } else {
  if (op  BM_STATUS_DMA_RETRY) {
  dma_buf_commit(s, 0);
 diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
 index a8c7372..66037fd 100644
 --- a/hw/scsi-disk.c
 +++ b/hw/scsi-disk.c
 @@ -216,6 +216,7 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, int 
 error, int type)
  
  bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
  vm_stop(VMSTOP_DISKFULL);
 +vm_status_set(VMST_IOERROR);
  } else {
  if (type == SCSI_REQ_STATUS_RETRY_READ) {
  scsi_req_data(r-req, 0);
 diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
 index 91e0394..bf70200 100644
 --- a/hw/virtio-blk.c
 +++ b/hw/virtio-blk.c
 @@ -79,6 +79,7 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq *req, 
 int error,
  s-rq = req;
  bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
  vm_stop(VMSTOP_DISKFULL);
 +vm_status_set(VMST_IOERROR);
  } else {
  virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
  bdrv_mon_event(s-bs, BDRV_ACTION_REPORT, is_read);
 diff --git a/hw/watchdog.c b/hw/watchdog.c
 index 1c900a1..d130cbb 100644
 --- a/hw/watchdog.c
 +++ b/hw/watchdog.c
 @@ -133,6 +133,7 @@ void watchdog_perform_action(void)
  case WDT_PAUSE: /* same as 'stop' command in monitor */
  watchdog_mon_event(pause);
  vm_stop(VMSTOP_WATCHDOG);
 +vm_status_set(VMST_WATCHDOG);
  break;
  
  case WDT_DEBUG:
 diff --git a/kvm-all.c b/kvm-all.c
 index cbc2532..aee9e0a 100644
 --- a/kvm-all.c
 +++ b/kvm-all.c
 @@ -1015,6 +1015,7 @@ int kvm_cpu_exec(CPUState *env)
  if (ret  0) {
  

Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type

2011-07-12 Thread Luiz Capitulino
On Tue, 12 Jul 2011 16:51:03 +0200
Kevin Wolf kw...@redhat.com wrote:

 Am 12.07.2011 16:25, schrieb Luiz Capitulino:
  On Tue, 12 Jul 2011 09:28:05 +0200
  Markus Armbruster arm...@redhat.com wrote:
  
  Luiz Capitulino lcapitul...@redhat.com writes:
 
  We need to track the VM status so that QMP can report it to clients.
 
  This commit adds the VMStatus type and related functions. The
  vm_status_set() function is used to keep track of the current
  VM status.
 
  The current statuses are:
 
  Nitpicking about names, bear with me.
 
  - debug: guest is running under gdb
  - inmigrate: guest is paused waiting for an incoming migration
 
  incoming-migration?
 
  - postmigrate: guest is paused following a successful migration
 
  post-migrate?
 
  - internal-error: Fatal internal error that prevents further guest
  execution
  - load-state-error: guest is paused following a failed 'loadvm'
 
  Less than obvious.  If you like concrete, name it loadvm-failed.  If you
  like abstract, name it restore-vm-failed.
  
  Ok for your suggestions above.
  
 
  - io-error: the last IOP has failed and the device is configured
  to pause on I/O errors
  - watchdog-error: the watchdog action is configured to pause and
has been triggered
 
  Sounds like the watchdog suffered an error.  watchdog-fired?
  
  Maybe watchdog-paused.
  
 
  - paused: guest has been paused via the 'stop' command
 
  stop-command?
  
  I prefer 'paused', it communicates better the state we're in.
  
 
  - prelaunch: QEMU was started with -S and guest has not started
 
  unstarted?
  
  Looks the same to me.
  
 
  - running: guest is actively running
  - shutdown: guest is shut down (and -no-shutdown is in use)
 
  Signed-off-by: Luiz Capitulino lcapitul...@redhat.com
  ---
   gdbstub.c   |4 
   hw/ide/core.c   |1 +
   hw/scsi-disk.c  |1 +
   hw/virtio-blk.c |1 +
   hw/watchdog.c   |1 +
   kvm-all.c   |1 +
   migration.c |3 +++
   monitor.c   |5 -
   sysemu.h|   19 +++
   vl.c|   37 +
   10 files changed, 72 insertions(+), 1 deletions(-)
 
  diff --git a/gdbstub.c b/gdbstub.c
  index c085a5a..61b700a 100644
  --- a/gdbstub.c
  +++ b/gdbstub.c
  @@ -2358,6 +2358,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, 
  const char *fmt, ...)
   s-state = RS_SYSCALL;
   #ifndef CONFIG_USER_ONLY
   vm_stop(VMSTOP_DEBUG);
  +vm_status_set(VMST_DEBUG);
   #endif
   s-state = RS_IDLE;
   va_start(va, fmt);
  @@ -2432,6 +2433,7 @@ static void gdb_read_byte(GDBState *s, int ch)
   /* when the CPU is running, we cannot do anything except stop
  it when receiving a char */
   vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
   } else
   #endif
   {
  @@ -2694,6 +2696,7 @@ static void gdb_chr_event(void *opaque, int event)
   switch (event) {
   case CHR_EVENT_OPENED:
   vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
   gdb_has_xml = 0;
   break;
   default:
 
  Previous hunk has VMST_DEBUG with VMST_DEBUG.  Odd.
 
  @@ -2735,6 +2738,7 @@ static void gdb_sigterm_handler(int signal)
   {
   if (vm_running) {
   vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
   }
   }
   #endif
  diff --git a/hw/ide/core.c b/hw/ide/core.c
  index ca17a43..bf9df41 100644
  --- a/hw/ide/core.c
  +++ b/hw/ide/core.c
  @@ -523,6 +523,7 @@ static int ide_handle_rw_error(IDEState *s, int 
  error, int op)
   s-bus-error_status = op;
   bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
   vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
   } else {
   if (op  BM_STATUS_DMA_RETRY) {
   dma_buf_commit(s, 0);
  diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
  index a8c7372..66037fd 100644
  --- a/hw/scsi-disk.c
  +++ b/hw/scsi-disk.c
  @@ -216,6 +216,7 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, int 
  error, int type)
   
   bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
   vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
   } else {
   if (type == SCSI_REQ_STATUS_RETRY_READ) {
   scsi_req_data(r-req, 0);
  diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
  index 91e0394..bf70200 100644
  --- a/hw/virtio-blk.c
  +++ b/hw/virtio-blk.c
  @@ -79,6 +79,7 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq 
  *req, int error,
   s-rq = req;
   bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
   vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
   } else {
   virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
   bdrv_mon_event(s-bs, BDRV_ACTION_REPORT, is_read);
  diff --git a/hw/watchdog.c b/hw/watchdog.c
  index 1c900a1..d130cbb 100644
 

Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type

2011-07-12 Thread Luiz Capitulino
On Tue, 12 Jul 2011 09:28:05 +0200
Markus Armbruster arm...@redhat.com wrote:

 Luiz Capitulino lcapitul...@redhat.com writes:
 
  We need to track the VM status so that QMP can report it to clients.
 
  This commit adds the VMStatus type and related functions. The
  vm_status_set() function is used to keep track of the current
  VM status.
 
  The current statuses are:
 
 Nitpicking about names, bear with me.
 
  - debug: guest is running under gdb
  - inmigrate: guest is paused waiting for an incoming migration
 
 incoming-migration?
 
  - postmigrate: guest is paused following a successful migration
 
 post-migrate?
 
  - internal-error: Fatal internal error that prevents further guest
  execution
  - load-state-error: guest is paused following a failed 'loadvm'
 
 Less than obvious.  If you like concrete, name it loadvm-failed.  If you
 like abstract, name it restore-vm-failed.

Ok for your suggestions above.

 
  - io-error: the last IOP has failed and the device is configured
  to pause on I/O errors
  - watchdog-error: the watchdog action is configured to pause and
has been triggered
 
 Sounds like the watchdog suffered an error.  watchdog-fired?

Maybe watchdog-paused.

 
  - paused: guest has been paused via the 'stop' command
 
 stop-command?

I prefer 'paused', it communicates better the state we're in.

 
  - prelaunch: QEMU was started with -S and guest has not started
 
 unstarted?

Looks the same to me.

 
  - running: guest is actively running
  - shutdown: guest is shut down (and -no-shutdown is in use)
 
  Signed-off-by: Luiz Capitulino lcapitul...@redhat.com
  ---
   gdbstub.c   |4 
   hw/ide/core.c   |1 +
   hw/scsi-disk.c  |1 +
   hw/virtio-blk.c |1 +
   hw/watchdog.c   |1 +
   kvm-all.c   |1 +
   migration.c |3 +++
   monitor.c   |5 -
   sysemu.h|   19 +++
   vl.c|   37 +
   10 files changed, 72 insertions(+), 1 deletions(-)
 
  diff --git a/gdbstub.c b/gdbstub.c
  index c085a5a..61b700a 100644
  --- a/gdbstub.c
  +++ b/gdbstub.c
  @@ -2358,6 +2358,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, const 
  char *fmt, ...)
   s-state = RS_SYSCALL;
   #ifndef CONFIG_USER_ONLY
   vm_stop(VMSTOP_DEBUG);
  +vm_status_set(VMST_DEBUG);
   #endif
   s-state = RS_IDLE;
   va_start(va, fmt);
  @@ -2432,6 +2433,7 @@ static void gdb_read_byte(GDBState *s, int ch)
   /* when the CPU is running, we cannot do anything except stop
  it when receiving a char */
   vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
   } else
   #endif
   {
  @@ -2694,6 +2696,7 @@ static void gdb_chr_event(void *opaque, int event)
   switch (event) {
   case CHR_EVENT_OPENED:
   vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
   gdb_has_xml = 0;
   break;
   default:
 
 Previous hunk has VMST_DEBUG with VMST_DEBUG.  Odd.
 
  @@ -2735,6 +2738,7 @@ static void gdb_sigterm_handler(int signal)
   {
   if (vm_running) {
   vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
   }
   }
   #endif
  diff --git a/hw/ide/core.c b/hw/ide/core.c
  index ca17a43..bf9df41 100644
  --- a/hw/ide/core.c
  +++ b/hw/ide/core.c
  @@ -523,6 +523,7 @@ static int ide_handle_rw_error(IDEState *s, int error, 
  int op)
   s-bus-error_status = op;
   bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
   vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
   } else {
   if (op  BM_STATUS_DMA_RETRY) {
   dma_buf_commit(s, 0);
  diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
  index a8c7372..66037fd 100644
  --- a/hw/scsi-disk.c
  +++ b/hw/scsi-disk.c
  @@ -216,6 +216,7 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, int 
  error, int type)
   
   bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
   vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
   } else {
   if (type == SCSI_REQ_STATUS_RETRY_READ) {
   scsi_req_data(r-req, 0);
  diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
  index 91e0394..bf70200 100644
  --- a/hw/virtio-blk.c
  +++ b/hw/virtio-blk.c
  @@ -79,6 +79,7 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq 
  *req, int error,
   s-rq = req;
   bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
   vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
   } else {
   virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
   bdrv_mon_event(s-bs, BDRV_ACTION_REPORT, is_read);
  diff --git a/hw/watchdog.c b/hw/watchdog.c
  index 1c900a1..d130cbb 100644
  --- a/hw/watchdog.c
  +++ b/hw/watchdog.c
  @@ -133,6 +133,7 @@ void watchdog_perform_action(void)
   case WDT_PAUSE: /* same as 'stop' 

Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type

2011-07-12 Thread Kevin Wolf
Am 12.07.2011 16:25, schrieb Luiz Capitulino:
 On Tue, 12 Jul 2011 09:28:05 +0200
 Markus Armbruster arm...@redhat.com wrote:
 
 Luiz Capitulino lcapitul...@redhat.com writes:

 We need to track the VM status so that QMP can report it to clients.

 This commit adds the VMStatus type and related functions. The
 vm_status_set() function is used to keep track of the current
 VM status.

 The current statuses are:

 Nitpicking about names, bear with me.

 - debug: guest is running under gdb
 - inmigrate: guest is paused waiting for an incoming migration

 incoming-migration?

 - postmigrate: guest is paused following a successful migration

 post-migrate?

 - internal-error: Fatal internal error that prevents further guest
 execution
 - load-state-error: guest is paused following a failed 'loadvm'

 Less than obvious.  If you like concrete, name it loadvm-failed.  If you
 like abstract, name it restore-vm-failed.
 
 Ok for your suggestions above.
 

 - io-error: the last IOP has failed and the device is configured
 to pause on I/O errors
 - watchdog-error: the watchdog action is configured to pause and
   has been triggered

 Sounds like the watchdog suffered an error.  watchdog-fired?
 
 Maybe watchdog-paused.
 

 - paused: guest has been paused via the 'stop' command

 stop-command?
 
 I prefer 'paused', it communicates better the state we're in.
 

 - prelaunch: QEMU was started with -S and guest has not started

 unstarted?
 
 Looks the same to me.
 

 - running: guest is actively running
 - shutdown: guest is shut down (and -no-shutdown is in use)

 Signed-off-by: Luiz Capitulino lcapitul...@redhat.com
 ---
  gdbstub.c   |4 
  hw/ide/core.c   |1 +
  hw/scsi-disk.c  |1 +
  hw/virtio-blk.c |1 +
  hw/watchdog.c   |1 +
  kvm-all.c   |1 +
  migration.c |3 +++
  monitor.c   |5 -
  sysemu.h|   19 +++
  vl.c|   37 +
  10 files changed, 72 insertions(+), 1 deletions(-)

 diff --git a/gdbstub.c b/gdbstub.c
 index c085a5a..61b700a 100644
 --- a/gdbstub.c
 +++ b/gdbstub.c
 @@ -2358,6 +2358,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, const 
 char *fmt, ...)
  s-state = RS_SYSCALL;
  #ifndef CONFIG_USER_ONLY
  vm_stop(VMSTOP_DEBUG);
 +vm_status_set(VMST_DEBUG);
  #endif
  s-state = RS_IDLE;
  va_start(va, fmt);
 @@ -2432,6 +2433,7 @@ static void gdb_read_byte(GDBState *s, int ch)
  /* when the CPU is running, we cannot do anything except stop
 it when receiving a char */
  vm_stop(VMSTOP_USER);
 +vm_status_set(VMST_DEBUG);
  } else
  #endif
  {
 @@ -2694,6 +2696,7 @@ static void gdb_chr_event(void *opaque, int event)
  switch (event) {
  case CHR_EVENT_OPENED:
  vm_stop(VMSTOP_USER);
 +vm_status_set(VMST_DEBUG);
  gdb_has_xml = 0;
  break;
  default:

 Previous hunk has VMST_DEBUG with VMST_DEBUG.  Odd.

 @@ -2735,6 +2738,7 @@ static void gdb_sigterm_handler(int signal)
  {
  if (vm_running) {
  vm_stop(VMSTOP_USER);
 +vm_status_set(VMST_DEBUG);
  }
  }
  #endif
 diff --git a/hw/ide/core.c b/hw/ide/core.c
 index ca17a43..bf9df41 100644
 --- a/hw/ide/core.c
 +++ b/hw/ide/core.c
 @@ -523,6 +523,7 @@ static int ide_handle_rw_error(IDEState *s, int error, 
 int op)
  s-bus-error_status = op;
  bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
  vm_stop(VMSTOP_DISKFULL);
 +vm_status_set(VMST_IOERROR);
  } else {
  if (op  BM_STATUS_DMA_RETRY) {
  dma_buf_commit(s, 0);
 diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
 index a8c7372..66037fd 100644
 --- a/hw/scsi-disk.c
 +++ b/hw/scsi-disk.c
 @@ -216,6 +216,7 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, int 
 error, int type)
  
  bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
  vm_stop(VMSTOP_DISKFULL);
 +vm_status_set(VMST_IOERROR);
  } else {
  if (type == SCSI_REQ_STATUS_RETRY_READ) {
  scsi_req_data(r-req, 0);
 diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
 index 91e0394..bf70200 100644
 --- a/hw/virtio-blk.c
 +++ b/hw/virtio-blk.c
 @@ -79,6 +79,7 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq 
 *req, int error,
  s-rq = req;
  bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
  vm_stop(VMSTOP_DISKFULL);
 +vm_status_set(VMST_IOERROR);
  } else {
  virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
  bdrv_mon_event(s-bs, BDRV_ACTION_REPORT, is_read);
 diff --git a/hw/watchdog.c b/hw/watchdog.c
 index 1c900a1..d130cbb 100644
 --- a/hw/watchdog.c
 +++ b/hw/watchdog.c
 @@ -133,6 +133,7 @@ void watchdog_perform_action(void)
  case WDT_PAUSE: /* same as 'stop' command in monitor */
  watchdog_mon_event(pause);
  

Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type

2011-07-12 Thread Luiz Capitulino
On Tue, 12 Jul 2011 12:12:31 -0300
Luiz Capitulino lcapitul...@redhat.com wrote:

 On Tue, 12 Jul 2011 16:51:03 +0200
 Kevin Wolf kw...@redhat.com wrote:
 
  Am 12.07.2011 16:25, schrieb Luiz Capitulino:
   On Tue, 12 Jul 2011 09:28:05 +0200
   Markus Armbruster arm...@redhat.com wrote:
   
   Luiz Capitulino lcapitul...@redhat.com writes:
  
   We need to track the VM status so that QMP can report it to clients.
  
   This commit adds the VMStatus type and related functions. The
   vm_status_set() function is used to keep track of the current
   VM status.
  
   The current statuses are:
  
   Nitpicking about names, bear with me.
  
   - debug: guest is running under gdb
   - inmigrate: guest is paused waiting for an incoming migration
  
   incoming-migration?
  
   - postmigrate: guest is paused following a successful migration
  
   post-migrate?
  
   - internal-error: Fatal internal error that prevents further guest
   execution
   - load-state-error: guest is paused following a failed 'loadvm'
  
   Less than obvious.  If you like concrete, name it loadvm-failed.  If you
   like abstract, name it restore-vm-failed.
   
   Ok for your suggestions above.
   
  
   - io-error: the last IOP has failed and the device is configured
   to pause on I/O errors
   - watchdog-error: the watchdog action is configured to pause and
 has been triggered
  
   Sounds like the watchdog suffered an error.  watchdog-fired?
   
   Maybe watchdog-paused.
   
  
   - paused: guest has been paused via the 'stop' command
  
   stop-command?
   
   I prefer 'paused', it communicates better the state we're in.
   
  
   - prelaunch: QEMU was started with -S and guest has not started
  
   unstarted?
   
   Looks the same to me.
   
  
   - running: guest is actively running
   - shutdown: guest is shut down (and -no-shutdown is in use)
  
   Signed-off-by: Luiz Capitulino lcapitul...@redhat.com
   ---
gdbstub.c   |4 
hw/ide/core.c   |1 +
hw/scsi-disk.c  |1 +
hw/virtio-blk.c |1 +
hw/watchdog.c   |1 +
kvm-all.c   |1 +
migration.c |3 +++
monitor.c   |5 -
sysemu.h|   19 +++
vl.c|   37 +
10 files changed, 72 insertions(+), 1 deletions(-)
  
   diff --git a/gdbstub.c b/gdbstub.c
   index c085a5a..61b700a 100644
   --- a/gdbstub.c
   +++ b/gdbstub.c
   @@ -2358,6 +2358,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, 
   const char *fmt, ...)
s-state = RS_SYSCALL;
#ifndef CONFIG_USER_ONLY
vm_stop(VMSTOP_DEBUG);
   +vm_status_set(VMST_DEBUG);
#endif
s-state = RS_IDLE;
va_start(va, fmt);
   @@ -2432,6 +2433,7 @@ static void gdb_read_byte(GDBState *s, int ch)
/* when the CPU is running, we cannot do anything except stop
   it when receiving a char */
vm_stop(VMSTOP_USER);
   +vm_status_set(VMST_DEBUG);
} else
#endif
{
   @@ -2694,6 +2696,7 @@ static void gdb_chr_event(void *opaque, int event)
switch (event) {
case CHR_EVENT_OPENED:
vm_stop(VMSTOP_USER);
   +vm_status_set(VMST_DEBUG);
gdb_has_xml = 0;
break;
default:
  
   Previous hunk has VMST_DEBUG with VMST_DEBUG.  Odd.
  
   @@ -2735,6 +2738,7 @@ static void gdb_sigterm_handler(int signal)
{
if (vm_running) {
vm_stop(VMSTOP_USER);
   +vm_status_set(VMST_DEBUG);
}
}
#endif
   diff --git a/hw/ide/core.c b/hw/ide/core.c
   index ca17a43..bf9df41 100644
   --- a/hw/ide/core.c
   +++ b/hw/ide/core.c
   @@ -523,6 +523,7 @@ static int ide_handle_rw_error(IDEState *s, int 
   error, int op)
s-bus-error_status = op;
bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
vm_stop(VMSTOP_DISKFULL);
   +vm_status_set(VMST_IOERROR);
} else {
if (op  BM_STATUS_DMA_RETRY) {
dma_buf_commit(s, 0);
   diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
   index a8c7372..66037fd 100644
   --- a/hw/scsi-disk.c
   +++ b/hw/scsi-disk.c
   @@ -216,6 +216,7 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, int 
   error, int type)

bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
vm_stop(VMSTOP_DISKFULL);
   +vm_status_set(VMST_IOERROR);
} else {
if (type == SCSI_REQ_STATUS_RETRY_READ) {
scsi_req_data(r-req, 0);
   diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
   index 91e0394..bf70200 100644
   --- a/hw/virtio-blk.c
   +++ b/hw/virtio-blk.c
   @@ -79,6 +79,7 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq 
   *req, int error,
s-rq = req;
bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
vm_stop(VMSTOP_DISKFULL);
   +

Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type

2011-07-12 Thread Kevin Wolf
Am 12.07.2011 18:03, schrieb Luiz Capitulino:
 On Tue, 12 Jul 2011 12:12:31 -0300
 Luiz Capitulino lcapitul...@redhat.com wrote:
 
 On Tue, 12 Jul 2011 16:51:03 +0200
 Kevin Wolf kw...@redhat.com wrote:

 Am 12.07.2011 16:25, schrieb Luiz Capitulino:
 On Tue, 12 Jul 2011 09:28:05 +0200
 Markus Armbruster arm...@redhat.com wrote:

 Luiz Capitulino lcapitul...@redhat.com writes:

 We need to track the VM status so that QMP can report it to clients.

 This commit adds the VMStatus type and related functions. The
 vm_status_set() function is used to keep track of the current
 VM status.

 The current statuses are:

 Nitpicking about names, bear with me.

 - debug: guest is running under gdb
 - inmigrate: guest is paused waiting for an incoming migration

 incoming-migration?

 - postmigrate: guest is paused following a successful migration

 post-migrate?

 - internal-error: Fatal internal error that prevents further guest
 execution
 - load-state-error: guest is paused following a failed 'loadvm'

 Less than obvious.  If you like concrete, name it loadvm-failed.  If you
 like abstract, name it restore-vm-failed.

 Ok for your suggestions above.


 - io-error: the last IOP has failed and the device is configured
 to pause on I/O errors
 - watchdog-error: the watchdog action is configured to pause and
   has been triggered

 Sounds like the watchdog suffered an error.  watchdog-fired?

 Maybe watchdog-paused.


 - paused: guest has been paused via the 'stop' command

 stop-command?

 I prefer 'paused', it communicates better the state we're in.


 - prelaunch: QEMU was started with -S and guest has not started

 unstarted?

 Looks the same to me.


 - running: guest is actively running
 - shutdown: guest is shut down (and -no-shutdown is in use)

 Signed-off-by: Luiz Capitulino lcapitul...@redhat.com
 ---
  gdbstub.c   |4 
  hw/ide/core.c   |1 +
  hw/scsi-disk.c  |1 +
  hw/virtio-blk.c |1 +
  hw/watchdog.c   |1 +
  kvm-all.c   |1 +
  migration.c |3 +++
  monitor.c   |5 -
  sysemu.h|   19 +++
  vl.c|   37 +
  10 files changed, 72 insertions(+), 1 deletions(-)

 diff --git a/gdbstub.c b/gdbstub.c
 index c085a5a..61b700a 100644
 --- a/gdbstub.c
 +++ b/gdbstub.c
 @@ -2358,6 +2358,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, 
 const char *fmt, ...)
  s-state = RS_SYSCALL;
  #ifndef CONFIG_USER_ONLY
  vm_stop(VMSTOP_DEBUG);
 +vm_status_set(VMST_DEBUG);
  #endif
  s-state = RS_IDLE;
  va_start(va, fmt);
 @@ -2432,6 +2433,7 @@ static void gdb_read_byte(GDBState *s, int ch)
  /* when the CPU is running, we cannot do anything except stop
 it when receiving a char */
  vm_stop(VMSTOP_USER);
 +vm_status_set(VMST_DEBUG);
  } else
  #endif
  {
 @@ -2694,6 +2696,7 @@ static void gdb_chr_event(void *opaque, int event)
  switch (event) {
  case CHR_EVENT_OPENED:
  vm_stop(VMSTOP_USER);
 +vm_status_set(VMST_DEBUG);
  gdb_has_xml = 0;
  break;
  default:

 Previous hunk has VMST_DEBUG with VMST_DEBUG.  Odd.

 @@ -2735,6 +2738,7 @@ static void gdb_sigterm_handler(int signal)
  {
  if (vm_running) {
  vm_stop(VMSTOP_USER);
 +vm_status_set(VMST_DEBUG);
  }
  }
  #endif
 diff --git a/hw/ide/core.c b/hw/ide/core.c
 index ca17a43..bf9df41 100644
 --- a/hw/ide/core.c
 +++ b/hw/ide/core.c
 @@ -523,6 +523,7 @@ static int ide_handle_rw_error(IDEState *s, int 
 error, int op)
  s-bus-error_status = op;
  bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
  vm_stop(VMSTOP_DISKFULL);
 +vm_status_set(VMST_IOERROR);
  } else {
  if (op  BM_STATUS_DMA_RETRY) {
  dma_buf_commit(s, 0);
 diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
 index a8c7372..66037fd 100644
 --- a/hw/scsi-disk.c
 +++ b/hw/scsi-disk.c
 @@ -216,6 +216,7 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, int 
 error, int type)
  
  bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
  vm_stop(VMSTOP_DISKFULL);
 +vm_status_set(VMST_IOERROR);
  } else {
  if (type == SCSI_REQ_STATUS_RETRY_READ) {
  scsi_req_data(r-req, 0);
 diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
 index 91e0394..bf70200 100644
 --- a/hw/virtio-blk.c
 +++ b/hw/virtio-blk.c
 @@ -79,6 +79,7 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq 
 *req, int error,
  s-rq = req;
  bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
  vm_stop(VMSTOP_DISKFULL);
 +vm_status_set(VMST_IOERROR);
  } else {
  virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
  bdrv_mon_event(s-bs, BDRV_ACTION_REPORT, is_read);
 diff --git a/hw/watchdog.c b/hw/watchdog.c
 index 1c900a1..d130cbb 100644
 --- a/hw/watchdog.c
 +++ 

Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type

2011-07-12 Thread Luiz Capitulino
On Tue, 12 Jul 2011 18:16:26 +0200
Kevin Wolf kw...@redhat.com wrote:

 Am 12.07.2011 18:03, schrieb Luiz Capitulino:
  On Tue, 12 Jul 2011 12:12:31 -0300
  Luiz Capitulino lcapitul...@redhat.com wrote:
  
  On Tue, 12 Jul 2011 16:51:03 +0200
  Kevin Wolf kw...@redhat.com wrote:
 
  Am 12.07.2011 16:25, schrieb Luiz Capitulino:
  On Tue, 12 Jul 2011 09:28:05 +0200
  Markus Armbruster arm...@redhat.com wrote:
 
  Luiz Capitulino lcapitul...@redhat.com writes:
 
  We need to track the VM status so that QMP can report it to clients.
 
  This commit adds the VMStatus type and related functions. The
  vm_status_set() function is used to keep track of the current
  VM status.
 
  The current statuses are:
 
  Nitpicking about names, bear with me.
 
  - debug: guest is running under gdb
  - inmigrate: guest is paused waiting for an incoming migration
 
  incoming-migration?
 
  - postmigrate: guest is paused following a successful migration
 
  post-migrate?
 
  - internal-error: Fatal internal error that prevents further guest
  execution
  - load-state-error: guest is paused following a failed 'loadvm'
 
  Less than obvious.  If you like concrete, name it loadvm-failed.  If you
  like abstract, name it restore-vm-failed.
 
  Ok for your suggestions above.
 
 
  - io-error: the last IOP has failed and the device is configured
  to pause on I/O errors
  - watchdog-error: the watchdog action is configured to pause and
has been triggered
 
  Sounds like the watchdog suffered an error.  watchdog-fired?
 
  Maybe watchdog-paused.
 
 
  - paused: guest has been paused via the 'stop' command
 
  stop-command?
 
  I prefer 'paused', it communicates better the state we're in.
 
 
  - prelaunch: QEMU was started with -S and guest has not started
 
  unstarted?
 
  Looks the same to me.
 
 
  - running: guest is actively running
  - shutdown: guest is shut down (and -no-shutdown is in use)
 
  Signed-off-by: Luiz Capitulino lcapitul...@redhat.com
  ---
   gdbstub.c   |4 
   hw/ide/core.c   |1 +
   hw/scsi-disk.c  |1 +
   hw/virtio-blk.c |1 +
   hw/watchdog.c   |1 +
   kvm-all.c   |1 +
   migration.c |3 +++
   monitor.c   |5 -
   sysemu.h|   19 +++
   vl.c|   37 +
   10 files changed, 72 insertions(+), 1 deletions(-)
 
  diff --git a/gdbstub.c b/gdbstub.c
  index c085a5a..61b700a 100644
  --- a/gdbstub.c
  +++ b/gdbstub.c
  @@ -2358,6 +2358,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, 
  const char *fmt, ...)
   s-state = RS_SYSCALL;
   #ifndef CONFIG_USER_ONLY
   vm_stop(VMSTOP_DEBUG);
  +vm_status_set(VMST_DEBUG);
   #endif
   s-state = RS_IDLE;
   va_start(va, fmt);
  @@ -2432,6 +2433,7 @@ static void gdb_read_byte(GDBState *s, int ch)
   /* when the CPU is running, we cannot do anything except stop
  it when receiving a char */
   vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
   } else
   #endif
   {
  @@ -2694,6 +2696,7 @@ static void gdb_chr_event(void *opaque, int 
  event)
   switch (event) {
   case CHR_EVENT_OPENED:
   vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
   gdb_has_xml = 0;
   break;
   default:
 
  Previous hunk has VMST_DEBUG with VMST_DEBUG.  Odd.
 
  @@ -2735,6 +2738,7 @@ static void gdb_sigterm_handler(int signal)
   {
   if (vm_running) {
   vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
   }
   }
   #endif
  diff --git a/hw/ide/core.c b/hw/ide/core.c
  index ca17a43..bf9df41 100644
  --- a/hw/ide/core.c
  +++ b/hw/ide/core.c
  @@ -523,6 +523,7 @@ static int ide_handle_rw_error(IDEState *s, int 
  error, int op)
   s-bus-error_status = op;
   bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
   vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
   } else {
   if (op  BM_STATUS_DMA_RETRY) {
   dma_buf_commit(s, 0);
  diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
  index a8c7372..66037fd 100644
  --- a/hw/scsi-disk.c
  +++ b/hw/scsi-disk.c
  @@ -216,6 +216,7 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, 
  int error, int type)
   
   bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
   vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
   } else {
   if (type == SCSI_REQ_STATUS_RETRY_READ) {
   scsi_req_data(r-req, 0);
  diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
  index 91e0394..bf70200 100644
  --- a/hw/virtio-blk.c
  +++ b/hw/virtio-blk.c
  @@ -79,6 +79,7 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq 
  *req, int error,
   s-rq = req;
   bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
   vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
   } 

Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type

2011-07-05 Thread Anthony Liguori

On 07/05/2011 01:51 PM, Luiz Capitulino wrote:

On Tue, 05 Jul 2011 13:33:07 -0500
Anthony Liguorianth...@codemonkey.ws  wrote:


On 07/05/2011 01:17 PM, Luiz Capitulino wrote:

We need to track the VM status so that QMP can report it to clients.

This commit adds the VMStatus type and related functions. The
vm_status_set() function is used to keep track of the current
VM status.

The current statuses are:


Which states are terminal, and what's the proper procedure to recover
from non-terminal states?  Is it cont or system_reset followed by cont?


Can I add that to the next patch (which also adds the QMP doc) or do you
prefer it in this patch?


It can be a separate patch, I was more curious about whether you had 
thought through this for each of the states so that the states we were 
introducing were well defined.


For instance, it's not clear to me what the semantics of 
'load-state-error' are and how it's different from prelaunch.


I'm quite surprised that 'load-state-error' wouldn't be a terminal error.

Regards,

Anthony Liguori







  - debug: guest is running under gdb
  - inmigrate: guest is paused waiting for an incoming migration
  - postmigrate: guest is paused following a successful migration
  - internal-error: Fatal internal error that prevents further guest
  execution
  - load-state-error: guest is paused following a failed 'loadvm'
  - io-error: the last IOP has failed and the device is configured
  to pause on I/O errors
  - watchdog-error: the watchdog action is configured to pause and
has been triggered
  - paused: guest has been paused via the 'stop' command
  - prelaunch: QEMU was started with -S and guest has not started
  - running: guest is actively running
  - shutdown: guest is shut down (and -no-shutdown is in use)


Regards,

Anthony Liguori



Signed-off-by: Luiz Capitulinolcapitul...@redhat.com
---
   gdbstub.c   |4 
   hw/ide/core.c   |1 +
   hw/scsi-disk.c  |1 +
   hw/virtio-blk.c |1 +
   hw/watchdog.c   |1 +
   kvm-all.c   |1 +
   migration.c |3 +++
   monitor.c   |5 -
   sysemu.h|   19 +++
   vl.c|   37 +
   10 files changed, 72 insertions(+), 1 deletions(-)

diff --git a/gdbstub.c b/gdbstub.c
index c085a5a..61b700a 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -2358,6 +2358,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, const 
char *fmt, ...)
   s-state = RS_SYSCALL;
   #ifndef CONFIG_USER_ONLY
   vm_stop(VMSTOP_DEBUG);
+vm_status_set(VMST_DEBUG);
   #endif
   s-state = RS_IDLE;
   va_start(va, fmt);
@@ -2432,6 +2433,7 @@ static void gdb_read_byte(GDBState *s, int ch)
   /* when the CPU is running, we cannot do anything except stop
  it when receiving a char */
   vm_stop(VMSTOP_USER);
+vm_status_set(VMST_DEBUG);
   } else
   #endif
   {
@@ -2694,6 +2696,7 @@ static void gdb_chr_event(void *opaque, int event)
   switch (event) {
   case CHR_EVENT_OPENED:
   vm_stop(VMSTOP_USER);
+vm_status_set(VMST_DEBUG);
   gdb_has_xml = 0;
   break;
   default:
@@ -2735,6 +2738,7 @@ static void gdb_sigterm_handler(int signal)
   {
   if (vm_running) {
   vm_stop(VMSTOP_USER);
+vm_status_set(VMST_DEBUG);
   }
   }
   #endif
diff --git a/hw/ide/core.c b/hw/ide/core.c
index ca17a43..bf9df41 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -523,6 +523,7 @@ static int ide_handle_rw_error(IDEState *s, int error, int 
op)
   s-bus-error_status = op;
   bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
   vm_stop(VMSTOP_DISKFULL);
+vm_status_set(VMST_IOERROR);
   } else {
   if (op   BM_STATUS_DMA_RETRY) {
   dma_buf_commit(s, 0);
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index a8c7372..66037fd 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -216,6 +216,7 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, int error, 
int type)

   bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
   vm_stop(VMSTOP_DISKFULL);
+vm_status_set(VMST_IOERROR);
   } else {
   if (type == SCSI_REQ_STATUS_RETRY_READ) {
   scsi_req_data(r-req, 0);
diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index 91e0394..bf70200 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -79,6 +79,7 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq *req, 
int error,
   s-rq = req;
   bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
   vm_stop(VMSTOP_DISKFULL);
+vm_status_set(VMST_IOERROR);
   } else {
   virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
   bdrv_mon_event(s-bs, BDRV_ACTION_REPORT, is_read);
diff --git a/hw/watchdog.c b/hw/watchdog.c
index 1c900a1..d130cbb 100644
--- a/hw/watchdog.c
+++ 

[Qemu-devel] [PATCH 1/8] Introduce the VMStatus type

2011-07-05 Thread Luiz Capitulino
We need to track the VM status so that QMP can report it to clients.

This commit adds the VMStatus type and related functions. The
vm_status_set() function is used to keep track of the current
VM status.

The current statuses are:

- debug: guest is running under gdb
- inmigrate: guest is paused waiting for an incoming migration
- postmigrate: guest is paused following a successful migration
- internal-error: Fatal internal error that prevents further guest
execution
- load-state-error: guest is paused following a failed 'loadvm'
- io-error: the last IOP has failed and the device is configured
to pause on I/O errors
- watchdog-error: the watchdog action is configured to pause and
  has been triggered
- paused: guest has been paused via the 'stop' command
- prelaunch: QEMU was started with -S and guest has not started
- running: guest is actively running
- shutdown: guest is shut down (and -no-shutdown is in use)

Signed-off-by: Luiz Capitulino lcapitul...@redhat.com
---
 gdbstub.c   |4 
 hw/ide/core.c   |1 +
 hw/scsi-disk.c  |1 +
 hw/virtio-blk.c |1 +
 hw/watchdog.c   |1 +
 kvm-all.c   |1 +
 migration.c |3 +++
 monitor.c   |5 -
 sysemu.h|   19 +++
 vl.c|   37 +
 10 files changed, 72 insertions(+), 1 deletions(-)

diff --git a/gdbstub.c b/gdbstub.c
index c085a5a..61b700a 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -2358,6 +2358,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, const 
char *fmt, ...)
 s-state = RS_SYSCALL;
 #ifndef CONFIG_USER_ONLY
 vm_stop(VMSTOP_DEBUG);
+vm_status_set(VMST_DEBUG);
 #endif
 s-state = RS_IDLE;
 va_start(va, fmt);
@@ -2432,6 +2433,7 @@ static void gdb_read_byte(GDBState *s, int ch)
 /* when the CPU is running, we cannot do anything except stop
it when receiving a char */
 vm_stop(VMSTOP_USER);
+vm_status_set(VMST_DEBUG);
 } else
 #endif
 {
@@ -2694,6 +2696,7 @@ static void gdb_chr_event(void *opaque, int event)
 switch (event) {
 case CHR_EVENT_OPENED:
 vm_stop(VMSTOP_USER);
+vm_status_set(VMST_DEBUG);
 gdb_has_xml = 0;
 break;
 default:
@@ -2735,6 +2738,7 @@ static void gdb_sigterm_handler(int signal)
 {
 if (vm_running) {
 vm_stop(VMSTOP_USER);
+vm_status_set(VMST_DEBUG);
 }
 }
 #endif
diff --git a/hw/ide/core.c b/hw/ide/core.c
index ca17a43..bf9df41 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -523,6 +523,7 @@ static int ide_handle_rw_error(IDEState *s, int error, int 
op)
 s-bus-error_status = op;
 bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
 vm_stop(VMSTOP_DISKFULL);
+vm_status_set(VMST_IOERROR);
 } else {
 if (op  BM_STATUS_DMA_RETRY) {
 dma_buf_commit(s, 0);
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index a8c7372..66037fd 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -216,6 +216,7 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, int error, 
int type)
 
 bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
 vm_stop(VMSTOP_DISKFULL);
+vm_status_set(VMST_IOERROR);
 } else {
 if (type == SCSI_REQ_STATUS_RETRY_READ) {
 scsi_req_data(r-req, 0);
diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index 91e0394..bf70200 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -79,6 +79,7 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq *req, 
int error,
 s-rq = req;
 bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
 vm_stop(VMSTOP_DISKFULL);
+vm_status_set(VMST_IOERROR);
 } else {
 virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
 bdrv_mon_event(s-bs, BDRV_ACTION_REPORT, is_read);
diff --git a/hw/watchdog.c b/hw/watchdog.c
index 1c900a1..d130cbb 100644
--- a/hw/watchdog.c
+++ b/hw/watchdog.c
@@ -133,6 +133,7 @@ void watchdog_perform_action(void)
 case WDT_PAUSE: /* same as 'stop' command in monitor */
 watchdog_mon_event(pause);
 vm_stop(VMSTOP_WATCHDOG);
+vm_status_set(VMST_WATCHDOG);
 break;
 
 case WDT_DEBUG:
diff --git a/kvm-all.c b/kvm-all.c
index cbc2532..aee9e0a 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -1015,6 +1015,7 @@ int kvm_cpu_exec(CPUState *env)
 if (ret  0) {
 cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE);
 vm_stop(VMSTOP_PANIC);
+vm_status_set(VMST_INTERROR);
 }
 
 env-exit_request = 0;
diff --git a/migration.c b/migration.c
index af3a1f2..674792f 100644
--- a/migration.c
+++ b/migration.c
@@ -394,6 +394,9 @@ void migrate_fd_put_ready(void *opaque)
 }
 state = MIG_STATE_ERROR;
 }
+if (state == MIG_STATE_COMPLETED) {
+vm_status_set(VMST_POSTMIGRATE);
+}
 s-state = state;
 

Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type

2011-07-05 Thread Luiz Capitulino
On Tue, 05 Jul 2011 13:33:07 -0500
Anthony Liguori anth...@codemonkey.ws wrote:

 On 07/05/2011 01:17 PM, Luiz Capitulino wrote:
  We need to track the VM status so that QMP can report it to clients.
 
  This commit adds the VMStatus type and related functions. The
  vm_status_set() function is used to keep track of the current
  VM status.
 
  The current statuses are:
 
 Which states are terminal, and what's the proper procedure to recover 
 from non-terminal states?  Is it cont or system_reset followed by cont?

Can I add that to the next patch (which also adds the QMP doc) or do you
prefer it in this patch?

 
 
   - debug: guest is running under gdb
   - inmigrate: guest is paused waiting for an incoming migration
   - postmigrate: guest is paused following a successful migration
   - internal-error: Fatal internal error that prevents further guest
   execution
   - load-state-error: guest is paused following a failed 'loadvm'
   - io-error: the last IOP has failed and the device is configured
   to pause on I/O errors
   - watchdog-error: the watchdog action is configured to pause and
 has been triggered
   - paused: guest has been paused via the 'stop' command
   - prelaunch: QEMU was started with -S and guest has not started
   - running: guest is actively running
   - shutdown: guest is shut down (and -no-shutdown is in use)
 
 Regards,
 
 Anthony Liguori
 
 
  Signed-off-by: Luiz Capitulinolcapitul...@redhat.com
  ---
gdbstub.c   |4 
hw/ide/core.c   |1 +
hw/scsi-disk.c  |1 +
hw/virtio-blk.c |1 +
hw/watchdog.c   |1 +
kvm-all.c   |1 +
migration.c |3 +++
monitor.c   |5 -
sysemu.h|   19 +++
vl.c|   37 +
10 files changed, 72 insertions(+), 1 deletions(-)
 
  diff --git a/gdbstub.c b/gdbstub.c
  index c085a5a..61b700a 100644
  --- a/gdbstub.c
  +++ b/gdbstub.c
  @@ -2358,6 +2358,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, const 
  char *fmt, ...)
s-state = RS_SYSCALL;
#ifndef CONFIG_USER_ONLY
vm_stop(VMSTOP_DEBUG);
  +vm_status_set(VMST_DEBUG);
#endif
s-state = RS_IDLE;
va_start(va, fmt);
  @@ -2432,6 +2433,7 @@ static void gdb_read_byte(GDBState *s, int ch)
/* when the CPU is running, we cannot do anything except stop
   it when receiving a char */
vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
} else
#endif
{
  @@ -2694,6 +2696,7 @@ static void gdb_chr_event(void *opaque, int event)
switch (event) {
case CHR_EVENT_OPENED:
vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
gdb_has_xml = 0;
break;
default:
  @@ -2735,6 +2738,7 @@ static void gdb_sigterm_handler(int signal)
{
if (vm_running) {
vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
}
}
#endif
  diff --git a/hw/ide/core.c b/hw/ide/core.c
  index ca17a43..bf9df41 100644
  --- a/hw/ide/core.c
  +++ b/hw/ide/core.c
  @@ -523,6 +523,7 @@ static int ide_handle_rw_error(IDEState *s, int error, 
  int op)
s-bus-error_status = op;
bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
} else {
if (op  BM_STATUS_DMA_RETRY) {
dma_buf_commit(s, 0);
  diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
  index a8c7372..66037fd 100644
  --- a/hw/scsi-disk.c
  +++ b/hw/scsi-disk.c
  @@ -216,6 +216,7 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, int 
  error, int type)
 
bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
} else {
if (type == SCSI_REQ_STATUS_RETRY_READ) {
scsi_req_data(r-req, 0);
  diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
  index 91e0394..bf70200 100644
  --- a/hw/virtio-blk.c
  +++ b/hw/virtio-blk.c
  @@ -79,6 +79,7 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq 
  *req, int error,
s-rq = req;
bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
} else {
virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
bdrv_mon_event(s-bs, BDRV_ACTION_REPORT, is_read);
  diff --git a/hw/watchdog.c b/hw/watchdog.c
  index 1c900a1..d130cbb 100644
  --- a/hw/watchdog.c
  +++ b/hw/watchdog.c
  @@ -133,6 +133,7 @@ void watchdog_perform_action(void)
case WDT_PAUSE: /* same as 'stop' command in monitor */
watchdog_mon_event(pause);
vm_stop(VMSTOP_WATCHDOG);
  +vm_status_set(VMST_WATCHDOG);
break;
 

Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type

2011-07-05 Thread Anthony Liguori

On 07/05/2011 01:17 PM, Luiz Capitulino wrote:

We need to track the VM status so that QMP can report it to clients.

This commit adds the VMStatus type and related functions. The
vm_status_set() function is used to keep track of the current
VM status.

The current statuses are:


Which states are terminal, and what's the proper procedure to recover 
from non-terminal states?  Is it cont or system_reset followed by cont?




 - debug: guest is running under gdb
 - inmigrate: guest is paused waiting for an incoming migration
 - postmigrate: guest is paused following a successful migration
 - internal-error: Fatal internal error that prevents further guest
 execution
 - load-state-error: guest is paused following a failed 'loadvm'
 - io-error: the last IOP has failed and the device is configured
 to pause on I/O errors
 - watchdog-error: the watchdog action is configured to pause and
   has been triggered
 - paused: guest has been paused via the 'stop' command
 - prelaunch: QEMU was started with -S and guest has not started
 - running: guest is actively running
 - shutdown: guest is shut down (and -no-shutdown is in use)


Regards,

Anthony Liguori



Signed-off-by: Luiz Capitulinolcapitul...@redhat.com
---
  gdbstub.c   |4 
  hw/ide/core.c   |1 +
  hw/scsi-disk.c  |1 +
  hw/virtio-blk.c |1 +
  hw/watchdog.c   |1 +
  kvm-all.c   |1 +
  migration.c |3 +++
  monitor.c   |5 -
  sysemu.h|   19 +++
  vl.c|   37 +
  10 files changed, 72 insertions(+), 1 deletions(-)

diff --git a/gdbstub.c b/gdbstub.c
index c085a5a..61b700a 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -2358,6 +2358,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, const 
char *fmt, ...)
  s-state = RS_SYSCALL;
  #ifndef CONFIG_USER_ONLY
  vm_stop(VMSTOP_DEBUG);
+vm_status_set(VMST_DEBUG);
  #endif
  s-state = RS_IDLE;
  va_start(va, fmt);
@@ -2432,6 +2433,7 @@ static void gdb_read_byte(GDBState *s, int ch)
  /* when the CPU is running, we cannot do anything except stop
 it when receiving a char */
  vm_stop(VMSTOP_USER);
+vm_status_set(VMST_DEBUG);
  } else
  #endif
  {
@@ -2694,6 +2696,7 @@ static void gdb_chr_event(void *opaque, int event)
  switch (event) {
  case CHR_EVENT_OPENED:
  vm_stop(VMSTOP_USER);
+vm_status_set(VMST_DEBUG);
  gdb_has_xml = 0;
  break;
  default:
@@ -2735,6 +2738,7 @@ static void gdb_sigterm_handler(int signal)
  {
  if (vm_running) {
  vm_stop(VMSTOP_USER);
+vm_status_set(VMST_DEBUG);
  }
  }
  #endif
diff --git a/hw/ide/core.c b/hw/ide/core.c
index ca17a43..bf9df41 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -523,6 +523,7 @@ static int ide_handle_rw_error(IDEState *s, int error, int 
op)
  s-bus-error_status = op;
  bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
  vm_stop(VMSTOP_DISKFULL);
+vm_status_set(VMST_IOERROR);
  } else {
  if (op  BM_STATUS_DMA_RETRY) {
  dma_buf_commit(s, 0);
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index a8c7372..66037fd 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -216,6 +216,7 @@ static int scsi_handle_rw_error(SCSIDiskReq *r, int error, 
int type)

  bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
  vm_stop(VMSTOP_DISKFULL);
+vm_status_set(VMST_IOERROR);
  } else {
  if (type == SCSI_REQ_STATUS_RETRY_READ) {
  scsi_req_data(r-req, 0);
diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index 91e0394..bf70200 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -79,6 +79,7 @@ static int virtio_blk_handle_rw_error(VirtIOBlockReq *req, 
int error,
  s-rq = req;
  bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
  vm_stop(VMSTOP_DISKFULL);
+vm_status_set(VMST_IOERROR);
  } else {
  virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR);
  bdrv_mon_event(s-bs, BDRV_ACTION_REPORT, is_read);
diff --git a/hw/watchdog.c b/hw/watchdog.c
index 1c900a1..d130cbb 100644
--- a/hw/watchdog.c
+++ b/hw/watchdog.c
@@ -133,6 +133,7 @@ void watchdog_perform_action(void)
  case WDT_PAUSE: /* same as 'stop' command in monitor */
  watchdog_mon_event(pause);
  vm_stop(VMSTOP_WATCHDOG);
+vm_status_set(VMST_WATCHDOG);
  break;

  case WDT_DEBUG:
diff --git a/kvm-all.c b/kvm-all.c
index cbc2532..aee9e0a 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -1015,6 +1015,7 @@ int kvm_cpu_exec(CPUState *env)
  if (ret  0) {
  cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE);
  vm_stop(VMSTOP_PANIC);
+vm_status_set(VMST_INTERROR);
  }

  env-exit_request = 0;
diff --git a/migration.c b/migration.c
index af3a1f2..674792f 

Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type

2011-07-05 Thread Luiz Capitulino
On Tue, 05 Jul 2011 13:58:34 -0500
Anthony Liguori anth...@codemonkey.ws wrote:

 On 07/05/2011 01:51 PM, Luiz Capitulino wrote:
  On Tue, 05 Jul 2011 13:33:07 -0500
  Anthony Liguorianth...@codemonkey.ws  wrote:
 
  On 07/05/2011 01:17 PM, Luiz Capitulino wrote:
  We need to track the VM status so that QMP can report it to clients.
 
  This commit adds the VMStatus type and related functions. The
  vm_status_set() function is used to keep track of the current
  VM status.
 
  The current statuses are:
 
  Which states are terminal, and what's the proper procedure to recover
  from non-terminal states?  Is it cont or system_reset followed by cont?
 
  Can I add that to the next patch (which also adds the QMP doc) or do you
  prefer it in this patch?
 
 It can be a separate patch, I was more curious about whether you had 
 thought through this for each of the states so that the states we were 
 introducing were well defined.

I haven't to be honest. Adding it as documentation will be a good
exercise though. Will do that for v2, but if you have comments about
specific states, please, let me know now.

 
 For instance, it's not clear to me what the semantics of 
 'load-state-error' are and how it's different from prelaunch.
 
 I'm quite surprised that 'load-state-error' wouldn't be a terminal error.

Me too. I thought that starting (but not running) the VM after a failed
load_vmstate() was a feature to allow debugging. I've never thought that it
were possible to do 'cont' in this case (only badness can happen when doing
this, no?).

There are two solutions:

 1. Just drop load-state-error

 2. Doesn't allow a VM that failed a load_vmstate() call to be put to run,
unless another call to load_vmstate() succeeds

 
 Regards,
 
 Anthony Liguori
 
 
 
 
- debug: guest is running under gdb
- inmigrate: guest is paused waiting for an incoming migration
- postmigrate: guest is paused following a successful migration
- internal-error: Fatal internal error that prevents further guest
execution
- load-state-error: guest is paused following a failed 'loadvm'
- io-error: the last IOP has failed and the device is configured
to pause on I/O errors
- watchdog-error: the watchdog action is configured to pause and
  has been triggered
- paused: guest has been paused via the 'stop' command
- prelaunch: QEMU was started with -S and guest has not started
- running: guest is actively running
- shutdown: guest is shut down (and -no-shutdown is in use)
 
  Regards,
 
  Anthony Liguori
 
 
  Signed-off-by: Luiz Capitulinolcapitul...@redhat.com
  ---
 gdbstub.c   |4 
 hw/ide/core.c   |1 +
 hw/scsi-disk.c  |1 +
 hw/virtio-blk.c |1 +
 hw/watchdog.c   |1 +
 kvm-all.c   |1 +
 migration.c |3 +++
 monitor.c   |5 -
 sysemu.h|   19 +++
 vl.c|   37 +
 10 files changed, 72 insertions(+), 1 deletions(-)
 
  diff --git a/gdbstub.c b/gdbstub.c
  index c085a5a..61b700a 100644
  --- a/gdbstub.c
  +++ b/gdbstub.c
  @@ -2358,6 +2358,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, 
  const char *fmt, ...)
 s-state = RS_SYSCALL;
 #ifndef CONFIG_USER_ONLY
 vm_stop(VMSTOP_DEBUG);
  +vm_status_set(VMST_DEBUG);
 #endif
 s-state = RS_IDLE;
 va_start(va, fmt);
  @@ -2432,6 +2433,7 @@ static void gdb_read_byte(GDBState *s, int ch)
 /* when the CPU is running, we cannot do anything except stop
it when receiving a char */
 vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
 } else
 #endif
 {
  @@ -2694,6 +2696,7 @@ static void gdb_chr_event(void *opaque, int event)
 switch (event) {
 case CHR_EVENT_OPENED:
 vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
 gdb_has_xml = 0;
 break;
 default:
  @@ -2735,6 +2738,7 @@ static void gdb_sigterm_handler(int signal)
 {
 if (vm_running) {
 vm_stop(VMSTOP_USER);
  +vm_status_set(VMST_DEBUG);
 }
 }
 #endif
  diff --git a/hw/ide/core.c b/hw/ide/core.c
  index ca17a43..bf9df41 100644
  --- a/hw/ide/core.c
  +++ b/hw/ide/core.c
  @@ -523,6 +523,7 @@ static int ide_handle_rw_error(IDEState *s, int 
  error, int op)
 s-bus-error_status = op;
 bdrv_mon_event(s-bs, BDRV_ACTION_STOP, is_read);
 vm_stop(VMSTOP_DISKFULL);
  +vm_status_set(VMST_IOERROR);
 } else {
 if (op   BM_STATUS_DMA_RETRY) {
 dma_buf_commit(s, 0);
  diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
  index a8c7372..66037fd 100644
  --- a/hw/scsi-disk.c
  +++ b/hw/scsi-disk.c
  @@ -216,6 +216,7 @@ static int