sysbus: Don't use hw_error() in machine_init_done_notifiers
platform_bus_map_irq() and platform_bus_map_mmio() use hw_error() to fail. They run in machine_init_done_notifiers, via platform_bus_init_notify() and link_sysbus_device(). Printing CPU registers is not helpful there. Replace hw_error() by error_report(); exit(1). If these are programming errors, it should be replaced by an assertion instead. While there, observe that both functions always return 0, and link_sysbus_device() ignores the return value. Change them to void. Cc: Alexander Graf <agraf@suse.de> Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Message-Id: <1450370121-5768-9-git-send-email-armbru@redhat.com>
This commit is contained in:
parent
7b55044f9d
commit
c72fbf98cb
@ -21,6 +21,7 @@
|
||||
|
||||
#include "hw/platform-bus.h"
|
||||
#include "exec/address-spaces.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
|
||||
|
||||
@ -106,31 +107,29 @@ static void plaform_bus_refresh_irqs(PlatformBusDevice *pbus)
|
||||
pbus->done_gathering = true;
|
||||
}
|
||||
|
||||
static int platform_bus_map_irq(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
||||
int n)
|
||||
static void platform_bus_map_irq(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
||||
int n)
|
||||
{
|
||||
int max_irqs = pbus->num_irqs;
|
||||
int irqn;
|
||||
|
||||
if (sysbus_is_irq_connected(sbdev, n)) {
|
||||
/* IRQ is already mapped, nothing to do */
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
irqn = find_first_zero_bit(pbus->used_irqs, max_irqs);
|
||||
if (irqn >= max_irqs) {
|
||||
hw_error("Platform Bus: Can not fit IRQ line");
|
||||
return -1;
|
||||
error_report("Platform Bus: Can not fit IRQ line");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
set_bit(irqn, pbus->used_irqs);
|
||||
sysbus_connect_irq(sbdev, n, pbus->irqs[irqn]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int platform_bus_map_mmio(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
||||
int n)
|
||||
static void platform_bus_map_mmio(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
||||
int n)
|
||||
{
|
||||
MemoryRegion *sbdev_mr = sysbus_mmio_get_region(sbdev, n);
|
||||
uint64_t size = memory_region_size(sbdev_mr);
|
||||
@ -140,7 +139,7 @@ static int platform_bus_map_mmio(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
||||
|
||||
if (memory_region_is_mapped(sbdev_mr)) {
|
||||
/* Region is already mapped, nothing to do */
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -155,13 +154,13 @@ static int platform_bus_map_mmio(PlatformBusDevice *pbus, SysBusDevice *sbdev,
|
||||
}
|
||||
|
||||
if (!found_region) {
|
||||
hw_error("Platform Bus: Can not fit MMIO region of size %"PRIx64, size);
|
||||
error_report("Platform Bus: Can not fit MMIO region of size %"PRIx64,
|
||||
size);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Map the device's region into our Platform Bus MMIO space */
|
||||
memory_region_add_subregion(&pbus->mmio, off, sbdev_mr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user