mirror of
https://github.com/torvalds/linux.git
synced 2024-11-16 17:12:06 +00:00
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: Nadav Amit <namit@cs.technion.ac.il> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
ab708099a0
commit
e2cefa746e
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user