diff options
author | Amit Shah <amit.shah@redhat.com> | 2011-07-27 12:28:19 +0530 |
---|---|---|
committer | Amit Shah <amit.shah@redhat.com> | 2011-07-28 15:09:49 +0530 |
commit | eaa8b2778c182c8f795970dd46fef5b039fb741c (patch) | |
tree | 07c108072533289f525d8960dea2b741ee53f20c | |
parent | 89594593867c69f7cf63805374dda5476f17ecac (diff) |
balloon: Don't allow multiple balloon handler registrations
Multiple balloon devices don't make sense; disallow more than one
registration attempt to register handlers.
Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
-rw-r--r-- | balloon.c | 12 | ||||
-rw-r--r-- | balloon.h | 4 |
2 files changed, 12 insertions, 4 deletions
@@ -36,12 +36,20 @@ static QEMUBalloonEvent *balloon_event_fn; static QEMUBalloonStatus *balloon_stat_fn; static void *balloon_opaque; -void qemu_add_balloon_handler(QEMUBalloonEvent *event_func, - QEMUBalloonStatus *stat_func, void *opaque) +int qemu_add_balloon_handler(QEMUBalloonEvent *event_func, + QEMUBalloonStatus *stat_func, void *opaque) { + if (balloon_event_fn || balloon_stat_fn || balloon_opaque) { + /* We're already registered one balloon handler. How many can + * a guest really have? + */ + error_report("Another balloon device already registered"); + return -1; + } balloon_event_fn = event_func; balloon_stat_fn = stat_func; balloon_opaque = opaque; + return 0; } static int qemu_balloon(ram_addr_t target) @@ -20,8 +20,8 @@ typedef void (QEMUBalloonEvent)(void *opaque, ram_addr_t target); typedef void (QEMUBalloonStatus)(void *opaque, MonitorCompletion cb, void *cb_data); -void qemu_add_balloon_handler(QEMUBalloonEvent *event_func, - QEMUBalloonStatus *stat_func, void *opaque); +int qemu_add_balloon_handler(QEMUBalloonEvent *event_func, + QEMUBalloonStatus *stat_func, void *opaque); void monitor_print_balloon(Monitor *mon, const QObject *data); int do_info_balloon(Monitor *mon, MonitorCompletion cb, void *opaque); |