From 9127dbcc5706f97698f12201bfdd1c4825c2b080 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 11 Mar 2010 19:16:36 -0800 Subject: [PATCH] delete a broken kvm patch from .33 and .32 --- ...ring-privilege-instruction-emulation.patch | 4 +- .../kvm-x86-emulator-fix-popf-emulation.patch | 103 ------------------ queue-2.6.32/series | 1 - ...ring-privilege-instruction-emulation.patch | 4 +- .../kvm-x86-emulator-fix-popf-emulation.patch | 103 ------------------ queue-2.6.33/series | 1 - 6 files changed, 4 insertions(+), 212 deletions(-) delete mode 100644 queue-2.6.32/kvm-x86-emulator-fix-popf-emulation.patch delete mode 100644 queue-2.6.33/kvm-x86-emulator-fix-popf-emulation.patch diff --git a/queue-2.6.32/kvm-x86-emulator-check-cpl-level-during-privilege-instruction-emulation.patch b/queue-2.6.32/kvm-x86-emulator-check-cpl-level-during-privilege-instruction-emulation.patch index 336a4533644..7d8f3d2bf07 100644 --- a/queue-2.6.32/kvm-x86-emulator-check-cpl-level-during-privilege-instruction-emulation.patch +++ b/queue-2.6.32/kvm-x86-emulator-check-cpl-level-during-privilege-instruction-emulation.patch @@ -84,7 +84,7 @@ Signed-off-by: Greg Kroah-Hartman SrcNone | ModRM | DstMem | Mov, 0, SrcMem16 | ModRM | Mov, 0, [Group9*8] = -@@ -1623,12 +1628,6 @@ emulate_sysexit(struct x86_emulate_ctxt +@@ -1573,12 +1578,6 @@ emulate_sysexit(struct x86_emulate_ctxt return -1; } @@ -97,7 +97,7 @@ Signed-off-by: Greg Kroah-Hartman setup_syscalls_segments(ctxt, &cs, &ss); if ((c->rex_prefix & 0x8) != 0x0) -@@ -1692,6 +1691,12 @@ x86_emulate_insn(struct x86_emulate_ctxt +@@ -1642,6 +1641,12 @@ x86_emulate_insn(struct x86_emulate_ctxt memcpy(c->regs, ctxt->vcpu->arch.regs, sizeof c->regs); saved_eip = c->eip; diff --git a/queue-2.6.32/kvm-x86-emulator-fix-popf-emulation.patch b/queue-2.6.32/kvm-x86-emulator-fix-popf-emulation.patch deleted file mode 100644 index 4ec8b55b359..00000000000 --- a/queue-2.6.32/kvm-x86-emulator-fix-popf-emulation.patch +++ /dev/null @@ -1,103 +0,0 @@ -From d4c6a1549c056f1d817e8f6f2f97d8b44933472f Mon Sep 17 00:00:00 2001 -From: Gleb Natapov -Date: Wed, 10 Feb 2010 14:21:34 +0200 -Subject: KVM: x86 emulator: Fix popf emulation - -From: Gleb Natapov - -commit d4c6a1549c056f1d817e8f6f2f97d8b44933472f upstream. - -POPF behaves differently depending on current CPU mode. Emulate correct -logic to prevent guest from changing flags that it can't change otherwise. - -Signed-off-by: Gleb Natapov -Signed-off-by: Avi Kivity -Signed-off-by: Greg Kroah-Hartman - ---- - arch/x86/kvm/emulate.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++- - 1 file changed, 54 insertions(+), 1 deletion(-) - ---- a/arch/x86/kvm/emulate.c -+++ b/arch/x86/kvm/emulate.c -@@ -334,11 +334,18 @@ static u32 group2_table[] = { - }; - - /* EFLAGS bit definitions. */ -+#define EFLG_ID (1<<21) -+#define EFLG_VIP (1<<20) -+#define EFLG_VIF (1<<19) -+#define EFLG_AC (1<<18) - #define EFLG_VM (1<<17) - #define EFLG_RF (1<<16) -+#define EFLG_IOPL (3<<12) -+#define EFLG_NT (1<<14) - #define EFLG_OF (1<<11) - #define EFLG_DF (1<<10) - #define EFLG_IF (1<<9) -+#define EFLG_TF (1<<8) - #define EFLG_SF (1<<7) - #define EFLG_ZF (1<<6) - #define EFLG_AF (1<<4) -@@ -1199,6 +1206,49 @@ static int emulate_pop(struct x86_emulat - return rc; - } - -+static int emulate_popf(struct x86_emulate_ctxt *ctxt, -+ struct x86_emulate_ops *ops, -+ void *dest, int len) -+{ -+ int rc; -+ unsigned long val, change_mask; -+ int iopl = (ctxt->eflags & X86_EFLAGS_IOPL) >> IOPL_SHIFT; -+ int cpl = kvm_x86_ops->get_cpl(ctxt->vcpu); -+ -+ rc = emulate_pop(ctxt, ops, &val, len); -+ if (rc != X86EMUL_CONTINUE) -+ return rc; -+ -+ change_mask = EFLG_CF | EFLG_PF | EFLG_AF | EFLG_ZF | EFLG_SF | EFLG_OF -+ | EFLG_TF | EFLG_DF | EFLG_NT | EFLG_RF | EFLG_AC | EFLG_ID; -+ -+ switch(ctxt->mode) { -+ case X86EMUL_MODE_PROT64: -+ case X86EMUL_MODE_PROT32: -+ case X86EMUL_MODE_PROT16: -+ if (cpl == 0) -+ change_mask |= EFLG_IOPL; -+ if (cpl <= iopl) -+ change_mask |= EFLG_IF; -+ break; -+ case X86EMUL_MODE_VM86: -+ if (iopl < 3) { -+ kvm_inject_gp(ctxt->vcpu, 0); -+ return X86EMUL_PROPAGATE_FAULT; -+ } -+ change_mask |= EFLG_IF; -+ break; -+ default: /* real mode */ -+ change_mask |= (EFLG_IOPL | EFLG_IF); -+ break; -+ } -+ -+ *(unsigned long *)dest = -+ (ctxt->eflags & ~change_mask) | (val & change_mask); -+ -+ return rc; -+} -+ - static inline int emulate_grp1a(struct x86_emulate_ctxt *ctxt, - struct x86_emulate_ops *ops) - { -@@ -1929,7 +1979,10 @@ special_insn: - c->dst.type = OP_REG; - c->dst.ptr = (unsigned long *) &ctxt->eflags; - c->dst.bytes = c->op_bytes; -- goto pop_instruction; -+ rc = emulate_popf(ctxt, ops, &c->dst.val, c->op_bytes); -+ if (rc != X86EMUL_CONTINUE) -+ goto done; -+ break; - case 0xa0 ... 0xa1: /* mov */ - c->dst.ptr = (unsigned long *)&c->regs[VCPU_REGS_RAX]; - c->dst.val = c->src.val; diff --git a/queue-2.6.32/series b/queue-2.6.32/series index eee217356e2..ebc579a1b1d 100644 --- a/queue-2.6.32/series +++ b/queue-2.6.32/series @@ -138,7 +138,6 @@ dm-free-dm_io-before-bio_endio-not-after.patch kvm-x86-emulator-add-group8-instruction-decoding.patch kvm-x86-emulator-forbid-modifying-cs-segment-register-by-mov-instruction.patch kvm-x86-emulator-add-group9-instruction-decoding.patch -kvm-x86-emulator-fix-popf-emulation.patch kvm-x86-emulator-check-cpl-level-during-privilege-instruction-emulation.patch sched-fix-sched_mv_power_savings-for-smt.patch sched-fix-smt-scheduler-regression-in-find_busiest_queue.patch diff --git a/queue-2.6.33/kvm-x86-emulator-check-cpl-level-during-privilege-instruction-emulation.patch b/queue-2.6.33/kvm-x86-emulator-check-cpl-level-during-privilege-instruction-emulation.patch index 210d0cb5154..47c416cb388 100644 --- a/queue-2.6.33/kvm-x86-emulator-check-cpl-level-during-privilege-instruction-emulation.patch +++ b/queue-2.6.33/kvm-x86-emulator-check-cpl-level-during-privilege-instruction-emulation.patch @@ -84,7 +84,7 @@ Signed-off-by: Greg Kroah-Hartman SrcNone | ModRM | DstMem | Mov, 0, SrcMem16 | ModRM | Mov, 0, [Group9*8] = -@@ -1700,12 +1705,6 @@ emulate_sysexit(struct x86_emulate_ctxt +@@ -1650,12 +1655,6 @@ emulate_sysexit(struct x86_emulate_ctxt return -1; } @@ -97,7 +97,7 @@ Signed-off-by: Greg Kroah-Hartman setup_syscalls_segments(ctxt, &cs, &ss); if ((c->rex_prefix & 0x8) != 0x0) -@@ -1769,6 +1768,12 @@ x86_emulate_insn(struct x86_emulate_ctxt +@@ -1719,6 +1718,12 @@ x86_emulate_insn(struct x86_emulate_ctxt memcpy(c->regs, ctxt->vcpu->arch.regs, sizeof c->regs); saved_eip = c->eip; diff --git a/queue-2.6.33/kvm-x86-emulator-fix-popf-emulation.patch b/queue-2.6.33/kvm-x86-emulator-fix-popf-emulation.patch deleted file mode 100644 index 72e7dc51ecc..00000000000 --- a/queue-2.6.33/kvm-x86-emulator-fix-popf-emulation.patch +++ /dev/null @@ -1,103 +0,0 @@ -From d4c6a1549c056f1d817e8f6f2f97d8b44933472f Mon Sep 17 00:00:00 2001 -From: Gleb Natapov -Date: Wed, 10 Feb 2010 14:21:34 +0200 -Subject: KVM: x86 emulator: Fix popf emulation - -From: Gleb Natapov - -commit d4c6a1549c056f1d817e8f6f2f97d8b44933472f upstream. - -POPF behaves differently depending on current CPU mode. Emulate correct -logic to prevent guest from changing flags that it can't change otherwise. - -Signed-off-by: Gleb Natapov -Signed-off-by: Avi Kivity -Signed-off-by: Greg Kroah-Hartman - ---- - arch/x86/kvm/emulate.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++- - 1 file changed, 54 insertions(+), 1 deletion(-) - ---- a/arch/x86/kvm/emulate.c -+++ b/arch/x86/kvm/emulate.c -@@ -343,11 +343,18 @@ static u32 group2_table[] = { - }; - - /* EFLAGS bit definitions. */ -+#define EFLG_ID (1<<21) -+#define EFLG_VIP (1<<20) -+#define EFLG_VIF (1<<19) -+#define EFLG_AC (1<<18) - #define EFLG_VM (1<<17) - #define EFLG_RF (1<<16) -+#define EFLG_IOPL (3<<12) -+#define EFLG_NT (1<<14) - #define EFLG_OF (1<<11) - #define EFLG_DF (1<<10) - #define EFLG_IF (1<<9) -+#define EFLG_TF (1<<8) - #define EFLG_SF (1<<7) - #define EFLG_ZF (1<<6) - #define EFLG_AF (1<<4) -@@ -1213,6 +1220,49 @@ static int emulate_pop(struct x86_emulat - return rc; - } - -+static int emulate_popf(struct x86_emulate_ctxt *ctxt, -+ struct x86_emulate_ops *ops, -+ void *dest, int len) -+{ -+ int rc; -+ unsigned long val, change_mask; -+ int iopl = (ctxt->eflags & X86_EFLAGS_IOPL) >> IOPL_SHIFT; -+ int cpl = kvm_x86_ops->get_cpl(ctxt->vcpu); -+ -+ rc = emulate_pop(ctxt, ops, &val, len); -+ if (rc != X86EMUL_CONTINUE) -+ return rc; -+ -+ change_mask = EFLG_CF | EFLG_PF | EFLG_AF | EFLG_ZF | EFLG_SF | EFLG_OF -+ | EFLG_TF | EFLG_DF | EFLG_NT | EFLG_RF | EFLG_AC | EFLG_ID; -+ -+ switch(ctxt->mode) { -+ case X86EMUL_MODE_PROT64: -+ case X86EMUL_MODE_PROT32: -+ case X86EMUL_MODE_PROT16: -+ if (cpl == 0) -+ change_mask |= EFLG_IOPL; -+ if (cpl <= iopl) -+ change_mask |= EFLG_IF; -+ break; -+ case X86EMUL_MODE_VM86: -+ if (iopl < 3) { -+ kvm_inject_gp(ctxt->vcpu, 0); -+ return X86EMUL_PROPAGATE_FAULT; -+ } -+ change_mask |= EFLG_IF; -+ break; -+ default: /* real mode */ -+ change_mask |= (EFLG_IOPL | EFLG_IF); -+ break; -+ } -+ -+ *(unsigned long *)dest = -+ (ctxt->eflags & ~change_mask) | (val & change_mask); -+ -+ return rc; -+} -+ - static void emulate_push_sreg(struct x86_emulate_ctxt *ctxt, int seg) - { - struct decode_cache *c = &ctxt->decode; -@@ -2041,7 +2091,10 @@ special_insn: - c->dst.type = OP_REG; - c->dst.ptr = (unsigned long *) &ctxt->eflags; - c->dst.bytes = c->op_bytes; -- goto pop_instruction; -+ rc = emulate_popf(ctxt, ops, &c->dst.val, c->op_bytes); -+ if (rc != X86EMUL_CONTINUE) -+ goto done; -+ break; - case 0xa0 ... 0xa1: /* mov */ - c->dst.ptr = (unsigned long *)&c->regs[VCPU_REGS_RAX]; - c->dst.val = c->src.val; diff --git a/queue-2.6.33/series b/queue-2.6.33/series index 3a3b0bee733..98b2622099f 100644 --- a/queue-2.6.33/series +++ b/queue-2.6.33/series @@ -116,7 +116,6 @@ kvm-vmx-trap-and-invalid-mwait-monitor-instruction.patch kvm-x86-emulator-add-group8-instruction-decoding.patch kvm-x86-emulator-forbid-modifying-cs-segment-register-by-mov-instruction.patch kvm-x86-emulator-add-group9-instruction-decoding.patch -kvm-x86-emulator-fix-popf-emulation.patch kvm-x86-emulator-check-cpl-level-during-privilege-instruction-emulation.patch sched-fix-sched_mv_power_savings-for-smt.patch sched-fix-smt-scheduler-regression-in-find_busiest_queue.patch -- 2.47.3