Subject: Re: [PATCH 2/2] acpi: Disable IRQ 0 through I/O APIC for some HP systems

From: "Rafael J. Wysocki" <[email-masked]>
Date: Mon, 7 Jul 2008 22:17:23 +0200

On Monday, 7 of July 2008, Maciej W. Rozycki wrote:
> On Mon, 7 Jul 2008, Rafael J. Wysocki wrote:
> 
> > @@ -1714,12 +1721,14 @@ static inline void __init check_timer(vo
> >  		apic2 = apic1;
> >  	}
> >  
> > -	replace_pin_at_irq(0, 0, 0, apic1, pin1);
> > -	apic1 = 0;
> > -	pin1 = 0;
> > -	setup_timer_IRQ0_pin(apic1, pin1, cfg->vector);
> > +	if (disable_irq0_through_ioapic) {
> > +		clear_IO_APIC_pin(apic1, pin1);
> > +	} else {
> > +		replace_pin_at_irq(0, 0, 0, apic1, pin1);
> > +		apic1 = 0;
> > +		pin1 = 0;
> > +		setup_timer_IRQ0_pin(apic1, pin1, cfg->vector);
> >  
> > -	if (pin1 != -1) {
> >  		/*
> >  		 * Ok, does IRQ0 through the IOAPIC work?
> >  		 */
> 
>  This is completely broken -- you cannot blindly assume IRQ0 is wired to
> the pin #0 of the I/O APIC #0.  You have to respect routing information
> provided by the system.
> 
>  Ingo, from the sequence above, I gather this code is currently in the 
> tree:
> 
> -	replace_pin_at_irq(0, 0, 0, apic1, pin1);
> -	apic1 = 0;
> -	pin1 = 0;
> 
> Please revert the change which introduced it.  While I recall posting a
> patch which added code like this, I clearly stated it was solely for
> diagnostics of Rafael's system and not to apply to any tree.

Shouldn't the setup_timer_IRQ0_pin(apic1, pin1, cfg->vector) be removed as
well?

Rafael