in drivers/vector_kern.c [483:518]
static void destroy_queue(struct vector_queue *qi)
{
int i;
struct iovec *iov;
struct vector_private *vp = netdev_priv(qi->dev);
struct mmsghdr *mmsg_vector;
if (qi == NULL)
return;
/* deallocate any skbuffs - we rely on any unused to be
* set to NULL.
*/
if (qi->skbuff_vector != NULL) {
for (i = 0; i < qi->max_depth; i++) {
if (*(qi->skbuff_vector + i) != NULL)
dev_kfree_skb_any(*(qi->skbuff_vector + i));
}
kfree(qi->skbuff_vector);
}
/* deallocate matching IOV structures including header buffs */
if (qi->mmsg_vector != NULL) {
mmsg_vector = qi->mmsg_vector;
for (i = 0; i < qi->max_depth; i++) {
iov = mmsg_vector->msg_hdr.msg_iov;
if (iov != NULL) {
if ((vp->header_size > 0) &&
(iov->iov_base != NULL))
kfree(iov->iov_base);
kfree(iov);
}
mmsg_vector++;
}
kfree(qi->mmsg_vector);
}
kfree(qi);
}