mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -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: (45 commits) cnic: Fix ISCSI_KEVENT_IF_DOWN message handling. net: irda: init spinlock after memcpy ixgbe: fix for 82599 errata marking UDP checksum errors r8169: WakeOnLan fix for the 8168 netxen: reset ring consumer during cleanup net/bridge: use kobject_put to release kobject in br_add_if error path smc91x.h: add config for Nomadik evaluation kit NET: ROSE: Don't use static buffer. eepro: Read buffer overflow tokenring: Read buffer overflow at1700: Read buffer overflow fealnx: Write outside array bounds ixgbe: remove unnecessary call to device_init_wakeup ixgbe: Don't priority tag control frames in DCB mode ixgbe: Enable FCoE offload when DCB is enabled for 82599 net: Rework mdio-ofgpio driver to use of_mdio infrastructure register at91_ether using platform_driver_probe skge: Enable WoL by default if supported net: KS8851 needs to depend on MII be2net: Bug fix in the non-lro path. Size of received packet was not updated in statistics properly. ...
This commit is contained in:
commit
f1462147f1
47 changed files with 336 additions and 174 deletions
|
|
@ -424,7 +424,7 @@ int br_add_if(struct net_bridge *br, struct net_device *dev)
|
|||
err2:
|
||||
br_fdb_delete_by_port(br, p, 1);
|
||||
err1:
|
||||
kobject_del(&p->kobj);
|
||||
kobject_put(&p->kobj);
|
||||
err0:
|
||||
dev_set_promiscuity(dev, -1);
|
||||
put_back:
|
||||
|
|
|
|||
|
|
@ -1453,6 +1453,7 @@ struct tsap_cb *irttp_dup(struct tsap_cb *orig, void *instance)
|
|||
}
|
||||
/* Dup */
|
||||
memcpy(new, orig, sizeof(struct tsap_cb));
|
||||
spin_lock_init(&new->lock);
|
||||
|
||||
/* We don't need the old instance any more */
|
||||
spin_unlock_irqrestore(&irttp->tsaps->hb_spinlock, flags);
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ endmenu
|
|||
config MAC80211_MESH
|
||||
bool "Enable mac80211 mesh networking (pre-802.11s) support"
|
||||
depends on MAC80211 && EXPERIMENTAL
|
||||
depends on BROKEN
|
||||
---help---
|
||||
This options enables support of Draft 802.11s mesh networking.
|
||||
The implementation is based on Draft 1.08 of the Mesh Networking
|
||||
|
|
|
|||
|
|
@ -175,6 +175,8 @@ int mesh_path_add(u8 *dst, struct ieee80211_sub_if_data *sdata)
|
|||
int err = 0;
|
||||
u32 hash_idx;
|
||||
|
||||
might_sleep();
|
||||
|
||||
if (memcmp(dst, sdata->dev->dev_addr, ETH_ALEN) == 0)
|
||||
/* never add ourselves as neighbours */
|
||||
return -ENOTSUPP;
|
||||
|
|
@ -265,6 +267,7 @@ int mpp_path_add(u8 *dst, u8 *mpp, struct ieee80211_sub_if_data *sdata)
|
|||
int err = 0;
|
||||
u32 hash_idx;
|
||||
|
||||
might_sleep();
|
||||
|
||||
if (memcmp(dst, sdata->dev->dev_addr, ETH_ALEN) == 0)
|
||||
/* never add ourselves as neighbours */
|
||||
|
|
@ -491,8 +494,10 @@ void mesh_path_tx_pending(struct mesh_path *mpath)
|
|||
* @skb: frame to discard
|
||||
* @sdata: network subif the frame was to be sent through
|
||||
*
|
||||
* If the frame was beign forwarded from another MP, a PERR frame will be sent
|
||||
* to the precursor.
|
||||
* If the frame was being forwarded from another MP, a PERR frame will be sent
|
||||
* to the precursor. The precursor's address (i.e. the previous hop) was saved
|
||||
* in addr1 of the frame-to-be-forwarded, and would only be overwritten once
|
||||
* the destination is successfully resolved.
|
||||
*
|
||||
* Locking: the function must me called within a rcu_read_lock region
|
||||
*/
|
||||
|
|
@ -507,7 +512,7 @@ void mesh_path_discard_frame(struct sk_buff *skb,
|
|||
u8 *ra, *da;
|
||||
|
||||
da = hdr->addr3;
|
||||
ra = hdr->addr2;
|
||||
ra = hdr->addr1;
|
||||
mpath = mesh_path_lookup(da, sdata);
|
||||
if (mpath)
|
||||
dsn = ++mpath->dsn;
|
||||
|
|
|
|||
|
|
@ -1455,7 +1455,7 @@ int ieee80211_master_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
monitor_iface = UNKNOWN_ADDRESS;
|
||||
|
||||
len_rthdr = ieee80211_get_radiotap_len(skb->data);
|
||||
hdr = (struct ieee80211_hdr *)skb->data + len_rthdr;
|
||||
hdr = (struct ieee80211_hdr *)(skb->data + len_rthdr);
|
||||
hdrlen = ieee80211_hdrlen(hdr->frame_control);
|
||||
|
||||
/* check the header is complete in the frame */
|
||||
|
|
|
|||
|
|
@ -549,6 +549,10 @@ void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw)
|
|||
swprev = !!(rfkill->state & RFKILL_BLOCK_SW);
|
||||
hwprev = !!(rfkill->state & RFKILL_BLOCK_HW);
|
||||
__rfkill_set_sw_state(rfkill, sw);
|
||||
if (hw)
|
||||
rfkill->state |= RFKILL_BLOCK_HW;
|
||||
else
|
||||
rfkill->state &= ~RFKILL_BLOCK_HW;
|
||||
|
||||
spin_unlock_irqrestore(&rfkill->lock, flags);
|
||||
|
||||
|
|
@ -648,15 +652,26 @@ static ssize_t rfkill_state_store(struct device *dev,
|
|||
struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
/*
|
||||
* The intention was that userspace can only take control over
|
||||
* a given device when/if rfkill-input doesn't control it due
|
||||
* to user_claim. Since user_claim is currently unsupported,
|
||||
* we never support changing the state from userspace -- this
|
||||
* can be implemented again later.
|
||||
*/
|
||||
struct rfkill *rfkill = to_rfkill(dev);
|
||||
unsigned long state;
|
||||
int err;
|
||||
|
||||
return -EPERM;
|
||||
if (!capable(CAP_NET_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
err = strict_strtoul(buf, 0, &state);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (state != RFKILL_USER_STATE_SOFT_BLOCKED &&
|
||||
state != RFKILL_USER_STATE_UNBLOCKED)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&rfkill_global_mutex);
|
||||
rfkill_set_block(rfkill, state == RFKILL_USER_STATE_SOFT_BLOCKED);
|
||||
mutex_unlock(&rfkill_global_mutex);
|
||||
|
||||
return err ?: count;
|
||||
}
|
||||
|
||||
static ssize_t rfkill_claim_show(struct device *dev,
|
||||
|
|
|
|||
|
|
@ -92,23 +92,21 @@ static void rose_set_lockdep_key(struct net_device *dev)
|
|||
/*
|
||||
* Convert a ROSE address into text.
|
||||
*/
|
||||
const char *rose2asc(const rose_address *addr)
|
||||
char *rose2asc(char *buf, const rose_address *addr)
|
||||
{
|
||||
static char buffer[11];
|
||||
|
||||
if (addr->rose_addr[0] == 0x00 && addr->rose_addr[1] == 0x00 &&
|
||||
addr->rose_addr[2] == 0x00 && addr->rose_addr[3] == 0x00 &&
|
||||
addr->rose_addr[4] == 0x00) {
|
||||
strcpy(buffer, "*");
|
||||
strcpy(buf, "*");
|
||||
} else {
|
||||
sprintf(buffer, "%02X%02X%02X%02X%02X", addr->rose_addr[0] & 0xFF,
|
||||
sprintf(buf, "%02X%02X%02X%02X%02X", addr->rose_addr[0] & 0xFF,
|
||||
addr->rose_addr[1] & 0xFF,
|
||||
addr->rose_addr[2] & 0xFF,
|
||||
addr->rose_addr[3] & 0xFF,
|
||||
addr->rose_addr[4] & 0xFF);
|
||||
}
|
||||
|
||||
return buffer;
|
||||
return buf;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -1437,7 +1435,7 @@ static void rose_info_stop(struct seq_file *seq, void *v)
|
|||
|
||||
static int rose_info_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
char buf[11];
|
||||
char buf[11], rsbuf[11];
|
||||
|
||||
if (v == SEQ_START_TOKEN)
|
||||
seq_puts(seq,
|
||||
|
|
@ -1455,8 +1453,8 @@ static int rose_info_show(struct seq_file *seq, void *v)
|
|||
devname = dev->name;
|
||||
|
||||
seq_printf(seq, "%-10s %-9s ",
|
||||
rose2asc(&rose->dest_addr),
|
||||
ax2asc(buf, &rose->dest_call));
|
||||
rose2asc(rsbuf, &rose->dest_addr),
|
||||
ax2asc(buf, &rose->dest_call));
|
||||
|
||||
if (ax25cmp(&rose->source_call, &null_ax25_address) == 0)
|
||||
callsign = "??????-?";
|
||||
|
|
@ -1465,7 +1463,7 @@ static int rose_info_show(struct seq_file *seq, void *v)
|
|||
|
||||
seq_printf(seq,
|
||||
"%-10s %-9s %-5s %3.3X %05d %d %d %d %d %3lu %3lu %3lu %3lu %3lu %3lu/%03lu %5d %5d %ld\n",
|
||||
rose2asc(&rose->source_addr),
|
||||
rose2asc(rsbuf, &rose->source_addr),
|
||||
callsign,
|
||||
devname,
|
||||
rose->lci & 0x0FFF,
|
||||
|
|
|
|||
|
|
@ -1104,6 +1104,7 @@ static void rose_node_stop(struct seq_file *seq, void *v)
|
|||
|
||||
static int rose_node_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
char rsbuf[11];
|
||||
int i;
|
||||
|
||||
if (v == SEQ_START_TOKEN)
|
||||
|
|
@ -1112,13 +1113,13 @@ static int rose_node_show(struct seq_file *seq, void *v)
|
|||
const struct rose_node *rose_node = v;
|
||||
/* if (rose_node->loopback) {
|
||||
seq_printf(seq, "%-10s %04d 1 loopback\n",
|
||||
rose2asc(&rose_node->address),
|
||||
rose_node->mask);
|
||||
rose2asc(rsbuf, &rose_node->address),
|
||||
rose_node->mask);
|
||||
} else { */
|
||||
seq_printf(seq, "%-10s %04d %d",
|
||||
rose2asc(&rose_node->address),
|
||||
rose_node->mask,
|
||||
rose_node->count);
|
||||
rose2asc(rsbuf, &rose_node->address),
|
||||
rose_node->mask,
|
||||
rose_node->count);
|
||||
|
||||
for (i = 0; i < rose_node->count; i++)
|
||||
seq_printf(seq, " %05d",
|
||||
|
|
@ -1267,7 +1268,7 @@ static void rose_route_stop(struct seq_file *seq, void *v)
|
|||
|
||||
static int rose_route_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
char buf[11];
|
||||
char buf[11], rsbuf[11];
|
||||
|
||||
if (v == SEQ_START_TOKEN)
|
||||
seq_puts(seq,
|
||||
|
|
@ -1279,7 +1280,7 @@ static int rose_route_show(struct seq_file *seq, void *v)
|
|||
seq_printf(seq,
|
||||
"%3.3X %-10s %-9s %05d ",
|
||||
rose_route->lci1,
|
||||
rose2asc(&rose_route->src_addr),
|
||||
rose2asc(rsbuf, &rose_route->src_addr),
|
||||
ax2asc(buf, &rose_route->src_call),
|
||||
rose_route->neigh1->number);
|
||||
else
|
||||
|
|
@ -1289,10 +1290,10 @@ static int rose_route_show(struct seq_file *seq, void *v)
|
|||
if (rose_route->neigh2)
|
||||
seq_printf(seq,
|
||||
"%3.3X %-10s %-9s %05d\n",
|
||||
rose_route->lci2,
|
||||
rose2asc(&rose_route->dest_addr),
|
||||
ax2asc(buf, &rose_route->dest_call),
|
||||
rose_route->neigh2->number);
|
||||
rose_route->lci2,
|
||||
rose2asc(rsbuf, &rose_route->dest_addr),
|
||||
ax2asc(buf, &rose_route->dest_call),
|
||||
rose_route->neigh2->number);
|
||||
else
|
||||
seq_puts(seq,
|
||||
"000 * * 00000\n");
|
||||
|
|
|
|||
|
|
@ -997,7 +997,7 @@ static int nl80211_get_key(struct sk_buff *skb, struct genl_info *info)
|
|||
|
||||
if (IS_ERR(hdr)) {
|
||||
err = PTR_ERR(hdr);
|
||||
goto out;
|
||||
goto free_msg;
|
||||
}
|
||||
|
||||
cookie.msg = msg;
|
||||
|
|
@ -1011,7 +1011,7 @@ static int nl80211_get_key(struct sk_buff *skb, struct genl_info *info)
|
|||
&cookie, get_key_callback);
|
||||
|
||||
if (err)
|
||||
goto out;
|
||||
goto free_msg;
|
||||
|
||||
if (cookie.error)
|
||||
goto nla_put_failure;
|
||||
|
|
@ -1022,6 +1022,7 @@ static int nl80211_get_key(struct sk_buff *skb, struct genl_info *info)
|
|||
|
||||
nla_put_failure:
|
||||
err = -ENOBUFS;
|
||||
free_msg:
|
||||
nlmsg_free(msg);
|
||||
out:
|
||||
cfg80211_put_dev(drv);
|
||||
|
|
|
|||
|
|
@ -35,8 +35,6 @@ void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted)
|
|||
else
|
||||
nl80211_send_scan_done(wiphy_to_dev(request->wiphy), dev);
|
||||
|
||||
wiphy_to_dev(request->wiphy)->scan_req = NULL;
|
||||
|
||||
#ifdef CONFIG_WIRELESS_EXT
|
||||
if (!aborted) {
|
||||
memset(&wrqu, 0, sizeof(wrqu));
|
||||
|
|
@ -48,6 +46,7 @@ void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted)
|
|||
dev_put(dev);
|
||||
|
||||
out:
|
||||
wiphy_to_dev(request->wiphy)->scan_req = NULL;
|
||||
kfree(request);
|
||||
}
|
||||
EXPORT_SYMBOL(cfg80211_scan_done);
|
||||
|
|
|
|||
Loading…
Reference in a new issue