This patch makes ioemu build again on NetBSD.
Thanks Samuel.
Christoph
On Wednesday 13 February 2008 18:15:14 Samuel Thibault wrote:
> Ok, then this should fix it, backported from upstream.
>
>
> ioemu: backport upstream's qemu_memalign.
>
> Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>
>
> diff -r 889b6b7d306f tools/ioemu/block-vbd.c
> --- a/tools/ioemu/block-vbd.c Wed Feb 13 17:02:05 2008 +0000
> +++ b/tools/ioemu/block-vbd.c Wed Feb 13 17:12:59 2008 +0000
> @@ -223,7 +223,7 @@ static int vbd_read(BlockDriverState *bs
> * copying */
> if (!((uintptr_t)buf & (SECTOR_SIZE-1)))
> return vbd_aligned_io(bs, sector_num, buf, nb_sectors, 0);
> - iobuf = memalign(PAGE_SIZE, nb_sectors * SECTOR_SIZE);
> + iobuf = qemu_memalign(PAGE_SIZE, nb_sectors * SECTOR_SIZE);
> ret = vbd_aligned_io(bs, sector_num, iobuf, nb_sectors, 0);
> memcpy(buf, iobuf, nb_sectors * SECTOR_SIZE);
> free(iobuf);
> @@ -242,7 +242,7 @@ static int vbd_write(BlockDriverState *b
> int ret;
> if (!((uintptr_t)buf & (SECTOR_SIZE-1)))
> return vbd_aligned_io(bs, sector_num, (uint8_t*) buf, nb_sectors, 1);
> - iobuf = memalign(PAGE_SIZE, nb_sectors * SECTOR_SIZE);
> + iobuf = qemu_memalign(PAGE_SIZE, nb_sectors * SECTOR_SIZE);
> memcpy(iobuf, buf, nb_sectors * SECTOR_SIZE);
> ret = vbd_aligned_io(bs, sector_num, iobuf, nb_sectors, 1);
> free(iobuf);
> diff -r 889b6b7d306f tools/ioemu/hw/fdc.c
> --- a/tools/ioemu/hw/fdc.c Wed Feb 13 17:02:05 2008 +0000
> +++ b/tools/ioemu/hw/fdc.c Wed Feb 13 17:12:59 2008 +0000
> @@ -378,7 +378,7 @@ struct fdctrl_t {
> uint8_t cur_drv;
> uint8_t bootsel;
> /* Command FIFO */
> - uint8_t fifo[FD_SECTOR_LEN];
> + uint8_t *fifo;
> uint32_t data_pos;
> uint32_t data_len;
> uint8_t data_state;
> @@ -497,6 +497,11 @@ fdctrl_t *fdctrl_init (int irq_lvl, int
> fdctrl = qemu_mallocz(sizeof(fdctrl_t));
> if (!fdctrl)
> return NULL;
> + fdctrl->fifo = qemu_memalign(512, FD_SECTOR_LEN);
> + if (fdctrl->fifo == NULL) {
> + qemu_free(fdctrl);
> + return NULL;
> + }
> fdctrl->result_timer = qemu_new_timer(vm_clock,
> fdctrl_result_timer, fdctrl);
>
> diff -r 889b6b7d306f tools/ioemu/hw/ide.c
> --- a/tools/ioemu/hw/ide.c Wed Feb 13 17:02:05 2008 +0000
> +++ b/tools/ioemu/hw/ide.c Wed Feb 13 17:12:59 2008 +0000
> @@ -2306,7 +2306,7 @@ static void ide_init2(IDEState *ide_stat
>
> for(i = 0; i < 2; i++) {
> s = ide_state + i;
> - s->io_buffer = memalign(getpagesize(), MAX_MULT_SECTORS*512 + 4);
> + s->io_buffer = qemu_memalign(getpagesize(), MAX_MULT_SECTORS*512 +
> 4); if (i == 0)
> s->bs = hd0;
> else
> diff -r 889b6b7d306f tools/ioemu/hw/scsi-disk.c
> --- a/tools/ioemu/hw/scsi-disk.c Wed Feb 13 17:02:05 2008 +0000
> +++ b/tools/ioemu/hw/scsi-disk.c Wed Feb 13 17:12:59 2008 +0000
> @@ -81,7 +81,7 @@ static SCSIRequest *scsi_new_request(SCS
> free_requests = r->next;
> } else {
> r = qemu_malloc(sizeof(SCSIRequest));
> - r->dma_buf = memalign(getpagesize(), SCSI_DMA_BUF_SIZE);
> + r->dma_buf = qemu_memalign(getpagesize(), SCSI_DMA_BUF_SIZE);
> }
> r->dev = s;
> r->tag = tag;
> diff -r 889b6b7d306f tools/ioemu/osdep.c
> --- a/tools/ioemu/osdep.c Wed Feb 13 17:02:05 2008 +0000
> +++ b/tools/ioemu/osdep.c Wed Feb 13 17:12:59 2008 +0000
> @@ -61,6 +61,10 @@ void *qemu_malloc(size_t size)
> }
>
> #if defined(_WIN32)
> +void *qemu_memalign(size_t alignment, size_t size)
> +{
> + return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
> +}
>
> void *qemu_vmalloc(size_t size)
> {
> @@ -172,6 +176,22 @@ void kqemu_vfree(void *ptr)
>
> #endif
>
> +void *qemu_memalign(size_t alignment, size_t size)
> +{
> +#if defined(_POSIX_C_SOURCE)
> + int ret;
> + void *ptr;
> + ret = posix_memalign(&ptr, alignment, size);
> + if (ret != 0)
> + return NULL;
> + return ptr;
> +#elif defined(_BSD)
> + return valloc(size);
> +#else
> + return memalign(alignment, size);
> +#endif
> +}
> +
> /* alloc shared memory pages */
> void *qemu_vmalloc(size_t size)
> {
> diff -r 889b6b7d306f tools/ioemu/osdep.h
> --- a/tools/ioemu/osdep.h Wed Feb 13 17:02:05 2008 +0000
> +++ b/tools/ioemu/osdep.h Wed Feb 13 17:12:59 2008 +0000
> @@ -14,6 +14,7 @@ void qemu_free(void *ptr);
> void qemu_free(void *ptr);
> char *qemu_strdup(const char *str);
>
> +void *qemu_memalign(size_t alignment, size_t size);
> void *qemu_vmalloc(size_t size);
> void qemu_vfree(void *ptr);
--
AMD Saxony, Dresden, Germany
Operating System Research Center
Legal Information:
AMD Saxony Limited Liability Company & Co. KG
Sitz (Geschäftsanschrift):
Wilschdorfer Landstr. 101, 01109 Dresden, Deutschland
Registergericht Dresden: HRA 4896
vertretungsberechtigter Komplementär:
AMD Saxony LLC (Sitz Wilmington, Delaware, USA)
Geschäftsführer der AMD Saxony LLC:
Dr. Hans-R. Deppe, Thomas McCoy
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|