Message ID | 1337254070-32500-3-git-send-email-jeffrey.t.kirsher@intel.com |
---|---|
State | Superseded, archived |
Headers | show |
On Thu, 2012-05-17 at 04:27 -0700, Jeff Kirsher wrote: > From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> > > According to the comment, errata 23 says that the memory we allocate > can't cross a 64KiB boundary. In case of jumbo frames we allocate > complete pages which can never cross the 64KiB boundary because > PAGE_SIZE should be a multiple of 64KiB so we stop either before the Should be a factor, not multiple. [...] > --- a/drivers/net/ethernet/intel/e1000/e1000_main.c > +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c > @@ -4391,30 +4391,6 @@ e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter, > break; > } > > - /* Fix for errata 23, can't cross 64kB boundary */ > - if (!e1000_check_64k_bound(adapter, skb->data, bufsz)) { > - struct sk_buff *oldskb = skb; > - e_err(rx_err, "skb align check failed: %u bytes at " > - "%p\n", bufsz, skb->data); > - /* Try again, without freeing the previous */ > - skb = netdev_alloc_skb_ip_align(netdev, bufsz); > - /* Failed allocation, critical failure */ > - if (!skb) { > - dev_kfree_skb(oldskb); > - adapter->alloc_rx_buff_failed++; > - break; > - } > - > - if (!e1000_check_64k_bound(adapter, skb->data, bufsz)) { > - /* give up */ > - dev_kfree_skb(skb); > - dev_kfree_skb(oldskb); > - break; /* while (cleaned_count--) */ > - } > - > - /* Use new allocation */ > - dev_kfree_skb(oldskb); > - } [...] I don't believe PAGE_SIZE is >64K on any architecture, but perhaps you should replace the run-time check with: BUILD_BUG_ON(PAGE_SIZE > 0x10000); in case that changes in future. Ben.
From: Ben Hutchings <bhutchings@solarflare.com> Date: Thu, 17 May 2012 15:40:30 +0100 > I don't believe PAGE_SIZE is >64K on any architecture, but perhaps you > should replace the run-time check with: powerpc can be built with PAGE_SHIFT == 18 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c index f1aef68..fefbf4d 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c @@ -4391,30 +4391,6 @@ e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter, break; } - /* Fix for errata 23, can't cross 64kB boundary */ - if (!e1000_check_64k_bound(adapter, skb->data, bufsz)) { - struct sk_buff *oldskb = skb; - e_err(rx_err, "skb align check failed: %u bytes at " - "%p\n", bufsz, skb->data); - /* Try again, without freeing the previous */ - skb = netdev_alloc_skb_ip_align(netdev, bufsz); - /* Failed allocation, critical failure */ - if (!skb) { - dev_kfree_skb(oldskb); - adapter->alloc_rx_buff_failed++; - break; - } - - if (!e1000_check_64k_bound(adapter, skb->data, bufsz)) { - /* give up */ - dev_kfree_skb(skb); - dev_kfree_skb(oldskb); - break; /* while (cleaned_count--) */ - } - - /* Use new allocation */ - dev_kfree_skb(oldskb); - } buffer_info->skb = skb; buffer_info->length = adapter->rx_buffer_len; check_page: