mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: dsa: fix master interface allmulti/promisc handling dsa: fix skb->pkt_type when mac address of slave interface differs net: fix setting of skb->tail in skb_recycle_check() net: fix /proc/net/snmp as memory corruptor mac80211: fix a buffer overrun in station debug code netfilter: payload_len is be16, add size of struct rather than size of pointer ipv6: fix ip6_mr_init error path [4/4] dca: fixup initialization dependency [3/4] I/OAT: fix async_tx.callback checking [2/4] I/OAT: fix dma_pin_iovec_pages() error handling [1/4] I/OAT: fix channel resources free for not allocated channels ssb: Fix DMA-API compilation for non-PCI systems SSB: hide empty sub menu vlan: Fix typos in proc output string [netdrvr] usb/hso: Cleanup rfkill error handling sfc: Correct address of gPXE boot configuration in EEPROM el3_common_init() should be __devinit, not __init hso: rfkill type should be WWAN mlx4_en: Start port error flow bug fix af_key: mark policy as dead before destroying
This commit is contained in:
commit
0a4cf2c878
19 changed files with 178 additions and 69 deletions
|
|
@ -314,7 +314,7 @@ static int vlandev_seq_show(struct seq_file *seq, void *offset)
|
|||
dev_info->ingress_priority_map[6],
|
||||
dev_info->ingress_priority_map[7]);
|
||||
|
||||
seq_printf(seq, "EGRESSS priority Mappings: ");
|
||||
seq_printf(seq, " EGRESS priority mappings: ");
|
||||
for (i = 0; i < 16; i++) {
|
||||
const struct vlan_priority_tci_mapping *mp
|
||||
= dev_info->egress_priority_map[i];
|
||||
|
|
|
|||
|
|
@ -486,8 +486,8 @@ int skb_recycle_check(struct sk_buff *skb, int skb_size)
|
|||
shinfo->frag_list = NULL;
|
||||
|
||||
memset(skb, 0, offsetof(struct sk_buff, tail));
|
||||
skb_reset_tail_pointer(skb);
|
||||
skb->data = skb->head + NET_SKB_PAD;
|
||||
skb_reset_tail_pointer(skb);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include <linux/list.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/phy.h>
|
||||
#include "dsa_priv.h"
|
||||
|
||||
|
|
@ -49,11 +50,57 @@ void dsa_slave_mii_bus_init(struct dsa_switch *ds)
|
|||
/* slave device handling ****************************************************/
|
||||
static int dsa_slave_open(struct net_device *dev)
|
||||
{
|
||||
struct dsa_slave_priv *p = netdev_priv(dev);
|
||||
struct net_device *master = p->parent->master_netdev;
|
||||
int err;
|
||||
|
||||
if (!(master->flags & IFF_UP))
|
||||
return -ENETDOWN;
|
||||
|
||||
if (compare_ether_addr(dev->dev_addr, master->dev_addr)) {
|
||||
err = dev_unicast_add(master, dev->dev_addr, ETH_ALEN);
|
||||
if (err < 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (dev->flags & IFF_ALLMULTI) {
|
||||
err = dev_set_allmulti(master, 1);
|
||||
if (err < 0)
|
||||
goto del_unicast;
|
||||
}
|
||||
if (dev->flags & IFF_PROMISC) {
|
||||
err = dev_set_promiscuity(master, 1);
|
||||
if (err < 0)
|
||||
goto clear_allmulti;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
clear_allmulti:
|
||||
if (dev->flags & IFF_ALLMULTI)
|
||||
dev_set_allmulti(master, -1);
|
||||
del_unicast:
|
||||
if (compare_ether_addr(dev->dev_addr, master->dev_addr))
|
||||
dev_unicast_delete(master, dev->dev_addr, ETH_ALEN);
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int dsa_slave_close(struct net_device *dev)
|
||||
{
|
||||
struct dsa_slave_priv *p = netdev_priv(dev);
|
||||
struct net_device *master = p->parent->master_netdev;
|
||||
|
||||
dev_mc_unsync(master, dev);
|
||||
dev_unicast_unsync(master, dev);
|
||||
if (dev->flags & IFF_ALLMULTI)
|
||||
dev_set_allmulti(master, -1);
|
||||
if (dev->flags & IFF_PROMISC)
|
||||
dev_set_promiscuity(master, -1);
|
||||
|
||||
if (compare_ether_addr(dev->dev_addr, master->dev_addr))
|
||||
dev_unicast_delete(master, dev->dev_addr, ETH_ALEN);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -77,9 +124,30 @@ static void dsa_slave_set_rx_mode(struct net_device *dev)
|
|||
dev_unicast_sync(master, dev);
|
||||
}
|
||||
|
||||
static int dsa_slave_set_mac_address(struct net_device *dev, void *addr)
|
||||
static int dsa_slave_set_mac_address(struct net_device *dev, void *a)
|
||||
{
|
||||
memcpy(dev->dev_addr, addr + 2, 6);
|
||||
struct dsa_slave_priv *p = netdev_priv(dev);
|
||||
struct net_device *master = p->parent->master_netdev;
|
||||
struct sockaddr *addr = a;
|
||||
int err;
|
||||
|
||||
if (!is_valid_ether_addr(addr->sa_data))
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
if (!(dev->flags & IFF_UP))
|
||||
goto out;
|
||||
|
||||
if (compare_ether_addr(addr->sa_data, master->dev_addr)) {
|
||||
err = dev_unicast_add(master, addr->sa_data, ETH_ALEN);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (compare_ether_addr(dev->dev_addr, master->dev_addr))
|
||||
dev_unicast_delete(master, dev->dev_addr, ETH_ALEN);
|
||||
|
||||
out:
|
||||
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -159,6 +159,7 @@ static int dsa_rcv(struct sk_buff *skb, struct net_device *dev,
|
|||
|
||||
skb->dev = ds->ports[source_port];
|
||||
skb_push(skb, ETH_HLEN);
|
||||
skb->pkt_type = PACKET_HOST;
|
||||
skb->protocol = eth_type_trans(skb, skb->dev);
|
||||
|
||||
skb->dev->last_rx = jiffies;
|
||||
|
|
|
|||
|
|
@ -178,6 +178,7 @@ static int edsa_rcv(struct sk_buff *skb, struct net_device *dev,
|
|||
|
||||
skb->dev = ds->ports[source_port];
|
||||
skb_push(skb, ETH_HLEN);
|
||||
skb->pkt_type = PACKET_HOST;
|
||||
skb->protocol = eth_type_trans(skb, skb->dev);
|
||||
|
||||
skb->dev->last_rx = jiffies;
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ static int trailer_rcv(struct sk_buff *skb, struct net_device *dev,
|
|||
|
||||
skb->dev = ds->ports[source_port];
|
||||
skb_push(skb, ETH_HLEN);
|
||||
skb->pkt_type = PACKET_HOST;
|
||||
skb->protocol = eth_type_trans(skb, skb->dev);
|
||||
|
||||
skb->dev->last_rx = jiffies;
|
||||
|
|
|
|||
|
|
@ -237,43 +237,45 @@ static const struct snmp_mib snmp4_net_list[] = {
|
|||
SNMP_MIB_SENTINEL
|
||||
};
|
||||
|
||||
static void icmpmsg_put_line(struct seq_file *seq, unsigned long *vals,
|
||||
unsigned short *type, int count)
|
||||
{
|
||||
int j;
|
||||
|
||||
if (count) {
|
||||
seq_printf(seq, "\nIcmpMsg:");
|
||||
for (j = 0; j < count; ++j)
|
||||
seq_printf(seq, " %sType%u",
|
||||
type[j] & 0x100 ? "Out" : "In",
|
||||
type[j] & 0xff);
|
||||
seq_printf(seq, "\nIcmpMsg:");
|
||||
for (j = 0; j < count; ++j)
|
||||
seq_printf(seq, " %lu", vals[j]);
|
||||
}
|
||||
}
|
||||
|
||||
static void icmpmsg_put(struct seq_file *seq)
|
||||
{
|
||||
#define PERLINE 16
|
||||
|
||||
int j, i, count;
|
||||
static int out[PERLINE];
|
||||
int i, count;
|
||||
unsigned short type[PERLINE];
|
||||
unsigned long vals[PERLINE], val;
|
||||
struct net *net = seq->private;
|
||||
|
||||
count = 0;
|
||||
for (i = 0; i < ICMPMSG_MIB_MAX; i++) {
|
||||
|
||||
if (snmp_fold_field((void **) net->mib.icmpmsg_statistics, i))
|
||||
out[count++] = i;
|
||||
if (count < PERLINE)
|
||||
continue;
|
||||
|
||||
seq_printf(seq, "\nIcmpMsg:");
|
||||
for (j = 0; j < PERLINE; ++j)
|
||||
seq_printf(seq, " %sType%u", i & 0x100 ? "Out" : "In",
|
||||
i & 0xff);
|
||||
seq_printf(seq, "\nIcmpMsg: ");
|
||||
for (j = 0; j < PERLINE; ++j)
|
||||
seq_printf(seq, " %lu",
|
||||
snmp_fold_field((void **) net->mib.icmpmsg_statistics,
|
||||
out[j]));
|
||||
seq_putc(seq, '\n');
|
||||
}
|
||||
if (count) {
|
||||
seq_printf(seq, "\nIcmpMsg:");
|
||||
for (j = 0; j < count; ++j)
|
||||
seq_printf(seq, " %sType%u", out[j] & 0x100 ? "Out" :
|
||||
"In", out[j] & 0xff);
|
||||
seq_printf(seq, "\nIcmpMsg:");
|
||||
for (j = 0; j < count; ++j)
|
||||
seq_printf(seq, " %lu", snmp_fold_field((void **)
|
||||
net->mib.icmpmsg_statistics, out[j]));
|
||||
val = snmp_fold_field((void **) net->mib.icmpmsg_statistics, i);
|
||||
if (val) {
|
||||
type[count] = i;
|
||||
vals[count++] = val;
|
||||
}
|
||||
if (count == PERLINE) {
|
||||
icmpmsg_put_line(seq, vals, type, count);
|
||||
count = 0;
|
||||
}
|
||||
}
|
||||
icmpmsg_put_line(seq, vals, type, count);
|
||||
|
||||
#undef PERLINE
|
||||
}
|
||||
|
|
|
|||
|
|
@ -981,14 +981,15 @@ int __init ip6_mr_init(void)
|
|||
goto proc_cache_fail;
|
||||
#endif
|
||||
return 0;
|
||||
reg_notif_fail:
|
||||
kmem_cache_destroy(mrt_cachep);
|
||||
#ifdef CONFIG_PROC_FS
|
||||
proc_vif_fail:
|
||||
unregister_netdevice_notifier(&ip6_mr_notifier);
|
||||
proc_cache_fail:
|
||||
proc_net_remove(&init_net, "ip6_mr_vif");
|
||||
proc_vif_fail:
|
||||
unregister_netdevice_notifier(&ip6_mr_notifier);
|
||||
#endif
|
||||
reg_notif_fail:
|
||||
del_timer(&ipmr_expire_timer);
|
||||
kmem_cache_destroy(mrt_cachep);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3188,6 +3188,7 @@ static struct xfrm_policy *pfkey_compile_policy(struct sock *sk, int opt,
|
|||
return xp;
|
||||
|
||||
out:
|
||||
xp->walk.dead = 1;
|
||||
xfrm_policy_destroy(xp);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ static ssize_t sta_agg_status_write(struct file *file,
|
|||
/* toggle Rx aggregation command */
|
||||
tid_num = tid_num - 100;
|
||||
if (tid_static_rx[tid_num] == 1) {
|
||||
strcpy(state, "off ");
|
||||
strcpy(state, "off");
|
||||
ieee80211_sta_stop_rx_ba_session(sta->sdata, da, tid_num, 0,
|
||||
WLAN_REASON_QSTA_REQUIRE_SETUP);
|
||||
sta->ampdu_mlme.tid_state_rx[tid_num] |=
|
||||
|
|
|
|||
|
|
@ -713,7 +713,8 @@ ip_vs_tunnel_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp,
|
|||
iph = ipv6_hdr(skb);
|
||||
iph->version = 6;
|
||||
iph->nexthdr = IPPROTO_IPV6;
|
||||
iph->payload_len = old_iph->payload_len + sizeof(old_iph);
|
||||
iph->payload_len = old_iph->payload_len;
|
||||
be16_add_cpu(&iph->payload_len, sizeof(*old_iph));
|
||||
iph->priority = old_iph->priority;
|
||||
memset(&iph->flow_lbl, 0, sizeof(iph->flow_lbl));
|
||||
iph->daddr = rt->rt6i_dst.addr;
|
||||
|
|
|
|||
Loading…
Reference in a new issue