From: Amit Shah <amit.shah@redhat.com>
To: qemu list <qemu-devel@nongnu.org>
Cc: Luiz Capitulino <lcapitulino@redhat.com>,
agl@us.ibm.com, Amit Shah <amit.shah@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: [Qemu-devel] [PATCH v3 3/3] balloon: Don't try fetching info if machine is stopped
Date: Fri, 27 Aug 2010 10:57:11 +0530 [thread overview]
Message-ID: <cbb03b0717fa7e4b6a0eb152703ebfd17c7d2ffa.1282886503.git.amit.shah@redhat.com> (raw)
In-Reply-To: <cover.1282886503.git.amit.shah@redhat.com>
In-Reply-To: <cover.1282886503.git.amit.shah@redhat.com>
If the machine is stopped and 'info balloon' is invoked, instead of
querying the guest and waiting for a timeout, just display the most
recent stats available in this case and log an error report.
See https://bugzilla.redhat.com/show_bug.cgi?id=623903
Reported-by: <lihuang@redhat.com>
Signed-off-by: Amit Shah <amit.shah@redhat.com>
---
balloon.c | 11 +++++++----
balloon.h | 6 ++++--
hw/virtio-balloon.c | 9 +++++++--
3 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/balloon.c b/balloon.c
index 8e0b7f1..8b05d20 100644
--- a/balloon.c
+++ b/balloon.c
@@ -43,17 +43,20 @@ void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque)
int qemu_balloon(ram_addr_t target, MonitorCompletion cb, void *opaque)
{
if (qemu_balloon_event) {
- qemu_balloon_event(qemu_balloon_event_opaque, target, cb, opaque);
+ qemu_balloon_event(qemu_balloon_event_opaque, target, cb, opaque,
+ false);
return 1;
} else {
return 0;
}
}
-int qemu_balloon_status(MonitorCompletion cb, void *opaque)
+int qemu_balloon_status(MonitorCompletion cb, void *opaque,
+ bool get_cached_data)
{
if (qemu_balloon_event) {
- qemu_balloon_event(qemu_balloon_event_opaque, 0, cb, opaque);
+ qemu_balloon_event(qemu_balloon_event_opaque, 0, cb, opaque,
+ get_cached_data);
return 1;
} else {
return 0;
@@ -113,7 +116,7 @@ int do_info_balloon(Monitor *mon, MonitorCompletion cb, void *opaque)
return -1;
}
- ret = qemu_balloon_status(cb, opaque);
+ ret = qemu_balloon_status(cb, opaque, !vm_running);
if (!ret) {
qerror_report(QERR_DEVICE_NOT_ACTIVE, "balloon");
return -1;
diff --git a/balloon.h b/balloon.h
index d478e28..729631c 100644
--- a/balloon.h
+++ b/balloon.h
@@ -17,13 +17,15 @@
#include "monitor.h"
typedef void (QEMUBalloonEvent)(void *opaque, ram_addr_t target,
- MonitorCompletion cb, void *cb_data);
+ MonitorCompletion cb, void *cb_data,
+ bool get_cached_data);
void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque);
int qemu_balloon(ram_addr_t target, MonitorCompletion cb, void *opaque);
-int qemu_balloon_status(MonitorCompletion cb, void *opaque);
+int qemu_balloon_status(MonitorCompletion cb, void *opaque,
+ bool get_cached_data);
void monitor_print_balloon(Monitor *mon, const QObject *data);
int do_info_balloon(Monitor *mon, MonitorCompletion cb, void *opaque);
diff --git a/hw/virtio-balloon.c b/hw/virtio-balloon.c
index 309c343..50a1a34 100644
--- a/hw/virtio-balloon.c
+++ b/hw/virtio-balloon.c
@@ -204,7 +204,8 @@ static uint32_t virtio_balloon_get_features(VirtIODevice *vdev, uint32_t f)
}
static void virtio_balloon_to_target(void *opaque, ram_addr_t target,
- MonitorCompletion cb, void *cb_data)
+ MonitorCompletion cb, void *cb_data,
+ bool get_cached_data)
{
VirtIOBalloon *dev = opaque;
@@ -222,8 +223,12 @@ static void virtio_balloon_to_target(void *opaque, ram_addr_t target,
return;
}
dev->stats_callback = cb;
- dev->stats_opaque_callback_data = cb_data;
+ dev->stats_opaque_callback_data = cb_data;
if (dev->vdev.guest_features & (1 << VIRTIO_BALLOON_F_STATS_VQ)) {
+ if (get_cached_data) {
+ show_old_stats(dev);
+ return;
+ }
qemu_mod_timer(dev->timer, qemu_get_clock(rt_clock) + 5000);
virtqueue_push(dev->svq, &dev->stats_vq_elem, dev->stats_vq_offset);
virtio_notify(&dev->vdev, dev->svq);
--
1.7.2.2
prev parent reply other threads:[~2010-08-27 5:30 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-27 5:27 [Qemu-devel] [PATCH v3 0/3] virtio-balloon: Don't wait indefinitely for guest response Amit Shah
2010-08-27 5:27 ` [Qemu-devel] [PATCH v3 1/3] balloon: Don't try fetching info if guest is unresponsive Amit Shah
2010-08-27 5:27 ` [Qemu-devel] [PATCH v3 2/3] qerror: Add a new MACHINE_STOPPED error message Amit Shah
2010-08-27 9:29 ` [Qemu-devel] " Daniel P. Berrange
2010-08-27 12:39 ` Anthony Liguori
2010-08-27 12:58 ` Daniel P. Berrange
2010-08-27 13:59 ` Markus Armbruster
2010-08-27 14:15 ` Luiz Capitulino
2010-08-27 14:59 ` Anthony Liguori
2010-08-27 15:33 ` Daniel P. Berrange
2010-08-27 15:45 ` Anthony Liguori
2010-08-27 16:08 ` Luiz Capitulino
2010-08-27 19:02 ` Anthony Liguori
2010-08-27 19:24 ` Luiz Capitulino
2010-08-27 19:37 ` Anthony Liguori
2010-08-27 20:58 ` Luiz Capitulino
2010-08-30 14:52 ` Should QMP be RPC to internal C interfaces? (was: [Qemu-devel] Re: [PATCH v3 2/3] qerror: Add a new MACHINE_STOPPED error message) Markus Armbruster
2010-08-30 15:28 ` [Qemu-devel] Re: Should QMP be RPC to internal C interfaces? Anthony Liguori
2010-08-30 15:38 ` Anthony Liguori
2010-08-30 16:16 ` Luiz Capitulino
2010-08-30 16:26 ` Anthony Liguori
2010-08-31 12:48 ` Markus Armbruster
2010-08-31 12:58 ` Luiz Capitulino
2010-08-31 13:05 ` Anthony Liguori
2010-08-31 8:47 ` Markus Armbruster
2010-08-31 13:03 ` Anthony Liguori
2010-08-28 0:52 ` [Qemu-devel] Re: [PATCH v3 2/3] qerror: Add a new MACHINE_STOPPED error message Amit Shah
2010-08-30 8:30 ` Markus Armbruster
2010-08-30 13:06 ` Anthony Liguori
2010-08-30 15:01 ` Markus Armbruster
2010-08-30 19:17 ` [Qemu-devel] [PATCH] Disable virtio-balloon memory stats interface Adam Litke
2010-08-31 3:42 ` [Qemu-devel] " Amit Shah
2010-09-08 10:57 ` Amit Shah
2010-08-27 5:27 ` Amit Shah [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cbb03b0717fa7e4b6a0eb152703ebfd17c7d2ffa.1282886503.git.amit.shah@redhat.com \
--to=amit.shah@redhat.com \
--cc=agl@us.ibm.com \
--cc=lcapitulino@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).