Commit f403ede7 authored by David S. Miller's avatar David S. Miller
parents 5dc474d6 a4278e18
...@@ -2474,6 +2474,8 @@ static void gelic_wl_free(struct gelic_wl_info *wl) ...@@ -2474,6 +2474,8 @@ static void gelic_wl_free(struct gelic_wl_info *wl)
pr_debug("%s: <-\n", __func__); pr_debug("%s: <-\n", __func__);
free_page((unsigned long)wl->buf);
pr_debug("%s: destroy queues\n", __func__); pr_debug("%s: destroy queues\n", __func__);
destroy_workqueue(wl->eurus_cmd_queue); destroy_workqueue(wl->eurus_cmd_queue);
destroy_workqueue(wl->event_queue); destroy_workqueue(wl->event_queue);
......
...@@ -666,7 +666,7 @@ static void iwl3945_rx_reply_rx(struct iwl3945_priv *priv, ...@@ -666,7 +666,7 @@ static void iwl3945_rx_reply_rx(struct iwl3945_priv *priv,
rx_status.flag = 0; rx_status.flag = 0;
rx_status.mactime = le64_to_cpu(rx_end->timestamp); rx_status.mactime = le64_to_cpu(rx_end->timestamp);
rx_status.freq = rx_status.freq =
ieee80211_frequency_to_channel(le16_to_cpu(rx_hdr->channel)); ieee80211_channel_to_frequency(le16_to_cpu(rx_hdr->channel));
rx_status.band = (rx_hdr->phy_flags & RX_RES_PHY_FLAGS_BAND_24_MSK) ? rx_status.band = (rx_hdr->phy_flags & RX_RES_PHY_FLAGS_BAND_24_MSK) ?
IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ; IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ;
......
...@@ -163,8 +163,8 @@ struct iwl4965_lq_sta { ...@@ -163,8 +163,8 @@ struct iwl4965_lq_sta {
struct dentry *rs_sta_dbgfs_tx_agg_tid_en_file; struct dentry *rs_sta_dbgfs_tx_agg_tid_en_file;
#endif #endif
struct iwl4965_rate dbg_fixed; struct iwl4965_rate dbg_fixed;
struct iwl_priv *drv;
#endif #endif
struct iwl_priv *drv;
}; };
static void rs_rate_scale_perform(struct iwl_priv *priv, static void rs_rate_scale_perform(struct iwl_priv *priv,
......
...@@ -3978,7 +3978,7 @@ static void iwl4965_rx_reply_rx(struct iwl_priv *priv, ...@@ -3978,7 +3978,7 @@ static void iwl4965_rx_reply_rx(struct iwl_priv *priv,
rx_status.mactime = le64_to_cpu(rx_start->timestamp); rx_status.mactime = le64_to_cpu(rx_start->timestamp);
rx_status.freq = rx_status.freq =
ieee80211_frequency_to_channel(le16_to_cpu(rx_start->channel)); ieee80211_channel_to_frequency(le16_to_cpu(rx_start->channel));
rx_status.band = (rx_start->phy_flags & RX_RES_PHY_FLAGS_BAND_24_MSK) ? rx_status.band = (rx_start->phy_flags & RX_RES_PHY_FLAGS_BAND_24_MSK) ?
IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ; IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ;
rx_status.rate_idx = rx_status.rate_idx =
......
...@@ -388,8 +388,15 @@ islpci_open(struct net_device *ndev) ...@@ -388,8 +388,15 @@ islpci_open(struct net_device *ndev)
netif_start_queue(ndev); netif_start_queue(ndev);
/* Turn off carrier unless we know we have associated */ /* Turn off carrier if in STA or Ad-hoc mode. It will be turned on
netif_carrier_off(ndev); * once the firmware receives a trap of being associated
* (GEN_OID_LINKSTATE). In other modes (AP or WDS or monitor) we
* should just leave the carrier on as its expected the firmware
* won't send us a trigger. */
if (priv->iw_mode == IW_MODE_INFRA || priv->iw_mode == IW_MODE_ADHOC)
netif_carrier_off(ndev);
else
netif_carrier_on(ndev);
return 0; return 0;
} }
......
...@@ -1032,8 +1032,10 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev) ...@@ -1032,8 +1032,10 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
* Initialize the device. * Initialize the device.
*/ */
status = rt2x00dev->ops->lib->initialize(rt2x00dev); status = rt2x00dev->ops->lib->initialize(rt2x00dev);
if (status) if (status) {
goto exit; rt2x00queue_uninitialize(rt2x00dev);
return status;
}
__set_bit(DEVICE_INITIALIZED, &rt2x00dev->flags); __set_bit(DEVICE_INITIALIZED, &rt2x00dev->flags);
...@@ -1043,11 +1045,6 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev) ...@@ -1043,11 +1045,6 @@ static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
rt2x00rfkill_register(rt2x00dev); rt2x00rfkill_register(rt2x00dev);
return 0; return 0;
exit:
rt2x00lib_uninitialize(rt2x00dev);
return status;
} }
int rt2x00lib_start(struct rt2x00_dev *rt2x00dev) int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
......
...@@ -314,13 +314,14 @@ int rt2x00pci_initialize(struct rt2x00_dev *rt2x00dev) ...@@ -314,13 +314,14 @@ int rt2x00pci_initialize(struct rt2x00_dev *rt2x00dev)
if (status) { if (status) {
ERROR(rt2x00dev, "IRQ %d allocation failed (error %d).\n", ERROR(rt2x00dev, "IRQ %d allocation failed (error %d).\n",
pci_dev->irq, status); pci_dev->irq, status);
return status; goto exit;
} }
return 0; return 0;
exit: exit:
rt2x00pci_uninitialize(rt2x00dev); queue_for_each(rt2x00dev, queue)
rt2x00pci_free_queue_dma(rt2x00dev, queue);
return status; return status;
} }
......
...@@ -2366,6 +2366,7 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb, ...@@ -2366,6 +2366,7 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
{ {
struct rt2x00_dev *rt2x00dev = hw->priv; struct rt2x00_dev *rt2x00dev = hw->priv;
struct rt2x00_intf *intf = vif_to_intf(control->vif); struct rt2x00_intf *intf = vif_to_intf(control->vif);
struct queue_entry_priv_pci_tx *priv_tx;
struct skb_frame_desc *skbdesc; struct skb_frame_desc *skbdesc;
unsigned int beacon_base; unsigned int beacon_base;
u32 reg; u32 reg;
...@@ -2373,21 +2374,8 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb, ...@@ -2373,21 +2374,8 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
if (unlikely(!intf->beacon)) if (unlikely(!intf->beacon))
return -ENOBUFS; return -ENOBUFS;
/* priv_tx = intf->beacon->priv_data;
* We need to append the descriptor in front of the memset(priv_tx->desc, 0, intf->beacon->queue->desc_size);
* beacon frame.
*/
if (skb_headroom(skb) < intf->beacon->queue->desc_size) {
if (pskb_expand_head(skb, intf->beacon->queue->desc_size,
0, GFP_ATOMIC))
return -ENOMEM;
}
/*
* Add the descriptor in front of the skb.
*/
skb_push(skb, intf->beacon->queue->desc_size);
memset(skb->data, 0, intf->beacon->queue->desc_size);
/* /*
* Fill in skb descriptor * Fill in skb descriptor
...@@ -2395,9 +2383,9 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb, ...@@ -2395,9 +2383,9 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
skbdesc = get_skb_frame_desc(skb); skbdesc = get_skb_frame_desc(skb);
memset(skbdesc, 0, sizeof(*skbdesc)); memset(skbdesc, 0, sizeof(*skbdesc));
skbdesc->flags |= FRAME_DESC_DRIVER_GENERATED; skbdesc->flags |= FRAME_DESC_DRIVER_GENERATED;
skbdesc->data = skb->data + intf->beacon->queue->desc_size; skbdesc->data = skb->data;
skbdesc->data_len = skb->len - intf->beacon->queue->desc_size; skbdesc->data_len = skb->len;
skbdesc->desc = skb->data; skbdesc->desc = priv_tx->desc;
skbdesc->desc_len = intf->beacon->queue->desc_size; skbdesc->desc_len = intf->beacon->queue->desc_size;
skbdesc->entry = intf->beacon; skbdesc->entry = intf->beacon;
...@@ -2425,7 +2413,10 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb, ...@@ -2425,7 +2413,10 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
*/ */
beacon_base = HW_BEACON_OFFSET(intf->beacon->entry_idx); beacon_base = HW_BEACON_OFFSET(intf->beacon->entry_idx);
rt2x00pci_register_multiwrite(rt2x00dev, beacon_base, rt2x00pci_register_multiwrite(rt2x00dev, beacon_base,
skb->data, skb->len); skbdesc->desc, skbdesc->desc_len);
rt2x00pci_register_multiwrite(rt2x00dev,
beacon_base + skbdesc->desc_len,
skbdesc->data, skbdesc->data_len);
rt61pci_kick_tx_queue(rt2x00dev, control->queue); rt61pci_kick_tx_queue(rt2x00dev, control->queue);
return 0; return 0;
...@@ -2490,7 +2481,7 @@ static const struct data_queue_desc rt61pci_queue_tx = { ...@@ -2490,7 +2481,7 @@ static const struct data_queue_desc rt61pci_queue_tx = {
static const struct data_queue_desc rt61pci_queue_bcn = { static const struct data_queue_desc rt61pci_queue_bcn = {
.entry_num = 4 * BEACON_ENTRIES, .entry_num = 4 * BEACON_ENTRIES,
.data_size = MGMT_FRAME_SIZE, .data_size = 0, /* No DMA required for beacons */
.desc_size = TXINFO_SIZE, .desc_size = TXINFO_SIZE,
.priv_size = sizeof(struct queue_entry_priv_pci_tx), .priv_size = sizeof(struct queue_entry_priv_pci_tx),
}; };
......
...@@ -908,9 +908,9 @@ static void wv_psa_show(psa_t * p) ...@@ -908,9 +908,9 @@ static void wv_psa_show(psa_t * p)
p->psa_call_code[3], p->psa_call_code[4], p->psa_call_code[5], p->psa_call_code[3], p->psa_call_code[4], p->psa_call_code[5],
p->psa_call_code[6], p->psa_call_code[7]); p->psa_call_code[6], p->psa_call_code[7]);
#ifdef DEBUG_SHOW_UNUSED #ifdef DEBUG_SHOW_UNUSED
printk(KERN_DEBUG "psa_reserved[]: %02X:%02X:%02X:%02X\n", printk(KERN_DEBUG "psa_reserved[]: %02X:%02X\n",
p->psa_reserved[0], p->psa_reserved[0],
p->psa_reserved[1], p->psa_reserved[2], p->psa_reserved[3]); p->psa_reserved[1]);
#endif /* DEBUG_SHOW_UNUSED */ #endif /* DEBUG_SHOW_UNUSED */
printk(KERN_DEBUG "psa_conf_status: %d, ", p->psa_conf_status); printk(KERN_DEBUG "psa_conf_status: %d, ", p->psa_conf_status);
printk("psa_crc: 0x%02x%02x, ", p->psa_crc[0], p->psa_crc[1]); printk("psa_crc: 0x%02x%02x, ", p->psa_crc[0], p->psa_crc[1]);
......
...@@ -1074,11 +1074,9 @@ wv_psa_show(psa_t * p) ...@@ -1074,11 +1074,9 @@ wv_psa_show(psa_t * p)
p->psa_call_code[6], p->psa_call_code[6],
p->psa_call_code[7]); p->psa_call_code[7]);
#ifdef DEBUG_SHOW_UNUSED #ifdef DEBUG_SHOW_UNUSED
printk(KERN_DEBUG "psa_reserved[]: %02X:%02X:%02X:%02X\n", printk(KERN_DEBUG "psa_reserved[]: %02X:%02X\n",
p->psa_reserved[0], p->psa_reserved[0],
p->psa_reserved[1], p->psa_reserved[1]);
p->psa_reserved[2],
p->psa_reserved[3]);
#endif /* DEBUG_SHOW_UNUSED */ #endif /* DEBUG_SHOW_UNUSED */
printk(KERN_DEBUG "psa_conf_status: %d, ", p->psa_conf_status); printk(KERN_DEBUG "psa_conf_status: %d, ", p->psa_conf_status);
printk("psa_crc: 0x%02x%02x, ", p->psa_crc[0], p->psa_crc[1]); printk("psa_crc: 0x%02x%02x, ", p->psa_crc[0], p->psa_crc[1]);
......
...@@ -889,9 +889,13 @@ static void tx_urb_complete(struct urb *urb) ...@@ -889,9 +889,13 @@ static void tx_urb_complete(struct urb *urb)
} }
free_urb: free_urb:
skb = (struct sk_buff *)urb->context; skb = (struct sk_buff *)urb->context;
zd_mac_tx_to_dev(skb, urb->status); /*
* grab 'usb' pointer before handing off the skb (since
* it might be freed by zd_mac_tx_to_dev or mac80211)
*/
cb = (struct zd_tx_skb_control_block *)skb->cb; cb = (struct zd_tx_skb_control_block *)skb->cb;
usb = &zd_hw_mac(cb->hw)->chip.usb; usb = &zd_hw_mac(cb->hw)->chip.usb;
zd_mac_tx_to_dev(skb, urb->status);
free_tx_urb(usb, urb); free_tx_urb(usb, urb);
tx_dec_submitted_urbs(usb); tx_dec_submitted_urbs(usb);
return; return;
......
...@@ -255,14 +255,23 @@ void ieee80211_debugfs_key_remove(struct ieee80211_key *key) ...@@ -255,14 +255,23 @@ void ieee80211_debugfs_key_remove(struct ieee80211_key *key)
void ieee80211_debugfs_key_add_default(struct ieee80211_sub_if_data *sdata) void ieee80211_debugfs_key_add_default(struct ieee80211_sub_if_data *sdata)
{ {
char buf[50]; char buf[50];
struct ieee80211_key *key;
if (!sdata->debugfsdir) if (!sdata->debugfsdir)
return; return;
sprintf(buf, "../keys/%d", sdata->default_key->debugfs.cnt); /* this is running under the key lock */
sdata->debugfs.default_key =
debugfs_create_symlink("default_key", sdata->debugfsdir, buf); key = sdata->default_key;
if (key) {
sprintf(buf, "../keys/%d", key->debugfs.cnt);
sdata->debugfs.default_key =
debugfs_create_symlink("default_key",
sdata->debugfsdir, buf);
} else
ieee80211_debugfs_key_remove_default(sdata);
} }
void ieee80211_debugfs_key_remove_default(struct ieee80211_sub_if_data *sdata) void ieee80211_debugfs_key_remove_default(struct ieee80211_sub_if_data *sdata)
{ {
if (!sdata) if (!sdata)
......
...@@ -397,7 +397,7 @@ int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr, ...@@ -397,7 +397,7 @@ int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr,
put_unaligned(cpu_to_le32(sdata->u.sta.mesh_seqnum), &meshhdr->seqnum); put_unaligned(cpu_to_le32(sdata->u.sta.mesh_seqnum), &meshhdr->seqnum);
sdata->u.sta.mesh_seqnum++; sdata->u.sta.mesh_seqnum++;
return 5; return 6;
} }
void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata) void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata)
......
...@@ -120,7 +120,7 @@ static int mesh_path_sel_frame_tx(enum mpath_frame_type action, u8 flags, ...@@ -120,7 +120,7 @@ static int mesh_path_sel_frame_tx(enum mpath_frame_type action, u8 flags,
*pos++ = WLAN_EID_PREP; *pos++ = WLAN_EID_PREP;
break; break;
default: default:
kfree(skb); kfree_skb(skb);
return -ENOTSUPP; return -ENOTSUPP;
break; break;
} }
......
...@@ -158,19 +158,25 @@ int mesh_path_add(u8 *dst, struct net_device *dev) ...@@ -158,19 +158,25 @@ int mesh_path_add(u8 *dst, struct net_device *dev)
if (atomic_add_unless(&sdata->u.sta.mpaths, 1, MESH_MAX_MPATHS) == 0) if (atomic_add_unless(&sdata->u.sta.mpaths, 1, MESH_MAX_MPATHS) == 0)
return -ENOSPC; return -ENOSPC;
read_lock(&pathtbl_resize_lock);
new_mpath = kzalloc(sizeof(struct mesh_path), GFP_KERNEL); new_mpath = kzalloc(sizeof(struct mesh_path), GFP_KERNEL);
if (!new_mpath) { if (!new_mpath) {
atomic_dec(&sdata->u.sta.mpaths); atomic_dec(&sdata->u.sta.mpaths);
err = -ENOMEM; err = -ENOMEM;
goto endadd2; goto endadd2;
} }
new_node = kmalloc(sizeof(struct mpath_node), GFP_KERNEL);
if (!new_node) {
kfree(new_mpath);
atomic_dec(&sdata->u.sta.mpaths);
err = -ENOMEM;
goto endadd2;
}
read_lock(&pathtbl_resize_lock);
memcpy(new_mpath->dst, dst, ETH_ALEN); memcpy(new_mpath->dst, dst, ETH_ALEN);
new_mpath->dev = dev; new_mpath->dev = dev;
new_mpath->flags = 0; new_mpath->flags = 0;
skb_queue_head_init(&new_mpath->frame_queue); skb_queue_head_init(&new_mpath->frame_queue);
new_node = kmalloc(sizeof(struct mpath_node), GFP_KERNEL);
new_node->mpath = new_mpath; new_node->mpath = new_mpath;
new_mpath->timer.data = (unsigned long) new_mpath; new_mpath->timer.data = (unsigned long) new_mpath;
new_mpath->timer.function = mesh_path_timer; new_mpath->timer.function = mesh_path_timer;
...@@ -202,7 +208,6 @@ int mesh_path_add(u8 *dst, struct net_device *dev) ...@@ -202,7 +208,6 @@ int mesh_path_add(u8 *dst, struct net_device *dev)
endadd: endadd:
spin_unlock(&mesh_paths->hashwlock[hash_idx]); spin_unlock(&mesh_paths->hashwlock[hash_idx]);
endadd2:
read_unlock(&pathtbl_resize_lock); read_unlock(&pathtbl_resize_lock);
if (!err && grow) { if (!err && grow) {
struct mesh_table *oldtbl, *newtbl; struct mesh_table *oldtbl, *newtbl;
...@@ -215,10 +220,12 @@ int mesh_path_add(u8 *dst, struct net_device *dev) ...@@ -215,10 +220,12 @@ int mesh_path_add(u8 *dst, struct net_device *dev)
return -ENOMEM; return -ENOMEM;
} }
rcu_assign_pointer(mesh_paths, newtbl); rcu_assign_pointer(mesh_paths, newtbl);
write_unlock(&pathtbl_resize_lock);
synchronize_rcu(); synchronize_rcu();
mesh_table_free(oldtbl, false); mesh_table_free(oldtbl, false);
write_unlock(&pathtbl_resize_lock);
} }
endadd2:
return err; return err;
} }
......
...@@ -665,6 +665,26 @@ static void ieee80211_authenticate(struct net_device *dev, ...@@ -665,6 +665,26 @@ static void ieee80211_authenticate(struct net_device *dev,
mod_timer(&ifsta->timer, jiffies + IEEE80211_AUTH_TIMEOUT); mod_timer(&ifsta->timer, jiffies + IEEE80211_AUTH_TIMEOUT);
} }
static int ieee80211_compatible_rates(struct ieee80211_sta_bss *bss,
struct ieee80211_supported_band *sband,
u64 *rates)
{
int i, j, count;
*rates = 0;
count = 0;
for (i = 0; i < bss->supp_rates_len; i++) {
int rate = (bss->supp_rates[i] & 0x7F) * 5;
for (j = 0; j < sband->n_bitrates; j++)
if (sband->bitrates[j].bitrate == rate) {
*rates |= BIT(j);
count++;
break;
}
}
return count;
}
static void ieee80211_send_assoc(struct net_device *dev, static void ieee80211_send_assoc(struct net_device *dev,
struct ieee80211_if_sta *ifsta) struct ieee80211_if_sta *ifsta)
...@@ -673,11 +693,12 @@ static void ieee80211_send_assoc(struct net_device *dev, ...@@ -673,11 +693,12 @@ static void ieee80211_send_assoc(struct net_device *dev,
struct sk_buff *skb; struct sk_buff *skb;
struct ieee80211_mgmt *mgmt; struct ieee80211_mgmt *mgmt;
u8 *pos, *ies; u8 *pos, *ies;
int i, len; int i, len, count, rates_len, supp_rates_len;
u16 capab; u16 capab;
struct ieee80211_sta_bss *bss; struct ieee80211_sta_bss *bss;
int wmm = 0; int wmm = 0;
struct ieee80211_supported_band *sband; struct ieee80211_supported_band *sband;
u64 rates = 0;
skb = dev_alloc_skb(local->hw.extra_tx_headroom + skb = dev_alloc_skb(local->hw.extra_tx_headroom +
sizeof(*mgmt) + 200 + ifsta->extra_ie_len + sizeof(*mgmt) + 200 + ifsta->extra_ie_len +
...@@ -740,24 +761,39 @@ static void ieee80211_send_assoc(struct net_device *dev, ...@@ -740,24 +761,39 @@ static void ieee80211_send_assoc(struct net_device *dev,
*pos++ = ifsta->ssid_len; *pos++ = ifsta->ssid_len;
memcpy(pos, ifsta->ssid, ifsta->ssid_len); memcpy(pos, ifsta->ssid, ifsta->ssid_len);
/* all supported rates should be added here but some APs
* (e.g. D-Link DAP 1353 in b-only mode) don't like that
* Therefore only add rates the AP supports */
rates_len = ieee80211_compatible_rates(bss, sband, &rates);
supp_rates_len = rates_len;
if (supp_rates_len > 8)
supp_rates_len = 8;
len = sband->n_bitrates; len = sband->n_bitrates;
if (len > 8) pos = skb_put(skb, supp_rates_len + 2);
len = 8;
pos = skb_put(skb, len + 2);
*pos++ = WLAN_EID_SUPP_RATES; *pos++ = WLAN_EID_SUPP_RATES;
*pos++ = len; *pos++ = supp_rates_len;
for (i = 0; i < len; i++) {
int rate = sband->bitrates[i].bitrate;
*pos++ = (u8) (rate / 5);
}
if (sband->n_bitrates > len) { count = 0;
pos = skb_put(skb, sband->n_bitrates - len + 2); for (i = 0; i < sband->n_bitrates; i++) {
*pos++ = WLAN_EID_EXT_SUPP_RATES; if (BIT(i) & rates) {
*pos++ = sband->n_bitrates - len;
for (i = len; i < sband->n_bitrates; i++) {
int rate = sband->bitrates[i].bitrate; int rate = sband->bitrates[i].bitrate;
*pos++ = (u8) (rate / 5); *pos++ = (u8) (rate / 5);
if (++count == 8)
break;
}
}
if (count == 8) {
pos = skb_put(skb, rates_len - count + 2);
*pos++ = WLAN_EID_EXT_SUPP_RATES;
*pos++ = rates_len - count;
for (i++; i < sband->n_bitrates; i++) {
if (BIT(i) & rates) {
int rate = sband->bitrates[i].bitrate;
*pos++ = (u8) (rate / 5);
}
} }
} }
......
...@@ -85,7 +85,7 @@ static int rate_control_pid_events_open(struct inode *inode, struct file *file) ...@@ -85,7 +85,7 @@ static int rate_control_pid_events_open(struct inode *inode, struct file *file)
struct rc_pid_sta_info *sinfo = inode->i_private; struct rc_pid_sta_info *sinfo = inode->i_private;
struct rc_pid_event_buffer *events = &sinfo->events; struct rc_pid_event_buffer *events = &sinfo->events;
struct rc_pid_events_file_info *file_info; struct rc_pid_events_file_info *file_info;
unsigned int status; unsigned long status;
/* Allocate a state struct */ /* Allocate a state struct */
file_info = kmalloc(sizeof(*file_info), GFP_KERNEL); file_info = kmalloc(sizeof(*file_info), GFP_KERNEL);
...@@ -135,7 +135,7 @@ static ssize_t rate_control_pid_events_read(struct file *file, char __user *buf, ...@@ -135,7 +135,7 @@ static ssize_t rate_control_pid_events_read(struct file *file, char __user *buf,
char pb[RC_PID_PRINT_BUF_SIZE]; char pb[RC_PID_PRINT_BUF_SIZE];
int ret; int ret;
int p; int p;
unsigned int status; unsigned long status;
/* Check if there is something to read. */ /* Check if there is something to read. */
if (events->next_entry == file_info->next_entry) { if (events->next_entry == file_info->next_entry) {
......
...@@ -1305,11 +1305,11 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx) ...@@ -1305,11 +1305,11 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
if (is_multicast_ether_addr(skb->data)) { if (is_multicast_ether_addr(skb->data)) {
if (*mesh_ttl > 0) { if (*mesh_ttl > 0) {
xmit_skb = skb_copy(skb, GFP_ATOMIC); xmit_skb = skb_copy(skb, GFP_ATOMIC);
if (!xmit_skb && net_ratelimit()) if (xmit_skb)
xmit_skb->pkt_type = PACKET_OTHERHOST;
else if (net_ratelimit())
printk(KERN_DEBUG "%s: failed to clone " printk(KERN_DEBUG "%s: failed to clone "
"multicast frame\n", dev->name); "multicast frame\n", dev->name);
else
xmit_skb->pkt_type = PACKET_OTHERHOST;
} else } else
IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.sta, IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.sta,
dropped_frames_ttl); dropped_frames_ttl);
...@@ -1395,7 +1395,7 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx) ...@@ -1395,7 +1395,7 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
padding = ((4 - subframe_len) & 0x3); padding = ((4 - subframe_len) & 0x3);
/* the last MSDU has no padding */ /* the last MSDU has no padding */
if (subframe_len > remaining) { if (subframe_len > remaining) {
printk(KERN_DEBUG "%s: wrong buffer size", dev->name); printk(KERN_DEBUG "%s: wrong buffer size\n", dev->name);
return RX_DROP_UNUSABLE; return RX_DROP_UNUSABLE;
} }
...@@ -1418,7 +1418,7 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx) ...@@ -1418,7 +1418,7 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
eth = (struct ethhdr *) skb_pull(skb, ntohs(len) + eth = (struct ethhdr *) skb_pull(skb, ntohs(len) +
padding); padding);
if (!eth) { if (!eth) {
printk(KERN_DEBUG "%s: wrong buffer size ", printk(KERN_DEBUG "%s: wrong buffer size\n",
dev->name); dev->name);
dev_kfree_skb(frame); dev_kfree_skb(frame);
return RX_DROP_UNUSABLE; return RX_DROP_UNUSABLE;
...@@ -1952,7 +1952,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, ...@@ -1952,7 +1952,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
if (!skb_new) { if (!skb_new) {
if (net_ratelimit()) if (net_ratelimit())
printk(KERN_DEBUG "%s: failed to copy " printk(KERN_DEBUG "%s: failed to copy "
"multicast frame for %s", "multicast frame for %s\n",
wiphy_name(local->hw.wiphy), wiphy_name(local->hw.wiphy),
prev->dev->name); prev->dev->name);
continue; continue;
......
...@@ -1898,6 +1898,7 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw, ...@@ -1898,6 +1898,7 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
control->flags |= IEEE80211_TXCTL_SHORT_PREAMBLE; control->flags |= IEEE80211_TXCTL_SHORT_PREAMBLE;
control->antenna_sel_tx = local->hw.conf.antenna_sel_tx; control->antenna_sel_tx = local->hw.conf.antenna_sel_tx;
control->flags |= IEEE80211_TXCTL_NO_ACK; control->flags |= IEEE80211_TXCTL_NO_ACK;
control->flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT;
control->retry_limit = 1; control->retry_limit = 1;
control->flags |= IEEE80211_TXCTL_CLEAR_PS_FILT; control->flags |= IEEE80211_TXCTL_CLEAR_PS_FILT;
} }
......
...@@ -153,15 +153,15 @@ int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr) ...@@ -153,15 +153,15 @@ int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr)
/* 7.1.3.5a.2 */ /* 7.1.3.5a.2 */
switch (ae) { switch (ae) {
case 0: case 0:
return 5; return 6;
case 1: case 1:
return 11; return 12;
case 2: case 2:
return 17; return 18;
case 3: case 3:
return 23; return 24;
default: default:
return 5; return 6;
} }
} }
......
...@@ -394,7 +394,8 @@ static int wme_qdiscop_init(struct Qdisc *qd, struct nlattr *opt) ...@@ -394,7 +394,8 @@ static int wme_qdiscop_init(struct Qdisc *qd, struct nlattr *opt)
qd->handle); qd->handle);
if (!q->queues[i]) { if (!q->queues[i]) {
q->queues[i] = &noop_qdisc; q->queues[i] = &noop_qdisc;
printk(KERN_ERR "%s child qdisc %i creation failed", dev->name, i); printk(KERN_ERR "%s child qdisc %i creation failed\n",
dev->name, i);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment