Le lundi 28 novembre 2011 à 10:06 -0800, Alexander Duyck a écrit : > On 11/27/2011 12:07 AM, Eric Dumazet wrote: > > But why are these drivers using kmap_atomic() in first place, since > > their fragments are allocated in regular zone (GFP_ATOMIC or > > GFP_KERNEL) ? > > I was asking the same thing myself recently when I started working on > some copy-break like code for the ixgbe driver. I believe the main > reason is a lack of documentation. This code is based loosely on the > skb_copy_bits code which will use kmap_skb_frag over all of the paged > portions of the sk_buff. As such it was decided to map things via > kmap_atomic in order to guarantee the pages had a valid virtual address. > > If I understand things correctly, what you are brining up is that pages > allocated with either GFP_ATOMIC or GFP_KERNEL will always be allocated > from the lowmem pool and as such page_address should always succeed. Is > that correct? >
Yes. Either you could : A) allocate high memory pages to lower pressure on LOWMEM area on 32bit kernels. B) avoid using kmap_atomic() & kunmap_atomic() and be faster on 32bit kernels. skb_put(skb, length); memcpy(skb->data, page_address(buffer_info->page), length); ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-novd2d _______________________________________________ E1000-devel mailing list E1000-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/e1000-devel To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired