diff options
author | Josh Triplett <josh@joshtriplett.org> | 2015-08-06 19:39:44 +0100 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2015-08-07 15:31:37 +0100 |
commit | e7b95bd430760d8b895520f54fdf9d19972904d2 (patch) | |
tree | 6e5292ccc522dea98fd3fda24de22169aefbc373 | |
parent | eef27ae368562bcce4f8a2b65822b307da0d4146 (diff) | |
download | kvmtool-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.c | 11 |
1 files changed, 4 insertions, 7 deletions
@@ -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); |