Merge tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux
Pull virtio updates from Rusty Russell: "Nothing really exciting: some groundwork for changing virtio endian, and some robustness fixes for broken virtio devices, plus minor tweaks" * tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux: virtio_scsi: verify if queue is broken after virtqueue_get_buf() x86, asmlinkage, lguest: Pass in globals into assembler statement virtio: mmio: fix signature checking for BE guests virtio_ring: adapt to notify() returning bool virtio_net: verify if queue is broken after virtqueue_get_buf() virtio_console: verify if queue is broken after virtqueue_get_buf() virtio_blk: verify if queue is broken after virtqueue_get_buf() virtio_ring: add new function virtqueue_is_broken() virtio_test: verify if virtqueue_kick() succeeded virtio_net: verify if virtqueue_kick() succeeded virtio_ring: let virtqueue_{kick()/notify()} return a bool virtio_ring: change host notification API virtio_config: remove virtio_config_val virtio: use size-based config accessors. virtio_config: introduce size-based accessors. virtio_ring: plug kmemleak false positive. virtio: pm: use CONFIG_PM_SLEEP instead of CONFIG_PM
This commit is contained in:
@ -41,13 +41,14 @@ struct vdev_info {
|
||||
struct vhost_memory *mem;
|
||||
};
|
||||
|
||||
void vq_notify(struct virtqueue *vq)
|
||||
bool vq_notify(struct virtqueue *vq)
|
||||
{
|
||||
struct vq_info *info = vq->priv;
|
||||
unsigned long long v = 1;
|
||||
int r;
|
||||
r = write(info->kick, &v, sizeof v);
|
||||
assert(r == sizeof v);
|
||||
return true;
|
||||
}
|
||||
|
||||
void vq_callback(struct virtqueue *vq)
|
||||
@ -171,7 +172,8 @@ static void run_test(struct vdev_info *dev, struct vq_info *vq,
|
||||
GFP_ATOMIC);
|
||||
if (likely(r == 0)) {
|
||||
++started;
|
||||
virtqueue_kick(vq->vq);
|
||||
if (unlikely(!virtqueue_kick(vq->vq))
|
||||
r = -1;
|
||||
}
|
||||
} else
|
||||
r = -1;
|
||||
|
@ -22,7 +22,7 @@ static u64 user_addr_offset;
|
||||
#define RINGSIZE 256
|
||||
#define ALIGN 4096
|
||||
|
||||
static void never_notify_host(struct virtqueue *vq)
|
||||
static bool never_notify_host(struct virtqueue *vq)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
@ -65,17 +65,22 @@ struct guest_virtio_device {
|
||||
unsigned long notifies;
|
||||
};
|
||||
|
||||
static void parallel_notify_host(struct virtqueue *vq)
|
||||
static bool parallel_notify_host(struct virtqueue *vq)
|
||||
{
|
||||
int rc;
|
||||
struct guest_virtio_device *gvdev;
|
||||
|
||||
gvdev = container_of(vq->vdev, struct guest_virtio_device, vdev);
|
||||
write(gvdev->to_host_fd, "", 1);
|
||||
rc = write(gvdev->to_host_fd, "", 1);
|
||||
if (rc < 0)
|
||||
return false;
|
||||
gvdev->notifies++;
|
||||
return true;
|
||||
}
|
||||
|
||||
static void no_notify_host(struct virtqueue *vq)
|
||||
static bool no_notify_host(struct virtqueue *vq)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
#define NUM_XFERS (10000000)
|
||||
|
Reference in New Issue
Block a user