[PATCH net] atl1c: Improve driver not to do order 4 GFP_ATOMIC allocation
atl1c driver is doing order-4 allocation with GFP_ATOMIC priority. That often breaks networking after resume. Switch to GFP_KERNEL. Still not ideal, but should be significantly better. atl1c_setup_ring_resources() is called from .open() function, and already uses GFP_KERNEL, so this change is safe. Signed-off-by: Pavel Machek diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c index 2795d6d..afb71e0 100644 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c @@ -1016,10 +1016,10 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter) sizeof(struct atl1c_recv_ret_status) * rx_desc_count + 8 * 4; - ring_header->desc = pci_alloc_consistent(pdev, ring_header->size, - &ring_header->dma); + ring_header->desc = dma_alloc_coherent(&pdev->dev, ring_header->size, + &ring_header->dma, GFP_KERNEL); if (unlikely(!ring_header->desc)) { - dev_err(&pdev->dev, "pci_alloc_consistend failed\n"); + dev_err(&pdev->dev, "could not get memory for DMA buffer\n"); goto err_nomem; } memset(ring_header->desc, 0, ring_header->size); -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH net] atl1c: Improve driver not to do order 4 GFP_ATOMIC allocation
atl1c driver is doing order-4 allocation with GFP_ATOMIC priority. That often breaks networking after resume. Switch to GFP_KERNEL. Still not ideal, but should be significantly better. atl1c_setup_ring_resources() is called from .open() function, and already uses GFP_KERNEL, so this change is safe. Signed-off-by: Pavel Machek Acked-by: Michal Hocko Cc: stable diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c index 2795d6d..8b5988e 100644 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c @@ -1016,13 +1016,12 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter) sizeof(struct atl1c_recv_ret_status) * rx_desc_count + 8 * 4; - ring_header->desc = pci_alloc_consistent(pdev, ring_header->size, - &ring_header->dma); + ring_header->desc = dma_zalloc_coherent(&pdev->dev, ring_header->size, + &ring_header->dma, GFP_KERNEL); if (unlikely(!ring_header->desc)) { - dev_err(&pdev->dev, "pci_alloc_consistend failed\n"); + dev_err(&pdev->dev, "could not get memory for DMA buffer\n"); goto err_nomem; } - memset(ring_header->desc, 0, ring_header->size); /* init TPD ring */ tpd_ring[0].dma = roundup(ring_header->dma, 8); -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH net] atl1c: Improve driver not to do order 4 GFP_ATOMIC allocation
On Thu 03-12-15 16:59:05, Pavel Machek wrote: > > atl1c driver is doing order-4 allocation with GFP_ATOMIC > priority. That often breaks networking after resume. Switch to > GFP_KERNEL. Still not ideal, but should be significantly better. > > atl1c_setup_ring_resources() is called from .open() function, and > already uses GFP_KERNEL, so this change is safe. Thanks for updating the changelog > Signed-off-by: Pavel Machek Acked-by: Michal Hocko > > diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c > b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c > index 2795d6d..afb71e0 100644 > --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c > +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c > @@ -1016,10 +1016,10 @@ static int atl1c_setup_ring_resources(struct > atl1c_adapter *adapter) > sizeof(struct atl1c_recv_ret_status) * rx_desc_count + > 8 * 4; > > - ring_header->desc = pci_alloc_consistent(pdev, ring_header->size, > - &ring_header->dma); > + ring_header->desc = dma_alloc_coherent(&pdev->dev, ring_header->size, > +&ring_header->dma, GFP_KERNEL); > if (unlikely(!ring_header->desc)) { > - dev_err(&pdev->dev, "pci_alloc_consistend failed\n"); > + dev_err(&pdev->dev, "could not get memory for DMA buffer\n"); > goto err_nomem; > } > memset(ring_header->desc, 0, ring_header->size); > > > -- > (english) http://www.livejournal.com/~pavelmachek > (cesky, pictures) > http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH net] atl1c: Improve driver not to do order 4 GFP_ATOMIC allocation
On Thu, 2015-12-03 at 16:59 +0100, Pavel Machek wrote: > atl1c driver is doing order-4 allocation with GFP_ATOMIC > priority. That often breaks networking after resume. Switch to > GFP_KERNEL. Still not ideal, but should be significantly better. > > atl1c_setup_ring_resources() is called from .open() function, and > already uses GFP_KERNEL, so this change is safe. > > Signed-off-by: Pavel Machek > > diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c > b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c > index 2795d6d..afb71e0 100644 > --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c > +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c > @@ -1016,10 +1016,10 @@ static int atl1c_setup_ring_resources(struct > atl1c_adapter *adapter) > sizeof(struct atl1c_recv_ret_status) * rx_desc_count + > 8 * 4; > > - ring_header->desc = pci_alloc_consistent(pdev, ring_header->size, > - &ring_header->dma); > + ring_header->desc = dma_alloc_coherent(&pdev->dev, ring_header->size, > +&ring_header->dma, GFP_KERNEL); > if (unlikely(!ring_header->desc)) { > - dev_err(&pdev->dev, "pci_alloc_consistend failed\n"); > + dev_err(&pdev->dev, "could not get memory for DMA buffer\n"); > goto err_nomem; > } > memset(ring_header->desc, 0, ring_header->size); > > So this memset() will really require a different patch to get removed ? Sigh, not sure why I review patches. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH net] atl1c: Improve driver not to do order 4 GFP_ATOMIC allocation
From: Eric Dumazet Date: Thu, 03 Dec 2015 09:17:28 -0800 > On Thu, 2015-12-03 at 16:59 +0100, Pavel Machek wrote: >> atl1c driver is doing order-4 allocation with GFP_ATOMIC >> priority. That often breaks networking after resume. Switch to >> GFP_KERNEL. Still not ideal, but should be significantly better. >> >> atl1c_setup_ring_resources() is called from .open() function, and >> already uses GFP_KERNEL, so this change is safe. >> >> Signed-off-by: Pavel Machek >> >> diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c >> b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c >> index 2795d6d..afb71e0 100644 >> --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c >> +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c >> @@ -1016,10 +1016,10 @@ static int atl1c_setup_ring_resources(struct >> atl1c_adapter *adapter) >> sizeof(struct atl1c_recv_ret_status) * rx_desc_count + >> 8 * 4; >> >> -ring_header->desc = pci_alloc_consistent(pdev, ring_header->size, >> -&ring_header->dma); >> +ring_header->desc = dma_alloc_coherent(&pdev->dev, ring_header->size, >> + &ring_header->dma, GFP_KERNEL); >> if (unlikely(!ring_header->desc)) { >> -dev_err(&pdev->dev, "pci_alloc_consistend failed\n"); >> +dev_err(&pdev->dev, "could not get memory for DMA buffer\n"); >> goto err_nomem; >> } >> memset(ring_header->desc, 0, ring_header->size); >> >> > > So this memset() will really require a different patch to get removed ? > > Sigh, not sure why I review patches. Agreed, please use dma_zalloc_coherent() and kill that memset(). Thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH net] atl1c: Improve driver not to do order 4 GFP_ATOMIC allocation
> >>if (unlikely(!ring_header->desc)) { > >> - dev_err(&pdev->dev, "pci_alloc_consistend failed\n"); > >> + dev_err(&pdev->dev, "could not get memory for DMA buffer\n"); > >>goto err_nomem; > >>} > >>memset(ring_header->desc, 0, ring_header->size); > >> > >> > > > > So this memset() will really require a different patch to get removed ? > > > > Sigh, not sure why I review patches. > > Agreed, please use dma_zalloc_coherent() and kill that memset(). Ok, updated. I'll also add cc: stable, because it makes notebooks with affected chipset unusable. Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH net] atl1c: Improve driver not to do order 4 GFP_ATOMIC allocation
From: Pavel Machek Date: Fri, 4 Dec 2015 09:11:27 +0100 >> >> if (unlikely(!ring_header->desc)) { >> >> - dev_err(&pdev->dev, "pci_alloc_consistend failed\n"); >> >> + dev_err(&pdev->dev, "could not get memory for DMA buffer\n"); >> >> goto err_nomem; >> >> } >> >> memset(ring_header->desc, 0, ring_header->size); >> >> >> >> >> > >> > So this memset() will really require a different patch to get removed ? >> > >> > Sigh, not sure why I review patches. >> >> Agreed, please use dma_zalloc_coherent() and kill that memset(). > > Ok, updated. I'll also add cc: stable, because it makes notebooks with > affected chipset unusable. Networking patches do not use CC: stable, instead you simply ask me to queue it up and then I batch submit networking fixes to -stable periodically myself. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH net] atl1c: Improve driver not to do order 4 GFP_ATOMIC allocation
On Fri 2015-12-04 11:21:40, David Miller wrote: > From: Pavel Machek > Date: Fri, 4 Dec 2015 09:11:27 +0100 > > >> >> if (unlikely(!ring_header->desc)) { > >> >> - dev_err(&pdev->dev, "pci_alloc_consistend failed\n"); > >> >> + dev_err(&pdev->dev, "could not get memory for DMA > >> >> buffer\n"); > >> >> goto err_nomem; > >> >> } > >> >> memset(ring_header->desc, 0, ring_header->size); > >> >> > >> >> > >> > > >> > So this memset() will really require a different patch to get removed ? > >> > > >> > Sigh, not sure why I review patches. > >> > >> Agreed, please use dma_zalloc_coherent() and kill that memset(). > > > > Ok, updated. I'll also add cc: stable, because it makes notebooks with > > affected chipset unusable. > > Networking patches do not use CC: stable, instead you simply ask me > to queue it up and then I batch submit networking fixes to -stable > periodically myself. Ok, can you take the patch and ignore the Cc, or should I do one more iteration? Thanks, Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH net] atl1c: Improve driver not to do order 4 GFP_ATOMIC allocation
From: Pavel Machek Date: Fri, 4 Dec 2015 22:30:27 +0100 > On Fri 2015-12-04 11:21:40, David Miller wrote: >> From: Pavel Machek >> Date: Fri, 4 Dec 2015 09:11:27 +0100 >> >> >> >>if (unlikely(!ring_header->desc)) { >> >> >> - dev_err(&pdev->dev, "pci_alloc_consistend failed\n"); >> >> >> + dev_err(&pdev->dev, "could not get memory for DMA >> >> >> buffer\n"); >> >> >>goto err_nomem; >> >> >>} >> >> >>memset(ring_header->desc, 0, ring_header->size); >> >> >> >> >> >> >> >> > >> >> > So this memset() will really require a different patch to get removed ? >> >> > >> >> > Sigh, not sure why I review patches. >> >> >> >> Agreed, please use dma_zalloc_coherent() and kill that memset(). >> > >> > Ok, updated. I'll also add cc: stable, because it makes notebooks with >> > affected chipset unusable. >> >> Networking patches do not use CC: stable, instead you simply ask me >> to queue it up and then I batch submit networking fixes to -stable >> periodically myself. > > Ok, can you take the patch and ignore the Cc, or should I do one more > iteration? I took care of it. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html