Commit 5ca9fd54 authored by Heiko Carstens's avatar Heiko Carstens Committed by Avi Kivity

s390: KVM guest: fix compile error

Fix kvm compile error:

Commit c45a6816
(virtio: explicit advertisement of driver features)
and commit e976a2b9
(s390: KVM guest: virtio device support, and kvm hypercalls)
don't like each other:

  CC      drivers/s390/kvm/kvm_virtio.o
drivers/s390/kvm/kvm_virtio.c:224: error: unknown field 'feature' specified in initializer
drivers/s390/kvm/kvm_virtio.c:224: warning: initialization from incompatible pointer type
make[3]: *** [drivers/s390/kvm/kvm_virtio.o] Error 1

Cc: Adrian Bunk <bunk@kernel.org>
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
Acked-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Acked-by: default avatarCarsten Otte <cotte@de.ibm.com>
Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
parent 107d6d2e
...@@ -78,27 +78,32 @@ static unsigned desc_size(const struct kvm_device_desc *desc) ...@@ -78,27 +78,32 @@ static unsigned desc_size(const struct kvm_device_desc *desc)
+ desc->config_len; + desc->config_len;
} }
/* /* This gets the device's feature bits. */
* This tests (and acknowleges) a feature bit. static u32 kvm_get_features(struct virtio_device *vdev)
*/
static bool kvm_feature(struct virtio_device *vdev, unsigned fbit)
{ {
unsigned int i;
u32 features = 0;
struct kvm_device_desc *desc = to_kvmdev(vdev)->desc; struct kvm_device_desc *desc = to_kvmdev(vdev)->desc;
u8 *features; u8 *in_features = kvm_vq_features(desc);
if (fbit / 8 > desc->feature_len) for (i = 0; i < min(desc->feature_len * 8, 32); i++)
return false; if (in_features[i / 8] & (1 << (i % 8)))
features |= (1 << i);
return features;
}
features = kvm_vq_features(desc); static void kvm_set_features(struct virtio_device *vdev, u32 features)
if (!(features[fbit / 8] & (1 << (fbit % 8)))) {
return false; unsigned int i;
struct kvm_device_desc *desc = to_kvmdev(vdev)->desc;
/* Second half of bitmap is features we accept. */
u8 *out_features = kvm_vq_features(desc) + desc->feature_len;
/* memset(out_features, 0, desc->feature_len);
* We set the matching bit in the other half of the bitmap to tell the for (i = 0; i < min(desc->feature_len * 8, 32); i++) {
* Host we want to use this feature. if (features & (1 << i))
*/ out_features[i / 8] |= (1 << (i % 8));
features[desc->feature_len + fbit / 8] |= (1 << (fbit % 8)); }
return true;
} }
/* /*
...@@ -221,7 +226,8 @@ static void kvm_del_vq(struct virtqueue *vq) ...@@ -221,7 +226,8 @@ static void kvm_del_vq(struct virtqueue *vq)
* The config ops structure as defined by virtio config * The config ops structure as defined by virtio config
*/ */
static struct virtio_config_ops kvm_vq_configspace_ops = { static struct virtio_config_ops kvm_vq_configspace_ops = {
.feature = kvm_feature, .get_features = kvm_get_features,
.set_features = kvm_set_features,
.get = kvm_get, .get = kvm_get,
.set = kvm_set, .set = kvm_set,
.get_status = kvm_get_status, .get_status = kvm_get_status,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment