diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-14 23:28:47 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-14 23:28:47 -0500 |
commit | b746f9c7941f227ad582b4f0bc981f3adcbc46b2 (patch) | |
tree | fe3da3dedfe8d66f90cdcfa3d9ce847fdc411c20 /tools | |
parent | ce6513f758b1852a2f24f76f07d0fae304d24ad3 (diff) | |
parent | 2bf4fd31394a3f875ea093ee8a209f30b378cbf3 (diff) |
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
Diffstat (limited to 'tools')
-rw-r--r-- | tools/virtio/virtio_test.c | 6 | ||||
-rw-r--r-- | tools/virtio/vringh_test.c | 13 |
2 files changed, 13 insertions, 6 deletions
diff --git a/tools/virtio/virtio_test.c b/tools/virtio/virtio_test.c index da7a19558281..bdb71a26ae35 100644 --- a/tools/virtio/virtio_test.c +++ b/tools/virtio/virtio_test.c | |||
@@ -41,13 +41,14 @@ struct vdev_info { | |||
41 | struct vhost_memory *mem; | 41 | struct vhost_memory *mem; |
42 | }; | 42 | }; |
43 | 43 | ||
44 | void vq_notify(struct virtqueue *vq) | 44 | bool vq_notify(struct virtqueue *vq) |
45 | { | 45 | { |
46 | struct vq_info *info = vq->priv; | 46 | struct vq_info *info = vq->priv; |
47 | unsigned long long v = 1; | 47 | unsigned long long v = 1; |
48 | int r; | 48 | int r; |
49 | r = write(info->kick, &v, sizeof v); | 49 | r = write(info->kick, &v, sizeof v); |
50 | assert(r == sizeof v); | 50 | assert(r == sizeof v); |
51 | return true; | ||
51 | } | 52 | } |
52 | 53 | ||
53 | void vq_callback(struct virtqueue *vq) | 54 | void vq_callback(struct virtqueue *vq) |
@@ -171,7 +172,8 @@ static void run_test(struct vdev_info *dev, struct vq_info *vq, | |||
171 | GFP_ATOMIC); | 172 | GFP_ATOMIC); |
172 | if (likely(r == 0)) { | 173 | if (likely(r == 0)) { |
173 | ++started; | 174 | ++started; |
174 | virtqueue_kick(vq->vq); | 175 | if (unlikely(!virtqueue_kick(vq->vq)) |
176 | r = -1; | ||
175 | } | 177 | } |
176 | } else | 178 | } else |
177 | r = -1; | 179 | r = -1; |
diff --git a/tools/virtio/vringh_test.c b/tools/virtio/vringh_test.c index d053ea40c001..14a4f4cab5b9 100644 --- a/tools/virtio/vringh_test.c +++ b/tools/virtio/vringh_test.c | |||
@@ -22,7 +22,7 @@ static u64 user_addr_offset; | |||
22 | #define RINGSIZE 256 | 22 | #define RINGSIZE 256 |
23 | #define ALIGN 4096 | 23 | #define ALIGN 4096 |
24 | 24 | ||
25 | static void never_notify_host(struct virtqueue *vq) | 25 | static bool never_notify_host(struct virtqueue *vq) |
26 | { | 26 | { |
27 | abort(); | 27 | abort(); |
28 | } | 28 | } |
@@ -65,17 +65,22 @@ struct guest_virtio_device { | |||
65 | unsigned long notifies; | 65 | unsigned long notifies; |
66 | }; | 66 | }; |
67 | 67 | ||
68 | static void parallel_notify_host(struct virtqueue *vq) | 68 | static bool parallel_notify_host(struct virtqueue *vq) |
69 | { | 69 | { |
70 | int rc; | ||
70 | struct guest_virtio_device *gvdev; | 71 | struct guest_virtio_device *gvdev; |
71 | 72 | ||
72 | gvdev = container_of(vq->vdev, struct guest_virtio_device, vdev); | 73 | gvdev = container_of(vq->vdev, struct guest_virtio_device, vdev); |
73 | write(gvdev->to_host_fd, "", 1); | 74 | rc = write(gvdev->to_host_fd, "", 1); |
75 | if (rc < 0) | ||
76 | return false; | ||
74 | gvdev->notifies++; | 77 | gvdev->notifies++; |
78 | return true; | ||
75 | } | 79 | } |
76 | 80 | ||
77 | static void no_notify_host(struct virtqueue *vq) | 81 | static bool no_notify_host(struct virtqueue *vq) |
78 | { | 82 | { |
83 | return true; | ||
79 | } | 84 | } |
80 | 85 | ||
81 | #define NUM_XFERS (10000000) | 86 | #define NUM_XFERS (10000000) |