All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] Staging update (0.12 pending freeze)
@ 2009-12-02 16:46 Anthony Liguori
  2009-12-02 19:22 ` [Qemu-devel] " Jan Kiszka
                   ` (8 more replies)
  0 siblings, 9 replies; 40+ messages in thread
From: Anthony Liguori @ 2009-12-02 16:46 UTC (permalink / raw)
  To: qemu-devel

I've got all of the patches I'm considering for 0.12 currently in 
staging.  I'm going to work through and test/commit these in a few 
chunks over the next few days before freezing the tree.

If you have a pending patch that you think should be in 0.12, please 
check to make sure it's there.  If you have a new patch you'd like to 
consider for 0.12, please indicate that in the subject with a [FOR 0.12] 
tag as I don't plan on doing another full pull of patches (since testing 
takes time).

http://repo.or.cz/w/qemu/aliguori-queue.git

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 40+ messages in thread

* [Qemu-devel] Re: Staging update (0.12 pending freeze)
  2009-12-02 16:46 [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
@ 2009-12-02 19:22 ` Jan Kiszka
  2009-12-02 19:32   ` Anthony Liguori
  2009-12-02 19:44 ` [Qemu-devel] " Luiz Capitulino
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 40+ messages in thread
From: Jan Kiszka @ 2009-12-02 19:22 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel

Anthony Liguori wrote:
> I've got all of the patches I'm considering for 0.12 currently in
> staging.  I'm going to work through and test/commit these in a few
> chunks over the next few days before freezing the tree.
> 
> If you have a pending patch that you think should be in 0.12, please
> check to make sure it's there.  If you have a new patch you'd like to
> consider for 0.12, please indicate that in the subject with a [FOR 0.12]
> tag as I don't plan on doing another full pull of patches (since testing
> takes time).
> 
> http://repo.or.cz/w/qemu/aliguori-queue.git
> 

I'm would like to see those two series included:
 - http://git.kiszka.org/?p=qemu.git;a=shortlog;h=refs/heads/queues/kvm
 - http://git.kiszka.org/?p=qemu.git;a=shortlog;h=refs/heads/queues/scsi

Both freshly rebased against staging (which doesn't build btw).

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 40+ messages in thread

* [Qemu-devel] Re: Staging update (0.12 pending freeze)
  2009-12-02 19:22 ` [Qemu-devel] " Jan Kiszka
@ 2009-12-02 19:32   ` Anthony Liguori
  2009-12-03 14:23     ` Luiz Capitulino
  0 siblings, 1 reply; 40+ messages in thread
From: Anthony Liguori @ 2009-12-02 19:32 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: qemu-devel

Jan Kiszka wrote:
> Anthony Liguori wrote:
>   
>> I've got all of the patches I'm considering for 0.12 currently in
>> staging.  I'm going to work through and test/commit these in a few
>> chunks over the next few days before freezing the tree.
>>
>> If you have a pending patch that you think should be in 0.12, please
>> check to make sure it's there.  If you have a new patch you'd like to
>> consider for 0.12, please indicate that in the subject with a [FOR 0.12]
>> tag as I don't plan on doing another full pull of patches (since testing
>> takes time).
>>
>> http://repo.or.cz/w/qemu/aliguori-queue.git
>>
>>     
>
> I'm would like to see those two series included:
>  - http://git.kiszka.org/?p=qemu.git;a=shortlog;h=refs/heads/queues/kvm
>   

Got both of these.

>  - http://git.kiszka.org/?p=qemu.git;a=shortlog;h=refs/heads/queues/scsi
>   

I just got that.  Had a blip and missed a day of patches.

> Both freshly rebased against staging (which doesn't build btw).
>   

Nope, and it won't for a while.  Instead of fixing everything, I'm just 
focusing on small groups of patches at a time.

> Jan
>
>   

Thanks,

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-02 16:46 [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
  2009-12-02 19:22 ` [Qemu-devel] " Jan Kiszka
@ 2009-12-02 19:44 ` Luiz Capitulino
  2009-12-02 19:54   ` Anthony Liguori
  2009-12-02 19:46 ` Ian Molton
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 40+ messages in thread
From: Luiz Capitulino @ 2009-12-02 19:44 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel

On Wed, 02 Dec 2009 10:46:11 -0600
Anthony Liguori <anthony@codemonkey.ws> wrote:

> I've got all of the patches I'm considering for 0.12 currently in 
> staging.  I'm going to work through and test/commit these in a few 
> chunks over the next few days before freezing the tree.
> 
> If you have a pending patch that you think should be in 0.12, please 
> check to make sure it's there.  If you have a new patch you'd like to 
> consider for 0.12, please indicate that in the subject with a [FOR 0.12] 
> tag as I don't plan on doing another full pull of patches (since testing 
> takes time).

 My conversion series is not there:

http://lists.gnu.org/archive/html/qemu-devel/2009-11/msg01398.html

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-02 16:46 [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
  2009-12-02 19:22 ` [Qemu-devel] " Jan Kiszka
  2009-12-02 19:44 ` [Qemu-devel] " Luiz Capitulino
@ 2009-12-02 19:46 ` Ian Molton
  2009-12-02 19:48   ` Anthony Liguori
  2009-12-03 12:34 ` [Qemu-devel] Staging update (0.12 pending freeze) Gerd Hoffmann
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 40+ messages in thread
From: Ian Molton @ 2009-12-02 19:46 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel

Anthony Liguori wrote:
> I've got all of the patches I'm considering for 0.12 currently in
> staging.

> http://repo.or.cz/w/qemu/aliguori-queue.git

I see you have my rng and size patches in there, thanks for the quick
review!

Is it too late to get the timer based socket reconnect patch in and the
(two liner) patch to virtio-rng to use it? it'd make virtio-rng actually
useful in a production environment...

if not, let me know and I'll rebase and send an incremental patchset to you.

Cheers,

-Ian

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-02 19:46 ` Ian Molton
@ 2009-12-02 19:48   ` Anthony Liguori
  2009-12-02 19:52     ` Ian Molton
  0 siblings, 1 reply; 40+ messages in thread
From: Anthony Liguori @ 2009-12-02 19:48 UTC (permalink / raw)
  To: Ian Molton; +Cc: qemu-devel

Ian Molton wrote:
> Anthony Liguori wrote:
>   
>> I've got all of the patches I'm considering for 0.12 currently in
>> staging.
>>     
>
>   
>> http://repo.or.cz/w/qemu/aliguori-queue.git
>>     
>
> I see you have my rng and size patches in there, thanks for the quick
> review!
>
> Is it too late to get the timer based socket reconnect patch in and the
> (two liner) patch to virtio-rng to use it? it'd make virtio-rng actually
> useful in a production environment...
>   

Actually, that patch would break a production environment.  You cannot 
sleep in qemu.  It will severely impact the guest.

> if not, let me know and I'll rebase and send an incremental patchset to you.
>   

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-02 19:48   ` Anthony Liguori
@ 2009-12-02 19:52     ` Ian Molton
  2009-12-02 19:55       ` Anthony Liguori
  0 siblings, 1 reply; 40+ messages in thread
From: Ian Molton @ 2009-12-02 19:52 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel

Anthony Liguori wrote:
> Ian Molton wrote:

> Actually, that patch would break a production environment.  You cannot
> sleep in qemu.  It will severely impact the guest.

I refer to the version posted today, which doesnt sleep, but uses a
timer instead. (or did I miss something and a callled function sleeps?
it didnt hang qemu here when I tested it...)

-Ian

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-02 19:44 ` [Qemu-devel] " Luiz Capitulino
@ 2009-12-02 19:54   ` Anthony Liguori
  2009-12-02 20:00     ` Luiz Capitulino
  0 siblings, 1 reply; 40+ messages in thread
From: Anthony Liguori @ 2009-12-02 19:54 UTC (permalink / raw)
  To: Luiz Capitulino; +Cc: qemu-devel

Luiz Capitulino wrote:
> On Wed, 02 Dec 2009 10:46:11 -0600
> Anthony Liguori <anthony@codemonkey.ws> wrote:
>
>   
>> I've got all of the patches I'm considering for 0.12 currently in 
>> staging.  I'm going to work through and test/commit these in a few 
>> chunks over the next few days before freezing the tree.
>>
>> If you have a pending patch that you think should be in 0.12, please 
>> check to make sure it's there.  If you have a new patch you'd like to 
>> consider for 0.12, please indicate that in the subject with a [FOR 0.12] 
>> tag as I don't plan on doing another full pull of patches (since testing 
>> takes time).
>>     
>
>  My conversion series is not there:
>
> http://lists.gnu.org/archive/html/qemu-devel/2009-11/msg01398.html
>   
I'm not sure why they aren't there, but can you rebase that against 
staging?  Specifically, Jan's block migration info patches introduce new 
fields.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-02 19:52     ` Ian Molton
@ 2009-12-02 19:55       ` Anthony Liguori
  2009-12-02 20:13         ` [Qemu-devel] [PATCH] Socket reconnection take 2 Ian Molton
  0 siblings, 1 reply; 40+ messages in thread
From: Anthony Liguori @ 2009-12-02 19:55 UTC (permalink / raw)
  To: Ian Molton; +Cc: qemu-devel

Ian Molton wrote:
> Anthony Liguori wrote:
>   
>> Ian Molton wrote:
>>     
>
>   
>> Actually, that patch would break a production environment.  You cannot
>> sleep in qemu.  It will severely impact the guest.
>>     
>
> I refer to the version posted today, which doesnt sleep, but uses a
> timer instead. (or did I miss something and a callled function sleeps?
> it didnt hang qemu here when I tested it...)
>   

Ah, if you don't post with a [PATCH] in the subject, I'm highly likely 
to miss the patch.  Please resubmit.

Regards,

Anthony Liguori

> -Ian
>   

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-02 19:54   ` Anthony Liguori
@ 2009-12-02 20:00     ` Luiz Capitulino
  0 siblings, 0 replies; 40+ messages in thread
From: Luiz Capitulino @ 2009-12-02 20:00 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel

On Wed, 02 Dec 2009 13:54:20 -0600
Anthony Liguori <anthony@codemonkey.ws> wrote:

> Luiz Capitulino wrote:
> > On Wed, 02 Dec 2009 10:46:11 -0600
> > Anthony Liguori <anthony@codemonkey.ws> wrote:
> >
> >   
> >> I've got all of the patches I'm considering for 0.12 currently in 
> >> staging.  I'm going to work through and test/commit these in a few 
> >> chunks over the next few days before freezing the tree.
> >>
> >> If you have a pending patch that you think should be in 0.12, please 
> >> check to make sure it's there.  If you have a new patch you'd like to 
> >> consider for 0.12, please indicate that in the subject with a [FOR 0.12] 
> >> tag as I don't plan on doing another full pull of patches (since testing 
> >> takes time).
> >>     
> >
> >  My conversion series is not there:
> >
> > http://lists.gnu.org/archive/html/qemu-devel/2009-11/msg01398.html
> >   
> I'm not sure why they aren't there, but can you rebase that against 
> staging?  Specifically, Jan's block migration info patches introduce new 
> fields.

 Sure.

^ permalink raw reply	[flat|nested] 40+ messages in thread

* [Qemu-devel] [PATCH] Socket reconnection take 2.
  2009-12-02 19:55       ` Anthony Liguori
@ 2009-12-02 20:13         ` Ian Molton
  2009-12-03 10:33           ` [Qemu-devel] " Michael S. Tsirkin
  0 siblings, 1 reply; 40+ messages in thread
From: Ian Molton @ 2009-12-02 20:13 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel

Reposting as requested. hopefully t-brid doesnt whitespace-mangle it.

Anthony Liguori wrote:

> > sleep() in qemu is very, very wrong.  It will pause the guest's
> > execution and all sorts of badness can ensue.

Quite...

> > The right thing to do is set a timer and not generate data while
> > disconnected.

New patch attached, now with less crack...

> >  I still am not confident this is really a great thing to do.

What other option is there than to drop the ability to feed entropy to
the guest when the hosts egd link drops?

btw. Does anyone know how to get t-bird to inline patches?

-Ian



>From e9d4be9cd0ef9e34c65939d4604874035c45bf34 Mon Sep 17 00:00:00 2001
From: Ian Molton <ian.molton@collabora.co.uk>
Date: Tue, 1 Dec 2009 11:18:41 +0000
Subject: [PATCH 2/4] socket: Add a reconnect option.

	Add a reconnect option that allows sockets to reconnect (after a
specified delay) to the specified server. This makes the virtio-rng driver
useful in production environments where the EGD server may need to be
restarted.

Signed-off-by: Ian Molton <ian.molton@collabora.co.uk>
---
 qemu-char.c   |  177
++++++++++++++++++++++++++++++++++++++++++++-------------
 qemu-char.h   |    2 +
 qemu-config.c |    3 +
 vl.c          |    4 +
 4 files changed, 147 insertions(+), 39 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index e202585..714c119 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -1870,8 +1870,12 @@ typedef struct {
     int max_size;
     int do_telnetopt;
     int do_nodelay;
+    int reconnect;
     int is_unix;
     int msgfd;
+    QemuOpts *opts;
+    CharDriverState *chr;
+    int (*setup)(QemuOpts *opts);
 } TCPCharDriver;

 static void tcp_chr_accept(void *opaque);
@@ -2011,6 +2015,69 @@ static ssize_t tcp_chr_recv(CharDriverState *chr,
char *buf, size_t len)
 }
 #endif

+struct reconnect_list {
+    TCPCharDriver *s;
+    uint64_t when;
+    struct reconnect_list *next;
+};
+
+static struct reconnect_list *rc_list;
+
+static int qemu_chr_sched_reconnect(TCPCharDriver *s)
+{
+    struct reconnect_list *new = qemu_malloc(sizeof(*new));
+    struct timeval tv;
+
+    if(!new)
+        return 1;
+
+    gettimeofday(&tv, NULL);
+    new->s = s;
+    new->when = (s->reconnect + tv.tv_sec) * 1000000 + tv.tv_usec;
+    new->next = rc_list;
+    rc_list = new;
+
+    return 0;
+}
+
+static int qemu_chr_connect_socket(TCPCharDriver *s);
+
+void qemu_chr_reconnect(void)
+{
+    struct reconnect_list *this = rc_list, *prev = NULL;
+    struct timeval tv;
+    uint64_t now;
+
+    if(!this)
+        return;
+
+    gettimeofday(&tv, NULL);
+    now = tv.tv_sec * 1000000 + tv.tv_usec;
+
+    while (this) {
+        if (this->when <= now) {
+            if(qemu_chr_connect_socket(this->s)) {
+                if(prev)
+                    prev->next = this->next;
+                else
+                    rc_list = NULL;
+                qemu_chr_event(this->s->chr, CHR_EVENT_RECONNECTED);
+                free(this);
+		if(prev)
+			this = prev;
+		else
+			this = NULL;
+            }
+            else {
+                this->when += this->s->reconnect * 1000000;
+            }
+        }
+        prev = this;
+	if(this)
+            this = this->next;
+    }
+}
+
 static void tcp_chr_read(void *opaque)
 {
     CharDriverState *chr = opaque;
@@ -2030,10 +2097,16 @@ static void tcp_chr_read(void *opaque)
         if (s->listen_fd >= 0) {
             qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
         }
-        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+        if (!s->reconnect)
+            qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
         closesocket(s->fd);
         s->fd = -1;
-        qemu_chr_event(chr, CHR_EVENT_CLOSED);
+        if (!s->reconnect) {
+            qemu_chr_event(chr, CHR_EVENT_CLOSED);
+        } else if (qemu_chr_sched_reconnect(s)) {
+            printf("Unable to queue socket for reconnection.\n");
+            qemu_chr_event(chr, CHR_EVENT_CLOSED);
+        }
     } else if (size > 0) {
         if (s->do_telnetopt)
             tcp_chr_process_IAC_bytes(chr, s, buf, &size);
@@ -2137,7 +2210,6 @@ static CharDriverState
*qemu_chr_open_socket(QemuOpts *opts)
 {
     CharDriverState *chr = NULL;
     TCPCharDriver *s = NULL;
-    int fd = -1;
     int is_listen;
     int is_waitconnect;
     int do_nodelay;
@@ -2145,34 +2217,40 @@ static CharDriverState
*qemu_chr_open_socket(QemuOpts *opts)
     int is_telnet;

     is_listen      = qemu_opt_get_bool(opts, "server", 0);
+    is_unix        = qemu_opt_get(opts, "path") != NULL;
+
     is_waitconnect = qemu_opt_get_bool(opts, "wait", 1);
     is_telnet      = qemu_opt_get_bool(opts, "telnet", 0);
     do_nodelay     = !qemu_opt_get_bool(opts, "delay", 1);
-    is_unix        = qemu_opt_get(opts, "path") != NULL;
-    if (!is_listen)
+
+    if (!is_listen) {
         is_waitconnect = 0;
+    } else {
+        if (is_telnet)
+            s->do_telnetopt = 1;
+    }
+

-    chr = qemu_mallocz(sizeof(CharDriverState));
     s = qemu_mallocz(sizeof(TCPCharDriver));
+    chr = qemu_mallocz(sizeof(CharDriverState));
+    s->opts = opts;
+
+    if (!is_listen && !is_telnet)
+        s->reconnect = qemu_opt_get_number(opts, "reconnect", 0);

     if (is_unix) {
         if (is_listen) {
-            fd = unix_listen_opts(opts);
+            s->setup = unix_listen_opts;
         } else {
-            fd = unix_connect_opts(opts);
+            s->setup = unix_connect_opts;
         }
     } else {
         if (is_listen) {
-            fd = inet_listen_opts(opts, 0);
+            s->setup = inet_listen_opts;
         } else {
-            fd = inet_connect_opts(opts);
+            s->setup = inet_connect_opts;
         }
     }
-    if (fd < 0)
-        goto fail;
-
-    if (!is_waitconnect)
-        socket_set_nonblock(fd);

     s->connected = 0;
     s->fd = -1;
@@ -2186,19 +2264,6 @@ static CharDriverState
*qemu_chr_open_socket(QemuOpts *opts)
     chr->chr_close = tcp_chr_close;
     chr->get_msgfd = tcp_get_msgfd;

-    if (is_listen) {
-        s->listen_fd = fd;
-        qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
-        if (is_telnet)
-            s->do_telnetopt = 1;
-
-    } else {
-        s->connected = 1;
-        s->fd = fd;
-        socket_set_nodelay(fd);
-        tcp_chr_connect(chr);
-    }
-
     /* for "info chardev" monitor command */
     chr->filename = qemu_malloc(256);
     if (is_unix) {
@@ -2215,22 +2280,56 @@ static CharDriverState
*qemu_chr_open_socket(QemuOpts *opts)
                  qemu_opt_get_bool(opts, "server", 0) ? ",server" : "");
     }

-    if (is_listen && is_waitconnect) {
-        printf("QEMU waiting for connection on: %s\n",
-               chr->filename);
-        tcp_chr_accept(chr);
-        socket_set_nonblock(s->listen_fd);
-    }
-    return chr;
+    s->chr = chr;
+
+    if(qemu_chr_connect_socket(s))
+        return chr;

- fail:
-    if (fd >= 0)
-        closesocket(fd);
-    qemu_free(s);
     qemu_free(chr);
+    qemu_free(s);
+
     return NULL;
 }

+
+static int qemu_chr_connect_socket(TCPCharDriver *s)
+{
+    QemuOpts *opts = s->opts;
+    int is_listen;
+    int fd;
+    int is_waitconnect;
+    int do_nodelay;
+
+    is_waitconnect = qemu_opt_get_bool(opts, "wait", 1);
+    is_listen      = qemu_opt_get_bool(opts, "server", 0);
+    do_nodelay     = !qemu_opt_get_bool(opts, "delay", 1);
+
+
+    fd = s->setup(s->opts);
+    if (fd < 0)
+        return 0;
+
+    if (!is_waitconnect)
+        socket_set_nonblock(fd);
+
+    if (is_listen) {
+        s->listen_fd = fd;
+        qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, s->chr);
+        if (is_waitconnect) {
+            printf("QEMU waiting for connection on: %s\n",
+                   s->chr->filename);
+            tcp_chr_accept(s->chr);
+            socket_set_nonblock(s->listen_fd);
+        }
+    } else {
+        s->fd = fd;
+        socket_set_nodelay(fd);
+        tcp_chr_connect(s->chr);
+    }
+
+    return 1;
+}
+
 static QemuOpts *qemu_chr_parse_compat(const char *label, const char
*filename)
 {
     char host[65], port[33], width[8], height[8];
diff --git a/qemu-char.h b/qemu-char.h
index 9957db1..dc954e2 100644
--- a/qemu-char.h
+++ b/qemu-char.h
@@ -14,6 +14,7 @@
 #define CHR_EVENT_MUX_IN  3 /* mux-focus was set to this terminal */
 #define CHR_EVENT_MUX_OUT 4 /* mux-focus will move on */
 #define CHR_EVENT_CLOSED  5 /* connection closed */
+#define CHR_EVENT_RECONNECTED  6 /* reconnect event */


 #define CHR_IOCTL_SERIAL_SET_PARAMS   1
@@ -73,6 +74,7 @@ CharDriverState *qemu_chr_open_opts(QemuOpts *opts,
                                     void (*init)(struct CharDriverState
*s));
 CharDriverState *qemu_chr_open(const char *label, const char *filename,
void (*init)(struct CharDriverState *s));
 void qemu_chr_close(CharDriverState *chr);
+void qemu_chr_reconnect(void);
 void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
 int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
 void qemu_chr_send_event(CharDriverState *s, int event);
diff --git a/qemu-config.c b/qemu-config.c
index 590fc05..ff8b06e 100644
--- a/qemu-config.c
+++ b/qemu-config.c
@@ -140,6 +140,9 @@ QemuOptsList qemu_chardev_opts = {
         },{
             .name = "signal",
             .type = QEMU_OPT_BOOL,
+        },{
+            .name = "reconnect",
+            .type = QEMU_OPT_NUMBER,
         },
         { /* end if list */ }
     },
diff --git a/vl.c b/vl.c
index 44763af..5876c3e 100644
--- a/vl.c
+++ b/vl.c
@@ -3795,6 +3795,10 @@ void main_loop_wait(int timeout)

     host_main_loop_wait(&timeout);

+    /* Reconnect any disconnected sockets, if necessary */
+
+    qemu_chr_reconnect();
+
     /* poll any events */
     /* XXX: separate device handlers from system ones */
     nfds = -1;
-- 1.6.5

^ permalink raw reply related	[flat|nested] 40+ messages in thread

* [Qemu-devel] Re: [PATCH] Socket reconnection take 2.
  2009-12-02 20:13         ` [Qemu-devel] [PATCH] Socket reconnection take 2 Ian Molton
@ 2009-12-03 10:33           ` Michael S. Tsirkin
  0 siblings, 0 replies; 40+ messages in thread
From: Michael S. Tsirkin @ 2009-12-03 10:33 UTC (permalink / raw)
  To: Ian Molton; +Cc: qemu-devel

On Wed, Dec 02, 2009 at 08:13:52PM +0000, Ian Molton wrote:
> btw. Does anyone know how to get t-bird to inline patches?

Read this:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/email-clients.txt;hb=HEAD

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-02 16:46 [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
                   ` (2 preceding siblings ...)
  2009-12-02 19:46 ` Ian Molton
@ 2009-12-03 12:34 ` Gerd Hoffmann
  2009-12-03 13:08   ` Alexander Graf
  2009-12-03 23:21   ` [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
  2009-12-03 13:52 ` [Qemu-devel] " Paolo Bonzini
                   ` (4 subsequent siblings)
  8 siblings, 2 replies; 40+ messages in thread
From: Gerd Hoffmann @ 2009-12-03 12:34 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel

On 12/02/09 17:46, Anthony Liguori wrote:

> If you have a pending patch that you think should be in 0.12, please
> check to make sure it's there.

A clear 'must have':

   http://patchwork.ozlabs.org/patch/39291/
   Add a new machine type for qemu 0.12

On top of that, to reduce irq sharing (nice to have):

   http://patchwork.ozlabs.org/patch/39294/
   virtio: enable msi-x for console+balloon

This bugfix ('must have' IMHO):

   http://patchwork.ozlabs.org/patch/39311/
   make chardevs specified in config file work

Also useful (nice to have):

   http://patchwork.ozlabs.org/patch/39202/
   http://patchwork.ozlabs.org/patch/39201/
   add command line option to set global defaults for properties

Finally the 'default devices' patch series ('must have' IMHO):

   http://patchwork.ozlabs.org/patch/39180/ (patch 1/10)

Without that one using -device and -readconfig becomes much harder.

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-03 12:34 ` [Qemu-devel] Staging update (0.12 pending freeze) Gerd Hoffmann
@ 2009-12-03 13:08   ` Alexander Graf
  2009-12-03 13:49     ` How to convert to -device & friends (was: [Qemu-devel] Staging update (0.12 pending freeze)) Markus Armbruster
  2009-12-03 23:21   ` [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
  1 sibling, 1 reply; 40+ messages in thread
From: Alexander Graf @ 2009-12-03 13:08 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel

Gerd Hoffmann wrote:
> On 12/02/09 17:46, Anthony Liguori wrote:
>
>> If you have a pending patch that you think should be in 0.12, please
>> check to make sure it's there.
>
> A clear 'must have':
>
>   http://patchwork.ozlabs.org/patch/39291/
>   Add a new machine type for qemu 0.12
>
> On top of that, to reduce irq sharing (nice to have):
>
>   http://patchwork.ozlabs.org/patch/39294/
>   virtio: enable msi-x for console+balloon
>
> This bugfix ('must have' IMHO):
>
>   http://patchwork.ozlabs.org/patch/39311/
>   make chardevs specified in config file work
>
> Also useful (nice to have):
>
>   http://patchwork.ozlabs.org/patch/39202/
>   http://patchwork.ozlabs.org/patch/39201/
>   add command line option to set global defaults for properties
>
> Finally the 'default devices' patch series ('must have' IMHO):
>
>   http://patchwork.ozlabs.org/patch/39180/ (patch 1/10)
>
> Without that one using -device and -readconfig becomes much harder.

Would you mind writing up a documentation on that whole -device stuff?
I'm having a hard time following your changes and every time you do a
patch you break my S390 series.

Alex

^ permalink raw reply	[flat|nested] 40+ messages in thread

* How to convert to -device & friends (was: [Qemu-devel] Staging update (0.12 pending freeze))
  2009-12-03 13:08   ` Alexander Graf
@ 2009-12-03 13:49     ` Markus Armbruster
  2009-12-03 14:42       ` [Qemu-devel] Re: How to convert to -device & friends (was: " Michael S. Tsirkin
  0 siblings, 1 reply; 40+ messages in thread
From: Markus Armbruster @ 2009-12-03 13:49 UTC (permalink / raw)
  To: Alexander Graf; +Cc: Gerd Hoffmann, qemu-devel

Alexander Graf <agraf@suse.de> writes:

> Would you mind writing up a documentation on that whole -device stuff?
> I'm having a hard time following your changes and every time you do a
> patch you break my S390 series.

I've been writing a brief guide on how to use -device.  It's not yet in
the Wiki, so I append my last draft.

There's also my qdev status page[*], which I try to keepreasonably
up-to-date.

Hope this helps.

[*] http://www.linux-kvm.org/page/Qdev_status



=== Specifying Bus and Address on Bus ===

In qdev, each device has a parent bus.  Some devices provide one or
more buses for children.  You can specify a device's parent bus with
-device parameter bus.

A device typically has a device address on its parent bus.  For buses
where this address can be configured, devices provide a bus-specific
property.  These are

    bus     property name       value format
    PCI     addr                %x.%x (dev.fn, .fn optional)
    I2C     address             %u
    SCSI    scsi-id             %u

Example: device i440FX-pcihost is on the root bus, and provides a PCI
bus named pci.0.  To put a FOO device into its slot 4, use -device
FOO,bus=/i440FX-pcihost/pci.0,addr=4.  The abbreviated form bus=pci.0
also works as long as the bus name is unique.

Note: the USB device address can't be controlled at this time.

=== Block Devices ===

A QEMU block device (drive) has a host and a guest part.

In the general case, the guest device is connected to a controller
device.  For instance, the IDE controller provides two IDE buses, each
of which can have up to two ide-drive devices, and each ide-drive
device is a guest part, and is connected to a host part.

Except we sometimes lump controller, bus(es) and drive(s) all together
into a single device.  For instance, the ISA floppy controller is
connected to up to two host drives.

The old ways to define block devices define host and guest part
together.  Sometimes, they can even define a controller device in
addition to the block device.

The new way keeps the parts separate: you create the host part with
-drive, and guest device(s) with -device.

The various old ways to define drives all boil down to the common form

    -drive if=TYPE,index=IDX,bus=BUS,unit=UNIT,HOST-OPTS...

TYPE, BUS and UNIT identify the controller device, which of its buses
to use, and the drive's address on that bus.  Details depend on TYPE.
IDX is an alternative way to specify BUS and UNIT.

In the new way, this becomes something like

   -drive if=none,id=DRIVE-ID,HOST-OPTS...
   -device DEVNAME,drive=DRIVE-ID,DEV-OPTS...

The -device argument differs in detail for each kind of drive:

* if=ide

  -device ide-drive,drive=DRIVE-ID,bus=IDE-BUS,unit=UNIT

  where IDE-BUS identifies an IDE bus, normally either ide.0 or ide.1,
  and UNIT is either 0 or 1.

  Bug: new way does not work for ide.1 unit 0 (in old terms: index=2).
  Patch posted.

* if=scsi

  The old way implicitly creates SCSI controllers as needed.  The new
  way makes that explicit:

  -device lsi,id=ID

  As for all PCI devices, you can add bus=PCI-BUS,addr=DEVFN to
  control the PCI device address.

  The lsi device provides one SCSI bus, named ID.0.  Put a disk on it:

  -device scsi-disk,drive=DRIVE-ID,bus=ID.0,scsi-id=SCSI-ID

* if=floppy

  -device isa-fdc,driveA=DRIVE-ID,driveB=DRIVE-ID

  Omitting a drive parameter makes that drive empty.

  Except -device doesn't work for isa-fdc, because it is created by
  default.  It should be possible to manipulate the existing device
  with -set, but that doesn't yet work, either.  For now, you need to
  stick to the old ways for if=floppy.

* if=virtio

  -device virtio-blk-pci,drive=DRIVE-ID,class=C,vectors=V

  This lets you control PCI device class and MSI-X vectors.

  As for all PCI devices, you can add bus=PCI-BUS,addr=DEVFN to
  control the PCI device address.

* if=pflash, if=mtd, if=sd, if=xen are not yet available with -device

For USB devices, the old way is actually different:

    -usbdevice disk:format=FMT:FILENAME

Provides much less control than -drive's HOST-OPTS...  The new way
fixes that:

    -device "QEMU USB MSD",drive=DRIVE-ID

=== Character Devices ===

A QEMU character device has a host and a guest part.

The old ways to define character devices define host and guest part
together.

The new way keeps the parts separate: you create the host part with
-chardev, and the guest device with -device.

The various old ways to define a character device are all of the
general form

    -FOO FOO-OPTS...,LEGACY-CHARDEV

where FOO-OPTS... is specific to -FOO, and the host part
LEGACY-CHARDEV is the same everywhere.

In the new way, this becomes

    -chardev HOST-OPTS...,id=CHR-ID
    -device DEVNAME,chardev=CHR-ID,DEV-OPTS...

The appropriate DEVNAME depends on the machine type.  For type "pc":

* -serial becomes -device isa-serial,iobase=IOADDR,irq=IRQ,index=IDX

  This lets you control I/O ports and IRQs.

  Bug: the new way requires -serial none.  Patch posted.

* -parallel becomes -device isa-parallel,iobase=IOADDR,irq=IRQ,index=IDX

  This lets you control I/O ports and IRQs.

  Bug: the new way requires -parallel none.  Patch posted.

* -usbdevice serial:vendorid=VID,productid=PRID becomes
  -device "QEMU USB Serial",vendorid=VID,productid=PRID

* -usbdevice braille doesn't support LEGACY-CHARDEV syntax.  It always
  uses "braille".  With -device, this useful default is gone, so you
  have to use something like

  -device "QEMU USB Braille",chardev=braille,vendorid=VID,productid=PRID
  -chardev braille,id=braille

* -virtioconsole is still being worked on

LEGACY-CHARDEV translates to -chardev HOST-OPTS... as follows:

* null becomes -chardev null

* pty, msmouse, braille, stdio likewise

* vc:WIDTHxHEIGHT becomes -chardev vc,width=WIDTH,height=HEIGHT

* vc:<COLS>Cx<ROWS>C becomes -chardev vc,cols=<COLS>,rows=<ROWS>

* con: becomes -chardev console

* COM<NUM> becomes -chardev serial,path=<NUM>

* file:FNAME becomes -chardev file,path=FNAME

* pipe:FNAME becomes -chardev pipe,path=FNAME

* tcp:HOST:PORT,OPTS... becomes -chardev socket,host=HOST,port=PORT,OPTS...

* telnet:HOST:PORT,OPTS... becomes
  -chardev socket,host=HOST,port=PORT,OPTS...,telnet=on

* udp:HOST:PORT@LOCALADDR:LOCALPORT becomes
  -chardev udp,host=HOST,port=PORT,localaddr=LOCALADDR,localport=LOCALPORT

* unix:FNAME becomes -chardev socket,path=FNAME

* /dev/parportN becomes -chardev parport,file=/dev/parportN

* /dev/ppiN likewise

* Any other /dev/FNAME becomes -chardev tty,path=/dev/FNAME

* mon:LEGACY-CHARDEV is special: it multiplexes the monitor onto the
  character device defined by LEGACY-CHARDEV.  -chardev provides a
  more general multiplexing instead: you can connect up to four users
  to a single host part.  You need to pass mux=on to -chardev to
  enable switching the input focus.

QEMU uses LEGACY-CHARDEV syntax not just to set up guest devices, but
also in various other places such as -monitor or -net
user,guestfwd=...  You can use chardev:CHR-ID in place of
LEGACY-CHARDEV to refer to a host part defined with -chardev.

=== Network Devices ===

A QEMU network device (NIC) has a host and a guest part.

The old ways to define NICs define host and guest part together.  It
looks like this:

    -net nic,vlan=VLAN,macaddr=MACADDR,model=MODEL,name=ID,addr=STR,vectors=V

Except for USB it looks like this:

    -usbdevice net:vlan=VLAN,macaddr=MACADDR,name=ID,addr=STR,vectors=V

The new way keeps the parts separate: you create the host part with
-netdev, and the guest device with -device, like this:

    -netdev type=TYPE,id=NET-ID
    -device DEVNAME,netdev=NET-ID,mac=MACADDR,DEV-OPTS...

Unlike the old way, this creates just a network device, not a VLAN.
If you really want a VLAN, create it the usual way, then create the
guest device like this:

    -device DEVNAME,vlan=VLAN,mac=MACADDR,DEV-OPTS...

DEVNAME equals MODEL, except for virtio you have to name the virtio
device appropriate for the bus (virtio-net-pci for PCI), and for USB
NIC you have to use "QEMU USB Network Interface".

The old name=ID parameter becomes the usual id=ID with -device.

For PCI devices, you can add bus=PCI-BUS,addr=DEVFN to control the PCI
device address, as usual.  -net nic provides parameter addr for that,
it is silently ignored when the NIC is not a PCI device.

-net nic accepts vectors=V for all models, but it's silently ignored
except for virtio-net-pci (model=virtio).  With -device, only devices
that support it accept it.

Not all devices are available with -device at this time.  All PCI
devices and ne2k_isa are.  The USB NIC does not work, yet.  Patch
posted.

Some PCI devices aren't available with -net nic, e.g. i82558a.

Bug: -device does not work for first NIC.  Patch posted.

=== Graphics Devices ===

Host and guest part of graphics devices have always been separate.

The old way to define the guest graphics device is -vga VGA.

The new way is -device.  Map from -vga argument to -device:

    std         -device VGA
    cirrus      -device "Cirrus VGA"
    vmware      -device "QEMUware SVGA"
    xenfb       not yet available with -device

As for all PCI devices, you can add bus=PCI-BUS,addr=DEVFN to control
the PCI device address.

Actually, -device VGA supports properties bios-offset and bios-size,
but they aren't used with machine type "pc".

Bug: the new way requires -vga none.

Bug: the new way requires PCI; ISA VGA is not yet available with
-device.

Bug: the new way doesn't work for machine type "pc", because it
violates obscure device initialization ordering constraints.

=== Audio Devices ===

Host and guest part of audio devices have always been separate.

The old way to define guest audio devices is -soundhw C1,...

The new way is to define each guest audio device separately with
-device.

Map from -soundhw sound card name to -device:

    ac97        -device AC97
    cs4231a     -device cs4231a,iobase=IOADDR,irq=IRQ,dma=DMA
    es1370      -device ES1370
    gus         -device gus,iobase=IOADDR,irq=IRQ,dma=DMA,freq=F
    sb16        -device sb16,iobase=IOADDR,irq=IRQ,dma=DMA,dma16=DMA16,version=V
    adlib       not yet available with -device
    pcspk       not yet available with -device

For PCI devices, you can add bus=PCI-BUS,addr=DEVFN to control the PCI
device address, as usual.

=== USB Devices ===

The old way to define a virtual USB device is -usbdevice DRIVER:OPTS...

The new way is -device DEVNAME,DEV-OPTS...  Details depend on DRIVER:

* mouse           -device "QEMU USB Mouse"
* tablet          -device "QEMU USB Tablet"
* keyboard        -device "QEMU USB Keyboard"
* wacom-tablet    -device "QEMU PenPartner Tablet"
* host:...        See "Host Device Assignment"
* disk:...        See "Block Devices"
* serial:...      See "Character Devices"
* braille         See "Character Devices"
* net:...         See "Network Devices"
* bt:...          not yet available with -device

=== Watchdog Devices ===

Host and guest part of graphics devices have always been separate.

The old way to define a guest watchdog device is -watchdog DEVNAME.
The new way is -device DEVNAME.  For PCI devices, you can add
bus=PCI-BUS,addr=DEVFN to control the PCI device address, as usual.

=== Host Device Assignment ===

QEMU supports assigning host PCI devices (qemu-kvm only at this time)
and host USB devices.

The old way to assign a host PCI device is

    -pcidevice host=ADDR,dma=none,id=ID

The new way is

    -device pci-assign,host=ADDR,iommu=IOMMU,id=ID

The old dma=none becomes iommu=0 with -device.

The old way to assign a host USB device is

    -usbdevice host:auto:BUS.ADDR:VID:PRID

where any of BUS, ADDR, VID, PRID can be the wildcard *.

The new way is

    -device "USB Host Device",hostbus=BUS,hostaddr=ADDR,vendorid=VID,productid=PRID

where left out or zero BUS, ADDR, VID, PRID serve as wildcard.

^ permalink raw reply	[flat|nested] 40+ messages in thread

* [Qemu-devel] Re: Staging update (0.12 pending freeze)
  2009-12-02 16:46 [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
                   ` (3 preceding siblings ...)
  2009-12-03 12:34 ` [Qemu-devel] Staging update (0.12 pending freeze) Gerd Hoffmann
@ 2009-12-03 13:52 ` Paolo Bonzini
  2009-12-03 15:10   ` Anthony Liguori
  2009-12-13 10:34   ` Paolo Bonzini
  2009-12-03 15:27 ` [Qemu-devel] [FOR 0.12] [PATCH] virtio: Add memory statistics reporting to the balloon driver (V5) Adam Litke
                   ` (3 subsequent siblings)
  8 siblings, 2 replies; 40+ messages in thread
From: Paolo Bonzini @ 2009-12-03 13:52 UTC (permalink / raw)
  To: qemu-devel

On 12/02/2009 05:46 PM, Anthony Liguori wrote:
> I've got all of the patches I'm considering for 0.12 currently in
> staging.  I'm going to work through and test/commit these in a few
> chunks over the next few days before freezing the tree.
>
> If you have a pending patch that you think should be in 0.12, please
> check to make sure it's there. If you have a new patch you'd like to
> consider for 0.12, please indicate that in the subject with a [FOR 0.12]
> tag as I don't plan on doing another full pull of patches (since testing
> takes time).

This one is missing:

http://permalink.gmane.org/gmane.comp.emulators.qemu/57388
[PATCH] Fix thinko in linuxboot.S

Paolo

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Re: Staging update (0.12 pending freeze)
  2009-12-02 19:32   ` Anthony Liguori
@ 2009-12-03 14:23     ` Luiz Capitulino
  2009-12-03 16:37       ` Luiz Capitulino
  0 siblings, 1 reply; 40+ messages in thread
From: Luiz Capitulino @ 2009-12-03 14:23 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Jan Kiszka, kraxel, qemu-devel, ehabkost, markmc

On Wed, 02 Dec 2009 13:32:03 -0600
Anthony Liguori <anthony@codemonkey.ws> wrote:

> > Both freshly rebased against staging (which doesn't build btw).
> >   
> 
> Nope, and it won't for a while.  Instead of fixing everything, I'm just 
> focusing on small groups of patches at a time.

 Right, but people rebasing against it need to build it to be able
to fix conflicts and test things.

 So, here is a list of problems I had to fix/workaround to have staging
fully building on x86_64.

 I'm CC'ing Mark, Gerd and Eduardo because I believe they can help
fixing, but I'm unsure on what caused the problems (merge conflicts?).

- net:

net/dump.c: In function ‘net_dump_init’:
net/dump.c:119: error: ‘s’ may be used uninitialized in this function

- scsi-disk:

/home/lcapitulino/src/aliguori-queue/hw/scsi-disk.c: In function ‘scsi_handle_write_error’:
home/lcapitulino/src/aliguori-queue/hw/scsi-disk.c:176: error: ‘SCSIDiskReq’ has no member named ‘dev’
cc1: warnings being treated as errors
/home/lcapitulino/src/aliguori-queue/hw/scsi-disk.c:174: error: unused variable ‘s’

- monitor:

/home/lcapitulino/src/aliguori-queue/monitor.c: In function ‘eject_device’:
/home/lcapitulino/src/aliguori-queue/monitor.c:760: error: invalid storage class for function ‘do_eject’

 The last problem is a missing '}' in the second if.

^ permalink raw reply	[flat|nested] 40+ messages in thread

* [Qemu-devel] Re: How to convert to -device & friends (was: Staging update (0.12 pending freeze))
  2009-12-03 13:49     ` How to convert to -device & friends (was: [Qemu-devel] Staging update (0.12 pending freeze)) Markus Armbruster
@ 2009-12-03 14:42       ` Michael S. Tsirkin
  0 siblings, 0 replies; 40+ messages in thread
From: Michael S. Tsirkin @ 2009-12-03 14:42 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu-devel, Alexander Graf, Gerd Hoffmann

On Thu, Dec 03, 2009 at 02:49:44PM +0100, Markus Armbruster wrote:
> Alexander Graf <agraf@suse.de> writes:
> 
> > Would you mind writing up a documentation on that whole -device stuff?
> > I'm having a hard time following your changes and every time you do a
> > patch you break my S390 series.
> 
> I've been writing a brief guide on how to use -device.  It's not yet in
> the Wiki, so I append my last draft.
> 
> There's also my qdev status page[*], which I try to keepreasonably
> up-to-date.
> 
> Hope this helps.
> 
> [*] http://www.linux-kvm.org/page/Qdev_status
> 

Cool. Maybe this can be made into a manpage and put
into qemu sources proper?

-- 
MST

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Re: Staging update (0.12 pending freeze)
  2009-12-03 13:52 ` [Qemu-devel] " Paolo Bonzini
@ 2009-12-03 15:10   ` Anthony Liguori
  2009-12-13 10:34   ` Paolo Bonzini
  1 sibling, 0 replies; 40+ messages in thread
From: Anthony Liguori @ 2009-12-03 15:10 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel

Paolo Bonzini wrote:
> On 12/02/2009 05:46 PM, Anthony Liguori wrote:
>> I've got all of the patches I'm considering for 0.12 currently in
>> staging.  I'm going to work through and test/commit these in a few
>> chunks over the next few days before freezing the tree.
>>
>> If you have a pending patch that you think should be in 0.12, please
>> check to make sure it's there. If you have a new patch you'd like to
>> consider for 0.12, please indicate that in the subject with a [FOR 0.12]
>> tag as I don't plan on doing another full pull of patches (since testing
>> takes time).
>
> This one is missing:
>
> http://permalink.gmane.org/gmane.comp.emulators.qemu/57388
> [PATCH] Fix thinko in linuxboot.S

I clearly have an issue with my filters.  I'll try to figure this that 
out next week.

Thanks.

Regards,

Anthony Liguori
> Paolo
>
>
>

^ permalink raw reply	[flat|nested] 40+ messages in thread

* [Qemu-devel] [FOR 0.12] [PATCH] virtio: Add memory statistics reporting to the balloon driver (V5)
  2009-12-02 16:46 [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
                   ` (4 preceding siblings ...)
  2009-12-03 13:52 ` [Qemu-devel] " Paolo Bonzini
@ 2009-12-03 15:27 ` Adam Litke
  2009-12-03 17:02   ` [Qemu-devel] [FOR 0.12] [PATCH] Updated: " Adam Litke
  2009-12-03 16:57 ` [Qemu-devel] [FOR 0.12] debugcon patch for staging H. Peter Anvin
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 40+ messages in thread
From: Adam Litke @ 2009-12-03 15:27 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel

Anthony:  I ported this to your staging tree in case you want to consider it
for 0.12.0.  Thanks.  (The only substantive change is converting the new stats
fields to vmstate.)  Since the tree does not build I was unable to test the port
but will be happy to do so once able.

This iteration addresses all of the comments from the last round.  Thanks to
everyone for their careful reviews and helpful comments.  The most significant
change in this version is my use of the QObject API, so a concentrated review
in that area would be most appreciated.  I am hoping to target 0.12.0 with this
patch.  Please let me know if that remains a possibility.  Thanks.

Changes since V4:
 - Virtio spec updated: http://ozlabs.org/~rusty/virtio-spec/virtio-spec-0.8.2.pdf
 - Guest-side Linux implementation applied by Rusty
 - Start using the QObject infrastructure
 - All endian conversions done in the host
 - Report stats that reference a quantity of memory in bytes

Changes since V3:
 - Increase stat field size to 64 bits
 - Report all sizes in kb (not pages)
 - Drop anon_pages stat

Changes since V2:
 - Use a virtqueue for communication instead of the device config space

Changes since V1:
 - In the monitor, print all stats on one line with less abbreviated names
 - Coding style changes

When using ballooning to manage overcommitted memory on a host, a system for
guests to communicate their memory usage to the host can provide information
that will minimize the impact of ballooning on the guests.  The current method
employs a daemon running in each guest that communicates memory statistics to a
host daemon at a specified time interval.  The host daemon aggregates this
information and inflates and/or deflates balloons according to the level of
host memory pressure.  This approach is effective but overly complex since a
daemon must be installed inside each guest and coordinated to communicate with
the host.  A simpler approach is to collect memory statistics in the virtio
balloon driver and communicate them directly to the hypervisor.

This patch implements the qemu side of the communication channel.  I will post
the kernel driver modifications in-reply to this message.

Signed-off-by: Adam Litke <agl@us.ibm.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>
Cc: Avi Kivity <avi@redhat.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: qemu-devel@nongnu.org

diff --git a/balloon.h b/balloon.h
index 60b4a5d..23bbffe 100644
--- a/balloon.h
+++ b/balloon.h
@@ -16,12 +16,12 @@
 
 #include "cpu-defs.h"
 
-typedef ram_addr_t (QEMUBalloonEvent)(void *opaque, ram_addr_t target);
+typedef QObject *(QEMUBalloonEvent)(void *opaque, ram_addr_t target);
 
 void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque);
 
 void qemu_balloon(ram_addr_t target);
 
-ram_addr_t qemu_balloon_status(void);
+QObject *qemu_balloon_status(void);
 
 #endif
diff --git a/hw/virtio-balloon.c b/hw/virtio-balloon.c
index f461c32..1a59afe 100644
--- a/hw/virtio-balloon.c
+++ b/hw/virtio-balloon.c
@@ -19,6 +19,10 @@
 #include "balloon.h"
 #include "virtio-balloon.h"
 #include "kvm.h"
+#include "monitor.h"
+#include "qlist.h"
+#include "qint.h"
+#include "qstring.h"
 
 #if defined(__linux__)
 #include <sys/mman.h>
@@ -27,9 +31,13 @@
 typedef struct VirtIOBalloon
 {
     VirtIODevice vdev;
-    VirtQueue *ivq, *dvq;
+    VirtQueue *ivq, *dvq, *svq;
     uint32_t num_pages;
     uint32_t actual;
+    uint64_t stats[VIRTIO_BALLOON_S_NR];
+    VirtQueueElement stats_vq_elem;
+    size_t stats_vq_offset;
+    uint8_t stats_requested;
 } VirtIOBalloon;
 
 static void balloon_page(void *addr, int deflate)
@@ -41,6 +49,35 @@ static void balloon_page(void *addr, int deflate)
 #endif
 }
 
+static inline void reset_stats(VirtIOBalloon *dev)
+{
+    int i;
+    for (i = 0; i < VIRTIO_BALLOON_S_NR; dev->stats[i++] = -1);
+}
+
+static void stat_put(QList *list, const char *label, uint64_t val)
+{
+    if (val != -1) {
+        qlist_append(list, qstring_from_str(label));
+        qlist_append(list, qint_from_int(val));
+    }
+}
+
+static QObject *get_stats_qobject(VirtIOBalloon *dev)
+{
+    QList *list = qlist_new();
+    uint32_t actual = ram_size - (dev->actual << VIRTIO_BALLOON_PFN_SHIFT);
+
+    stat_put(list, "actual", (int)actual >> 20);
+    stat_put(list, "mem_swapped_in", dev->stats[VIRTIO_BALLOON_S_SWAP_IN]);
+    stat_put(list, "mem_swapped_out", dev->stats[VIRTIO_BALLOON_S_SWAP_OUT]);
+    stat_put(list, "major_page_faults", dev->stats[VIRTIO_BALLOON_S_MAJFLT]);
+    stat_put(list, "minor_page_faults", dev->stats[VIRTIO_BALLOON_S_MINFLT]);
+    stat_put(list, "free_mem", dev->stats[VIRTIO_BALLOON_S_MEMFREE]);
+    stat_put(list, "total_mem", dev->stats[VIRTIO_BALLOON_S_MEMTOT]);
+    return QOBJECT(list);
+}
+
 /* FIXME: once we do a virtio refactoring, this will get subsumed into common
  * code */
 static size_t memcpy_from_iovector(void *data, size_t offset, size_t size,
@@ -99,6 +136,36 @@ static void virtio_balloon_handle_output(VirtIODevice *vdev, VirtQueue *vq)
     }
 }
 
+static void virtio_balloon_receive_stats(VirtIODevice *vdev, VirtQueue *vq)
+{
+    VirtIOBalloon *s = to_virtio_balloon(vdev);
+    VirtQueueElement *elem = &s->stats_vq_elem;
+    VirtIOBalloonStat stat;
+    size_t offset = 0;
+
+    if (!virtqueue_pop(vq, elem))
+        return;
+
+    while (memcpy_from_iovector(&stat, offset, sizeof(stat), elem->out_sg,
+                                elem->out_num) == sizeof(stat)) {
+        uint16_t tag = tswap16(stat.tag);
+        uint64_t val = tswap64(stat.val);
+
+        offset += sizeof(stat);
+        if (tag < VIRTIO_BALLOON_S_NR)
+            s->stats[tag] = val;
+    }
+    s->stats_vq_offset = offset;
+
+    if (s->stats_requested) {
+        QObject *stats = get_stats_qobject(s);
+        monitor_print_balloon(cur_mon, stats);
+        qobject_decref(stats);
+        monitor_resume(cur_mon);
+        s->stats_requested = 0;
+    }
+}
+
 static void virtio_balloon_get_config(VirtIODevice *vdev, uint8_t *config_data)
 {
     VirtIOBalloon *dev = DO_UPCAST(VirtIOBalloon, vdev, vdev);
@@ -121,12 +188,22 @@ static void virtio_balloon_set_config(VirtIODevice *vdev,
 
 static uint32_t virtio_balloon_get_features(VirtIODevice *vdev)
 {
-    return 0;
+    return 1 << VIRTIO_BALLOON_F_STATS_VQ;
+}
+
+static void request_stats(VirtIOBalloon *vb)
+{
+    vb->stats_requested = 1;
+    reset_stats(vb);
+    monitor_suspend(cur_mon);
+    virtqueue_push(vb->svq, &vb->stats_vq_elem, vb->stats_vq_offset);
+    virtio_notify(&vb->vdev, vb->svq);
 }
 
-static ram_addr_t virtio_balloon_to_target(void *opaque, ram_addr_t target)
+static QObject *virtio_balloon_to_target(void *opaque, ram_addr_t target)
 {
     VirtIOBalloon *dev = opaque;
+    QObject *ret = NULL;
 
     if (target > ram_size)
         target = ram_size;
@@ -134,9 +211,15 @@ static ram_addr_t virtio_balloon_to_target(void *opaque, ram_addr_t target)
     if (target) {
         dev->num_pages = (ram_size - target) >> VIRTIO_BALLOON_PFN_SHIFT;
         virtio_notify_config(&dev->vdev);
+    } else if (dev->vdev.features & (1 << VIRTIO_BALLOON_F_STATS_VQ)) {
+        request_stats(dev);
+        ret = QOBJECT(qlist_new());
+    } else {
+        reset_stats(dev);
+        ret = get_stats_qobject(dev);
     }
 
-    return ram_size - (dev->actual << VIRTIO_BALLOON_PFN_SHIFT);
+    return ret;
 }
 
 static const VMStateDescription vmstate_virtio_balloon = {
@@ -148,6 +231,9 @@ static const VMStateDescription vmstate_virtio_balloon = {
         VMSTATE_VIRTIO(vdev, VirtIOBalloon),
         VMSTATE_UINT32(num_pages, VirtIOBalloon),
         VMSTATE_UINT32(actual, VirtIOBalloon),
+        VMSTATE_BUFFER(stats_vq_elem, VirtIOBalloon),
+        VMSTATE_BUFFER(stats_vq_offset, VirtIOBalloon),
+        VMSTATE_UINT8(stats_requested, VirtIOBalloon),
         VMSTATE_END_OF_LIST()
     }
 };
@@ -166,6 +252,7 @@ VirtIODevice *virtio_balloon_init(DeviceState *dev)
 
     s->ivq = virtio_add_queue(&s->vdev, 128, virtio_balloon_handle_output);
     s->dvq = virtio_add_queue(&s->vdev, 128, virtio_balloon_handle_output);
+    s->svq = virtio_add_queue(&s->vdev, 128, virtio_balloon_receive_stats);
 
     qemu_add_balloon_handler(virtio_balloon_to_target, s);
 
diff --git a/hw/virtio-balloon.h b/hw/virtio-balloon.h
index 9a0d119..e20cf6b 100644
--- a/hw/virtio-balloon.h
+++ b/hw/virtio-balloon.h
@@ -25,6 +25,7 @@
 
 /* The feature bitmap for virtio balloon */
 #define VIRTIO_BALLOON_F_MUST_TELL_HOST 0 /* Tell before reclaiming pages */
+#define VIRTIO_BALLOON_F_STATS_VQ 1       /* Memory stats virtqueue */
 
 /* Size of a PFN in the balloon interface. */
 #define VIRTIO_BALLOON_PFN_SHIFT 12
@@ -37,4 +38,18 @@ struct virtio_balloon_config
     uint32_t actual;
 };
 
+/* Memory Statistics */
+#define VIRTIO_BALLOON_S_SWAP_IN  0   /* Amount of memory swapped in */
+#define VIRTIO_BALLOON_S_SWAP_OUT 1   /* Amount of memory swapped out */
+#define VIRTIO_BALLOON_S_MAJFLT   2   /* Number of major faults */
+#define VIRTIO_BALLOON_S_MINFLT   3   /* Number of minor faults */
+#define VIRTIO_BALLOON_S_MEMFREE  4   /* Total amount of free memory */
+#define VIRTIO_BALLOON_S_MEMTOT   5   /* Total amount of memory */
+#define VIRTIO_BALLOON_S_NR       6
+
+typedef struct VirtIOBalloonStat {
+    uint16_t tag;
+    uint64_t val;
+} __attribute__((packed)) VirtIOBalloonStat;
+
 #endif
diff --git a/monitor.c b/monitor.c
index 18aa22b..3bb9e95 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1886,10 +1886,26 @@ static void do_balloon(Monitor *mon, const QDict *qdict, QObject **ret_data)
     qemu_balloon(target << 20);
 }
 
-static void monitor_print_balloon(Monitor *mon, const QObject *data)
+void monitor_print_balloon(Monitor *mon, const QObject *data)
 {
-    monitor_printf(mon, "balloon: actual=%d\n",
-                                     (int)qint_get_int(qobject_to_qint(data)));
+    QList *list = qobject_to_qlist(data);
+    QString *label;
+    QInt *val;
+
+    if (qlist_empty(list))
+        return;
+
+    label = qobject_to_qstring(qlist_pop(list));
+    val = qobject_to_qint(qlist_pop(list));
+    monitor_printf(mon, "balloon: actual=%d", (int)qint_get_int(val));
+
+    while (!qlist_empty(list)) {
+        label = qobject_to_qstring(qlist_pop(list));
+        val = qobject_to_qint(qlist_pop(list));
+        monitor_printf(mon, ",%s=%lu", qstring_get_str(label),
+                       (uint64_t)qint_get_int(val));
+    } 
+    monitor_printf(mon, "\n");
 }
 
 /**
@@ -1897,15 +1913,11 @@ static void monitor_print_balloon(Monitor *mon, const QObject *data)
  */
 static void do_info_balloon(Monitor *mon, QObject **ret_data)
 {
-    ram_addr_t actual;
-
-    actual = qemu_balloon_status();
     if (kvm_enabled() && !kvm_has_sync_mmu())
         qemu_error_new(QERR_KVM_MISSING_CAP, "synchronous MMU", "balloon");
-    else if (actual == 0)
+    *ret_data = qemu_balloon_status();
+    if (*ret_data == NULL)
         qemu_error_new(QERR_DEVICE_NOT_ACTIVE, "balloon");
-    else
-        *ret_data = QOBJECT(qint_from_int((int)(actual >> 20)));
 }
 
 static qemu_acl *find_acl(Monitor *mon, const char *name)
diff --git a/monitor.h b/monitor.h
index 851fd33..0b5b99d 100644
--- a/monitor.h
+++ b/monitor.h
@@ -33,6 +33,7 @@ void monitor_resume(Monitor *mon);
 void monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
                                  BlockDriverCompletionFunc *completion_cb,
                                  void *opaque);
+void monitor_print_balloon(Monitor *mon, const QObject *data);
 
 int monitor_get_fd(Monitor *mon, const char *fdname);
 
diff --git a/vl.c b/vl.c
index d6f196c..aab03e9 100644
--- a/vl.c
+++ b/vl.c
@@ -331,11 +331,11 @@ void qemu_balloon(ram_addr_t target)
         qemu_balloon_event(qemu_balloon_event_opaque, target);
 }
 
-ram_addr_t qemu_balloon_status(void)
+QObject *qemu_balloon_status(void)
 {
     if (qemu_balloon_event)
         return qemu_balloon_event(qemu_balloon_event_opaque, 0);
-    return 0;
+    return NULL;
 }
 
 /***********************************************************/


-- 
Thanks,
Adam

^ permalink raw reply related	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Re: Staging update (0.12 pending freeze)
  2009-12-03 14:23     ` Luiz Capitulino
@ 2009-12-03 16:37       ` Luiz Capitulino
  2009-12-03 16:44         ` Anthony Liguori
  0 siblings, 1 reply; 40+ messages in thread
From: Luiz Capitulino @ 2009-12-03 16:37 UTC (permalink / raw)
  To: Luiz Capitulino
  Cc: markmc, ehabkost, Jan Kiszka, ian.molton, qemu-devel, kraxel

On Thu, 3 Dec 2009 12:23:45 -0200
Luiz Capitulino <lcapitulino@redhat.com> wrote:

> On Wed, 02 Dec 2009 13:32:03 -0600
> Anthony Liguori <anthony@codemonkey.ws> wrote:
> 
> > > Both freshly rebased against staging (which doesn't build btw).
> > >   
> > 
> > Nope, and it won't for a while.  Instead of fixing everything, I'm just 
> > focusing on small groups of patches at a time.
> 
>  Right, but people rebasing against it need to build it to be able
> to fix conflicts and test things.
> 
>  So, here is a list of problems I had to fix/workaround to have staging
> fully building on x86_64.

 With recent changes the -net one went away and we got a new one:

- virtio-rng:

/home/lcapitulino/src/aliguori-queue/hw/virtio-rng.c: In function ‘virtio_rng_save’:
/home/lcapitulino/src/aliguori-queue/hw/virtio-rng.c:147: error: implicit declaration of function ‘virtio_save’
/home/lcapitulino/src/aliguori-queue/hw/virtio-rng.c: In function ‘virtio_rng_load’:
/home/lcapitulino/src/aliguori-queue/hw/virtio-rng.c:157: error: implicit declaration of function ‘virtio_load’

 Added Ian to the CC list..

 Hm, this is stupid report being useful to anyone? :)

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Re: Staging update (0.12 pending freeze)
  2009-12-03 16:37       ` Luiz Capitulino
@ 2009-12-03 16:44         ` Anthony Liguori
  0 siblings, 0 replies; 40+ messages in thread
From: Anthony Liguori @ 2009-12-03 16:44 UTC (permalink / raw)
  To: Luiz Capitulino
  Cc: markmc, ehabkost, Jan Kiszka, ian.molton, qemu-devel, kraxel

Luiz Capitulino wrote:
>>  Right, but people rebasing against it need to build it to be able
>> to fix conflicts and test things.
>>
>>  So, here is a list of problems I had to fix/workaround to have staging
>> fully building on x86_64.
>>     
>
>  With recent changes the -net one went away and we got a new one:
>
> - virtio-rng:
>
> /home/lcapitulino/src/aliguori-queue/hw/virtio-rng.c: In function ‘virtio_rng_save’:
> /home/lcapitulino/src/aliguori-queue/hw/virtio-rng.c:147: error: implicit declaration of function ‘virtio_save’
> /home/lcapitulino/src/aliguori-queue/hw/virtio-rng.c: In function ‘virtio_rng_load’:
> /home/lcapitulino/src/aliguori-queue/hw/virtio-rng.c:157: error: implicit declaration of function ‘virtio_load’
>
>  Added Ian to the CC list..
>
>  Hm, this is stupid report being useful to anyone? :)
>   
Just FYI, this happens all of the time in staging.  The difference this 
time around is that I usually fix all of these problems before pushing 
to staging.  There was just too many things in staging to do that this 
time around.

It's usually easy to resolve with some git magic.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 40+ messages in thread

* [Qemu-devel] [FOR 0.12] debugcon patch for staging
  2009-12-02 16:46 [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
                   ` (5 preceding siblings ...)
  2009-12-03 15:27 ` [Qemu-devel] [FOR 0.12] [PATCH] virtio: Add memory statistics reporting to the balloon driver (V5) Adam Litke
@ 2009-12-03 16:57 ` H. Peter Anvin
  2009-12-03 19:26 ` [Qemu-devel] Staging update (0.12 pending freeze) Aurelien Jarno
  2009-12-04 10:10 ` Kevin Wolf
  8 siblings, 0 replies; 40+ messages in thread
From: H. Peter Anvin @ 2009-12-03 16:57 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 480 bytes --]

It would be nice if the -debugcon patch could be considered for 0.12; I
realize it is a trivial thing (unless you do mixed Qemu/Bochs
debugging!), but it also shouldn't affect anything else in any
significant way.

Here is the patch rebased against your staging tree.  The SCSI code in
your staging tree doesn't compile for me, so I can't verify it is
actually OK.

	-hpa

-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


[-- Attachment #2: 0001-debugcon-support-for-debugging-consoles-e.g.-Bochs.patch --]
[-- Type: text/x-patch, Size: 6767 bytes --]

>From e76a33ee6516e92f1e7223d590c6870c1ec689c9 Mon Sep 17 00:00:00 2001
From: H. Peter Anvin <hpa@zytor.com>
Date: Thu, 19 Nov 2009 17:31:19 -0800
Subject: [PATCH] debugcon: support for debugging consoles (e.g. Bochs port 0xe9)

Add generic support for debugging consoles (simple I/O ports which
when written to cause debugging output to be written to a target.)
The current implementation matches Bochs' port 0xe9, allowing the same
debugging code to be used for both Bochs and Qemu.

There is no vm state associated with the debugging port, simply
because it has none -- the entire interface is a single, stateless,
write-only port.

Most of the code was cribbed from the serial port driver.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
 Makefile.target |    2 +-
 hw/debugcon.c   |  107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 qemu-options.hx |   11 ++++++
 vl.c            |   12 ++++++
 4 files changed, 131 insertions(+), 1 deletions(-)
 create mode 100644 hw/debugcon.c

diff --git a/Makefile.target b/Makefile.target
index 956ae25..0eedbb5 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -194,7 +194,7 @@ obj-i386-y += fdc.o mc146818rtc.o serial.o i8259.o i8254.o pcspk.o pc.o
 obj-i386-y += cirrus_vga.o apic.o ioapic.o parallel.o acpi.o piix_pci.o
 obj-i386-y += usb-uhci.o vmmouse.o vmport.o vmware_vga.o hpet.o
 obj-i386-y += device-hotplug.o pci-hotplug.o smbios.o wdt_ib700.o
-obj-i386-y += ne2000-isa.o
+obj-i386-y += ne2000-isa.o debugcon.o
 
 # shared objects
 obj-ppc-y = ppc.o ide/core.o ide/qdev.o ide/isa.o ide/pci.o ide/macio.o
diff --git a/hw/debugcon.c b/hw/debugcon.c
new file mode 100644
index 0000000..d549091
--- /dev/null
+++ b/hw/debugcon.c
@@ -0,0 +1,107 @@
+/*
+ * QEMU Bochs-style debug console ("port E9") emulation
+ *
+ * Copyright (c) 2003-2004 Fabrice Bellard
+ * Copyright (c) 2008 Citrix Systems, Inc.
+ * Copyright (c) Intel Corporation; author: H. Peter Anvin
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "hw.h"
+#include "qemu-char.h"
+#include "isa.h"
+#include "pc.h"
+
+//#define DEBUG_DEBUGCON
+
+typedef struct DebugconState {
+    CharDriverState *chr;
+    uint32_t readback;
+} DebugconState;
+
+typedef struct ISADebugconState {
+    ISADevice dev;
+    uint32_t iobase;
+    DebugconState state;
+} ISADebugconState;
+
+static void debugcon_ioport_write(void *opaque, uint32_t addr, uint32_t val)
+{
+    DebugconState *s = opaque;
+    unsigned char ch = val;
+
+#ifdef DEBUG_DEBUGCON
+    printf("debugcon: write addr=0x%04x val=0x%02x\n", addr, val);
+#endif
+
+    qemu_chr_write(s->chr, &ch, 1);
+}
+
+
+static uint32_t debugcon_ioport_read(void *opaque, uint32_t addr)
+{
+    DebugconState *s = opaque;
+
+#ifdef DEBUG_DEBUGCON
+    printf("debugcon: read addr=0x%04x\n", addr, val);
+#endif
+
+    return s->readback;
+}
+
+static void debugcon_init_core(DebugconState *s)
+{
+    if (!s->chr) {
+        fprintf(stderr, "Can't create debugcon device, empty char device\n");
+        exit(1);
+    }
+
+    qemu_chr_add_handlers(s->chr, NULL, NULL, NULL, s);
+}
+
+static int debugcon_isa_initfn(ISADevice *dev)
+{
+    ISADebugconState *isa = DO_UPCAST(ISADebugconState, dev, dev);
+    DebugconState *s = &isa->state;
+
+    debugcon_init_core(s);
+    register_ioport_write(isa->iobase, 1, 1, debugcon_ioport_write, s);
+    register_ioport_read(isa->iobase, 1, 1, debugcon_ioport_read, s);
+    return 0;
+}
+
+static ISADeviceInfo debugcon_isa_info = {
+    .qdev.name  = "isa-debugcon",
+    .qdev.size  = sizeof(ISADebugconState),
+    .init       = debugcon_isa_initfn,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_HEX32("iobase", ISADebugconState, iobase, 0xe9),
+        DEFINE_PROP_CHR("chardev",  ISADebugconState, state.chr),
+        DEFINE_PROP_HEX32("readback", ISADebugconState, state.readback, 0xe9),
+        DEFINE_PROP_END_OF_LIST(),
+    },
+};
+
+static void debugcon_register_devices(void)
+{
+    isa_qdev_register(&debugcon_isa_info);
+}
+
+device_init(debugcon_register_devices)
diff --git a/qemu-options.hx b/qemu-options.hx
index c9c60b5..f4015c4 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1590,6 +1590,17 @@ non graphical mode.
 The option @var{control} enables the QEMU Monitor Protocol.
 ETEXI
 
+DEF("debugcon", HAS_ARG, QEMU_OPTION_debugcon, \
+    "-debugcon dev   redirect the debug console to char device 'dev'\n")
+STEXI
+@item -debugcon @var{dev}
+Redirect the debug console to host device @var{dev} (same devices as the
+serial port).  The debug console is an I/O port which is typically port
+0xe9; writing to that I/O port sends output to this device.
+The default device is @code{vc} in graphical mode and @code{stdio} in
+non graphical mode.
+ETEXI
+
 DEF("pidfile", HAS_ARG, QEMU_OPTION_pidfile, \
     "-pidfile file   write PID to 'file'\n")
 STEXI
diff --git a/vl.c b/vl.c
index d6f196c..9cba3f3 100644
--- a/vl.c
+++ b/vl.c
@@ -5199,6 +5199,18 @@ int main(int argc, char **argv, char **envp)
                 parallel_devices[parallel_device_index] = optarg;
                 parallel_device_index++;
                 break;
+            case QEMU_OPTION_debugcon:
+                if (!qemu_chr_open("debugcon", optarg, NULL)) {
+                    exit(1);
+                }
+                opts = qemu_opts_create(&qemu_device_opts, "debugcon", 1);
+                if (!opts) {
+                    fprintf(stderr, "qemu: already have a debugcon device\n");
+                    exit(1);
+                }
+                qemu_opt_set(opts, "driver", "isa-debugcon");
+                qemu_opt_set(opts, "chardev", "debugcon");
+                break;
 	    case QEMU_OPTION_loadvm:
 		loadvm = optarg;
 		break;
-- 
1.6.2.5


^ permalink raw reply related	[flat|nested] 40+ messages in thread

* [Qemu-devel] [FOR 0.12] [PATCH] Updated: virtio: Add memory statistics reporting to the balloon driver (V5)
  2009-12-03 15:27 ` [Qemu-devel] [FOR 0.12] [PATCH] virtio: Add memory statistics reporting to the balloon driver (V5) Adam Litke
@ 2009-12-03 17:02   ` Adam Litke
  0 siblings, 0 replies; 40+ messages in thread
From: Adam Litke @ 2009-12-03 17:02 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel

Updated to fix a compile problem with my vmstate conversion...

This iteration addresses all of the comments from the last round.  Thanks to
everyone for their careful reviews and helpful comments.  The most significant
change in this version is my use of the QObject API, so a concentrated review
in that area would be most appreciated.  I am hoping to target 0.12.0 with this
patch.  Please let me know if that remains a possibility.  Thanks.

Changes since V4:
 - Virtio spec updated: http://ozlabs.org/~rusty/virtio-spec/virtio-spec-0.8.2.pdf
 - Guest-side Linux implementation applied by Rusty
 - Start using the QObject infrastructure
 - All endian conversions done in the host
 - Report stats that reference a quantity of memory in bytes

Changes since V3:
 - Increase stat field size to 64 bits
 - Report all sizes in kb (not pages)
 - Drop anon_pages stat

Changes since V2:
 - Use a virtqueue for communication instead of the device config space

Changes since V1:
 - In the monitor, print all stats on one line with less abbreviated names
 - Coding style changes

When using ballooning to manage overcommitted memory on a host, a system for
guests to communicate their memory usage to the host can provide information
that will minimize the impact of ballooning on the guests.  The current method
employs a daemon running in each guest that communicates memory statistics to a
host daemon at a specified time interval.  The host daemon aggregates this
information and inflates and/or deflates balloons according to the level of
host memory pressure.  This approach is effective but overly complex since a
daemon must be installed inside each guest and coordinated to communicate with
the host.  A simpler approach is to collect memory statistics in the virtio
balloon driver and communicate them directly to the hypervisor.

This patch implements the qemu side of the communication channel.  I will post
the kernel driver modifications in-reply to this message.

Signed-off-by: Adam Litke <agl@us.ibm.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>
Cc: Avi Kivity <avi@redhat.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: qemu-devel@nongnu.org

diff --git a/balloon.h b/balloon.h
index 60b4a5d..23bbffe 100644
--- a/balloon.h
+++ b/balloon.h
@@ -16,12 +16,12 @@
 
 #include "cpu-defs.h"
 
-typedef ram_addr_t (QEMUBalloonEvent)(void *opaque, ram_addr_t target);
+typedef QObject *(QEMUBalloonEvent)(void *opaque, ram_addr_t target);
 
 void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque);
 
 void qemu_balloon(ram_addr_t target);
 
-ram_addr_t qemu_balloon_status(void);
+QObject *qemu_balloon_status(void);
 
 #endif
diff --git a/hw/virtio-balloon.c b/hw/virtio-balloon.c
index f461c32..47da6ab 100644
--- a/hw/virtio-balloon.c
+++ b/hw/virtio-balloon.c
@@ -19,6 +19,10 @@
 #include "balloon.h"
 #include "virtio-balloon.h"
 #include "kvm.h"
+#include "monitor.h"
+#include "qlist.h"
+#include "qint.h"
+#include "qstring.h"
 
 #if defined(__linux__)
 #include <sys/mman.h>
@@ -27,9 +31,13 @@
 typedef struct VirtIOBalloon
 {
     VirtIODevice vdev;
-    VirtQueue *ivq, *dvq;
+    VirtQueue *ivq, *dvq, *svq;
     uint32_t num_pages;
     uint32_t actual;
+    uint64_t stats[VIRTIO_BALLOON_S_NR];
+    VirtQueueElement stats_vq_elem;
+    size_t stats_vq_offset;
+    uint8_t stats_requested;
 } VirtIOBalloon;
 
 static void balloon_page(void *addr, int deflate)
@@ -41,6 +49,35 @@ static void balloon_page(void *addr, int deflate)
 #endif
 }
 
+static inline void reset_stats(VirtIOBalloon *dev)
+{
+    int i;
+    for (i = 0; i < VIRTIO_BALLOON_S_NR; dev->stats[i++] = -1);
+}
+
+static void stat_put(QList *list, const char *label, uint64_t val)
+{
+    if (val != -1) {
+        qlist_append(list, qstring_from_str(label));
+        qlist_append(list, qint_from_int(val));
+    }
+}
+
+static QObject *get_stats_qobject(VirtIOBalloon *dev)
+{
+    QList *list = qlist_new();
+    uint32_t actual = ram_size - (dev->actual << VIRTIO_BALLOON_PFN_SHIFT);
+
+    stat_put(list, "actual", (int)actual >> 20);
+    stat_put(list, "mem_swapped_in", dev->stats[VIRTIO_BALLOON_S_SWAP_IN]);
+    stat_put(list, "mem_swapped_out", dev->stats[VIRTIO_BALLOON_S_SWAP_OUT]);
+    stat_put(list, "major_page_faults", dev->stats[VIRTIO_BALLOON_S_MAJFLT]);
+    stat_put(list, "minor_page_faults", dev->stats[VIRTIO_BALLOON_S_MINFLT]);
+    stat_put(list, "free_mem", dev->stats[VIRTIO_BALLOON_S_MEMFREE]);
+    stat_put(list, "total_mem", dev->stats[VIRTIO_BALLOON_S_MEMTOT]);
+    return QOBJECT(list);
+}
+
 /* FIXME: once we do a virtio refactoring, this will get subsumed into common
  * code */
 static size_t memcpy_from_iovector(void *data, size_t offset, size_t size,
@@ -99,6 +136,36 @@ static void virtio_balloon_handle_output(VirtIODevice *vdev, VirtQueue *vq)
     }
 }
 
+static void virtio_balloon_receive_stats(VirtIODevice *vdev, VirtQueue *vq)
+{
+    VirtIOBalloon *s = DO_UPCAST(VirtIOBalloon, vdev, vdev);
+    VirtQueueElement *elem = &s->stats_vq_elem;
+    VirtIOBalloonStat stat;
+    size_t offset = 0;
+
+    if (!virtqueue_pop(vq, elem))
+        return;
+
+    while (memcpy_from_iovector(&stat, offset, sizeof(stat), elem->out_sg,
+                                elem->out_num) == sizeof(stat)) {
+        uint16_t tag = tswap16(stat.tag);
+        uint64_t val = tswap64(stat.val);
+
+        offset += sizeof(stat);
+        if (tag < VIRTIO_BALLOON_S_NR)
+            s->stats[tag] = val;
+    }
+    s->stats_vq_offset = offset;
+
+    if (s->stats_requested) {
+        QObject *stats = get_stats_qobject(s);
+        monitor_print_balloon(cur_mon, stats);
+        qobject_decref(stats);
+        monitor_resume(cur_mon);
+        s->stats_requested = 0;
+    }
+}
+
 static void virtio_balloon_get_config(VirtIODevice *vdev, uint8_t *config_data)
 {
     VirtIOBalloon *dev = DO_UPCAST(VirtIOBalloon, vdev, vdev);
@@ -121,12 +188,22 @@ static void virtio_balloon_set_config(VirtIODevice *vdev,
 
 static uint32_t virtio_balloon_get_features(VirtIODevice *vdev)
 {
-    return 0;
+    return 1 << VIRTIO_BALLOON_F_STATS_VQ;
+}
+
+static void request_stats(VirtIOBalloon *vb)
+{
+    vb->stats_requested = 1;
+    reset_stats(vb);
+    monitor_suspend(cur_mon);
+    virtqueue_push(vb->svq, &vb->stats_vq_elem, vb->stats_vq_offset);
+    virtio_notify(&vb->vdev, vb->svq);
 }
 
-static ram_addr_t virtio_balloon_to_target(void *opaque, ram_addr_t target)
+static QObject *virtio_balloon_to_target(void *opaque, ram_addr_t target)
 {
     VirtIOBalloon *dev = opaque;
+    QObject *ret = NULL;
 
     if (target > ram_size)
         target = ram_size;
@@ -134,9 +211,15 @@ static ram_addr_t virtio_balloon_to_target(void *opaque, ram_addr_t target)
     if (target) {
         dev->num_pages = (ram_size - target) >> VIRTIO_BALLOON_PFN_SHIFT;
         virtio_notify_config(&dev->vdev);
+    } else if (dev->vdev.features & (1 << VIRTIO_BALLOON_F_STATS_VQ)) {
+        request_stats(dev);
+        ret = QOBJECT(qlist_new());
+    } else {
+        reset_stats(dev);
+        ret = get_stats_qobject(dev);
     }
 
-    return ram_size - (dev->actual << VIRTIO_BALLOON_PFN_SHIFT);
+    return ret;
 }
 
 static const VMStateDescription vmstate_virtio_balloon = {
@@ -148,6 +231,10 @@ static const VMStateDescription vmstate_virtio_balloon = {
         VMSTATE_VIRTIO(vdev, VirtIOBalloon),
         VMSTATE_UINT32(num_pages, VirtIOBalloon),
         VMSTATE_UINT32(actual, VirtIOBalloon),
+        VMSTATE_STRUCT(stats_vq_elem, VirtIOBalloon, 0, vmstate_virtio_balloon,
+                       VirtQueueElement),
+        VMSTATE_UINT64(stats_vq_offset, VirtIOBalloon),
+        VMSTATE_UINT8(stats_requested, VirtIOBalloon),
         VMSTATE_END_OF_LIST()
     }
 };
@@ -166,6 +253,7 @@ VirtIODevice *virtio_balloon_init(DeviceState *dev)
 
     s->ivq = virtio_add_queue(&s->vdev, 128, virtio_balloon_handle_output);
     s->dvq = virtio_add_queue(&s->vdev, 128, virtio_balloon_handle_output);
+    s->svq = virtio_add_queue(&s->vdev, 128, virtio_balloon_receive_stats);
 
     qemu_add_balloon_handler(virtio_balloon_to_target, s);
 
diff --git a/hw/virtio-balloon.h b/hw/virtio-balloon.h
index 9a0d119..e20cf6b 100644
--- a/hw/virtio-balloon.h
+++ b/hw/virtio-balloon.h
@@ -25,6 +25,7 @@
 
 /* The feature bitmap for virtio balloon */
 #define VIRTIO_BALLOON_F_MUST_TELL_HOST 0 /* Tell before reclaiming pages */
+#define VIRTIO_BALLOON_F_STATS_VQ 1       /* Memory stats virtqueue */
 
 /* Size of a PFN in the balloon interface. */
 #define VIRTIO_BALLOON_PFN_SHIFT 12
@@ -37,4 +38,18 @@ struct virtio_balloon_config
     uint32_t actual;
 };
 
+/* Memory Statistics */
+#define VIRTIO_BALLOON_S_SWAP_IN  0   /* Amount of memory swapped in */
+#define VIRTIO_BALLOON_S_SWAP_OUT 1   /* Amount of memory swapped out */
+#define VIRTIO_BALLOON_S_MAJFLT   2   /* Number of major faults */
+#define VIRTIO_BALLOON_S_MINFLT   3   /* Number of minor faults */
+#define VIRTIO_BALLOON_S_MEMFREE  4   /* Total amount of free memory */
+#define VIRTIO_BALLOON_S_MEMTOT   5   /* Total amount of memory */
+#define VIRTIO_BALLOON_S_NR       6
+
+typedef struct VirtIOBalloonStat {
+    uint16_t tag;
+    uint64_t val;
+} __attribute__((packed)) VirtIOBalloonStat;
+
 #endif
diff --git a/monitor.c b/monitor.c
index 18aa22b..3bb9e95 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1886,10 +1886,26 @@ static void do_balloon(Monitor *mon, const QDict *qdict, QObject **ret_data)
     qemu_balloon(target << 20);
 }
 
-static void monitor_print_balloon(Monitor *mon, const QObject *data)
+void monitor_print_balloon(Monitor *mon, const QObject *data)
 {
-    monitor_printf(mon, "balloon: actual=%d\n",
-                                     (int)qint_get_int(qobject_to_qint(data)));
+    QList *list = qobject_to_qlist(data);
+    QString *label;
+    QInt *val;
+
+    if (qlist_empty(list))
+        return;
+
+    label = qobject_to_qstring(qlist_pop(list));
+    val = qobject_to_qint(qlist_pop(list));
+    monitor_printf(mon, "balloon: actual=%d", (int)qint_get_int(val));
+
+    while (!qlist_empty(list)) {
+        label = qobject_to_qstring(qlist_pop(list));
+        val = qobject_to_qint(qlist_pop(list));
+        monitor_printf(mon, ",%s=%lu", qstring_get_str(label),
+                       (uint64_t)qint_get_int(val));
+    } 
+    monitor_printf(mon, "\n");
 }
 
 /**
@@ -1897,15 +1913,11 @@ static void monitor_print_balloon(Monitor *mon, const QObject *data)
  */
 static void do_info_balloon(Monitor *mon, QObject **ret_data)
 {
-    ram_addr_t actual;
-
-    actual = qemu_balloon_status();
     if (kvm_enabled() && !kvm_has_sync_mmu())
         qemu_error_new(QERR_KVM_MISSING_CAP, "synchronous MMU", "balloon");
-    else if (actual == 0)
+    *ret_data = qemu_balloon_status();
+    if (*ret_data == NULL)
         qemu_error_new(QERR_DEVICE_NOT_ACTIVE, "balloon");
-    else
-        *ret_data = QOBJECT(qint_from_int((int)(actual >> 20)));
 }
 
 static qemu_acl *find_acl(Monitor *mon, const char *name)
diff --git a/monitor.h b/monitor.h
index 851fd33..0b5b99d 100644
--- a/monitor.h
+++ b/monitor.h
@@ -33,6 +33,7 @@ void monitor_resume(Monitor *mon);
 void monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
                                  BlockDriverCompletionFunc *completion_cb,
                                  void *opaque);
+void monitor_print_balloon(Monitor *mon, const QObject *data);
 
 int monitor_get_fd(Monitor *mon, const char *fdname);
 
diff --git a/vl.c b/vl.c
index d6f196c..aab03e9 100644
--- a/vl.c
+++ b/vl.c
@@ -331,11 +331,11 @@ void qemu_balloon(ram_addr_t target)
         qemu_balloon_event(qemu_balloon_event_opaque, target);
 }
 
-ram_addr_t qemu_balloon_status(void)
+QObject *qemu_balloon_status(void)
 {
     if (qemu_balloon_event)
         return qemu_balloon_event(qemu_balloon_event_opaque, 0);
-    return 0;
+    return NULL;
 }
 
 /***********************************************************/


-- 
Thanks,
Adam

^ permalink raw reply related	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-02 16:46 [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
                   ` (6 preceding siblings ...)
  2009-12-03 16:57 ` [Qemu-devel] [FOR 0.12] debugcon patch for staging H. Peter Anvin
@ 2009-12-03 19:26 ` Aurelien Jarno
  2009-12-03 20:03   ` Blue Swirl
  2009-12-04 10:10 ` Kevin Wolf
  8 siblings, 1 reply; 40+ messages in thread
From: Aurelien Jarno @ 2009-12-03 19:26 UTC (permalink / raw)
  To: Laurent Vivier, Blue Swirl; +Cc: openbios, qemu-devel

On Wed, Dec 02, 2009 at 10:46:11AM -0600, Anthony Liguori wrote:
> I've got all of the patches I'm considering for 0.12 currently in
> staging.  I'm going to work through and test/commit these in a few
> chunks over the next few days before freezing the tree.
> 

What are the plans on the OpenBIOS side? The version currently included
in QEMU is old compared to the SVN. Is it plan to sync a release of
OpenBIOS with QEMU?

-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
aurelien@aurel32.net                 http://www.aurel32.net

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-03 19:26 ` [Qemu-devel] Staging update (0.12 pending freeze) Aurelien Jarno
@ 2009-12-03 20:03   ` Blue Swirl
  2009-12-05 20:05     ` Aurelien Jarno
  0 siblings, 1 reply; 40+ messages in thread
From: Blue Swirl @ 2009-12-03 20:03 UTC (permalink / raw)
  To: Aurelien Jarno; +Cc: openbios, Laurent Vivier, qemu-devel

On Thu, Dec 3, 2009 at 9:26 PM, Aurelien Jarno <aurelien@aurel32.net> wrote:
> On Wed, Dec 02, 2009 at 10:46:11AM -0600, Anthony Liguori wrote:
>> I've got all of the patches I'm considering for 0.12 currently in
>> staging.  I'm going to work through and test/commit these in a few
>> chunks over the next few days before freezing the tree.
>>
>
> What are the plans on the OpenBIOS side? The version currently included
> in QEMU is old compared to the SVN. Is it plan to sync a release of
> OpenBIOS with QEMU?

At least the images should be updated.

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-03 12:34 ` [Qemu-devel] Staging update (0.12 pending freeze) Gerd Hoffmann
  2009-12-03 13:08   ` Alexander Graf
@ 2009-12-03 23:21   ` Anthony Liguori
  2009-12-03 23:53     ` Luiz Capitulino
  1 sibling, 1 reply; 40+ messages in thread
From: Anthony Liguori @ 2009-12-03 23:21 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel, Luiz Capitulino

Gerd Hoffmann wrote:
> On 12/02/09 17:46, Anthony Liguori wrote:
>
>> If you have a pending patch that you think should be in 0.12, please
>> check to make sure it's there.
>
> A clear 'must have':
>
>   http://patchwork.ozlabs.org/patch/39291/
>   Add a new machine type for qemu 0.12
>
> On top of that, to reduce irq sharing (nice to have):
>
>   http://patchwork.ozlabs.org/patch/39294/
>   virtio: enable msi-x for console+balloon
>
> This bugfix ('must have' IMHO):
>
>   http://patchwork.ozlabs.org/patch/39311/
>   make chardevs specified in config file work
>
> Also useful (nice to have):
>
>   http://patchwork.ozlabs.org/patch/39202/
>   http://patchwork.ozlabs.org/patch/39201/
>   add command line option to set global defaults for properties

Got all this, thanks.

> Finally the 'default devices' patch series ('must have' IMHO):
>
>   http://patchwork.ozlabs.org/patch/39180/ (patch 1/10)
>
> Without that one using -device and -readconfig becomes much harder.

This series doesn't get along with the QMP monitor support that's been 
added recently.  That's because there is now a set of monitor flags and 
-monitor takes more than a character device as an argument.

Honestly, I don't really like multiplexing the -monitor option to 
support qmp.  I think I would have a proper -qmp option at the top 
level.  That would integrate much more nicely too with this default 
devices series.  Luiz, what do you think?

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-03 23:21   ` [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
@ 2009-12-03 23:53     ` Luiz Capitulino
  2009-12-04  0:04       ` Anthony Liguori
  0 siblings, 1 reply; 40+ messages in thread
From: Luiz Capitulino @ 2009-12-03 23:53 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Gerd Hoffmann, qemu-devel

On Thu, 03 Dec 2009 17:21:18 -0600
Anthony Liguori <anthony@codemonkey.ws> wrote:

> > Finally the 'default devices' patch series ('must have' IMHO):
> >
> >   http://patchwork.ozlabs.org/patch/39180/ (patch 1/10)
> >
> > Without that one using -device and -readconfig becomes much harder.
> 
> This series doesn't get along with the QMP monitor support that's been 
> added recently.  That's because there is now a set of monitor flags and 
> -monitor takes more than a character device as an argument.

 For QMP there is only one flag, which is 'control', like:

-monitor control,<device>

 Multiple Monitors work just fine, like:

-monitor stdio -monitor control,tcp:localhost:444,server

 I've even tested multiple QMP monitors iirc. :)

> Honestly, I don't really like multiplexing the -monitor option to 
> support qmp.  I think I would have a proper -qmp option at the top 
> level.  That would integrate much more nicely too with this default 
> devices series.  Luiz, what do you think?

 Multiplexing the monitor is really useful for testing and it doesn't
seem reasonable to me to drop this feature just because we can't
add a single flag to an existing command-line option.

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-03 23:53     ` Luiz Capitulino
@ 2009-12-04  0:04       ` Anthony Liguori
  2009-12-04 11:17         ` Gerd Hoffmann
  0 siblings, 1 reply; 40+ messages in thread
From: Anthony Liguori @ 2009-12-04  0:04 UTC (permalink / raw)
  To: Luiz Capitulino; +Cc: Gerd Hoffmann, qemu-devel

Luiz Capitulino wrote:
> On Thu, 03 Dec 2009 17:21:18 -0600
> Anthony Liguori <anthony@codemonkey.ws> wrote:
>
>   
>>> Finally the 'default devices' patch series ('must have' IMHO):
>>>
>>>   http://patchwork.ozlabs.org/patch/39180/ (patch 1/10)
>>>
>>> Without that one using -device and -readconfig becomes much harder.
>>>       
>> This series doesn't get along with the QMP monitor support that's been 
>> added recently.  That's because there is now a set of monitor flags and 
>> -monitor takes more than a character device as an argument.
>>     
>
>  For QMP there is only one flag, which is 'control', like:
>
> -monitor control,<device>
>
>  Multiple Monitors work just fine, like:
>
> -monitor stdio -monitor control,tcp:localhost:444,server
>
>  I've even tested multiple QMP monitors iirc. :)
>
>   
>> Honestly, I don't really like multiplexing the -monitor option to 
>> support qmp.  I think I would have a proper -qmp option at the top 
>> level.  That would integrate much more nicely too with this default 
>> devices series.  Luiz, what do you think?
>>     
>
>  Multiplexing the monitor is really useful for testing and it doesn't
> seem reasonable to me to drop this feature just because we can't
> add a single flag to an existing command-line option.
>   

Problem is, control is not a property of the character device. To 
express this in a consistent way with everything else, you would have to 
make this QemuOpts-like so it would look like

-monitor control,device=tcp:localhost:444,server

But so far, the monitor, serial, parallel, etc. devices don't take QemuOpts.

OTH, having:

-qmp tcp:localhost:444,server

Matches the other option types in a consistent manner. If you want to 
support muxing, just add a qmp: prefix to the mux device.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-02 16:46 [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
                   ` (7 preceding siblings ...)
  2009-12-03 19:26 ` [Qemu-devel] Staging update (0.12 pending freeze) Aurelien Jarno
@ 2009-12-04 10:10 ` Kevin Wolf
  8 siblings, 0 replies; 40+ messages in thread
From: Kevin Wolf @ 2009-12-04 10:10 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel

Am 02.12.2009 17:46, schrieb Anthony Liguori:
> I've got all of the patches I'm considering for 0.12 currently in 
> staging.  I'm going to work through and test/commit these in a few 
> chunks over the next few days before freezing the tree.

You seem to have missed this one:

qemu-io: Fix memory leak
http://patchwork.ozlabs.org/patch/38738/

Kevin

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-04  0:04       ` Anthony Liguori
@ 2009-12-04 11:17         ` Gerd Hoffmann
  2009-12-04 11:48           ` Luiz Capitulino
  2009-12-04 14:12           ` Anthony Liguori
  0 siblings, 2 replies; 40+ messages in thread
From: Gerd Hoffmann @ 2009-12-04 11:17 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: qemu-devel, Luiz Capitulino

On 12/04/09 01:04, Anthony Liguori wrote:
> Problem is, control is not a property of the character device. To
> express this in a consistent way with everything else, you would have to
> make this QemuOpts-like so it would look like
>
> -monitor control,device=tcp:localhost:444,server
>
> But so far, the monitor, serial, parallel, etc. devices don't take
> QemuOpts.
 >
> OTH, having:
>
> -qmp tcp:localhost:444,server

I think we should create a new option for monitor configuration, like this:

   -mon mode={control,readline},chardev=<name>,more-options-here

So you'll create a qmp monitor socket this way:

   -chardev socket,path=/tmp/qmpsock,id=qmp,server,nowait
   -mon mode=control,chardev=qmp

Then the -monitor switch will be legacy/convinience syntax for a 
readline monitor with auto-created chardev named 'monitor<nr>'.

If we need more options in the future they can be added easily.

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-04 11:17         ` Gerd Hoffmann
@ 2009-12-04 11:48           ` Luiz Capitulino
  2009-12-04 12:43             ` Gerd Hoffmann
  2009-12-04 14:12           ` Anthony Liguori
  1 sibling, 1 reply; 40+ messages in thread
From: Luiz Capitulino @ 2009-12-04 11:48 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel

On Fri, 04 Dec 2009 12:17:51 +0100
Gerd Hoffmann <kraxel@redhat.com> wrote:

> On 12/04/09 01:04, Anthony Liguori wrote:
> > Problem is, control is not a property of the character device. To
> > express this in a consistent way with everything else, you would have to
> > make this QemuOpts-like so it would look like
> >
> > -monitor control,device=tcp:localhost:444,server
> >
> > But so far, the monitor, serial, parallel, etc. devices don't take
> > QemuOpts.
>  >
> > OTH, having:
> >
> > -qmp tcp:localhost:444,server
> 
> I think we should create a new option for monitor configuration, like this:
> 
>    -mon mode={control,readline},chardev=<name>,more-options-here
> 
> So you'll create a qmp monitor socket this way:
> 
>    -chardev socket,path=/tmp/qmpsock,id=qmp,server,nowait
>    -mon mode=control,chardev=qmp
> 
> Then the -monitor switch will be legacy/convinience syntax for a 
> readline monitor with auto-created chardev named 'monitor<nr>'.

 I like this.

 I believe it wouldn't be difficult for you to rebase your series
on top of staging with an incremental patch for QMP, right?

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-04 11:48           ` Luiz Capitulino
@ 2009-12-04 12:43             ` Gerd Hoffmann
  0 siblings, 0 replies; 40+ messages in thread
From: Gerd Hoffmann @ 2009-12-04 12:43 UTC (permalink / raw)
  To: Luiz Capitulino; +Cc: qemu-devel

On 12/04/09 12:48, Luiz Capitulino wrote:
>> I think we should create a new option for monitor configuration, like this:
>>
>>     -mon mode={control,readline},chardev=<name>,more-options-here
>>
>> So you'll create a qmp monitor socket this way:
>>
>>     -chardev socket,path=/tmp/qmpsock,id=qmp,server,nowait
>>     -mon mode=control,chardev=qmp
>>
>> Then the -monitor switch will be legacy/convinience syntax for a
>> readline monitor with auto-created chardev named 'monitor<nr>'.
>
>   I like this.
>
>   I believe it wouldn't be difficult for you to rebase your series
> on top of staging with an incremental patch for QMP, right?

Rebasing to a moving target is insane.  The qmp patches are committed 
already though, so this isn't a issue ;)

Right now I have some wip patches against current master:

    http://repo.or.cz/w/qemu/kraxel.git/shortlog/refs/heads/qmp  [1]

Not sure whenever I base this on the default series or the other way 
around.  Either way it will be a bit messy.

cheers,
   Gerd

[1] The friendly URLs are new, arn't they?

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-04 11:17         ` Gerd Hoffmann
  2009-12-04 11:48           ` Luiz Capitulino
@ 2009-12-04 14:12           ` Anthony Liguori
  1 sibling, 0 replies; 40+ messages in thread
From: Anthony Liguori @ 2009-12-04 14:12 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel, Luiz Capitulino

Gerd Hoffmann wrote:
> On 12/04/09 01:04, Anthony Liguori wrote:
>> Problem is, control is not a property of the character device. To
>> express this in a consistent way with everything else, you would have to
>> make this QemuOpts-like so it would look like
>>
>> -monitor control,device=tcp:localhost:444,server
>>
>> But so far, the monitor, serial, parallel, etc. devices don't take
>> QemuOpts.
> >
>> OTH, having:
>>
>> -qmp tcp:localhost:444,server
>
> I think we should create a new option for monitor configuration, like 
> this:
>
>   -mon mode={control,readline},chardev=<name>,more-options-here
>
> So you'll create a qmp monitor socket this way:
>
>   -chardev socket,path=/tmp/qmpsock,id=qmp,server,nowait
>   -mon mode=control,chardev=qmp

Works for me.  Would be nice to have a -qmp convenience option too.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-03 20:03   ` Blue Swirl
@ 2009-12-05 20:05     ` Aurelien Jarno
  2009-12-05 20:07       ` Blue Swirl
  0 siblings, 1 reply; 40+ messages in thread
From: Aurelien Jarno @ 2009-12-05 20:05 UTC (permalink / raw)
  To: Blue Swirl; +Cc: openbios, Laurent Vivier, qemu-devel

On Thu, Dec 03, 2009 at 10:03:18PM +0200, Blue Swirl wrote:
> On Thu, Dec 3, 2009 at 9:26 PM, Aurelien Jarno <aurelien@aurel32.net> wrote:
> > On Wed, Dec 02, 2009 at 10:46:11AM -0600, Anthony Liguori wrote:
> >> I've got all of the patches I'm considering for 0.12 currently in
> >> staging.  I'm going to work through and test/commit these in a few
> >> chunks over the next few days before freezing the tree.
> >>
> >
> > What are the plans on the OpenBIOS side? The version currently included
> > in QEMU is old compared to the SVN. Is it plan to sync a release of
> > OpenBIOS with QEMU?
> 
> At least the images should be updated.
> 

Now that version 0.12.0-rca has been tagged, we should probably do that
asap. Should I do it?

-- 
Aurelien Jarno	                        GPG: 1024D/F1BCDB73
aurelien@aurel32.net                 http://www.aurel32.net

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-05 20:05     ` Aurelien Jarno
@ 2009-12-05 20:07       ` Blue Swirl
  2009-12-06 11:59         ` Aurelien Jarno
  0 siblings, 1 reply; 40+ messages in thread
From: Blue Swirl @ 2009-12-05 20:07 UTC (permalink / raw)
  To: Aurelien Jarno; +Cc: openbios, Laurent Vivier, qemu-devel

On Sat, Dec 5, 2009 at 8:05 PM, Aurelien Jarno <aurelien@aurel32.net> wrote:
> On Thu, Dec 03, 2009 at 10:03:18PM +0200, Blue Swirl wrote:
>> On Thu, Dec 3, 2009 at 9:26 PM, Aurelien Jarno <aurelien@aurel32.net> wrote:
>> > On Wed, Dec 02, 2009 at 10:46:11AM -0600, Anthony Liguori wrote:
>> >> I've got all of the patches I'm considering for 0.12 currently in
>> >> staging.  I'm going to work through and test/commit these in a few
>> >> chunks over the next few days before freezing the tree.
>> >>
>> >
>> > What are the plans on the OpenBIOS side? The version currently included
>> > in QEMU is old compared to the SVN. Is it plan to sync a release of
>> > OpenBIOS with QEMU?
>>
>> At least the images should be updated.
>>
>
> Now that version 0.12.0-rca has been tagged, we should probably do that
> asap. Should I do it?

Please do.

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-05 20:07       ` Blue Swirl
@ 2009-12-06 11:59         ` Aurelien Jarno
  2009-12-06 15:44           ` Blue Swirl
  0 siblings, 1 reply; 40+ messages in thread
From: Aurelien Jarno @ 2009-12-06 11:59 UTC (permalink / raw)
  To: Blue Swirl; +Cc: openbios, Laurent Vivier, qemu-devel

On Sat, Dec 05, 2009 at 08:07:13PM +0000, Blue Swirl wrote:
> On Sat, Dec 5, 2009 at 8:05 PM, Aurelien Jarno <aurelien@aurel32.net> wrote:
> > On Thu, Dec 03, 2009 at 10:03:18PM +0200, Blue Swirl wrote:
> >> On Thu, Dec 3, 2009 at 9:26 PM, Aurelien Jarno <aurelien@aurel32.net> wrote:
> >> > On Wed, Dec 02, 2009 at 10:46:11AM -0600, Anthony Liguori wrote:
> >> >> I've got all of the patches I'm considering for 0.12 currently in
> >> >> staging.  I'm going to work through and test/commit these in a few
> >> >> chunks over the next few days before freezing the tree.
> >> >>
> >> >
> >> > What are the plans on the OpenBIOS side? The version currently included
> >> > in QEMU is old compared to the SVN. Is it plan to sync a release of
> >> > OpenBIOS with QEMU?
> >>
> >> At least the images should be updated.
> >>
> >
> > Now that version 0.12.0-rca has been tagged, we should probably do that
> > asap. Should I do it?
> 
> Please do.
> 

I have seen you have been faster than me, thanks.

Anyway I am not able to fully build the powerpc images here,
openbios-unix fails to build with:

| libmodules.a(elf-loader.o): In function `elf_loader_init_program':
| /home/aurel32/openbios-devel/obj-ppc/../modules/elf-loader.c:77: undefined reference to `flush_icache_range'
| libmodules.a(xcoff-loader.o): In function `xcoff_loader_init_program':
| /home/aurel32/openbios-devel/obj-ppc/../modules/xcoff-loader.c:110: undefined reference to `flush_icache_range'
| libmodules.a(ofmem_common.o): In function `ofmem_translate':
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:680: undefined reference to `ofmem_arch_get_private'
| libmodules.a(ofmem_common.o): In function `ofmem_free':
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:129: undefined reference to `ofmem_arch_get_private'
| libmodules.a(ofmem_common.o): In function `split_trans':
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:505: undefined reference to `ofmem_arch_get_private'
| libmodules.a(ofmem_common.o): In function `ofmem_claim_virt_':
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:422: undefined reference to `ofmem_arch_get_private'
| libmodules.a(ofmem_common.o): In function `ofmem_update_translations':
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:256: undefined reference to `ofmem_arch_get_private'
| libmodules.a(ofmem_common.o):/home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:35: more undefined references to `ofmem_arch_get_private' follow
| libmodules.a(ofmem_common.o): In function `unmap_page_range':
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:609: undefined reference to `ofmem_arch_unmap_pages'
| libmodules.a(ofmem_common.o): In function `ofmem_map_page_range':
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:524: undefined reference to `ofmem_arch_get_private'
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:551: undefined reference to `ofmem_arch_unmap_pages'
| libmodules.a(ofmem_common.o): In function `ofmem_map':
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:647: undefined reference to `ofmem_arch_default_translation_mode'
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:654: undefined reference to `ofmem_arch_early_map_pages'
| libmodules.a(ofmem_common.o): In function `ofmem_claim':
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:456: undefined reference to `ofmem_arch_get_private'
| libmodules.a(ofmem_common.o): In function `get_ram_size':
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:35: undefined reference to `ofmem_arch_get_private'
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:35: undefined reference to `ofmem_arch_get_private'
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:35: undefined reference to `ofmem_arch_get_private'
| libmodules.a(ofmem_common.o): In function `ofmem_claim_virt':
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:448: undefined reference to `ofmem_arch_get_virt_top'
| libmodules.a(ofmem_common.o): In function `ofmem_malloc':
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:83: undefined reference to `ofmem_arch_get_private'
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:92: undefined reference to `ofmem_arch_get_malloc_base'
| /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:108: undefined reference to `ofmem_arch_get_heap_top'
| collect2: ld returned 1 exit status
| make[1]: *** [openbios-unix] Error 1
| make[1]: Leaving directory `/home/aurel32/openbios-devel/obj-ppc'

This is something that needs to be fixed before an OpenBIOS release,
though I don't know if its planned to release OpenBIOS in sync with QEMU.

-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
aurelien@aurel32.net                 http://www.aurel32.net

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-06 11:59         ` Aurelien Jarno
@ 2009-12-06 15:44           ` Blue Swirl
  2009-12-07 22:24             ` Aurelien Jarno
  0 siblings, 1 reply; 40+ messages in thread
From: Blue Swirl @ 2009-12-06 15:44 UTC (permalink / raw)
  To: Aurelien Jarno; +Cc: openbios, Laurent Vivier, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 5097 bytes --]

On Sun, Dec 6, 2009 at 11:59 AM, Aurelien Jarno <aurelien@aurel32.net> wrote:
> On Sat, Dec 05, 2009 at 08:07:13PM +0000, Blue Swirl wrote:
>> On Sat, Dec 5, 2009 at 8:05 PM, Aurelien Jarno <aurelien@aurel32.net> wrote:
>> > On Thu, Dec 03, 2009 at 10:03:18PM +0200, Blue Swirl wrote:
>> >> On Thu, Dec 3, 2009 at 9:26 PM, Aurelien Jarno <aurelien@aurel32.net> wrote:
>> >> > On Wed, Dec 02, 2009 at 10:46:11AM -0600, Anthony Liguori wrote:
>> >> >> I've got all of the patches I'm considering for 0.12 currently in
>> >> >> staging.  I'm going to work through and test/commit these in a few
>> >> >> chunks over the next few days before freezing the tree.
>> >> >>
>> >> >
>> >> > What are the plans on the OpenBIOS side? The version currently included
>> >> > in QEMU is old compared to the SVN. Is it plan to sync a release of
>> >> > OpenBIOS with QEMU?
>> >>
>> >> At least the images should be updated.
>> >>
>> >
>> > Now that version 0.12.0-rca has been tagged, we should probably do that
>> > asap. Should I do it?
>>
>> Please do.
>>
>
> I have seen you have been faster than me, thanks.
>
> Anyway I am not able to fully build the powerpc images here,
> openbios-unix fails to build with:
>
> | libmodules.a(elf-loader.o): In function `elf_loader_init_program':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/elf-loader.c:77: undefined reference to `flush_icache_range'
> | libmodules.a(xcoff-loader.o): In function `xcoff_loader_init_program':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/xcoff-loader.c:110: undefined reference to `flush_icache_range'
> | libmodules.a(ofmem_common.o): In function `ofmem_translate':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:680: undefined reference to `ofmem_arch_get_private'
> | libmodules.a(ofmem_common.o): In function `ofmem_free':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:129: undefined reference to `ofmem_arch_get_private'
> | libmodules.a(ofmem_common.o): In function `split_trans':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:505: undefined reference to `ofmem_arch_get_private'
> | libmodules.a(ofmem_common.o): In function `ofmem_claim_virt_':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:422: undefined reference to `ofmem_arch_get_private'
> | libmodules.a(ofmem_common.o): In function `ofmem_update_translations':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:256: undefined reference to `ofmem_arch_get_private'
> | libmodules.a(ofmem_common.o):/home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:35: more undefined references to `ofmem_arch_get_private' follow
> | libmodules.a(ofmem_common.o): In function `unmap_page_range':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:609: undefined reference to `ofmem_arch_unmap_pages'
> | libmodules.a(ofmem_common.o): In function `ofmem_map_page_range':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:524: undefined reference to `ofmem_arch_get_private'
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:551: undefined reference to `ofmem_arch_unmap_pages'
> | libmodules.a(ofmem_common.o): In function `ofmem_map':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:647: undefined reference to `ofmem_arch_default_translation_mode'
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:654: undefined reference to `ofmem_arch_early_map_pages'
> | libmodules.a(ofmem_common.o): In function `ofmem_claim':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:456: undefined reference to `ofmem_arch_get_private'
> | libmodules.a(ofmem_common.o): In function `get_ram_size':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:35: undefined reference to `ofmem_arch_get_private'
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:35: undefined reference to `ofmem_arch_get_private'
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:35: undefined reference to `ofmem_arch_get_private'
> | libmodules.a(ofmem_common.o): In function `ofmem_claim_virt':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:448: undefined reference to `ofmem_arch_get_virt_top'
> | libmodules.a(ofmem_common.o): In function `ofmem_malloc':
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:83: undefined reference to `ofmem_arch_get_private'
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:92: undefined reference to `ofmem_arch_get_malloc_base'
> | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:108: undefined reference to `ofmem_arch_get_heap_top'
> | collect2: ld returned 1 exit status
> | make[1]: *** [openbios-unix] Error 1
> | make[1]: Leaving directory `/home/aurel32/openbios-devel/obj-ppc'
>
> This is something that needs to be fixed before an OpenBIOS release,
> though I don't know if its planned to release OpenBIOS in sync with QEMU.

Does this patch fix the problem?

[-- Attachment #2: 0001-Fix-openbios-unix-compile-on-PPC.patch --]
[-- Type: application/mbox, Size: 2250 bytes --]

^ permalink raw reply	[flat|nested] 40+ messages in thread

* Re: [Qemu-devel] Staging update (0.12 pending freeze)
  2009-12-06 15:44           ` Blue Swirl
@ 2009-12-07 22:24             ` Aurelien Jarno
  0 siblings, 0 replies; 40+ messages in thread
From: Aurelien Jarno @ 2009-12-07 22:24 UTC (permalink / raw)
  To: Blue Swirl; +Cc: openbios, Laurent Vivier, qemu-devel

On Sun, Dec 06, 2009 at 03:44:59PM +0000, Blue Swirl wrote:
> On Sun, Dec 6, 2009 at 11:59 AM, Aurelien Jarno <aurelien@aurel32.net> wrote:
> > On Sat, Dec 05, 2009 at 08:07:13PM +0000, Blue Swirl wrote:
> >> On Sat, Dec 5, 2009 at 8:05 PM, Aurelien Jarno <aurelien@aurel32.net> wrote:
> >> > On Thu, Dec 03, 2009 at 10:03:18PM +0200, Blue Swirl wrote:
> >> >> On Thu, Dec 3, 2009 at 9:26 PM, Aurelien Jarno <aurelien@aurel32.net> wrote:
> >> >> > On Wed, Dec 02, 2009 at 10:46:11AM -0600, Anthony Liguori wrote:
> >> >> >> I've got all of the patches I'm considering for 0.12 currently in
> >> >> >> staging.  I'm going to work through and test/commit these in a few
> >> >> >> chunks over the next few days before freezing the tree.
> >> >> >>
> >> >> >
> >> >> > What are the plans on the OpenBIOS side? The version currently included
> >> >> > in QEMU is old compared to the SVN. Is it plan to sync a release of
> >> >> > OpenBIOS with QEMU?
> >> >>
> >> >> At least the images should be updated.
> >> >>
> >> >
> >> > Now that version 0.12.0-rca has been tagged, we should probably do that
> >> > asap. Should I do it?
> >>
> >> Please do.
> >>
> >
> > I have seen you have been faster than me, thanks.
> >
> > Anyway I am not able to fully build the powerpc images here,
> > openbios-unix fails to build with:
> >
> > | libmodules.a(elf-loader.o): In function `elf_loader_init_program':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/elf-loader.c:77: undefined reference to `flush_icache_range'
> > | libmodules.a(xcoff-loader.o): In function `xcoff_loader_init_program':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/xcoff-loader.c:110: undefined reference to `flush_icache_range'
> > | libmodules.a(ofmem_common.o): In function `ofmem_translate':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:680: undefined reference to `ofmem_arch_get_private'
> > | libmodules.a(ofmem_common.o): In function `ofmem_free':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:129: undefined reference to `ofmem_arch_get_private'
> > | libmodules.a(ofmem_common.o): In function `split_trans':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:505: undefined reference to `ofmem_arch_get_private'
> > | libmodules.a(ofmem_common.o): In function `ofmem_claim_virt_':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:422: undefined reference to `ofmem_arch_get_private'
> > | libmodules.a(ofmem_common.o): In function `ofmem_update_translations':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:256: undefined reference to `ofmem_arch_get_private'
> > | libmodules.a(ofmem_common.o):/home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:35: more undefined references to `ofmem_arch_get_private' follow
> > | libmodules.a(ofmem_common.o): In function `unmap_page_range':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:609: undefined reference to `ofmem_arch_unmap_pages'
> > | libmodules.a(ofmem_common.o): In function `ofmem_map_page_range':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:524: undefined reference to `ofmem_arch_get_private'
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:551: undefined reference to `ofmem_arch_unmap_pages'
> > | libmodules.a(ofmem_common.o): In function `ofmem_map':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:647: undefined reference to `ofmem_arch_default_translation_mode'
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:654: undefined reference to `ofmem_arch_early_map_pages'
> > | libmodules.a(ofmem_common.o): In function `ofmem_claim':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:456: undefined reference to `ofmem_arch_get_private'
> > | libmodules.a(ofmem_common.o): In function `get_ram_size':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:35: undefined reference to `ofmem_arch_get_private'
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:35: undefined reference to `ofmem_arch_get_private'
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:35: undefined reference to `ofmem_arch_get_private'
> > | libmodules.a(ofmem_common.o): In function `ofmem_claim_virt':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:448: undefined reference to `ofmem_arch_get_virt_top'
> > | libmodules.a(ofmem_common.o): In function `ofmem_malloc':
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:83: undefined reference to `ofmem_arch_get_private'
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:92: undefined reference to `ofmem_arch_get_malloc_base'
> > | /home/aurel32/openbios-devel/obj-ppc/../modules/ofmem_common.c:108: undefined reference to `ofmem_arch_get_heap_top'
> > | collect2: ld returned 1 exit status
> > | make[1]: *** [openbios-unix] Error 1
> > | make[1]: Leaving directory `/home/aurel32/openbios-devel/obj-ppc'
> >
> > This is something that needs to be fixed before an OpenBIOS release,
> > though I don't know if its planned to release OpenBIOS in sync with QEMU.
> 
> Does this patch fix the problem?

Not it's worse. With the CONFIG_OFMEM, openbios-qemu.elf doesn't build
anymore. With only the flush_icache_range, I see no change.

-- 
Aurelien Jarno	                        GPG: 1024D/F1BCDB73
aurelien@aurel32.net                 http://www.aurel32.net

^ permalink raw reply	[flat|nested] 40+ messages in thread

* [Qemu-devel] Re: Staging update (0.12 pending freeze)
  2009-12-03 13:52 ` [Qemu-devel] " Paolo Bonzini
  2009-12-03 15:10   ` Anthony Liguori
@ 2009-12-13 10:34   ` Paolo Bonzini
  1 sibling, 0 replies; 40+ messages in thread
From: Paolo Bonzini @ 2009-12-13 10:34 UTC (permalink / raw)
  To: qemu-devel


> This one is missing:
>
> http://permalink.gmane.org/gmane.comp.emulators.qemu/57388
> [PATCH] Fix thinko in linuxboot.S

Still unmerged, resending it rebased.

Paolo

^ permalink raw reply	[flat|nested] 40+ messages in thread

end of thread, other threads:[~2009-12-13 10:35 UTC | newest]

Thread overview: 40+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-12-02 16:46 [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
2009-12-02 19:22 ` [Qemu-devel] " Jan Kiszka
2009-12-02 19:32   ` Anthony Liguori
2009-12-03 14:23     ` Luiz Capitulino
2009-12-03 16:37       ` Luiz Capitulino
2009-12-03 16:44         ` Anthony Liguori
2009-12-02 19:44 ` [Qemu-devel] " Luiz Capitulino
2009-12-02 19:54   ` Anthony Liguori
2009-12-02 20:00     ` Luiz Capitulino
2009-12-02 19:46 ` Ian Molton
2009-12-02 19:48   ` Anthony Liguori
2009-12-02 19:52     ` Ian Molton
2009-12-02 19:55       ` Anthony Liguori
2009-12-02 20:13         ` [Qemu-devel] [PATCH] Socket reconnection take 2 Ian Molton
2009-12-03 10:33           ` [Qemu-devel] " Michael S. Tsirkin
2009-12-03 12:34 ` [Qemu-devel] Staging update (0.12 pending freeze) Gerd Hoffmann
2009-12-03 13:08   ` Alexander Graf
2009-12-03 13:49     ` How to convert to -device & friends (was: [Qemu-devel] Staging update (0.12 pending freeze)) Markus Armbruster
2009-12-03 14:42       ` [Qemu-devel] Re: How to convert to -device & friends (was: " Michael S. Tsirkin
2009-12-03 23:21   ` [Qemu-devel] Staging update (0.12 pending freeze) Anthony Liguori
2009-12-03 23:53     ` Luiz Capitulino
2009-12-04  0:04       ` Anthony Liguori
2009-12-04 11:17         ` Gerd Hoffmann
2009-12-04 11:48           ` Luiz Capitulino
2009-12-04 12:43             ` Gerd Hoffmann
2009-12-04 14:12           ` Anthony Liguori
2009-12-03 13:52 ` [Qemu-devel] " Paolo Bonzini
2009-12-03 15:10   ` Anthony Liguori
2009-12-13 10:34   ` Paolo Bonzini
2009-12-03 15:27 ` [Qemu-devel] [FOR 0.12] [PATCH] virtio: Add memory statistics reporting to the balloon driver (V5) Adam Litke
2009-12-03 17:02   ` [Qemu-devel] [FOR 0.12] [PATCH] Updated: " Adam Litke
2009-12-03 16:57 ` [Qemu-devel] [FOR 0.12] debugcon patch for staging H. Peter Anvin
2009-12-03 19:26 ` [Qemu-devel] Staging update (0.12 pending freeze) Aurelien Jarno
2009-12-03 20:03   ` Blue Swirl
2009-12-05 20:05     ` Aurelien Jarno
2009-12-05 20:07       ` Blue Swirl
2009-12-06 11:59         ` Aurelien Jarno
2009-12-06 15:44           ` Blue Swirl
2009-12-07 22:24             ` Aurelien Jarno
2009-12-04 10:10 ` Kevin Wolf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.