All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Hervé Poussineau" <hpoussin@reactos.org>
To: Richard Henderson <rth@twiddle.net>, qemu-devel <qemu-devel@nongnu.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Subject: [Qemu-devel] [QEMU] Windows XP / Windows 95 / MS-DOS 6 regressions
Date: Sun, 28 Feb 2016 22:49:55 +0100	[thread overview]
Message-ID: <56D36B83.7000404@reactos.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 1813 bytes --]

Hi,

I currently see some regressions on Microsoft operating systems.

1) Windows XP bugchecks since commit:
commit 7f0b7141b4c7deab51efd8ee1e83eab2d9b7a9ea
Author: Richard Henderson <rth@twiddle.net>
Date:   Mon Jul 6 17:29:59 2015 +0100

     target-i386: Perform set/reset_inhibit_irq inline

     With helpers that can be reused for other things.

     Signed-off-by: Richard Henderson <rth@twiddle.net>

I'm starting QEMU with -cpu pentium2.
Attached patch can be applied on master to work-around the problem.
Another work-around is to start with -enable-kvm.

2) Windows 95 bugchecks since commit:
commit d6a2914984c89fa0a3125b9842e0cbf68de79a3d
Author: Richard Henderson <rth@twiddle.net>
Date:   Thu Dec 17 11:19:19 2015 -0800

     target-i386: Use gen_lea_v_seg in gen_lea_modrm

     Centralize handling of segment bases.

     Signed-off-by: Richard Henderson <rth@twiddle.net>
     Message-Id: <1450379966-28198-4-git-send-email-rth@twiddle.net>
     Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

(with 88c73d16ad1b6c22a2ab082064d0d521f756296a and 4987783400667147ada01a5bdcce53f11b822888 cherry-picked)

I'm starting QEMU with -cpu pentium.
I've not searched for a work-around.

3) MS-DOS 6 freezes when loading himem.sys since commit:
commit 1906b2af7c2345037d9b2fdf484b457b5acd09d1
Author: Richard Henderson <rth@twiddle.net>
Date: Thu Jul 2 13:59:21 2015 +0100

     target-i386: Rearrange processing of 0F 01

     Rather than nesting tests of OP, MOD, and RM, decode them
     all at once with a switch. Fixes incorrect decoding of
     AMD Pacifica extensions (aka vmrun et al) via op==2 path.

     Signed-off-by: Richard Henderson <rth@twiddle.net>

I'm starting QEMU with -cpu 486.
It works on master if I add -enable-kvm

Hervé

[-- Attachment #2: 0001-target-i386-partially-revert-Perform-set-reset_inhib.patch --]
[-- Type: text/x-patch, Size: 2021 bytes --]

>From 0e66ca87ac7c94219ab49cfbed6f586c51c697de Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= <hpoussin@reactos.org>
Date: Sun, 28 Feb 2016 15:00:29 +0100
Subject: [PATCH] target-i386: partially revert 'Perform set/reset_inhibit_irq
 inline'

This partially reverts commit 7f0b7141b4c7deab51efd8ee1e83eab2d9b7a9ea to fix Windows XP.
---
 target-i386/cc_helper.c | 5 +++++
 target-i386/helper.h    | 1 +
 target-i386/translate.c | 3 ++-
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/target-i386/cc_helper.c b/target-i386/cc_helper.c
index 83af223..e6f4fe9 100644
--- a/target-i386/cc_helper.c
+++ b/target-i386/cc_helper.c
@@ -383,3 +383,8 @@ void helper_sti_vm(CPUX86State *env)
     }
 }
 #endif
+
+void helper_set_inhibit_irq(CPUX86State *env)
+{
+    env->hflags |= HF_INHIBIT_IRQ_MASK;
+}
diff --git a/target-i386/helper.h b/target-i386/helper.h
index e33451a..bdba6bd 100644
--- a/target-i386/helper.h
+++ b/target-i386/helper.h
@@ -70,6 +70,7 @@ DEF_HELPER_1(cli, void, env)
 DEF_HELPER_1(sti, void, env)
 DEF_HELPER_1(clac, void, env)
 DEF_HELPER_1(stac, void, env)
+DEF_HELPER_1(set_inhibit_irq, void, env)
 DEF_HELPER_3(boundw, void, env, tl, int)
 DEF_HELPER_3(boundl, void, env, tl, int)
 DEF_HELPER_1(rsm, void, env)
diff --git a/target-i386/translate.c b/target-i386/translate.c
index 9171929..4ec94b9 100644
--- a/target-i386/translate.c
+++ b/target-i386/translate.c
@@ -6780,7 +6780,8 @@ static target_ulong disas_insn(CPUX86State *env, DisasContext *s,
                 /* interruptions are enabled only the first insn after sti */
                 /* If several instructions disable interrupts, only the
                    _first_ does it */
-                gen_set_hflag(s, HF_INHIBIT_IRQ_MASK);
+                if (!(s->tb->flags & HF_INHIBIT_IRQ_MASK))
+                    gen_helper_set_inhibit_irq(cpu_env);
                 /* give a chance to handle pending irqs */
                 gen_jmp_im(s->pc - s->cs_base);
                 gen_eob(s);
-- 
2.1.4


             reply	other threads:[~2016-02-28 21:50 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-28 21:49 Hervé Poussineau [this message]
2016-03-01 13:49 ` [Qemu-devel] [QEMU] Windows XP / Windows 95 / MS-DOS 6 regressions Paolo Bonzini
2016-03-01 15:12 ` Paolo Bonzini
2016-03-01 20:03   ` Hervé Poussineau
2016-03-01 21:06     ` Paolo Bonzini
2016-03-02  4:05     ` Richard Henderson
2016-03-02  8:06       ` Hervé Poussineau
2016-03-02  9:13         ` Paolo Bonzini
2016-03-02 14:06         ` Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56D36B83.7000404@reactos.org \
    --to=hpoussin@reactos.org \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.