kvm: x86: Always assume segments to be usable
authorAndreas Sandberg <andreas@sandberg.pp.se>
Mon, 3 Mar 2014 13:34:33 +0000 (14:34 +0100)
committerAndreas Sandberg <andreas@sandberg.pp.se>
Mon, 3 Mar 2014 13:34:33 +0000 (14:34 +0100)
When transferring segment registers into kvm, we need to find the
value of the unusable bit. We used to assume that this could be
inferred from the selector since segments are generally unusable if
their selector is 0. This assumption breaks in some weird corner
cases.  Instead, we just assume that segments are always usable. This
is what qemu does so it should work.

src/cpu/kvm/x86_cpu.cc

index 8f7ca19e47033faf681e2782bc857bc721c8d4bb..b79207fab304638b6d0908a59f34368ab87a703d 100644 (file)
@@ -721,11 +721,11 @@ setKvmSegmentReg(ThreadContext *tc, struct kvm_segment &kvm_seg,
     kvm_seg.g = attr.granularity;
     kvm_seg.avl = attr.avl;
 
-    // A segment is unusable when the selector is zero. There is a
-    // attr.unusable flag in gem5, but it seems unused.
-    //
-    // TODO: Are there corner cases where this doesn't work?
-    kvm_seg.unusable = (kvm_seg.selector == 0);
+    // A segment is normally unusable when the selector is zero. There
+    // is a attr.unusable flag in gem5, but it seems unused. qemu
+    // seems to set this to 0 all the time, so we just do the same and
+    // hope for the best.
+    kvm_seg.unusable = 0;
 }
 
 static inline void