Xen dom0 "interrupt storm detected on "irq16:"; throttling interrupt source"
Roger Pau Monné
roger.pau at citrix.com
Fri May 15 16:28:56 UTC 2015
El 15/05/15 a les 16.42, Eggert, Lars ha escrit:
> On 2015-5-15, at 16:35, Roger Pau Monné <roger.pau at citrix.com> wrote:
>>
>> Yes, but I've realized that isci for example passes an uint32_t instead
>> of an int, so it might be best to set it to 0.
>
> Here is what I see now:
>
> isci0: <Intel(R) C600 Series Chipset SAS Controller (SATA mode)> port 0x6000-0x60ff mem 0xde07c000-0xde07ffff,0xddc00000-0xddffffff irq 16 at device 0.0 on pci10
> isci0: attempting to allocate 2 MSI-X vectors (2 supported)
> ISCI: isci->num_interrupts: 2 max_msix_messages: 2
> isci: 1:000089 ISCI bus_alloc_resource failed
>
> The storm is still there.
Yes, after looking at the code, isci really needs to check for the
return value of pci_alloc_msix, because num_interrupts is not updated
if the allocation fails. Following patch should hopefully fix it,
please give it a try.
Roger.
---
diff --git a/sys/dev/isci/isci_interrupt.c b/sys/dev/isci/isci_interrupt.c
index 52c64f7..f331f3c 100644
--- a/sys/dev/isci/isci_interrupt.c
+++ b/sys/dev/isci/isci_interrupt.c
@@ -128,6 +128,7 @@ isci_interrupt_setup(struct isci_softc *isci)
isci->controller_count;
BOOL use_msix = FALSE;
uint32_t force_legacy_interrupts = 0;
+ int rc;
TUNABLE_INT_FETCH("hw.isci.force_legacy_interrupts",
&force_legacy_interrupts);
@@ -136,8 +137,8 @@ isci_interrupt_setup(struct isci_softc *isci)
pci_msix_count(isci->device) >= max_msix_messages) {
isci->num_interrupts = max_msix_messages;
- pci_alloc_msix(isci->device, &isci->num_interrupts);
- if (isci->num_interrupts == max_msix_messages)
+ rc = pci_alloc_msix(isci->device, &isci->num_interrupts);
+ if (rc == 0 && isci->num_interrupts == max_msix_messages)
use_msix = TRUE;
}
More information about the freebsd-xen
mailing list