diff options
| author | Patrick McHardy <kaber@trash.net> | 2010-04-20 10:02:01 -0400 |
|---|---|---|
| committer | Patrick McHardy <kaber@trash.net> | 2010-04-20 10:02:01 -0400 |
| commit | 62910554656cdcd6b6f84a5154c4155aae4ca231 (patch) | |
| tree | dcf14004f6fd2ef7154362ff948bfeba0f3ea92d /drivers/net/jme.c | |
| parent | 22265a5c3c103cf8c50be62e6c90d045eb649e6d (diff) | |
| parent | ab9304717f7624c41927f442e6b6d418b2d8b3e4 (diff) | |
Merge branch 'master' of /repos/git/net-next-2.6
Conflicts:
Documentation/feature-removal-schedule.txt
net/ipv6/netfilter/ip6t_REJECT.c
net/netfilter/xt_limit.c
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'drivers/net/jme.c')
| -rw-r--r-- | drivers/net/jme.c | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/drivers/net/jme.c b/drivers/net/jme.c index 0f31497833df..4e868eeac89e 100644 --- a/drivers/net/jme.c +++ b/drivers/net/jme.c | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | #include <linux/tcp.h> | 37 | #include <linux/tcp.h> |
| 38 | #include <linux/udp.h> | 38 | #include <linux/udp.h> |
| 39 | #include <linux/if_vlan.h> | 39 | #include <linux/if_vlan.h> |
| 40 | #include <linux/slab.h> | ||
| 40 | #include <net/ip6_checksum.h> | 41 | #include <net/ip6_checksum.h> |
| 41 | #include "jme.h" | 42 | #include "jme.h" |
| 42 | 43 | ||
| @@ -946,6 +947,8 @@ jme_alloc_and_feed_skb(struct jme_adapter *jme, int idx) | |||
| 946 | jme->jme_vlan_rx(skb, jme->vlgrp, | 947 | jme->jme_vlan_rx(skb, jme->vlgrp, |
| 947 | le16_to_cpu(rxdesc->descwb.vlan)); | 948 | le16_to_cpu(rxdesc->descwb.vlan)); |
| 948 | NET_STAT(jme).rx_bytes += 4; | 949 | NET_STAT(jme).rx_bytes += 4; |
| 950 | } else { | ||
| 951 | dev_kfree_skb(skb); | ||
| 949 | } | 952 | } |
| 950 | } else { | 953 | } else { |
| 951 | jme->jme_rx(skb); | 954 | jme->jme_rx(skb); |
| @@ -2007,12 +2010,12 @@ jme_set_multi(struct net_device *netdev) | |||
| 2007 | } else if (netdev->flags & IFF_ALLMULTI) { | 2010 | } else if (netdev->flags & IFF_ALLMULTI) { |
| 2008 | jme->reg_rxmcs |= RXMCS_ALLMULFRAME; | 2011 | jme->reg_rxmcs |= RXMCS_ALLMULFRAME; |
| 2009 | } else if (netdev->flags & IFF_MULTICAST) { | 2012 | } else if (netdev->flags & IFF_MULTICAST) { |
| 2010 | struct dev_mc_list *mclist; | 2013 | struct netdev_hw_addr *ha; |
| 2011 | int bit_nr; | 2014 | int bit_nr; |
| 2012 | 2015 | ||
| 2013 | jme->reg_rxmcs |= RXMCS_MULFRAME | RXMCS_MULFILTERED; | 2016 | jme->reg_rxmcs |= RXMCS_MULFRAME | RXMCS_MULFILTERED; |
| 2014 | netdev_for_each_mc_addr(mclist, netdev) { | 2017 | netdev_for_each_mc_addr(ha, netdev) { |
| 2015 | bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) & 0x3F; | 2018 | bit_nr = ether_crc(ETH_ALEN, ha->addr) & 0x3F; |
| 2016 | mc_hash[bit_nr >> 5] |= 1 << (bit_nr & 0x1F); | 2019 | mc_hash[bit_nr >> 5] |= 1 << (bit_nr & 0x1F); |
| 2017 | } | 2020 | } |
| 2018 | 2021 | ||
| @@ -2081,12 +2084,45 @@ jme_tx_timeout(struct net_device *netdev) | |||
| 2081 | jme_reset_link(jme); | 2084 | jme_reset_link(jme); |
| 2082 | } | 2085 | } |
| 2083 | 2086 | ||
| 2087 | static inline void jme_pause_rx(struct jme_adapter *jme) | ||
| 2088 | { | ||
| 2089 | atomic_dec(&jme->link_changing); | ||
| 2090 | |||
| 2091 | jme_set_rx_pcc(jme, PCC_OFF); | ||
| 2092 | if (test_bit(JME_FLAG_POLL, &jme->flags)) { | ||
| 2093 | JME_NAPI_DISABLE(jme); | ||
| 2094 | } else { | ||
| 2095 | tasklet_disable(&jme->rxclean_task); | ||
| 2096 | tasklet_disable(&jme->rxempty_task); | ||
| 2097 | } | ||
| 2098 | } | ||
| 2099 | |||
| 2100 | static inline void jme_resume_rx(struct jme_adapter *jme) | ||
| 2101 | { | ||
| 2102 | struct dynpcc_info *dpi = &(jme->dpi); | ||
| 2103 | |||
| 2104 | if (test_bit(JME_FLAG_POLL, &jme->flags)) { | ||
| 2105 | JME_NAPI_ENABLE(jme); | ||
| 2106 | } else { | ||
| 2107 | tasklet_hi_enable(&jme->rxclean_task); | ||
| 2108 | tasklet_hi_enable(&jme->rxempty_task); | ||
| 2109 | } | ||
| 2110 | dpi->cur = PCC_P1; | ||
| 2111 | dpi->attempt = PCC_P1; | ||
| 2112 | dpi->cnt = 0; | ||
| 2113 | jme_set_rx_pcc(jme, PCC_P1); | ||
| 2114 | |||
| 2115 | atomic_inc(&jme->link_changing); | ||
| 2116 | } | ||
| 2117 | |||
| 2084 | static void | 2118 | static void |
| 2085 | jme_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp) | 2119 | jme_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp) |
| 2086 | { | 2120 | { |
| 2087 | struct jme_adapter *jme = netdev_priv(netdev); | 2121 | struct jme_adapter *jme = netdev_priv(netdev); |
| 2088 | 2122 | ||
| 2123 | jme_pause_rx(jme); | ||
| 2089 | jme->vlgrp = grp; | 2124 | jme->vlgrp = grp; |
| 2125 | jme_resume_rx(jme); | ||
| 2090 | } | 2126 | } |
| 2091 | 2127 | ||
| 2092 | static void | 2128 | static void |
