Thank you for your explanation, David. But pci_map_page should work fine if we have multiple contiguous pages in one frag that are allocated using alloc_pages, ie:
frag->page = alloc_pages(GFP_KERNEL, 2); // get 4 pages frag->page_offset = 0; frag->size = 4 * PAGE_SIZE; dma_addr = pci_map_page(frag->page, frag->page_offset, frag->size, ..); The reason I asked this is that I saw the following code in forthdeth drvier: #define NV_TX2_TSO_MAX_SHIFT) 14 /* add fragments to entries count */ for (i = 0; i < fragments; i++) { entries += (skb_shinfo(skb)->frags[i].size >> NV_TX2_TSO_MAX_SHIFT) + ((skb_shinfo(skb)->frags[i].size & (NV_TX2_TSO_MAX_SIZE-1)) ? 1 : 0); } This looks unnecessary if each frag is guaranteed not to span pages. Ronghua On 10/10/06, David Miller <[EMAIL PROTECTED]> wrote:
From: "Ronghua Zhang" <[EMAIL PROTECTED]> Date: Tue, 10 Oct 2006 15:37:04 -0700 > >From the code of tcp_sendmsg, it seems to me that each frag is at most > one page. Is it a guaranteed property or the driver should not assume > it? Thanks This assumption basically already exists everywhere since all drivers that create DMA mappings of the frags call pci_map_page().
- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html