Commit bb6834cfae238e342da966557d7d24423efe18ab
1 parent
d34ca590
Fix windows build after virtio changes
Windows does not have sys/uio.h and does not have err.h. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5877 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
34 additions
and
15 deletions
hw/virtio.c
| ... | ... | @@ -12,7 +12,6 @@ |
| 12 | 12 | */ |
| 13 | 13 | |
| 14 | 14 | #include <inttypes.h> |
| 15 | -#include <err.h> | |
| 16 | 15 | |
| 17 | 16 | #include "virtio.h" |
| 18 | 17 | #include "sysemu.h" |
| ... | ... | @@ -331,9 +330,11 @@ static int virtqueue_num_heads(VirtQueue *vq, unsigned int idx) |
| 331 | 330 | uint16_t num_heads = vring_avail_idx(vq) - idx; |
| 332 | 331 | |
| 333 | 332 | /* Check it isn't doing very strange things with descriptor numbers. */ |
| 334 | - if (num_heads > vq->vring.num) | |
| 335 | - errx(1, "Guest moved used index from %u to %u", | |
| 336 | - idx, vring_avail_idx(vq)); | |
| 333 | + if (num_heads > vq->vring.num) { | |
| 334 | + fprintf(stderr, "Guest moved used index from %u to %u", | |
| 335 | + idx, vring_avail_idx(vq)); | |
| 336 | + exit(1); | |
| 337 | + } | |
| 337 | 338 | |
| 338 | 339 | return num_heads; |
| 339 | 340 | } |
| ... | ... | @@ -347,8 +348,10 @@ static unsigned int virtqueue_get_head(VirtQueue *vq, unsigned int idx) |
| 347 | 348 | head = vring_avail_ring(vq, idx % vq->vring.num); |
| 348 | 349 | |
| 349 | 350 | /* If their number is silly, that's a fatal mistake. */ |
| 350 | - if (head >= vq->vring.num) | |
| 351 | - errx(1, "Guest says index %u is available", head); | |
| 351 | + if (head >= vq->vring.num) { | |
| 352 | + fprintf(stderr, "Guest says index %u is available", head); | |
| 353 | + exit(1); | |
| 354 | + } | |
| 352 | 355 | |
| 353 | 356 | return head; |
| 354 | 357 | } |
| ... | ... | @@ -366,8 +369,10 @@ static unsigned virtqueue_next_desc(VirtQueue *vq, unsigned int i) |
| 366 | 369 | /* Make sure compiler knows to grab that: we don't want it changing! */ |
| 367 | 370 | wmb(); |
| 368 | 371 | |
| 369 | - if (next >= vq->vring.num) | |
| 370 | - errx(1, "Desc next is %u", next); | |
| 372 | + if (next >= vq->vring.num) { | |
| 373 | + fprintf(stderr, "Desc next is %u", next); | |
| 374 | + exit(1); | |
| 375 | + } | |
| 371 | 376 | |
| 372 | 377 | return next; |
| 373 | 378 | } |
| ... | ... | @@ -386,8 +391,10 @@ int virtqueue_avail_bytes(VirtQueue *vq, int in_bytes, int out_bytes) |
| 386 | 391 | i = virtqueue_get_head(vq, idx++); |
| 387 | 392 | do { |
| 388 | 393 | /* If we've got too many, that implies a descriptor loop. */ |
| 389 | - if (++num_bufs > vq->vring.num) | |
| 390 | - errx(1, "Looped descriptor"); | |
| 394 | + if (++num_bufs > vq->vring.num) { | |
| 395 | + fprintf(stderr, "Looped descriptor"); | |
| 396 | + exit(1); | |
| 397 | + } | |
| 391 | 398 | |
| 392 | 399 | if (vring_desc_flags(vq, i) & VRING_DESC_F_WRITE) { |
| 393 | 400 | if (in_bytes > 0 && |
| ... | ... | @@ -447,12 +454,16 @@ int virtqueue_pop(VirtQueue *vq, VirtQueueElement *elem) |
| 447 | 454 | sg->iov_len); |
| 448 | 455 | } |
| 449 | 456 | #endif |
| 450 | - if (sg->iov_base == NULL) | |
| 451 | - errx(1, "Invalid mapping\n"); | |
| 457 | + if (sg->iov_base == NULL) { | |
| 458 | + fprintf(stderr, "Invalid mapping\n"); | |
| 459 | + exit(1); | |
| 460 | + } | |
| 452 | 461 | |
| 453 | 462 | /* If we've got too many, that implies a descriptor loop. */ |
| 454 | - if ((elem->in_num + elem->out_num) > vq->vring.num) | |
| 455 | - errx(1, "Looped descriptor"); | |
| 463 | + if ((elem->in_num + elem->out_num) > vq->vring.num) { | |
| 464 | + fprintf(stderr, "Looped descriptor"); | |
| 465 | + exit(1); | |
| 466 | + } | |
| 456 | 467 | } while ((i = virtqueue_next_desc(vq, i)) != vq->vring.num); |
| 457 | 468 | |
| 458 | 469 | elem->index = head; | ... | ... |
hw/virtio.h
| ... | ... | @@ -14,10 +14,18 @@ |
| 14 | 14 | #ifndef _QEMU_VIRTIO_H |
| 15 | 15 | #define _QEMU_VIRTIO_H |
| 16 | 16 | |
| 17 | -#include <sys/uio.h> | |
| 18 | 17 | #include "hw.h" |
| 19 | 18 | #include "pci.h" |
| 20 | 19 | |
| 20 | +#ifdef _WIN32 | |
| 21 | +struct iovec { | |
| 22 | + void *iov_base; | |
| 23 | + size_t iov_len; | |
| 24 | +}; | |
| 25 | +#else | |
| 26 | +#include <sys/uio.h> | |
| 27 | +#endif | |
| 28 | + | |
| 21 | 29 | /* from Linux's linux/virtio_config.h */ |
| 22 | 30 | |
| 23 | 31 | /* Status byte for guest to report progress, and synchronize features. */ | ... | ... |