Commit e2cefa74 authored by Nadav Amit's avatar Nadav Amit Committed by Paolo Bonzini

KVM: x86: Do not set access bit on accessed segments

When segment is loaded, the segment access bit is set unconditionally.  In
fact, it should be set conditionally, based on whether the segment had the
accessed bit set before. In addition, it can improve performance.
Signed-off-by: default avatarNadav Amit <namit@cs.technion.ac.il>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent ab708099
...@@ -1618,10 +1618,13 @@ static int __load_segment_descriptor(struct x86_emulate_ctxt *ctxt, ...@@ -1618,10 +1618,13 @@ static int __load_segment_descriptor(struct x86_emulate_ctxt *ctxt,
if (seg_desc.s) { if (seg_desc.s) {
/* mark segment as accessed */ /* mark segment as accessed */
seg_desc.type |= 1; if (!(seg_desc.type & 1)) {
ret = write_segment_descriptor(ctxt, selector, &seg_desc); seg_desc.type |= 1;
if (ret != X86EMUL_CONTINUE) ret = write_segment_descriptor(ctxt, selector,
return ret; &seg_desc);
if (ret != X86EMUL_CONTINUE)
return ret;
}
} else if (ctxt->mode == X86EMUL_MODE_PROT64) { } else if (ctxt->mode == X86EMUL_MODE_PROT64) {
ret = ctxt->ops->read_std(ctxt, desc_addr+8, &base3, ret = ctxt->ops->read_std(ctxt, desc_addr+8, &base3,
sizeof(base3), &ctxt->exception); sizeof(base3), &ctxt->exception);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment