[lkml]   [2001]   [May]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: alpha iommu fixes
Andrea Arcangeli wrote:
> [ cc'ed to l-k ]
> > DMA-mapping.txt assumes that it cannot fail.
> DMA-mapping.txt is wrong. Both pci_map_sg and pci_map_single failed if
> they returned zero. You either have to drop the skb or to try again later
> if they returns zero.

Well this is news to me. No drivers understand this.
How long has this been the case? What platforms?

For netdevices at least, the pci_map_single() call is always close
to the site of the skb allocation. So what we can do is to roll
them together and use the existing oom-handling associated with alloc_skb(),
assuming the driver has it...

static inline struct sk_buff *pci_alloc_skb(
int length, int gfp_mask, int reserve,
pci_dev *pdev, dma_addr_t *dma_addr, int direction, int irq)
struct sk_buff *skb = alloc_skb(length + 16, gfp_mask);
if (skb) {
skb_reserve(ret, 16 + reserve);
*dma_addr = pci_map_single(pdev, skb->tail, size - reserve, direction);
if (*dma_addr == 0) {
if (irq)
skb = 0;
return skb;

Sticky, but a lot of it will be compiled away.

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2005-03-22 12:53    [W:0.148 / U:0.124 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site