The kvm argument is not passed to br_read_lock/unlock, this works for the barrier implementation because the argument is not used. This ever breaks if another lock implementation is used. Signed-off-by: Julien Thierry <julien.thierry@xxxxxxx> --- ioport.c | 4 ++-- mmio.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ioport.c b/ioport.c index 505e822..a6dc65e 100644 --- a/ioport.c +++ b/ioport.c @@ -184,7 +184,7 @@ bool kvm__emulate_io(struct kvm_cpu *vcpu, u16 port, void *data, int direction, void *ptr = data; struct kvm *kvm = vcpu->kvm; - br_read_lock(); + br_read_lock(kvm); entry = ioport_search(&ioport_tree, port); if (!entry) goto out; @@ -201,7 +201,7 @@ bool kvm__emulate_io(struct kvm_cpu *vcpu, u16 port, void *data, int direction, } out: - br_read_unlock(); + br_read_unlock(kvm); if (ret) return true; diff --git a/mmio.c b/mmio.c index c648bec..61e1d47 100644 --- a/mmio.c +++ b/mmio.c @@ -124,7 +124,7 @@ bool kvm__emulate_mmio(struct kvm_cpu *vcpu, u64 phys_addr, u8 *data, u32 len, u { struct mmio_mapping *mmio; - br_read_lock(); + br_read_lock(vcpu->kvm); mmio = mmio_search(&mmio_tree, phys_addr, len); if (mmio) @@ -135,7 +135,7 @@ bool kvm__emulate_mmio(struct kvm_cpu *vcpu, u64 phys_addr, u8 *data, u32 len, u to_direction(is_write), (unsigned long long)phys_addr, len); } - br_read_unlock(); + br_read_unlock(vcpu->kvm); return true; } -- 1.9.1