@@ -1018,7 +1018,8 @@ static void discard_partial_frame(struct macb_queue *queue, unsigned int begin,
10181018 */
10191019}
10201020
1021- static int gem_rx (struct macb_queue * queue , int budget )
1021+ static int gem_rx (struct macb_queue * queue , struct napi_struct * napi ,
1022+ int budget )
10221023{
10231024 struct macb * bp = queue -> bp ;
10241025 unsigned int len ;
@@ -1100,16 +1101,16 @@ static int gem_rx(struct macb_queue *queue, int budget)
11001101 skb -> data , 32 , true);
11011102#endif
11021103
1103- netif_receive_skb ( skb );
1104+ napi_gro_receive ( napi , skb );
11041105 }
11051106
11061107 gem_rx_refill (queue );
11071108
11081109 return count ;
11091110}
11101111
1111- static int macb_rx_frame (struct macb_queue * queue , unsigned int first_frag ,
1112- unsigned int last_frag )
1112+ static int macb_rx_frame (struct macb_queue * queue , struct napi_struct * napi ,
1113+ unsigned int first_frag , unsigned int last_frag )
11131114{
11141115 unsigned int len ;
11151116 unsigned int frag ;
@@ -1185,7 +1186,7 @@ static int macb_rx_frame(struct macb_queue *queue, unsigned int first_frag,
11851186 bp -> dev -> stats .rx_bytes += skb -> len ;
11861187 netdev_vdbg (bp -> dev , "received skb of length %u, csum: %08x\n" ,
11871188 skb -> len , skb -> csum );
1188- netif_receive_skb ( skb );
1189+ napi_gro_receive ( napi , skb );
11891190
11901191 return 0 ;
11911192}
@@ -1208,7 +1209,8 @@ static inline void macb_init_rx_ring(struct macb_queue *queue)
12081209 queue -> rx_tail = 0 ;
12091210}
12101211
1211- static int macb_rx (struct macb_queue * queue , int budget )
1212+ static int macb_rx (struct macb_queue * queue , struct napi_struct * napi ,
1213+ int budget )
12121214{
12131215 struct macb * bp = queue -> bp ;
12141216 bool reset_rx_queue = false;
@@ -1245,7 +1247,7 @@ static int macb_rx(struct macb_queue *queue, int budget)
12451247 continue ;
12461248 }
12471249
1248- dropped = macb_rx_frame (queue , first_frag , tail );
1250+ dropped = macb_rx_frame (queue , napi , first_frag , tail );
12491251 first_frag = -1 ;
12501252 if (unlikely (dropped < 0 )) {
12511253 reset_rx_queue = true;
@@ -1299,7 +1301,7 @@ static int macb_poll(struct napi_struct *napi, int budget)
12991301 netdev_vdbg (bp -> dev , "poll: status = %08lx, budget = %d\n" ,
13001302 (unsigned long )status , budget );
13011303
1302- work_done = bp -> macbgem_ops .mog_rx (queue , budget );
1304+ work_done = bp -> macbgem_ops .mog_rx (queue , napi , budget );
13031305 if (work_done < budget ) {
13041306 napi_complete_done (napi , work_done );
13051307
@@ -3514,7 +3516,7 @@ static int macb_init(struct platform_device *pdev)
35143516
35153517 queue = & bp -> queues [q ];
35163518 queue -> bp = bp ;
3517- netif_napi_add (dev , & queue -> napi , macb_poll , 64 );
3519+ netif_napi_add (dev , & queue -> napi , macb_poll , NAPI_POLL_WEIGHT );
35183520 if (hw_q ) {
35193521 queue -> ISR = GEM_ISR (hw_q - 1 );
35203522 queue -> IER = GEM_IER (hw_q - 1 );
@@ -4206,15 +4208,13 @@ static int macb_probe(struct platform_device *pdev)
42064208 bp -> rx_intr_mask |= MACB_BIT (RXUBR );
42074209
42084210 mac = of_get_mac_address (np );
4209- if (mac ) {
4211+ if (PTR_ERR (mac ) == - EPROBE_DEFER ) {
4212+ err = - EPROBE_DEFER ;
4213+ goto err_out_free_netdev ;
4214+ } else if (!IS_ERR_OR_NULL (mac )) {
42104215 ether_addr_copy (bp -> dev -> dev_addr , mac );
42114216 } else {
4212- err = nvmem_get_mac_address (& pdev -> dev , bp -> dev -> dev_addr );
4213- if (err ) {
4214- if (err == - EPROBE_DEFER )
4215- goto err_out_free_netdev ;
4216- macb_get_hwaddr (bp );
4217- }
4217+ macb_get_hwaddr (bp );
42184218 }
42194219
42204220 err = of_get_phy_mode (np );
0 commit comments