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. Miles Fidelman -- In theory, there is no difference between theory and practice. In practice, there is. .... Yogi Berra _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies