[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] x86/apic: Avoid infinite loop in io_apic_level_ack_pending()
On 2025-10-15 08:59, Jan Beulich wrote: On 14.10.2025 09:37, Roger Pau Monné wrote:On Mon, Oct 13, 2025 at 05:11:06PM -0400, Jason Andryuk wrote:io_apic_level_ack_pending() will end up in an infinite loop if entry->pin == -1. entry does not change, so it will keep reading -1.Do you know how you end up with an entry with pin == -1 on the irq_pin_list? Are there systems with gaps in the GSI space between IO-APICs? So far everything I saw had the IO-APIC in contiguous GSI space.Convert to a proper for loop so that continue works. Add a new helper, next_entry(), to handle advancing to the next irq_pin_list entry. Fixes: f821102450a1 ("x86: IRQ Migration logic enhancement.") Signed-off-by: Jason Andryuk <jason.andryuk@xxxxxxx> --- v2: continue (not break) for pin == -1. I added the next_entry() helper since putting the expression in the for loop is a little cluttered. The helper can also be re-used for other instances within the file.Would this intention ...--- a/xen/arch/x86/io_apic.c +++ b/xen/arch/x86/io_apic.c @@ -1586,14 +1586,21 @@ static int __init cf_check setup_ioapic_ack(const char *s) } custom_param("ioapic_ack", setup_ioapic_ack);+static struct irq_pin_list *next_entry(struct irq_pin_list *entry)I think you can make the entry parameter const?... possibly conflict with such a change? I changed only the parameter to const, and the return value is still non-const. So I think that will be re-usable. I placed next_entry() immediately before its use in io_apic_level_ack_pending(). It would need to be earlier in the file to be used more. Should I move its addition earlier? And another Minor question. Roger asked for ~Linux style in the for loop. But in next_entry() I have Xen style: if ( !entry->next ) Should I switch to: if (!entry->next) ? Thanks, Jason
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |