Il 03/09/2014 06:29, Rusty Russell ha scritto: > + desc = kmalloc(total_sg * sizeof(struct vring_desc), gfp); > + if (!desc) > + return NULL; > > - return head; > + for (i = 0; i < total_sg; i++) > + desc[i].next = i+1; > + return desc; > } Would it make sense to keep a cache of a few (say) 8- or 16-element indirect descriptors? You'd only have to do this ugly (and slowish) for loop on the first allocation. Also, since this is mostly an aesthetic patch, > + if (indirect) > + vq->free_head = vq->vring.desc[head].next; > + else > + vq->free_head = i; I'd move the indirect case above, where the vring.desc[head] is actually allocated. Paolo _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization