@@ -660,30 +660,16 @@ int mana_pre_alloc_rxbufs(struct mana_port_context *mpc, int new_mtu, int num_qu
660660 mpc -> rxbpre_total = 0 ;
661661
662662 for (i = 0 ; i < num_rxb ; i ++ ) {
663- if (mpc -> rxbpre_alloc_size > PAGE_SIZE ) {
664- va = netdev_alloc_frag (mpc -> rxbpre_alloc_size );
665- if (!va )
666- goto error ;
667-
668- page = virt_to_head_page (va );
669- /* Check if the frag falls back to single page */
670- if (compound_order (page ) <
671- get_order (mpc -> rxbpre_alloc_size )) {
672- put_page (page );
673- goto error ;
674- }
675- } else {
676- page = dev_alloc_page ();
677- if (!page )
678- goto error ;
663+ page = dev_alloc_pages (get_order (mpc -> rxbpre_alloc_size ));
664+ if (!page )
665+ goto error ;
679666
680- va = page_to_virt (page );
681- }
667+ va = page_to_virt (page );
682668
683669 da = dma_map_single (dev , va + mpc -> rxbpre_headroom ,
684670 mpc -> rxbpre_datasize , DMA_FROM_DEVICE );
685671 if (dma_mapping_error (dev , da )) {
686- put_page (virt_to_head_page ( va ) );
672+ put_page (page );
687673 goto error ;
688674 }
689675
@@ -1676,7 +1662,7 @@ static void mana_rx_skb(void *buf_va, bool from_pool,
16761662}
16771663
16781664static void * mana_get_rxfrag (struct mana_rxq * rxq , struct device * dev ,
1679- dma_addr_t * da , bool * from_pool , bool is_napi )
1665+ dma_addr_t * da , bool * from_pool )
16801666{
16811667 struct page * page ;
16821668 void * va ;
@@ -1687,21 +1673,6 @@ static void *mana_get_rxfrag(struct mana_rxq *rxq, struct device *dev,
16871673 if (rxq -> xdp_save_va ) {
16881674 va = rxq -> xdp_save_va ;
16891675 rxq -> xdp_save_va = NULL ;
1690- } else if (rxq -> alloc_size > PAGE_SIZE ) {
1691- if (is_napi )
1692- va = napi_alloc_frag (rxq -> alloc_size );
1693- else
1694- va = netdev_alloc_frag (rxq -> alloc_size );
1695-
1696- if (!va )
1697- return NULL ;
1698-
1699- page = virt_to_head_page (va );
1700- /* Check if the frag falls back to single page */
1701- if (compound_order (page ) < get_order (rxq -> alloc_size )) {
1702- put_page (page );
1703- return NULL ;
1704- }
17051676 } else {
17061677 page = page_pool_dev_alloc_pages (rxq -> page_pool );
17071678 if (!page )
@@ -1734,7 +1705,7 @@ static void mana_refill_rx_oob(struct device *dev, struct mana_rxq *rxq,
17341705 dma_addr_t da ;
17351706 void * va ;
17361707
1737- va = mana_get_rxfrag (rxq , dev , & da , & from_pool , true );
1708+ va = mana_get_rxfrag (rxq , dev , & da , & from_pool );
17381709 if (!va )
17391710 return ;
17401711
@@ -2176,7 +2147,7 @@ static int mana_fill_rx_oob(struct mana_recv_buf_oob *rx_oob, u32 mem_key,
21762147 if (mpc -> rxbufs_pre )
21772148 va = mana_get_rxbuf_pre (rxq , & da );
21782149 else
2179- va = mana_get_rxfrag (rxq , dev , & da , & from_pool , false );
2150+ va = mana_get_rxfrag (rxq , dev , & da , & from_pool );
21802151
21812152 if (!va )
21822153 return - ENOMEM ;
@@ -2262,6 +2233,7 @@ static int mana_create_page_pool(struct mana_rxq *rxq, struct gdma_context *gc)
22622233 pprm .nid = gc -> numa_node ;
22632234 pprm .napi = & rxq -> rx_cq .napi ;
22642235 pprm .netdev = rxq -> ndev ;
2236+ pprm .order = get_order (rxq -> alloc_size );
22652237
22662238 rxq -> page_pool = page_pool_create (& pprm );
22672239
0 commit comments