qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Blue Swirl <blauwirbel@gmail.com>
Cc: amit shah <amit.shah@redhat.com>, Alon Levy <alevy@redhat.com>,
	qemu-devel@nongnu.org, alexl@redhat.com
Subject: Re: [Qemu-devel] [PATCH] hw/virtio-serial-bus: post_load send_event when vm is running
Date: Sun, 18 Nov 2012 11:29:25 -0500 (EST)	[thread overview]
Message-ID: <1262482193.11614629.1353256165864.JavaMail.root@redhat.com> (raw)
In-Reply-To: <CAAu8pHvA01or2RoYnzP3ZHpxh_iruYCkbRwOuiBjZbTFj6bntQ@mail.gmail.com>


> >      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
> >
> >
> 

  reply	other threads:[~2012-11-18 16:29 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-14 13:09 [Qemu-devel] [PATCH] hw/virtio-serial-bus: post_load send_event when vm is running Alon Levy
2012-11-14 13:20 ` Paolo Bonzini
2012-11-16  8:30 ` Amit Shah
2012-11-17 16:08 ` Blue Swirl
2012-11-18 16:29   ` Paolo Bonzini [this message]
2012-11-18 19:17     ` Blue Swirl
2012-11-19  8:19       ` Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1262482193.11614629.1353256165864.JavaMail.root@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=alevy@redhat.com \
    --cc=alexl@redhat.com \
    --cc=amit.shah@redhat.com \
    --cc=blauwirbel@gmail.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).