return 0;
}
+static inline void nc2_prefetch_posted (struct sk_buff *skb)
+{
+ void *va;
+ skb_frag_t *frag;
+ struct skb_cb_overlay *sco;
+
+ sco = get_skb_overlay(skb);
+ if (sco->is_posted && !sco->failed) {
+ if (sco->rx_buf)
+ va = sco->rx_buf->buffer +
+ sco->rx_buf->offset;
+ else {
+ frag = skb_shinfo(skb)->frags;
+ va = page_address(frag->page) + frag->page_offset;
+ }
+ prefetch(va);
+ prefetch(va+64);
+ prefetch(skb->head);
+ prefetch(skb->head+64);
+ }
+}
+
void receive_pending_skbs(struct netchannel2 *nc)
{
struct sk_buff *skb, *next;
skb = next = NULL;
while (!skb_queue_empty(&nc->pending_rx_queue)) {
next = __skb_dequeue(&nc->pending_rx_queue);
+ nc2_prefetch_posted(next);
if (skb)
lro_used |= nc2_receive_skb(nc, skb);
skb = next;