• Matthew Garrett's avatar
    x86: Reorder reboot method preferences · 660e34ce
    Matthew Garrett authored
    We have a never ending stream of 'reboot quirks' for new boxes
    that will not reboot properly under Linux (they will hang on
    reboot).
    
    The reason is widespread 'Windows compatible' assumption of modern
    x86 hardware, which expects the following reboot sequence:
    
     - hitting the ACPI reboot vector (if available)
     - trying the keyboard controller
     - hitting the ACPI reboot vector again
     - then giving the keyboard controller one last go
    
    This sequence expectation gets more and more embedded in modern
    hardware, which often lacks a keyboard controller and may even
    lock up if the legacy io ports are hit - and which hardware is
    often not tested with Linux during development.
    
    The end result is that reboot works under Windows-alike OSs but not
    under Linux.
    
    Rework our reboot process to meet this hardware externality a little
    better and match this assumption of newer x86 hardware.
    
    In addition to the ACPI,kbd,ACPI,kbd sequence we'll still fall
    through to attempting a legacy triple fault if nothing else
    works - and keep trying that and the kbd reset.
    Signed-off-by: default avatarMatthew Garrett <mjg@redhat.com>
    [ this commit will also save special casing Oaktrail boards ]
    Acked-by: default avatarAlan Cox <alan@linux.intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Leann Ogasawara <leann.ogasawara@canonical.com>
    Cc: Dave Jones <davej@redhat.com>
    Cc: Len Brown <len.brown@intel.com>
    LKML-Reference: <1301939705-2404-1-git-send-email-mjg@redhat.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    660e34ce
reboot.c 19.4 KB