Messages in this thread Patch in this message | | | Date | Mon, 4 Feb 2008 16:36:31 +0100 | From | Ingo Molnar <> | Subject | Re: Commit f06e4ec breaks vmware |
| |
* Jeff Chua <jeff.chua.linux@gmail.com> wrote:
> On Feb 4, 2008 10:53 PM, Ingo Molnar <mingo@elte.hu> wrote: > > > commit 8d947344c47a40626730bb80d136d8daac9f2060 > > > Author: Glauber de Oliveira Costa <gcosta@redhat.com> > > > Date: Wed Jan 30 13:31:12 2008 +0100 > > > > > > x86: change write_idt_entry signature > > > > does the patch below ontop of x86.git#mm fix this? > > > > 32-bit or 64-bit guest kernel? > > 32-bit. > > Yep, this fixed the problem.
great! I've added:
Tested-by: Jeff Chua <jeff.chua.linux@gmail.com>
to the commit message as well, if you dont mind. Full patch is below.
> You're amazingly fast!
you did all the hard work by bisecting it down so fast - fixing it was easy :)
Ingo
-----------------------> Subject: x86: VMI fix From: Ingo Molnar <mingo@elte.hu>
Jeff Chua bisected down a vmware guest boot breakage (hang) to this paravirt change:
commit 8d947344c47a40626730bb80d136d8daac9f2060 Author: Glauber de Oliveira Costa <gcosta@redhat.com> Date: Wed Jan 30 13:31:12 2008 +0100
x86: change write_idt_entry signature
fix the off-by-one indexing bug ...
Bisected-by: Jeff Chua <jeff.chua.linux@gmail.com> Tested-by: Jeff Chua <jeff.chua.linux@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> --- arch/x86/kernel/vmi_32.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
Index: linux-x86.q/arch/x86/kernel/vmi_32.c =================================================================== --- linux-x86.q.orig/arch/x86/kernel/vmi_32.c +++ linux-x86.q/arch/x86/kernel/vmi_32.c @@ -220,21 +220,21 @@ static void vmi_set_tr(void) static void vmi_write_idt_entry(gate_desc *dt, int entry, const gate_desc *g) { u32 *idt_entry = (u32 *)g; - vmi_ops.write_idt_entry(dt, entry, idt_entry[0], idt_entry[2]); + vmi_ops.write_idt_entry(dt, entry, idt_entry[0], idt_entry[1]); } static void vmi_write_gdt_entry(struct desc_struct *dt, int entry, const void *desc, int type) { u32 *gdt_entry = (u32 *)desc; - vmi_ops.write_gdt_entry(dt, entry, gdt_entry[0], gdt_entry[2]); + vmi_ops.write_gdt_entry(dt, entry, gdt_entry[0], gdt_entry[1]); } static void vmi_write_ldt_entry(struct desc_struct *dt, int entry, const void *desc) { u32 *ldt_entry = (u32 *)desc; - vmi_ops.write_idt_entry(dt, entry, ldt_entry[0], ldt_entry[2]); + vmi_ops.write_idt_entry(dt, entry, ldt_entry[0], ldt_entry[1]); } static void vmi_load_sp0(struct tss_struct *tss,
| |