/* This is the packet destructor used for Tx packets that need to remain mapped until they are freed rather than until their Tx descriptors are freed.  */
static void deferred_unmap_destructor(struct sk_buff *skb)
/* This is the packet destructor used for Tx packets that need to remain mapped until they are freed rather than until their Tx descriptors are freed.  */
static void deferred_unmap_destructor(struct sk_buff *skb)
{
	int i;
	const dma_addr_t *p;
	const struct skb_shared_info *si;
	const struct deferred_unmap_info *dui;
	dui = (struct deferred_unmap_info *)skb->head;
	p = dui->addr;
	if (skb->tail - skb->transport_header)
		pci_unmap_single(dui->pdev, *p++,
				 skb->tail - skb->transport_header,
				 PCI_DMA_TODEVICE);
	si = skb_shinfo(skb);
	for (i = 0; i < si->nr_frags; i++)
		pci_unmap_page(dui->pdev, *p++, si->frags[i].size,
			       PCI_DMA_TODEVICE);
}