[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 Wed, Oct 15, 2025 at 01:14:20PM -0400, Jason Andryuk wrote: > 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) > > ? IMO for complete functions newly introduced it's fine to use Xen style, I don't think we will ever import anything else from Linux to this file, we have already diverged too much. Regards, Roger.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |