KVM: x86: simplify read_emulated
PATCH v2 1/1 KVM: x86: simplify read_emulated
No need split mmio read region into 8-bits pieces since we do it in emulator_read_write_onepage
Changelog:
Add a WARN_ON to check read-cache overflow
Acked-by Marcelo Tosatti <[email protected]>
Signed-off-by Xiao Guangrong <[email protected]>
--- arch/x86/kvm/emulate.c | 31 ++++++++++++++----------------- 1 files changed, 14 insertions(+), 17 deletions(-)
arch/x86/kvm/emulate.c +14 -17
@@ -1166,24 +1166,21 @@ static int read_emulated(struct x86_emulate_ctxt *ctxt,int rc;struct read_cache *mc = &ctxt->mem_read; -while (size) { -int n =min (size,8u ); - size -= n; -if (mc->pos < mc->end) - goto read_cached; - - rc = ctxt->ops->read_emulated (ctxt, addr, mc->data + mc->end, n, - &ctxt->exception); -if (rc !=X86EMUL_CONTINUE ) -return rc; - mc->end += n; +if (mc->pos < mc->end) + goto read_cached; - read_cached: -memcpy (dest, mc->data + mc->pos, n); - mc->pos += n; - dest += n; - addr += n; - } +WARN_ON ((mc->end + size) >=sizeof (mc->data)); + + rc = ctxt->ops->read_emulated (ctxt, addr, mc->data + mc->end, size, + &ctxt->exception); +if (rc !=X86EMUL_CONTINUE ) +return rc; + + mc->end += size; + +read_cached: +memcpy (dest, mc->data + mc->pos, size); + mc->pos += size;return X86EMUL_CONTINUE ; }
Signature · 1 line
1.7.7.6