xics: report errors with the QEMU Error API
commita005b3ef50439b5bc6b2eb0b5bda8e8c7c2368bf
authorGreg Kurz <gkurz@linux.vnet.ibm.com>
Fri, 26 Feb 2016 09:44:07 +0000 (26 10:44 +0100)
committerDavid Gibson <david@gibson.dropbear.id.au>
Sun, 28 Feb 2016 05:19:02 +0000 (28 16:19 +1100)
treef85003e9eefe79a947415dd3cca69a6f3293cd9f
parent902c053d834e3b802ec736f170edf226d4a841ff
xics: report errors with the QEMU Error API

Using the return value to report errors is error prone:
- xics_alloc() returns -1 on error but spapr_vio_busdev_realize() errors
  on 0
- xics_alloc_block() returns the unclear value of ics->offset - 1 on error
  but both rtas_ibm_change_msi() and spapr_phb_realize() error on 0

This patch adds an errp argument to xics_alloc() and xics_alloc_block() to
report errors. The return value of these functions is a valid IRQ number
if errp is NULL. It is undefined otherwise.

The corresponding error traces get promotted to error messages. Note that
the "can't allocate IRQ" error message in spapr_vio_busdev_realize() also
moves to xics_alloc(). Similar error message consolidation isn't really
applicable to xics_alloc_block() because callers have extra context (device
config address, MSI or MSIX).

This fixes the issues mentioned above.

Based on previous work from Brian W. Hart.

Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
hw/intc/xics.c
hw/ppc/spapr_events.c
hw/ppc/spapr_pci.c
hw/ppc/spapr_vio.c
include/hw/ppc/xics.h
trace-events