Date: Fri, 18 May 2018 14:46:07 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 228335] [patch] virtio indirect descriptors should use contiguous memory Message-ID: <bug-228335-227@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=228335 Bug ID: 228335 Summary: [patch] virtio indirect descriptors should use contiguous memory Product: Base System Version: 11.1-RELEASE Hardware: Any OS: Any Status: New Severity: Affects Only Me Priority: --- Component: kern Assignee: bugs@FreeBSD.org Reporter: nreilly@blackberry.com virtio is allocating the standard descriptors using contigmalloc() but the indirect descriptors using malloc(). This doesn't normally cause an issue because the malloc() happens to get contiguous memory, but I was using a different memory allocator and ran into this issue. In my scenario then the virtio network driver caused QEMU on Linux to exit. Index: sys/dev/virtio/virtqueue.c =================================================================== --- sys/dev/virtio/virtqueue.c (revision 330873) +++ sys/dev/virtio/virtqueue.c (working copy) @@ -249,7 +249,8 @@ for (i = 0; i < vq->vq_nentries; i++) { dxp = &vq->vq_descx[i]; - dxp->indirect = malloc(size, M_DEVBUF, M_NOWAIT); + dxp->indirect = contigmalloc(size, M_DEVBUF, M_NOWAIT, + 0, 0xFFFFFFFFUL, PAGE_SIZE, 0); if (dxp->indirect == NULL) { device_printf(dev, "cannot allocate indirect list\n"); return (ENOMEM); @@ -274,7 +275,7 @@ if (dxp->indirect == NULL) break; - free(dxp->indirect, M_DEVBUF); + contigfree(dxp->indirect, vq->vq_indirect_mem_size, M_DEVBUF); dxp->indirect = NULL; dxp->indirect_paddr = 0; } -- You are receiving this mail because: You are the assignee for the bug.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-228335-227>
