diff options
author | Cornelia Huck <cornelia.huck@de.ibm.com> | 2013-07-03 10:30:54 -0400 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2013-07-18 06:29:24 -0400 |
commit | 85dfe87e24326c472454cc92313ba8c3b4efe53b (patch) | |
tree | 089985a2689fc17bd66a26518c77829bb9f78260 /arch/s390 | |
parent | 126a5af520eff9b99a0bb1ca4bb4a0b7973f7d5a (diff) |
KVM: s390: use cookies for ioeventfd
Make use of cookies for the virtio ccw notification hypercall to speed up
lookup of devices on the io bus.
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
[Small fix to a comment. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/kvm/diag.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/arch/s390/kvm/diag.c b/arch/s390/kvm/diag.c index 3074475c8ae0..3a74d8af0d69 100644 --- a/arch/s390/kvm/diag.c +++ b/arch/s390/kvm/diag.c | |||
@@ -119,12 +119,21 @@ static int __diag_virtio_hypercall(struct kvm_vcpu *vcpu) | |||
119 | * The layout is as follows: | 119 | * The layout is as follows: |
120 | * - gpr 2 contains the subchannel id (passed as addr) | 120 | * - gpr 2 contains the subchannel id (passed as addr) |
121 | * - gpr 3 contains the virtqueue index (passed as datamatch) | 121 | * - gpr 3 contains the virtqueue index (passed as datamatch) |
122 | * - gpr 4 contains the index on the bus (optionally) | ||
122 | */ | 123 | */ |
123 | ret = kvm_io_bus_write(vcpu->kvm, KVM_VIRTIO_CCW_NOTIFY_BUS, | 124 | ret = kvm_io_bus_write_cookie(vcpu->kvm, KVM_VIRTIO_CCW_NOTIFY_BUS, |
124 | vcpu->run->s.regs.gprs[2], | 125 | vcpu->run->s.regs.gprs[2], |
125 | 8, &vcpu->run->s.regs.gprs[3]); | 126 | 8, &vcpu->run->s.regs.gprs[3], |
127 | vcpu->run->s.regs.gprs[4]); | ||
126 | srcu_read_unlock(&vcpu->kvm->srcu, idx); | 128 | srcu_read_unlock(&vcpu->kvm->srcu, idx); |
127 | /* kvm_io_bus_write returns -EOPNOTSUPP if it found no match. */ | 129 | |
130 | /* | ||
131 | * Return cookie in gpr 2, but don't overwrite the register if the | ||
132 | * diagnose will be handled by userspace. | ||
133 | */ | ||
134 | if (ret != -EOPNOTSUPP) | ||
135 | vcpu->run->s.regs.gprs[2] = ret; | ||
136 | /* kvm_io_bus_write_cookie returns -EOPNOTSUPP if it found no match. */ | ||
128 | return ret < 0 ? ret : 0; | 137 | return ret < 0 ? ret : 0; |
129 | } | 138 | } |
130 | 139 | ||