aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Triplett <josh@joshtriplett.org>2015-08-06 19:39:44 +0100
committerWill Deacon <will.deacon@arm.com>2015-08-07 15:31:37 +0100
commite7b95bd430760d8b895520f54fdf9d19972904d2 (patch)
tree6e5292ccc522dea98fd3fda24de22169aefbc373
parenteef27ae368562bcce4f8a2b65822b307da0d4146 (diff)
downloadkvmtool-e7b95bd430760d8b895520f54fdf9d19972904d2.tar.gz
kvm__emulate_io: Don't call br_read_unlock() twice on IO error
The IO error path in kvm__emulate_io would call br_read_unlock(), then goto error, which would call br_read_unlock() again. Refactor the control flow to have only one exit path and one call to br_read_unlock(). Signed-off-by: Josh Triplett <josh@joshtriplett.org> Signed-off-by: Will Deacon <will.deacon@arm.com>
-rw-r--r--ioport.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/ioport.c b/ioport.c
index 81a747d9..8c55a842 100644
--- a/ioport.c
+++ b/ioport.c
@@ -185,7 +185,7 @@ bool kvm__emulate_io(struct kvm_cpu *vcpu, u16 port, void *data, int direction,
br_read_lock();
entry = ioport_search(&ioport_tree, port);
if (!entry)
- goto error;
+ goto out;
ops = entry->ops;
@@ -198,14 +198,11 @@ bool kvm__emulate_io(struct kvm_cpu *vcpu, u16 port, void *data, int direction,
ptr += size;
}
+out:
br_read_unlock();
- if (!ret)
- goto error;
-
- return true;
-error:
- br_read_unlock();
+ if (ret)
+ return true;
if (kvm->cfg.ioport_debug)
ioport_error(port, data, direction, size, count);