From 889211b18b8d0acc814fbbe01b986f07b229a8c9 Mon Sep 17 00:00:00 2001 From: Igor Mammedov Date: Thu, 5 May 2016 17:14:37 +0200 Subject: apic: move MAX_APICS check to 'apic' class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MAX_APICS is only used by child 'apic' class and not by its parent TYPE_APIC_COMMON or any other derived class. Move check into end user 'apic' class so it won't get in the way of other APIC implementations if they support more then MAX_APICS. Signed-off-by: Igor Mammedov Reviewed-by: Radim Krčmář Reviewed-by: Michael S. Tsirkin Signed-off-by: Eduardo Habkost --- hw/intc/apic.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'hw/intc/apic.c') diff --git a/hw/intc/apic.c b/hw/intc/apic.c index e1ab9354c6..b0d237b945 100644 --- a/hw/intc/apic.c +++ b/hw/intc/apic.c @@ -28,7 +28,9 @@ #include "trace.h" #include "hw/i386/pc.h" #include "hw/i386/apic-msidef.h" +#include "qapi/error.h" +#define MAX_APICS 255 #define MAX_APIC_WORDS 8 #define SYNC_FROM_VAPIC 0x1 @@ -869,6 +871,14 @@ static const MemoryRegionOps apic_io_ops = { static void apic_realize(DeviceState *dev, Error **errp) { APICCommonState *s = APIC_COMMON(dev); + static int apic_no; + + if (apic_no >= MAX_APICS) { + error_setg(errp, "%s initialization failed.", + object_get_typename(OBJECT(dev))); + return; + } + s->idx = apic_no++; memory_region_init_io(&s->io_memory, OBJECT(s), &apic_io_ops, s, "apic-msi", APIC_SPACE_SIZE); -- cgit v1.2.1