mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 18:23:57 -06:00
pci: Convert msix_init() to Error and fix callers
msix_init() reports errors with error_report(), which is wrong when
it's used in realize(). The same issue was fixed for msi_init() in
commit 1108b2f
. In order to make the API change as small as possible,
leave the return value check to later patch.
For some devices(like e1000e, vmxnet3, nvme) who won't fail because of
msix_init's failure, suppress the error report by passing NULL error
object.
Bonus: add comment for msix_init.
CC: Jiri Pirko <jiri@resnulli.us>
CC: Gerd Hoffmann <kraxel@redhat.com>
CC: Dmitry Fleytman <dmitry@daynix.com>
CC: Jason Wang <jasowang@redhat.com>
CC: Michael S. Tsirkin <mst@redhat.com>
CC: Hannes Reinecke <hare@suse.de>
CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Alex Williamson <alex.williamson@redhat.com>
CC: Markus Armbruster <armbru@redhat.com>
CC: Marcel Apfelbaum <marcel@redhat.com>
Signed-off-by: Cao jin <caoj.fnst@cn.fujitsu.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
20729dbd01
commit
ee640c625e
12 changed files with 58 additions and 24 deletions
|
@ -749,13 +749,13 @@ static void ivshmem_reset(DeviceState *d)
|
|||
}
|
||||
}
|
||||
|
||||
static int ivshmem_setup_interrupts(IVShmemState *s)
|
||||
static int ivshmem_setup_interrupts(IVShmemState *s, Error **errp)
|
||||
{
|
||||
/* allocate QEMU callback data for receiving interrupts */
|
||||
s->msi_vectors = g_malloc0(s->vectors * sizeof(MSIVector));
|
||||
|
||||
if (ivshmem_has_feature(s, IVSHMEM_MSI)) {
|
||||
if (msix_init_exclusive_bar(PCI_DEVICE(s), s->vectors, 1)) {
|
||||
if (msix_init_exclusive_bar(PCI_DEVICE(s), s->vectors, 1, errp)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -898,8 +898,8 @@ static void ivshmem_common_realize(PCIDevice *dev, Error **errp)
|
|||
qemu_chr_fe_set_handlers(&s->server_chr, ivshmem_can_receive,
|
||||
ivshmem_read, NULL, s, NULL, true);
|
||||
|
||||
if (ivshmem_setup_interrupts(s) < 0) {
|
||||
error_setg(errp, "failed to initialize interrupts");
|
||||
if (ivshmem_setup_interrupts(s, errp) < 0) {
|
||||
error_prepend(errp, "Failed to initialize interrupts: ");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue