Changeset 33499


Ignore:
Timestamp:
2012-09-21T02:13:08+02:00 (5 years ago)
Author:
nbd
Message:

cns3xxx: fix ethernet port lookup for multi-descriptor jumbo frames

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/cns3xxx/patches-3.3/410-ethernet_fix_jumbo_frame.patch

    r33498 r33499  
    100100                        desc++; 
    101101                } 
    102 @@ -588,49 +594,79 @@ static int eth_poll(struct napi_struct * 
     102@@ -579,7 +585,6 @@ static void clear_tx_desc(struct sw *sw) 
     103 static int eth_poll(struct napi_struct *napi, int budget) 
     104 { 
     105        struct sw *sw = container_of(napi, struct sw, napi); 
     106-       struct net_device *dev; 
     107        struct _rx_ring *rx_ring = sw->rx_ring; 
     108        int received = 0; 
     109        unsigned int length; 
     110@@ -588,49 +593,82 @@ static int eth_poll(struct napi_struct * 
    103111  
    104112        while (desc->cown) { 
     
    111119-               skb = rx_ring->buff_tab[i]; 
    112120+               /* process received frame */ 
    113 +               dma_unmap_single(&dev->dev, rx_ring->phys_tab[i], 
     121+               dma_unmap_single(NULL, rx_ring->phys_tab[i], 
    114122+                                RX_SEGMENT_MRU, DMA_FROM_DEVICE); 
    115 + 
     123  
     124-               dev = switch_port_tab[desc->sp]->netdev; 
    116125+               skb = build_skb(rx_ring->buff_tab[i]); 
    117126+               if (!skb) 
    118127+                       break; 
    119   
    120                 dev = switch_port_tab[desc->sp]->netdev; 
     128+ 
     129+               skb->dev = switch_port_tab[desc->sp]->netdev; 
    121130  
    122131                length = desc->sdl; 
     
    126135+               if (desc->fsd && !desc->lsd) 
    127136+                       length = RX_SEGMENT_MRU; 
    128   
     137+ 
    129138+               if (!desc->fsd) { 
    130139+                       reserve -= NET_IP_ALIGN; 
     
    132141+                               length += NET_IP_ALIGN; 
    133142+               } 
    134 + 
     143  
    135144+               skb_reserve(skb, reserve); 
    136145                skb_put(skb, length); 
     
    150159+               } 
    151160+               sw->frag_last = skb; 
     161+ 
     162+               if (desc->lsd) { 
     163+                       struct net_device *dev; 
    152164  
    153165-               dev->stats.rx_packets++; 
    154166-               dev->stats.rx_bytes += length; 
    155 +               if (desc->lsd) { 
    156167+                       skb = sw->frag_first; 
     168+                       dev = skb->dev; 
    157169+                       skb->protocol = eth_type_trans(skb, dev); 
    158170+ 
     
    206218                        i = 0; 
    207219                        desc = &(rx_ring)->desc[i]; 
    208 @@ -671,12 +707,6 @@ static int eth_xmit(struct sk_buff *skb, 
     220@@ -671,12 +709,6 @@ static int eth_xmit(struct sk_buff *skb, 
    209221        if (pmap == 8) 
    210222                pmap = (1 << 4); 
     
    219231  
    220232        if ((tx_ring->num_used + nr_frags) >= TX_DESCS) { 
    221 @@ -701,8 +731,7 @@ static int eth_xmit(struct sk_buff *skb, 
     233@@ -701,8 +733,7 @@ static int eth_xmit(struct sk_buff *skb, 
    222234  
    223235                len = skb->len; 
     
    229241                tx_desc->sdp = phys; 
    230242                tx_desc->pmap = pmap; 
    231 @@ -849,24 +878,24 @@ static int init_rings(struct sw *sw) 
     243@@ -849,24 +880,24 @@ static int init_rings(struct sw *sw) 
    232244        /* Setup RX buffers */ 
    233245        for (i = 0; i < RX_DESCS; i++) { 
     
    265277                desc->cown = 0; 
    266278        } 
    267 @@ -905,12 +934,13 @@ static void destroy_rings(struct sw *sw) 
     279@@ -905,12 +936,13 @@ static void destroy_rings(struct sw *sw) 
    268280                        struct _rx_ring *rx_ring = sw->rx_ring; 
    269281                        struct rx_desc *desc = &(rx_ring)->desc[i]; 
     
    285297                dma_pool_free(rx_dma_pool, sw->rx_ring->desc, sw->rx_ring->phys_addr); 
    286298                dma_pool_destroy(rx_dma_pool); 
    287 @@ -1085,13 +1115,22 @@ static int eth_set_mac(struct net_device 
     299@@ -1085,13 +1117,22 @@ static int eth_set_mac(struct net_device 
    288300        return 0; 
    289301 } 
     
    309321        .ndo_validate_addr = eth_validate_addr, 
    310322 }; 
    311 @@ -1124,6 +1163,10 @@ static int __devinit eth_init_one(struct 
     323@@ -1124,6 +1165,10 @@ static int __devinit eth_init_one(struct 
    312324                goto err_free; 
    313325        } 
Note: See TracChangeset for help on using the changeset viewer.