From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:54201) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qly7N-0004S3-16 for qemu-devel@nongnu.org; Wed, 27 Jul 2011 03:01:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qly7L-0005Ok-PJ for qemu-devel@nongnu.org; Wed, 27 Jul 2011 03:01:20 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53606) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qly7L-0005OH-G3 for qemu-devel@nongnu.org; Wed, 27 Jul 2011 03:01:19 -0400 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p6R71Fcv005845 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 27 Jul 2011 03:01:15 -0400 From: Amit Shah Date: Wed, 27 Jul 2011 12:31:07 +0530 Message-Id: <437e364393661cf06deaad6f29f1039d3a672d1d.1311750065.git.amit.shah@redhat.com> Subject: [Qemu-devel] [PATCH 1/2] balloon: Don't allow multiple balloon handler registrations List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu list Cc: Amit Shah , Markus Armbruster Multiple balloon devices don't make sense; disallow more than one registration attempt to register handlers. Signed-off-by: Amit Shah --- balloon.c | 11 +++++++++-- balloon.h | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/balloon.c b/balloon.c index a938475..cf9e3b2 100644 --- a/balloon.c +++ b/balloon.c @@ -36,12 +36,19 @@ 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? + */ + 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 a6c31d5..3df14e6 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); -- 1.7.6