lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 2 Apr 2008 20:12:58 +1100 From: Nick Piggin <nickpiggin@...oo.com.au> To: Andrew Morton <akpm@...ux-foundation.org> Cc: Chris Snook <csnook@...hat.com>, Dave Jones <davej@...emonkey.org.uk>, Linux Kernel <linux-kernel@...r.kernel.org> Subject: Re: GFP_ATOMIC page allocation failures. On Wednesday 02 April 2008 18:56, Andrew Morton wrote: > > Limiting this to once per boot should suffice for debugging purposes. > > Even if you manage to concoct a bug that always survives the first > > failure, you should be able to take the hint when you keep seeing this > > in dmesg. > > The appropriate thing to do here is to convert known-good drivers (such as > e1000[e]) to use __GFP_NOWARN. > > Unfortunately netdev_alloc_skb() went and assumed GFP_ATOMIC, but I guess > we can dive below the covers and use __netdev_alloc_skb(): It's still actually nice to know how often it is happening even for these known good sites because too much can indicate a problem and that you could actually bring performance up by tuning some things. So I think that the messages should stay, and they should print out some header to say that it is only a warning and if not happening too often then it is not a problem, and if it is continually happening then please try X or Y or post a message to lkml... > > > > From: Andrew Morton <akpm@...ux-foundation.org> > > We get rather a lot of reports of page allocation warnings coming out of > e1000. But this driver is know to handle them properly so let's suppress > them. > > Cc: Auke Kok <auke-jan.h.kok@...el.com> > Cc: Jesse Brandeburg <jesse.brandeburg@...el.com> > Cc: Jeff Garzik <jeff@...zik.org> > Signed-off-by: Andrew Morton <akpm@...ux-foundation.org> > --- > > drivers/net/e1000/e1000.h | 4 ++++ > drivers/net/e1000/e1000_main.c | 10 +++++----- > 2 files changed, 9 insertions(+), 5 deletions(-) > > diff -puN > drivers/net/e1000/e1000_main.c~e1000-suppress-page-allocation-failure-warni >ngs drivers/net/e1000/e1000_main.c --- > a/drivers/net/e1000/e1000_main.c~e1000-suppress-page-allocation-failure-war >nings +++ a/drivers/net/e1000/e1000_main.c > @@ -4296,7 +4296,7 @@ e1000_clean_rx_irq(struct e1000_adapter > * of reassembly being done in the stack */ > if (length < copybreak) { > struct sk_buff *new_skb = > - netdev_alloc_skb(netdev, length + NET_IP_ALIGN); > + e1000_alloc_skb(netdev, length + NET_IP_ALIGN); > if (new_skb) { > skb_reserve(new_skb, NET_IP_ALIGN); > skb_copy_to_linear_data_offset(new_skb, > @@ -4585,7 +4585,7 @@ e1000_alloc_rx_buffers(struct e1000_adap > goto map_skb; > } > > - skb = netdev_alloc_skb(netdev, bufsz); > + skb = e1000_alloc_skb(netdev, bufsz); > if (unlikely(!skb)) { > /* Better luck next round */ > adapter->alloc_rx_buff_failed++; > @@ -4598,7 +4598,7 @@ e1000_alloc_rx_buffers(struct e1000_adap > DPRINTK(RX_ERR, ERR, "skb align check failed: %u bytes " > "at %p\n", bufsz, skb->data); > /* Try again, without freeing the previous */ > - skb = netdev_alloc_skb(netdev, bufsz); > + skb = e1000_alloc_skb(netdev, bufsz); > /* Failed allocation, critical failure */ > if (!skb) { > dev_kfree_skb(oldskb); > @@ -4720,8 +4720,8 @@ e1000_alloc_rx_buffers_ps(struct e1000_a > rx_desc->read.buffer_addr[j+1] = ~cpu_to_le64(0); > } > > - skb = netdev_alloc_skb(netdev, > - adapter->rx_ps_bsize0 + NET_IP_ALIGN); > + skb = e1000_alloc_skb(netdev, > + adapter->rx_ps_bsize0 + NET_IP_ALIGN); > > if (unlikely(!skb)) { > adapter->alloc_rx_buff_failed++; > diff -puN > drivers/net/e1000/e1000.h~e1000-suppress-page-allocation-failure-warnings > drivers/net/e1000/e1000.h --- > a/drivers/net/e1000/e1000.h~e1000-suppress-page-allocation-failure-warnings > +++ a/drivers/net/e1000/e1000.h > @@ -358,5 +358,9 @@ extern void e1000_power_up_phy(struct e1 > extern void e1000_set_ethtool_ops(struct net_device *netdev); > extern void e1000_check_options(struct e1000_adapter *adapter); > > +static inline void *e1000_alloc_skb(struct net_device *dev, unsigned int > length) +{ > + return __netdev_alloc_skb(dev, length, GFP_ATOMIC|__GFP_NOWARN); > +} > > #endif /* _E1000_H_ */ > _ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists