From b8b55099c5f4e081279a732aefa759ebe8f8cfee Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Sat, 15 Sep 2007 17:34:36 +0300 Subject: [PATCH] --- yaml --- r: 68441 b: refs/heads/master c: 0967b7bf1c22b55777aba46ff616547feed0b141 h: refs/heads/master i: 68439: fb971fb18eb94329bea0040e7f198ce86e68bab8 v: v3 --- [refs] | 2 +- trunk/drivers/kvm/kvm_main.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 5aaca773d76e..fafac9c5721f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 535eabcf0e55804b53d27fe45217d874b19bcfa9 +refs/heads/master: 0967b7bf1c22b55777aba46ff616547feed0b141 diff --git a/trunk/drivers/kvm/kvm_main.c b/trunk/drivers/kvm/kvm_main.c index 3b046507ebc6..353e58527d15 100644 --- a/trunk/drivers/kvm/kvm_main.c +++ b/trunk/drivers/kvm/kvm_main.c @@ -1815,8 +1815,6 @@ static int complete_pio(struct kvm_vcpu *vcpu) io->count -= io->cur_count; io->cur_count = 0; - if (!io->count) - kvm_x86_ops->skip_emulated_instruction(vcpu); return 0; } @@ -1876,6 +1874,8 @@ int kvm_emulate_pio (struct kvm_vcpu *vcpu, struct kvm_run *run, int in, memcpy(vcpu->pio_data, &vcpu->regs[VCPU_REGS_RAX], 4); kvm_x86_ops->decache_regs(vcpu); + kvm_x86_ops->skip_emulated_instruction(vcpu); + pio_dev = vcpu_find_pio_dev(vcpu, port); if (pio_dev) { kernel_pio(pio_dev, vcpu, vcpu->pio_data); @@ -1938,6 +1938,9 @@ int kvm_emulate_pio_string(struct kvm_vcpu *vcpu, struct kvm_run *run, int in, vcpu->run->io.count = now; vcpu->pio.cur_count = now; + if (vcpu->pio.cur_count == vcpu->pio.count) + kvm_x86_ops->skip_emulated_instruction(vcpu); + for (i = 0; i < nr_pages; ++i) { mutex_lock(&vcpu->kvm->lock); page = gva_to_page(vcpu, address + i * PAGE_SIZE);