• Thomas Gleixner's avatar
    ACPI/PAD: Remove the local APIC nonsense · 3ff70551
    Thomas Gleixner authored
    While looking through the (ab)use of the clockevents_notify()
    function I stumbled over the following gem in the acpi_pad code:
    
      if (lapic_detected_unstable && !lapic_marked_unstable) {
         /* LAPIC could halt in idle, so notify users */
         for_each_online_cpu(i)
           clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ON, &i);
         lapic_marked_unstable = 1;
      }
    
    This code calls on the cpu which detects the lapic unstable
    condition first clockevents_notify() to tell the core code that
    the broadcast should be enabled on all online cpus. Brilliant
    stuff that as it notifies the core code a num_online_cpus()
    times that the broadcast should be enabled on the current cpu.
    
    This probably has never been noticed because that code got never
    tested with NOHZ=n and HIGHRES_TIMER=n or it just worked by
    chance because one of the other mechanisms told the core in the
    right way that the local apic timer is wreckaged.
    
    Sigh, this is:
    
     - The 4th incarnation of idle drivers which has their own mechanism
       to detect and deal with X86_FEATURE_ARAT.
    
     - The 2nd incarnation of fake idle mechanisms with a different set of
       brainmelting bugs.
    
     - Has been merged against an explicit NAK of the scheduler
       maintainer with the promise to improve it over time.
    
     - Another example of featuritis driven trainwreck engineering.
    
     - Another pointless waste of my time.
    
    Fix this nonsense by removing that lapic detection and
    notification logic and simply call into the clockevents code
    unconditonally. The ARAT feature is marked in the lapic
    clockevent already so the core code will just ignore the
    requests and return.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/1887788.RObRuI4tSv@vostro.rjw.lanSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    3ff70551
acpi_pad.c 12.6 KB