pci-assign: propagate Error from check_irqchip_in_kernel()
Rename check_irqchip_in_kernel() to verify_irqchip_in_kernel(), so that the name reflects our expectation better. Rather than returning a bool, make it do nothing or set an Error. Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
bcdcf75d62
commit
665f119fba
|
@ -841,14 +841,12 @@ static int assign_device(AssignedDevice *dev)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool check_irqchip_in_kernel(void)
|
static void verify_irqchip_in_kernel(Error **errp)
|
||||||
{
|
{
|
||||||
if (kvm_irqchip_in_kernel()) {
|
if (kvm_irqchip_in_kernel()) {
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
error_report("pci-assign: error: requires KVM with in-kernel irqchip "
|
error_setg(errp, "pci-assign requires KVM with in-kernel irqchip enabled");
|
||||||
"enabled");
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int assign_intx(AssignedDevice *dev)
|
static int assign_intx(AssignedDevice *dev)
|
||||||
|
@ -857,6 +855,7 @@ static int assign_intx(AssignedDevice *dev)
|
||||||
PCIINTxRoute intx_route;
|
PCIINTxRoute intx_route;
|
||||||
bool intx_host_msi;
|
bool intx_host_msi;
|
||||||
int r;
|
int r;
|
||||||
|
Error *local_err = NULL;
|
||||||
|
|
||||||
/* Interrupt PIN 0 means don't use INTx */
|
/* Interrupt PIN 0 means don't use INTx */
|
||||||
if (assigned_dev_pci_read_byte(&dev->dev, PCI_INTERRUPT_PIN) == 0) {
|
if (assigned_dev_pci_read_byte(&dev->dev, PCI_INTERRUPT_PIN) == 0) {
|
||||||
|
@ -864,7 +863,10 @@ static int assign_intx(AssignedDevice *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!check_irqchip_in_kernel()) {
|
verify_irqchip_in_kernel(&local_err);
|
||||||
|
if (local_err) {
|
||||||
|
error_report("%s", error_get_pretty(local_err));
|
||||||
|
error_free(local_err);
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1241,6 +1243,7 @@ static int assigned_device_pci_cap_init(PCIDevice *pci_dev)
|
||||||
AssignedDevice *dev = DO_UPCAST(AssignedDevice, dev, pci_dev);
|
AssignedDevice *dev = DO_UPCAST(AssignedDevice, dev, pci_dev);
|
||||||
PCIRegion *pci_region = dev->real_device.regions;
|
PCIRegion *pci_region = dev->real_device.regions;
|
||||||
int ret, pos;
|
int ret, pos;
|
||||||
|
Error *local_err = NULL;
|
||||||
|
|
||||||
/* Clear initial capabilities pointer and status copied from hw */
|
/* Clear initial capabilities pointer and status copied from hw */
|
||||||
pci_set_byte(pci_dev->config + PCI_CAPABILITY_LIST, 0);
|
pci_set_byte(pci_dev->config + PCI_CAPABILITY_LIST, 0);
|
||||||
|
@ -1252,7 +1255,10 @@ static int assigned_device_pci_cap_init(PCIDevice *pci_dev)
|
||||||
* MSI capability is the 1st capability in capability config */
|
* MSI capability is the 1st capability in capability config */
|
||||||
pos = pci_find_cap_offset(pci_dev, PCI_CAP_ID_MSI, 0);
|
pos = pci_find_cap_offset(pci_dev, PCI_CAP_ID_MSI, 0);
|
||||||
if (pos != 0 && kvm_check_extension(kvm_state, KVM_CAP_ASSIGN_DEV_IRQ)) {
|
if (pos != 0 && kvm_check_extension(kvm_state, KVM_CAP_ASSIGN_DEV_IRQ)) {
|
||||||
if (!check_irqchip_in_kernel()) {
|
verify_irqchip_in_kernel(&local_err);
|
||||||
|
if (local_err) {
|
||||||
|
error_report("%s", error_get_pretty(local_err));
|
||||||
|
error_free(local_err);
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
dev->cap.available |= ASSIGNED_DEVICE_CAP_MSI;
|
dev->cap.available |= ASSIGNED_DEVICE_CAP_MSI;
|
||||||
|
@ -1281,7 +1287,10 @@ static int assigned_device_pci_cap_init(PCIDevice *pci_dev)
|
||||||
int bar_nr;
|
int bar_nr;
|
||||||
uint32_t msix_table_entry;
|
uint32_t msix_table_entry;
|
||||||
|
|
||||||
if (!check_irqchip_in_kernel()) {
|
verify_irqchip_in_kernel(&local_err);
|
||||||
|
if (local_err) {
|
||||||
|
error_report("%s", error_get_pretty(local_err));
|
||||||
|
error_free(local_err);
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
dev->cap.available |= ASSIGNED_DEVICE_CAP_MSIX;
|
dev->cap.available |= ASSIGNED_DEVICE_CAP_MSIX;
|
||||||
|
|
Loading…
Reference in New Issue