From eaa8b2778c182c8f795970dd46fef5b039fb741c Mon Sep 17 00:00:00 2001 From: Amit Shah Date: Wed, 27 Jul 2011 12:28:19 +0530 Subject: 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 Reviewed-by: Markus Armbruster Acked-by: Michael S. Tsirkin --- balloon.c | 12 ++++++++++-- balloon.h | 4 ++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/balloon.c b/balloon.c index a938475270..5200565cb2 100644 --- a/balloon.c +++ b/balloon.c @@ -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) diff --git a/balloon.h b/balloon.h index a6c31d587c..3df14e645a 100644 --- a/balloon.h +++ b/balloon.h @@ -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); -- cgit v1.2.1