Message ID | 1376528722-1197-1-git-send-email-kamal@canonical.com |
---|---|
State | New |
Headers | show |
On Wed, 2013-08-14 at 18:05 -0700, Kamal Mostafa wrote: > This is a note to let you know that I have just added a patch titled > > atl1c: Fix misuse of netdev_alloc_skb in refilling rx ring I see now that this patch was reverted and replaced, so I'll drop it from the 3.8.y stable queue. I'll merge its replacement into 3.8-stable if/when it arrives in a future batch from David Miller. -Kamal > to the linux-3.8.y-queue branch of the 3.8.y.z extended stable tree > which can be found at: > > http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/linux-3.8.y-queue > > This patch is scheduled to be released in version 3.8.13.7. > > If you, or anyone else, feels it should not be added to this tree, please > reply to this email. > > For more information about the 3.8.y.z tree, see > https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable > > Thanks. > -Kamal > > ------ > > From 797217540b4cd9e4d119a533ce7b6693c926064f Mon Sep 17 00:00:00 2001 > From: Neil Horman <nhorman@tuxdriver.com> > Date: Fri, 26 Jul 2013 12:47:14 -0400 > Subject: atl1c: Fix misuse of netdev_alloc_skb in refilling rx ring > > commit ebe7fdbaf3e90ea22feade6c9f5e50f42b23b6d8 upstream. > > atl1c uses netdev_alloc_skb to refill its rx dma ring, but that call makes no > guarantees about the suitability of the memory for use in DMA. As a result > we've gotten reports of atl1c drivers occasionally hanging and needing to be > reset: > https://bugzilla.kernel.org/show_bug.cgi?id=54021 > > Fix this by modifying the call to use the internal version __netdev_alloc_skb, > where you can set the gfp_mask explicitly to include GFP_DMA. > > Tested by two reporters in the above bug, who have the hardware to validate it. > Both report immediate cessation of the problem with this patch > > Signed-off-by: Neil Horman <nhorman@tuxdriver.com> > CC: Jay Cliburn <jcliburn@gmail.com> > CC: "David S. Miller" <davem@davemloft.net> > Tested-by: Luis Henriques <luis.henriques@canonical.com> > Tested-by: Vincent Alquier <vincent.alquier@gmail.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > Signed-off-by: Kamal Mostafa <kamal@canonical.com> > --- > drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c > index bfcb8bc..4e438ff 100644 > --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c > +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c > @@ -1663,7 +1663,7 @@ static int atl1c_alloc_rx_buffer(struct atl1c_adapter *adapter) > while (next_info->flags & ATL1C_BUFFER_FREE) { > rfd_desc = ATL1C_RFD_DESC(rfd_ring, rfd_next_to_use); > > - skb = netdev_alloc_skb(adapter->netdev, adapter->rx_buffer_len); > + skb = __netdev_alloc_skb(adapter->netdev, adapter->rx_buffer_len, GFP_ATOMIC|GFP_DMA); > if (unlikely(!skb)) { > if (netif_msg_rx_err(adapter)) > dev_warn(&pdev->dev, "alloc rx buffer failed\n"); > -- > 1.8.1.2 >
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c index bfcb8bc..4e438ff 100644 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c @@ -1663,7 +1663,7 @@ static int atl1c_alloc_rx_buffer(struct atl1c_adapter *adapter) while (next_info->flags & ATL1C_BUFFER_FREE) { rfd_desc = ATL1C_RFD_DESC(rfd_ring, rfd_next_to_use); - skb = netdev_alloc_skb(adapter->netdev, adapter->rx_buffer_len); + skb = __netdev_alloc_skb(adapter->netdev, adapter->rx_buffer_len, GFP_ATOMIC|GFP_DMA); if (unlikely(!skb)) { if (netif_msg_rx_err(adapter)) dev_warn(&pdev->dev, "alloc rx buffer failed\n");