Re: [Qemu-devel] [PATCH] hw/virtio-serial-bus: post_load send_event when vm is running
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
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
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
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
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
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
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