summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Belous <pavel.belous@aquantia.com>2017-02-20 22:36:49 +0300
committerDavid S. Miller <davem@davemloft.net>2017-02-20 17:11:09 -0500
commit89b643889b1f56d8b53728f6153a4237c849784b (patch)
treeefffc29967430abdc24b37111ed78b3b491e3f90
parentc0788f7463f138bb1d30552b3edac442781b4e11 (diff)
net: ethernet: aquantia: Fixed memory allocation if AQ_CFG_RX_FRAME_MAX > 1 page.
We should allocate the number of pages based on the config parameter AQ_CFG_RX_FRAME_MAX. Signed-off-by: Pavel Belous <pavel.belous@aquantia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_ring.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
index 22bb75eff274..51f4e7f5e132 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
@@ -270,6 +270,8 @@ err_exit:
int aq_ring_rx_fill(struct aq_ring_s *self)
{
+ unsigned int pages_order = fls(AQ_CFG_RX_FRAME_MAX / PAGE_SIZE +
+ (AQ_CFG_RX_FRAME_MAX % PAGE_SIZE ? 1 : 0)) - 1;
struct aq_ring_buff_s *buff = NULL;
int err = 0;
int i = 0;
@@ -282,7 +284,7 @@ int aq_ring_rx_fill(struct aq_ring_s *self)
buff->len = AQ_CFG_RX_FRAME_MAX;
buff->page = alloc_pages(GFP_ATOMIC | __GFP_COLD |
- __GFP_COMP, 0);
+ __GFP_COMP, pages_order);
if (!buff->page) {
err = -ENOMEM;
goto err_exit;