diff options
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/dvb/dvb-core/dvb_net.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/drivers/media/dvb/dvb-core/dvb_net.c b/drivers/media/dvb/dvb-core/dvb_net.c index 441c0642b30a..cccea412088b 100644 --- a/drivers/media/dvb/dvb-core/dvb_net.c +++ b/drivers/media/dvb/dvb-core/dvb_net.c | |||
@@ -1109,14 +1109,14 @@ static int dvb_net_feed_stop(struct net_device *dev) | |||
1109 | } | 1109 | } |
1110 | 1110 | ||
1111 | 1111 | ||
1112 | static int dvb_set_mc_filter (struct net_device *dev, struct dev_mc_list *mc) | 1112 | static int dvb_set_mc_filter(struct net_device *dev, unsigned char *addr) |
1113 | { | 1113 | { |
1114 | struct dvb_net_priv *priv = netdev_priv(dev); | 1114 | struct dvb_net_priv *priv = netdev_priv(dev); |
1115 | 1115 | ||
1116 | if (priv->multi_num == DVB_NET_MULTICAST_MAX) | 1116 | if (priv->multi_num == DVB_NET_MULTICAST_MAX) |
1117 | return -ENOMEM; | 1117 | return -ENOMEM; |
1118 | 1118 | ||
1119 | memcpy(priv->multi_macs[priv->multi_num], mc->dmi_addr, 6); | 1119 | memcpy(priv->multi_macs[priv->multi_num], addr, ETH_ALEN); |
1120 | 1120 | ||
1121 | priv->multi_num++; | 1121 | priv->multi_num++; |
1122 | return 0; | 1122 | return 0; |
@@ -1140,8 +1140,7 @@ static void wq_set_multicast_list (struct work_struct *work) | |||
1140 | dprintk("%s: allmulti mode\n", dev->name); | 1140 | dprintk("%s: allmulti mode\n", dev->name); |
1141 | priv->rx_mode = RX_MODE_ALL_MULTI; | 1141 | priv->rx_mode = RX_MODE_ALL_MULTI; |
1142 | } else if (!netdev_mc_empty(dev)) { | 1142 | } else if (!netdev_mc_empty(dev)) { |
1143 | int mci; | 1143 | struct netdev_hw_addr *ha; |
1144 | struct dev_mc_list *mc; | ||
1145 | 1144 | ||
1146 | dprintk("%s: set_mc_list, %d entries\n", | 1145 | dprintk("%s: set_mc_list, %d entries\n", |
1147 | dev->name, netdev_mc_count(dev)); | 1146 | dev->name, netdev_mc_count(dev)); |
@@ -1149,11 +1148,8 @@ static void wq_set_multicast_list (struct work_struct *work) | |||
1149 | priv->rx_mode = RX_MODE_MULTI; | 1148 | priv->rx_mode = RX_MODE_MULTI; |
1150 | priv->multi_num = 0; | 1149 | priv->multi_num = 0; |
1151 | 1150 | ||
1152 | for (mci = 0, mc=dev->mc_list; | 1151 | netdev_for_each_mc_addr(ha, dev) |
1153 | mci < netdev_mc_count(dev); | 1152 | dvb_set_mc_filter(dev, ha->addr); |
1154 | mc = mc->next, mci++) { | ||
1155 | dvb_set_mc_filter(dev, mc); | ||
1156 | } | ||
1157 | } | 1153 | } |
1158 | 1154 | ||
1159 | netif_addr_unlock_bh(dev); | 1155 | netif_addr_unlock_bh(dev); |