Messages in this thread | | | Date | Sun, 04 Nov 2007 15:36:37 -0800 | From | "H. Peter Anvin" <> | Subject | Re: [GIT PULL] x86 setup: correct booting on 486DX4 |
| |
Linus Torvalds wrote: > > On Sun, 4 Nov 2007, Linus Torvalds wrote: >> I'm not entirely sure that it needs to be a long-jump, btw. I think any >> regular branch is sufficient. You obviously *do* need to make the long >> jump later (to reload %cs in protected mode), but I'm not sure it's needed >> in that place. I forget the exact rules (but they definitely were >> documented). > > Hmm. The original Linux code did > > movw $1, %ax > lmsw %ax > jmp flush_instr > flush_instr: > > and I think that was straigh out of the documentation. So yeah, I think > that's the right fix - not a longjmp (which in itself is dangerous: it > potentially behaves *differently* on different CPU's, since some CPU's may > do the long jump with pre-protected-mode semantics, while others will do > it with protected mode already in effect!) >
Just looked it up; it was a bit hard to find (it is Intel vol 3 page 9-27, at least in the version I have), but you're right -- the documentation only demands a short jump here, not a long jmp (which actually makes sense given what I remembered that a long jump should be deferrable here.) So yes, that is definitely the right fix and avoids the ugly mixing of code.
I'll update the patch.
-hpa - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |