From: Pavel Belous <pavel.bel...@aquantia.com> We should allocate the number of pages based on the config parameter AQ_CFG_RX_FRAME_MAX.
Signed-off-by: Pavel Belous <pavel.bel...@aquantia.com> --- drivers/net/ethernet/aquantia/atlantic/aq_nic.c | 4 ++-- drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c index 7000b9f..5e10732 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c @@ -603,9 +603,9 @@ __acquires(&ring->lock) do { if (spin_trylock(&ring->header.lock)) { - frags = aq_nic_map_skb(self, skb, &buffers[0]); + frags = aq_nic_map_skb(self, skb, buffers); - aq_ring_tx_append_buffs(ring, &buffers[0], frags); + aq_ring_tx_append_buffs(ring, buffers, frags); err = self->aq_hw_ops.hw_ring_tx_xmit(self->aq_hw, ring, frags); diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c index 8ebed0d..b747d10 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c @@ -279,6 +279,8 @@ int aq_ring_rx_fill(struct aq_ring_s *self) struct aq_ring_buff_s *buff = NULL; int err = 0; int i = 0; + unsigned int pages_order = fls(AQ_CFG_RX_FRAME_MAX / PAGE_SIZE + + (AQ_CFG_RX_FRAME_MAX % PAGE_SIZE ? 1 : 0)) - 1; for (i = aq_ring_avail_dx(self); i--; self->sw_tail = aq_ring_next_dx(self, self->sw_tail)) { @@ -288,7 +290,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; -- 2.7.4