diff options
author | Kirill Batuzov <batuzovk@ispras.ru> | 2014-04-24 18:15:56 +0400 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2014-05-07 12:13:42 +0300 |
commit | 7c38ecd09763107513bacc791856fdbb582a107c (patch) | |
tree | 9688dde552fbf182ef80bf5d7ac5937774dd6a47 /hw/acpi | |
parent | 9898370497da3f18e0c9555b65c858eabc78ab50 (diff) | |
download | qemu-7c38ecd09763107513bacc791856fdbb582a107c.zip qemu-7c38ecd09763107513bacc791856fdbb582a107c.tar.gz qemu-7c38ecd09763107513bacc791856fdbb582a107c.tar.bz2 |
acpi/pcihp.c: Rewrite acpi_pcihp_get_bsel using object_property_get_int
acpi_pcihp_get_bsel implements functionality of object_property_get_int for
specific property named ACPI_PCIHP_PROP_BSEL, but fails to decrement object's
reference counter properly. Rewriting it using generic object_property_get_int
serves two purposes: reducing code duplication and fixing memory leak.
Signed-off-by: Kirill Batuzov <batuzovk@ispras.ru>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw/acpi')
-rw-r--r-- | hw/acpi/pcihp.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c index f80c480..3b143b3 100644 --- a/hw/acpi/pcihp.c +++ b/hw/acpi/pcihp.c @@ -63,16 +63,18 @@ typedef struct AcpiPciHpFind { static int acpi_pcihp_get_bsel(PCIBus *bus) { - QObject *o = object_property_get_qobject(OBJECT(bus), - ACPI_PCIHP_PROP_BSEL, NULL); - int64_t bsel = -1; - if (o) { - bsel = qint_get_int(qobject_to_qint(o)); - } - if (bsel < 0) { + Error *local_err = NULL; + int64_t bsel = object_property_get_int(OBJECT(bus), ACPI_PCIHP_PROP_BSEL, + &local_err); + + if (local_err || bsel < 0 || bsel >= ACPI_PCIHP_MAX_HOTPLUG_BUS) { + if (local_err) { + error_free(local_err); + } return -1; + } else { + return bsel; } - return bsel; } static void acpi_pcihp_test_hotplug_bus(PCIBus *bus, void *opaque) |