Index: /trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp	(revision 56664)
+++ /trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp	(revision 56665)
@@ -4807,7 +4807,15 @@
                 if (IoExitInfo.n.u1Type == SVM_IOIO_WRITE)
                 {
-                    if (pVM->hm.s.svm.u32Features & AMD_CPUID_SVM_FEATURE_EDX_NRIP_SAVE)
+                    /* Don't know exactly how to detect whether u3SEG is valid, currently
+                       only enabling it for Bulldozer and later with NRIP.  OS/2 broke on
+                       2384 Opterons when only checking NRIP. */
+                    if (   (pVM->hm.s.svm.u32Features & AMD_CPUID_SVM_FEATURE_EDX_NRIP_SAVE)
+                        && pVM->cpum.ro.GuestFeatures.enmMicroarch >= kCpumMicroarch_AMD_15h_First)
+                    {
+                        AssertMsg(IoExitInfo.n.u3SEG == X86_SREG_DS || cbInstr > 1 + IoExitInfo.n.u1REP,
+                                  ("u32Seg=%d cbInstr=%d u1REP=%d", IoExitInfo.n.u3SEG, cbInstr, IoExitInfo.n.u1REP));
                         rcStrict = IEMExecStringIoWrite(pVCpu, cbValue, enmAddrMode, IoExitInfo.n.u1REP, (uint8_t)cbInstr,
                                                         IoExitInfo.n.u3SEG);
+                    }
                     else
                         rcStrict = IEMExecOne(pVCpu);
