Re: [Qemu-devel] [PATCH] hw/virtio-serial-bus: post_load send_event when vm is running

2012-11-19 Thread Paolo Bonzini
Il 18/11/2012 20:17, Blue Swirl ha scritto:
   +struct {
 
  Please add a name, for example PostLoad.
 
  Why?  This is not C++ and the namespace would be global.  It's just to
  have a nice grouping.
 Otherwise the structure will be anonymous and those were only added to
 C11, not C99.

No, the name here is post_load.  Unnamed struct *types* are present
all the way to C89 and probably even KR.

Paolo

 
  Paolo
 
   +QEMUTimer *timer;
   +int nr_active_ports;
   +struct {
   +VirtIOSerialPort *port;
   +uint8_t host_connected;
   +} *connected;
   +} post_load;




Re: [Qemu-devel] [PATCH] hw/virtio-serial-bus: post_load send_event when vm is running

2012-11-18 Thread Paolo Bonzini

   struct virtio_console_config config;
  +
  +struct {
 
 Please add a name, for example PostLoad.

Why?  This is not C++ and the namespace would be global.  It's just to
have a nice grouping.

Paolo

  +QEMUTimer *timer;
  +int nr_active_ports;
  +struct {
  +VirtIOSerialPort *port;
  +uint8_t host_connected;
  +} *connected;
  +} post_load;
   };
 
   static VirtIOSerialPort *find_port_by_id(VirtIOSerial *vser,
   uint32_t id)
  @@ -626,6 +635,29 @@ static void virtio_serial_save(QEMUFile *f,
  void *opaque)
   }
   }
 
  +static void virtio_serial_post_load_timer_cb(void *opaque)
  +{
  +int i;
  +VirtIOSerial *s = opaque;
  +VirtIOSerialPort *port;
  +uint8_t host_connected;
  +
  +for (i = 0 ; i  s-post_load.nr_active_ports; ++i) {
  +port = s-post_load.connected[i].port;
  +host_connected = s-post_load.connected[i].host_connected;
  +if (host_connected != port-host_connected) {
  +/*
  + * We have to let the guest know of the host
  connection
  + * status change
  + */
  +send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN,
  +   port-host_connected);
  +}
  +}
  +g_free(s-post_load.connected);
  +s-post_load.connected = NULL;
  +}
  +
   static int virtio_serial_load(QEMUFile *f, void *opaque, int
   version_id)
   {
   VirtIOSerial *s = opaque;
  @@ -673,10 +705,13 @@ static int virtio_serial_load(QEMUFile *f,
  void *opaque, int version_id)
 
   qemu_get_be32s(f, nr_active_ports);
 
  +s-post_load.nr_active_ports = nr_active_ports;
  +s-post_load.connected =
  +g_malloc0(sizeof(*s-post_load.connected) *
  nr_active_ports);
  +
   /* Items in struct VirtIOSerialPort */
   for (i = 0; i  nr_active_ports; i++) {
   uint32_t id;
  -bool host_connected;
 
   id = qemu_get_be32(f);
   port = find_port_by_id(s, id);
  @@ -685,15 +720,8 @@ static int virtio_serial_load(QEMUFile *f,
  void *opaque, int version_id)
   }
 
   port-guest_connected = qemu_get_byte(f);
  -host_connected = qemu_get_byte(f);
  -if (host_connected != port-host_connected) {
  -/*
  - * We have to let the guest know of the host
  connection
  - * status change
  - */
  -send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN,
  -   port-host_connected);
  -}
  +s-post_load.connected[i].port = port;
  +s-post_load.connected[i].host_connected =
  qemu_get_byte(f);
 
   if (version_id  2) {
   uint32_t elem_popped;
  @@ -718,6 +746,7 @@ static int virtio_serial_load(QEMUFile *f, void
  *opaque, int version_id)
   }
   }
   }
  +qemu_mod_timer(s-post_load.timer, 1);
   return 0;
   }
 
  @@ -967,6 +996,9 @@ VirtIODevice *virtio_serial_init(DeviceState
  *dev, virtio_serial_conf *conf)
   register_savevm(dev, virtio-console, -1, 3,
   virtio_serial_save,
   virtio_serial_load, vser);
 
  +vser-post_load.timer = qemu_new_timer_ns(vm_clock,
  +virtio_serial_post_load_timer_cb, vser);
  +
   return vdev;
   }
 
  @@ -979,6 +1011,8 @@ void virtio_serial_exit(VirtIODevice *vdev)
   g_free(vser-ivqs);
   g_free(vser-ovqs);
   g_free(vser-ports_map);
  +g_free(vser-post_load.connected);
  +qemu_free_timer(vser-post_load.timer);
 
   virtio_cleanup(vdev);
   }
  --
  1.8.0
 
 
 



Re: [Qemu-devel] [PATCH] hw/virtio-serial-bus: post_load send_event when vm is running

2012-11-18 Thread Blue Swirl
On Sun, Nov 18, 2012 at 4:29 PM, Paolo Bonzini pbonz...@redhat.com wrote:

   struct virtio_console_config config;
  +
  +struct {

 Please add a name, for example PostLoad.

 Why?  This is not C++ and the namespace would be global.  It's just to
 have a nice grouping.

Otherwise the structure will be anonymous and those were only added to
C11, not C99.


 Paolo

  +QEMUTimer *timer;
  +int nr_active_ports;
  +struct {
  +VirtIOSerialPort *port;
  +uint8_t host_connected;
  +} *connected;
  +} post_load;
   };
 
   static VirtIOSerialPort *find_port_by_id(VirtIOSerial *vser,
   uint32_t id)
  @@ -626,6 +635,29 @@ static void virtio_serial_save(QEMUFile *f,
  void *opaque)
   }
   }
 
  +static void virtio_serial_post_load_timer_cb(void *opaque)
  +{
  +int i;
  +VirtIOSerial *s = opaque;
  +VirtIOSerialPort *port;
  +uint8_t host_connected;
  +
  +for (i = 0 ; i  s-post_load.nr_active_ports; ++i) {
  +port = s-post_load.connected[i].port;
  +host_connected = s-post_load.connected[i].host_connected;
  +if (host_connected != port-host_connected) {
  +/*
  + * We have to let the guest know of the host
  connection
  + * status change
  + */
  +send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN,
  +   port-host_connected);
  +}
  +}
  +g_free(s-post_load.connected);
  +s-post_load.connected = NULL;
  +}
  +
   static int virtio_serial_load(QEMUFile *f, void *opaque, int
   version_id)
   {
   VirtIOSerial *s = opaque;
  @@ -673,10 +705,13 @@ static int virtio_serial_load(QEMUFile *f,
  void *opaque, int version_id)
 
   qemu_get_be32s(f, nr_active_ports);
 
  +s-post_load.nr_active_ports = nr_active_ports;
  +s-post_load.connected =
  +g_malloc0(sizeof(*s-post_load.connected) *
  nr_active_ports);
  +
   /* Items in struct VirtIOSerialPort */
   for (i = 0; i  nr_active_ports; i++) {
   uint32_t id;
  -bool host_connected;
 
   id = qemu_get_be32(f);
   port = find_port_by_id(s, id);
  @@ -685,15 +720,8 @@ static int virtio_serial_load(QEMUFile *f,
  void *opaque, int version_id)
   }
 
   port-guest_connected = qemu_get_byte(f);
  -host_connected = qemu_get_byte(f);
  -if (host_connected != port-host_connected) {
  -/*
  - * We have to let the guest know of the host
  connection
  - * status change
  - */
  -send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN,
  -   port-host_connected);
  -}
  +s-post_load.connected[i].port = port;
  +s-post_load.connected[i].host_connected =
  qemu_get_byte(f);
 
   if (version_id  2) {
   uint32_t elem_popped;
  @@ -718,6 +746,7 @@ static int virtio_serial_load(QEMUFile *f, void
  *opaque, int version_id)
   }
   }
   }
  +qemu_mod_timer(s-post_load.timer, 1);
   return 0;
   }
 
  @@ -967,6 +996,9 @@ VirtIODevice *virtio_serial_init(DeviceState
  *dev, virtio_serial_conf *conf)
   register_savevm(dev, virtio-console, -1, 3,
   virtio_serial_save,
   virtio_serial_load, vser);
 
  +vser-post_load.timer = qemu_new_timer_ns(vm_clock,
  +virtio_serial_post_load_timer_cb, vser);
  +
   return vdev;
   }
 
  @@ -979,6 +1011,8 @@ void virtio_serial_exit(VirtIODevice *vdev)
   g_free(vser-ivqs);
   g_free(vser-ovqs);
   g_free(vser-ports_map);
  +g_free(vser-post_load.connected);
  +qemu_free_timer(vser-post_load.timer);
 
   virtio_cleanup(vdev);
   }
  --
  1.8.0
 
 




Re: [Qemu-devel] [PATCH] hw/virtio-serial-bus: post_load send_event when vm is running

2012-11-17 Thread Blue Swirl
On Wed, Nov 14, 2012 at 1:09 PM, Alon Levy al...@redhat.com wrote:
 Add a new timer based on vm_clock for 1 ns in the future from post_load
 to do the event send in case host_connected differs between migration
 source and target.

 RHBZ: 867366

 Signed-off-by: Alon Levy al...@redhat.com
 ---
  hw/virtio-serial-bus.c | 54 
 --
  1 file changed, 44 insertions(+), 10 deletions(-)

 diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
 index d20bd8b..efa8a81 100644
 --- a/hw/virtio-serial-bus.c
 +++ b/hw/virtio-serial-bus.c
 @@ -53,6 +53,15 @@ struct VirtIOSerial {
  uint32_t *ports_map;

  struct virtio_console_config config;
 +
 +struct {

Please add a name, for example PostLoad.

 +QEMUTimer *timer;
 +int nr_active_ports;
 +struct {
 +VirtIOSerialPort *port;
 +uint8_t host_connected;
 +} *connected;
 +} post_load;
  };

  static VirtIOSerialPort *find_port_by_id(VirtIOSerial *vser, uint32_t id)
 @@ -626,6 +635,29 @@ static void virtio_serial_save(QEMUFile *f, void *opaque)
  }
  }

 +static void virtio_serial_post_load_timer_cb(void *opaque)
 +{
 +int i;
 +VirtIOSerial *s = opaque;
 +VirtIOSerialPort *port;
 +uint8_t host_connected;
 +
 +for (i = 0 ; i  s-post_load.nr_active_ports; ++i) {
 +port = s-post_load.connected[i].port;
 +host_connected = s-post_load.connected[i].host_connected;
 +if (host_connected != port-host_connected) {
 +/*
 + * We have to let the guest know of the host connection
 + * status change
 + */
 +send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN,
 +   port-host_connected);
 +}
 +}
 +g_free(s-post_load.connected);
 +s-post_load.connected = NULL;
 +}
 +
  static int virtio_serial_load(QEMUFile *f, void *opaque, int version_id)
  {
  VirtIOSerial *s = opaque;
 @@ -673,10 +705,13 @@ static int virtio_serial_load(QEMUFile *f, void 
 *opaque, int version_id)

  qemu_get_be32s(f, nr_active_ports);

 +s-post_load.nr_active_ports = nr_active_ports;
 +s-post_load.connected =
 +g_malloc0(sizeof(*s-post_load.connected) * nr_active_ports);
 +
  /* Items in struct VirtIOSerialPort */
  for (i = 0; i  nr_active_ports; i++) {
  uint32_t id;
 -bool host_connected;

  id = qemu_get_be32(f);
  port = find_port_by_id(s, id);
 @@ -685,15 +720,8 @@ static int virtio_serial_load(QEMUFile *f, void *opaque, 
 int version_id)
  }

  port-guest_connected = qemu_get_byte(f);
 -host_connected = qemu_get_byte(f);
 -if (host_connected != port-host_connected) {
 -/*
 - * We have to let the guest know of the host connection
 - * status change
 - */
 -send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN,
 -   port-host_connected);
 -}
 +s-post_load.connected[i].port = port;
 +s-post_load.connected[i].host_connected = qemu_get_byte(f);

  if (version_id  2) {
  uint32_t elem_popped;
 @@ -718,6 +746,7 @@ static int virtio_serial_load(QEMUFile *f, void *opaque, 
 int version_id)
  }
  }
  }
 +qemu_mod_timer(s-post_load.timer, 1);
  return 0;
  }

 @@ -967,6 +996,9 @@ VirtIODevice *virtio_serial_init(DeviceState *dev, 
 virtio_serial_conf *conf)
  register_savevm(dev, virtio-console, -1, 3, virtio_serial_save,
  virtio_serial_load, vser);

 +vser-post_load.timer = qemu_new_timer_ns(vm_clock,
 +virtio_serial_post_load_timer_cb, vser);
 +
  return vdev;
  }

 @@ -979,6 +1011,8 @@ void virtio_serial_exit(VirtIODevice *vdev)
  g_free(vser-ivqs);
  g_free(vser-ovqs);
  g_free(vser-ports_map);
 +g_free(vser-post_load.connected);
 +qemu_free_timer(vser-post_load.timer);

  virtio_cleanup(vdev);
  }
 --
 1.8.0





Re: [Qemu-devel] [PATCH] hw/virtio-serial-bus: post_load send_event when vm is running

2012-11-16 Thread Amit Shah
On (Wed) 14 Nov 2012 [15:09:07], Alon Levy wrote:
 Add a new timer based on vm_clock for 1 ns in the future from post_load
 to do the event send in case host_connected differs between migration
 source and target.
 
 RHBZ: 867366
 
 Signed-off-by: Alon Levy al...@redhat.com
 ---
  hw/virtio-serial-bus.c | 54 
 --
  1 file changed, 44 insertions(+), 10 deletions(-)

Thanks, applied.

Amit



[Qemu-devel] [PATCH] hw/virtio-serial-bus: post_load send_event when vm is running

2012-11-14 Thread Alon Levy
Add a new timer based on vm_clock for 1 ns in the future from post_load
to do the event send in case host_connected differs between migration
source and target.

RHBZ: 867366

Signed-off-by: Alon Levy al...@redhat.com
---
 hw/virtio-serial-bus.c | 54 --
 1 file changed, 44 insertions(+), 10 deletions(-)

diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
index d20bd8b..efa8a81 100644
--- a/hw/virtio-serial-bus.c
+++ b/hw/virtio-serial-bus.c
@@ -53,6 +53,15 @@ struct VirtIOSerial {
 uint32_t *ports_map;
 
 struct virtio_console_config config;
+
+struct {
+QEMUTimer *timer;
+int nr_active_ports;
+struct {
+VirtIOSerialPort *port;
+uint8_t host_connected;
+} *connected;
+} post_load;
 };
 
 static VirtIOSerialPort *find_port_by_id(VirtIOSerial *vser, uint32_t id)
@@ -626,6 +635,29 @@ static void virtio_serial_save(QEMUFile *f, void *opaque)
 }
 }
 
+static void virtio_serial_post_load_timer_cb(void *opaque)
+{
+int i;
+VirtIOSerial *s = opaque;
+VirtIOSerialPort *port;
+uint8_t host_connected;
+
+for (i = 0 ; i  s-post_load.nr_active_ports; ++i) {
+port = s-post_load.connected[i].port;
+host_connected = s-post_load.connected[i].host_connected;
+if (host_connected != port-host_connected) {
+/*
+ * We have to let the guest know of the host connection
+ * status change
+ */
+send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN,
+   port-host_connected);
+}
+}
+g_free(s-post_load.connected);
+s-post_load.connected = NULL;
+}
+
 static int virtio_serial_load(QEMUFile *f, void *opaque, int version_id)
 {
 VirtIOSerial *s = opaque;
@@ -673,10 +705,13 @@ static int virtio_serial_load(QEMUFile *f, void *opaque, 
int version_id)
 
 qemu_get_be32s(f, nr_active_ports);
 
+s-post_load.nr_active_ports = nr_active_ports;
+s-post_load.connected =
+g_malloc0(sizeof(*s-post_load.connected) * nr_active_ports);
+
 /* Items in struct VirtIOSerialPort */
 for (i = 0; i  nr_active_ports; i++) {
 uint32_t id;
-bool host_connected;
 
 id = qemu_get_be32(f);
 port = find_port_by_id(s, id);
@@ -685,15 +720,8 @@ static int virtio_serial_load(QEMUFile *f, void *opaque, 
int version_id)
 }
 
 port-guest_connected = qemu_get_byte(f);
-host_connected = qemu_get_byte(f);
-if (host_connected != port-host_connected) {
-/*
- * We have to let the guest know of the host connection
- * status change
- */
-send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN,
-   port-host_connected);
-}
+s-post_load.connected[i].port = port;
+s-post_load.connected[i].host_connected = qemu_get_byte(f);
 
 if (version_id  2) {
 uint32_t elem_popped;
@@ -718,6 +746,7 @@ static int virtio_serial_load(QEMUFile *f, void *opaque, 
int version_id)
 }
 }
 }
+qemu_mod_timer(s-post_load.timer, 1);
 return 0;
 }
 
@@ -967,6 +996,9 @@ VirtIODevice *virtio_serial_init(DeviceState *dev, 
virtio_serial_conf *conf)
 register_savevm(dev, virtio-console, -1, 3, virtio_serial_save,
 virtio_serial_load, vser);
 
+vser-post_load.timer = qemu_new_timer_ns(vm_clock,
+virtio_serial_post_load_timer_cb, vser);
+
 return vdev;
 }
 
@@ -979,6 +1011,8 @@ void virtio_serial_exit(VirtIODevice *vdev)
 g_free(vser-ivqs);
 g_free(vser-ovqs);
 g_free(vser-ports_map);
+g_free(vser-post_load.connected);
+qemu_free_timer(vser-post_load.timer);
 
 virtio_cleanup(vdev);
 }
-- 
1.8.0




Re: [Qemu-devel] [PATCH] hw/virtio-serial-bus: post_load send_event when vm is running

2012-11-14 Thread Paolo Bonzini
Il 14/11/2012 14:09, Alon Levy ha scritto:
 Add a new timer based on vm_clock for 1 ns in the future from post_load
 to do the event send in case host_connected differs between migration
 source and target.
 
 RHBZ: 867366
 
 Signed-off-by: Alon Levy al...@redhat.com
 ---
  hw/virtio-serial-bus.c | 54 
 --
  1 file changed, 44 insertions(+), 10 deletions(-)
 
 diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
 index d20bd8b..efa8a81 100644
 --- a/hw/virtio-serial-bus.c
 +++ b/hw/virtio-serial-bus.c
 @@ -53,6 +53,15 @@ struct VirtIOSerial {
  uint32_t *ports_map;
  
  struct virtio_console_config config;
 +
 +struct {
 +QEMUTimer *timer;
 +int nr_active_ports;
 +struct {
 +VirtIOSerialPort *port;
 +uint8_t host_connected;
 +} *connected;
 +} post_load;
  };
  
  static VirtIOSerialPort *find_port_by_id(VirtIOSerial *vser, uint32_t id)
 @@ -626,6 +635,29 @@ static void virtio_serial_save(QEMUFile *f, void *opaque)
  }
  }
  
 +static void virtio_serial_post_load_timer_cb(void *opaque)
 +{
 +int i;
 +VirtIOSerial *s = opaque;
 +VirtIOSerialPort *port;
 +uint8_t host_connected;
 +
 +for (i = 0 ; i  s-post_load.nr_active_ports; ++i) {
 +port = s-post_load.connected[i].port;
 +host_connected = s-post_load.connected[i].host_connected;
 +if (host_connected != port-host_connected) {
 +/*
 + * We have to let the guest know of the host connection
 + * status change
 + */
 +send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN,
 +   port-host_connected);
 +}
 +}
 +g_free(s-post_load.connected);
 +s-post_load.connected = NULL;
 +}
 +
  static int virtio_serial_load(QEMUFile *f, void *opaque, int version_id)
  {
  VirtIOSerial *s = opaque;
 @@ -673,10 +705,13 @@ static int virtio_serial_load(QEMUFile *f, void 
 *opaque, int version_id)
  
  qemu_get_be32s(f, nr_active_ports);
  
 +s-post_load.nr_active_ports = nr_active_ports;
 +s-post_load.connected =
 +g_malloc0(sizeof(*s-post_load.connected) * nr_active_ports);
 +
  /* Items in struct VirtIOSerialPort */
  for (i = 0; i  nr_active_ports; i++) {
  uint32_t id;
 -bool host_connected;
  
  id = qemu_get_be32(f);
  port = find_port_by_id(s, id);
 @@ -685,15 +720,8 @@ static int virtio_serial_load(QEMUFile *f, void *opaque, 
 int version_id)
  }
  
  port-guest_connected = qemu_get_byte(f);
 -host_connected = qemu_get_byte(f);
 -if (host_connected != port-host_connected) {
 -/*
 - * We have to let the guest know of the host connection
 - * status change
 - */
 -send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN,
 -   port-host_connected);
 -}
 +s-post_load.connected[i].port = port;
 +s-post_load.connected[i].host_connected = qemu_get_byte(f);
  
  if (version_id  2) {
  uint32_t elem_popped;
 @@ -718,6 +746,7 @@ static int virtio_serial_load(QEMUFile *f, void *opaque, 
 int version_id)
  }
  }
  }
 +qemu_mod_timer(s-post_load.timer, 1);
  return 0;
  }
  
 @@ -967,6 +996,9 @@ VirtIODevice *virtio_serial_init(DeviceState *dev, 
 virtio_serial_conf *conf)
  register_savevm(dev, virtio-console, -1, 3, virtio_serial_save,
  virtio_serial_load, vser);
  
 +vser-post_load.timer = qemu_new_timer_ns(vm_clock,
 +virtio_serial_post_load_timer_cb, vser);
 +
  return vdev;
  }
  
 @@ -979,6 +1011,8 @@ void virtio_serial_exit(VirtIODevice *vdev)
  g_free(vser-ivqs);
  g_free(vser-ovqs);
  g_free(vser-ports_map);
 +g_free(vser-post_load.connected);
 +qemu_free_timer(vser-post_load.timer);
  
  virtio_cleanup(vdev);
  }
 

Acked-by: Paolo Bonzini pbonz...@redhat.com