[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 3/3] xen/x86: ioapic: Simplify ioapic_init()
On 31.03.2020 13:51, Julien Grall wrote: > Hi Jan, > > On 31/03/2020 12:22, Jan Beulich wrote: >> On 27.03.2020 20:05, Julien Grall wrote: >>> --- a/xen/arch/x86/io_apic.c >>> +++ b/xen/arch/x86/io_apic.c >>> @@ -2537,34 +2537,25 @@ static __init bool bad_ioapic_register(unsigned int >>> idx) >>> return false; >>> } >>> -void __init init_ioapic(void) >>> +static void __init init_ioapic_mappings(void) >>> { >>> - unsigned long ioapic_phys; >>> unsigned int i, idx = FIX_IO_APIC_BASE_0; >>> - union IO_APIC_reg_01 reg_01; >>> - if ( smp_found_config ) >>> - nr_irqs_gsi = 0; >>> for ( i = 0; i < nr_ioapics; i++ ) >>> { >>> - if ( smp_found_config ) >>> - { >>> - ioapic_phys = mp_ioapics[i].mpc_apicaddr; >>> - if ( !ioapic_phys ) >>> - { >>> - printk(KERN_ERR "WARNING: bogus zero IO-APIC address " >>> - "found in MPTABLE, disabling IO/APIC support!\n"); >>> - smp_found_config = false; >>> - skip_ioapic_setup = true; >>> - goto fake_ioapic_page; >>> - } >>> - } >>> - else >>> + union IO_APIC_reg_01 reg_01; >>> + unsigned long ioapic_phys = mp_ioapics[i].mpc_apicaddr; >>> + >>> + ioapic_phys = mp_ioapics[i].mpc_apicaddr; >>> + if ( !ioapic_phys ) >>> { >>> - fake_ioapic_page: >>> - ioapic_phys = __pa(alloc_xenheap_page()); >>> - clear_page(__va(ioapic_phys)); >>> + printk(KERN_ERR >>> + "WARNING: bogus zero IO-APIC address found in MPTABLE, >>> disabling IO/APIC support!\n"); >>> + smp_found_config = false; >>> + skip_ioapic_setup = true; >>> + break; >>> } >>> + >>> set_fixmap_nocache(idx, ioapic_phys); >>> apic_printk(APIC_VERBOSE, "mapped IOAPIC to %08Lx (%08lx)\n", >>> __fix_to_virt(idx), ioapic_phys); >>> @@ -2576,18 +2567,24 @@ void __init init_ioapic(void) >>> continue; >>> } >>> - if ( smp_found_config ) >>> - { >>> - /* The number of IO-APIC IRQ registers (== #pins): */ >>> - reg_01.raw = io_apic_read(i, 1); >>> - nr_ioapic_entries[i] = reg_01.bits.entries + 1; >>> - nr_irqs_gsi += nr_ioapic_entries[i]; >>> - >>> - if ( rangeset_add_singleton(mmio_ro_ranges, >>> - ioapic_phys >> PAGE_SHIFT) ) >>> - printk(KERN_ERR "Failed to mark IO-APIC page %lx >>> read-only\n", >>> - ioapic_phys); >>> - } >>> + /* The number of IO-APIC IRQ registers (== #pins): */ >>> + reg_01.raw = io_apic_read(i, 1); >>> + nr_ioapic_entries[i] = reg_01.bits.entries + 1; >>> + nr_irqs_gsi += nr_ioapic_entries[i]; >>> + >>> + if ( rangeset_add_singleton(mmio_ro_ranges, >>> + ioapic_phys >> PAGE_SHIFT) ) >>> + printk(KERN_ERR "Failed to mark IO-APIC page %lx read-only\n", >>> + ioapic_phys); >>> + } >>> +} >>> + >>> +void __init init_ioapic(void) >>> +{ >>> + if ( smp_found_config ) >>> + { >>> + nr_irqs_gsi = 0; >> >> This would seem to also belong into the function, e.g. as part of >> the loop header: >> >> for ( nr_irqs_gsi = i = 0; i < nr_ioapics; i++ ) > > While the initial value of the 'i' and 'nr_irqs_gsi' is the same, > the variables have very different meaning and may confuse the reader. I expected reservations like this, hence the "e.g."; i.e. ... > So I would rather not follow your suggestion here. Although, I can > move the zeroing right before the for loop. ... I'm fine with this as well. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |