The initial version of this patch had %eax being a segment and %ecx
being the mode.  I had changed the interfaces, but not the actual
implementation!
Reported-by: Brian Gerst <brgerst@gmail.com>
LKML-Reference: <AANLkTikxqk=HEw9R-Du=v-1ti1HDGAY9vaNUep2XARaz@mail.gmail.com>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Cc: Matthieu Castet <castet.matthieu@free.fr>
 1:     popl    %ebx
        subl    $1b, %ebx
 
+       /* Compute the equivalent real-mode segment */
+       movl    %ebx, %ecx
+       shrl    $4, %ecx
+       
        /* Patch post-real-mode segment jump */
-       movw    dispatch_table(%ebx,%ecx,2),%cx
-       movw    %cx, 101f(%ebx)
-       movw    %ax, 102f(%ebx)
+       movw    dispatch_table(%ebx,%eax,2),%ax
+       movw    %ax, 101f(%ebx)
+       movw    %cx, 102f(%ebx)
 
        /* Set up the IDT for real mode. */
        lidtl   machine_real_restart_idt(%ebx)