On 04/04/2012 07:18 PM, Miles Fidelman wrote: > Jim Cromie wrote: >> On Tue, Apr 3, 2012 at 9:22 PM, Miles Fidelman >> <mfidelman@xxxxxxxxxxxxxxxx> wrote: >>> Hello Folks, >>> >>> Perhaps someone here can help me understand the behavior of the kernel reboot code. >>> >>> I've recently migrated from running a 32bit kernel to a 64bit one >>> (specifically Debian Lenny 32bit environment to 2.6.32-5-xen-amd64 on >>> top of xen-4.0-amd64 hypervisor build). >>> >>> This is a somewhat older, and apparently quirky, hardware box. I've >>> found that the only way to reboot it, short of power cycling, is jumping >>> through the bios - using the "reboot=bios" kernel option at boot time >>> works just fine for an X86_32 kernel. But... this doesn't work with the >>> 64bit kernel. >>> >>> Pouring through both the documentation and the code for >>> arch/x86/kernel/reboot.c yields the very specific admonition (in comments >>> describing command-line kernel options), that reboot=bios (Reboot by jumping >>> through the BIOS) only applies to X86_32 - and the case statements in the >>> code seem to align with the comment. >>> >>> None of the other available command line options seem to work with my >>> hardware, which leads to two questions: >>> >>> 1. What's the logic behind this? Why not enable a bios reboot for 64bit >>> kernels? Anybody know the history? >>> >>> 2. Anybody know a workaround, short of patching and compiling a custom >>> kernel? Are there other paths through the reboot code that can invoke a bios >>> reboot? (Note: None of the available command line options seem to work on >>> this particular box/bios combination, and kexec-reboot is not available >>> for this combination of kernel and hypervisor). >>> >> perhaps you should try a non-hypervisor kernel. >> I have no experience with one, but it could be the issue. >> Virtualization developers tend to have big fast modern boxes, >> and as you say, yours isnt so modern. > > It's not related to the hypervisor - I've tried. > > It's related specifically to the quirks of this particular machine/bios > combination. At this point, it's more an itch I'm trying to scratch, > this is a sandbox machine under my desk, not one of our production boxes > - it's easy enough to shutdown then hit the power button. > > But... it really raises the question: Why does the reboot.c code only > support reboot=bios (switch to real mode, set up a few memory locations, > jump into the bios) for X86_32, and not for X86_64. The hardware and > bios don't change when loading a 64-bit kernel, or am I missing something? > > SOMEBODY wrote that code. SOMEBODY should know the logic. But... I've > drawn a blank so far. > I suggest you post this issue on lkml, with CC to the authors/maintainers of the code, which would be the following list, as per get_maintainer.pl: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Ingo Molnar <mingo@xxxxxxxxxx> "H. Peter Anvin" <hpa@xxxxxxxxx> x86@xxxxxxxxxx Peter Chubb <peter.chubb@xxxxxxxxxxxx> Michael D Labriola <michael.d.labriola@xxxxxxxxx> Matthew Garrett <mjg@xxxxxxxxxx> linux-kernel@xxxxxxxxxxxxxxx Regards, Srivatsa S. Bhat _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies