mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
This commit is contained in:
commit
011e3c6325
265 changed files with 2379 additions and 1877 deletions
|
|
@ -241,7 +241,6 @@ static void br_multicast_group_expired(unsigned long data)
|
|||
hlist_del_rcu(&mp->hlist[mdb->ver]);
|
||||
mdb->size--;
|
||||
|
||||
del_timer(&mp->query_timer);
|
||||
call_rcu_bh(&mp->rcu, br_multicast_free_group);
|
||||
|
||||
out:
|
||||
|
|
@ -271,7 +270,6 @@ static void br_multicast_del_pg(struct net_bridge *br,
|
|||
rcu_assign_pointer(*pp, p->next);
|
||||
hlist_del_init(&p->mglist);
|
||||
del_timer(&p->timer);
|
||||
del_timer(&p->query_timer);
|
||||
call_rcu_bh(&p->rcu, br_multicast_free_pg);
|
||||
|
||||
if (!mp->ports && !mp->mglist &&
|
||||
|
|
@ -507,74 +505,6 @@ static struct sk_buff *br_multicast_alloc_query(struct net_bridge *br,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static void br_multicast_send_group_query(struct net_bridge_mdb_entry *mp)
|
||||
{
|
||||
struct net_bridge *br = mp->br;
|
||||
struct sk_buff *skb;
|
||||
|
||||
skb = br_multicast_alloc_query(br, &mp->addr);
|
||||
if (!skb)
|
||||
goto timer;
|
||||
|
||||
netif_rx(skb);
|
||||
|
||||
timer:
|
||||
if (++mp->queries_sent < br->multicast_last_member_count)
|
||||
mod_timer(&mp->query_timer,
|
||||
jiffies + br->multicast_last_member_interval);
|
||||
}
|
||||
|
||||
static void br_multicast_group_query_expired(unsigned long data)
|
||||
{
|
||||
struct net_bridge_mdb_entry *mp = (void *)data;
|
||||
struct net_bridge *br = mp->br;
|
||||
|
||||
spin_lock(&br->multicast_lock);
|
||||
if (!netif_running(br->dev) || !mp->mglist ||
|
||||
mp->queries_sent >= br->multicast_last_member_count)
|
||||
goto out;
|
||||
|
||||
br_multicast_send_group_query(mp);
|
||||
|
||||
out:
|
||||
spin_unlock(&br->multicast_lock);
|
||||
}
|
||||
|
||||
static void br_multicast_send_port_group_query(struct net_bridge_port_group *pg)
|
||||
{
|
||||
struct net_bridge_port *port = pg->port;
|
||||
struct net_bridge *br = port->br;
|
||||
struct sk_buff *skb;
|
||||
|
||||
skb = br_multicast_alloc_query(br, &pg->addr);
|
||||
if (!skb)
|
||||
goto timer;
|
||||
|
||||
br_deliver(port, skb);
|
||||
|
||||
timer:
|
||||
if (++pg->queries_sent < br->multicast_last_member_count)
|
||||
mod_timer(&pg->query_timer,
|
||||
jiffies + br->multicast_last_member_interval);
|
||||
}
|
||||
|
||||
static void br_multicast_port_group_query_expired(unsigned long data)
|
||||
{
|
||||
struct net_bridge_port_group *pg = (void *)data;
|
||||
struct net_bridge_port *port = pg->port;
|
||||
struct net_bridge *br = port->br;
|
||||
|
||||
spin_lock(&br->multicast_lock);
|
||||
if (!netif_running(br->dev) || hlist_unhashed(&pg->mglist) ||
|
||||
pg->queries_sent >= br->multicast_last_member_count)
|
||||
goto out;
|
||||
|
||||
br_multicast_send_port_group_query(pg);
|
||||
|
||||
out:
|
||||
spin_unlock(&br->multicast_lock);
|
||||
}
|
||||
|
||||
static struct net_bridge_mdb_entry *br_multicast_get_group(
|
||||
struct net_bridge *br, struct net_bridge_port *port,
|
||||
struct br_ip *group, int hash)
|
||||
|
|
@ -690,8 +620,6 @@ rehash:
|
|||
mp->addr = *group;
|
||||
setup_timer(&mp->timer, br_multicast_group_expired,
|
||||
(unsigned long)mp);
|
||||
setup_timer(&mp->query_timer, br_multicast_group_query_expired,
|
||||
(unsigned long)mp);
|
||||
|
||||
hlist_add_head_rcu(&mp->hlist[mdb->ver], &mdb->mhash[hash]);
|
||||
mdb->size++;
|
||||
|
|
@ -746,8 +674,6 @@ static int br_multicast_add_group(struct net_bridge *br,
|
|||
hlist_add_head(&p->mglist, &port->mglist);
|
||||
setup_timer(&p->timer, br_multicast_port_group_expired,
|
||||
(unsigned long)p);
|
||||
setup_timer(&p->query_timer, br_multicast_port_group_query_expired,
|
||||
(unsigned long)p);
|
||||
|
||||
rcu_assign_pointer(*pp, p);
|
||||
|
||||
|
|
@ -1291,9 +1217,6 @@ static void br_multicast_leave_group(struct net_bridge *br,
|
|||
time_after(mp->timer.expires, time) :
|
||||
try_to_del_timer_sync(&mp->timer) >= 0)) {
|
||||
mod_timer(&mp->timer, time);
|
||||
|
||||
mp->queries_sent = 0;
|
||||
mod_timer(&mp->query_timer, now);
|
||||
}
|
||||
|
||||
goto out;
|
||||
|
|
@ -1310,9 +1233,6 @@ static void br_multicast_leave_group(struct net_bridge *br,
|
|||
time_after(p->timer.expires, time) :
|
||||
try_to_del_timer_sync(&p->timer) >= 0)) {
|
||||
mod_timer(&p->timer, time);
|
||||
|
||||
p->queries_sent = 0;
|
||||
mod_timer(&p->query_timer, now);
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
@ -1681,7 +1601,6 @@ void br_multicast_stop(struct net_bridge *br)
|
|||
hlist_for_each_entry_safe(mp, p, n, &mdb->mhash[i],
|
||||
hlist[ver]) {
|
||||
del_timer(&mp->timer);
|
||||
del_timer(&mp->query_timer);
|
||||
call_rcu_bh(&mp->rcu, br_multicast_free_group);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,9 +82,7 @@ struct net_bridge_port_group {
|
|||
struct hlist_node mglist;
|
||||
struct rcu_head rcu;
|
||||
struct timer_list timer;
|
||||
struct timer_list query_timer;
|
||||
struct br_ip addr;
|
||||
u32 queries_sent;
|
||||
};
|
||||
|
||||
struct net_bridge_mdb_entry
|
||||
|
|
@ -94,10 +92,8 @@ struct net_bridge_mdb_entry
|
|||
struct net_bridge_port_group __rcu *ports;
|
||||
struct rcu_head rcu;
|
||||
struct timer_list timer;
|
||||
struct timer_list query_timer;
|
||||
struct br_ip addr;
|
||||
bool mglist;
|
||||
u32 queries_sent;
|
||||
};
|
||||
|
||||
struct net_bridge_mdb_htable
|
||||
|
|
|
|||
Loading…
Reference in a new issue