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: [email protected]
Reporter: [email protected]
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.
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"