diff options
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/Kconfig | 2 | ||||
-rw-r--r-- | drivers/net/wireless/orinoco.c | 21 | ||||
-rw-r--r-- | drivers/net/wireless/strip.c | 4 |
3 files changed, 16 insertions, 11 deletions
diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig index 00a07f32a81e..7187958e40ca 100644 --- a/drivers/net/wireless/Kconfig +++ b/drivers/net/wireless/Kconfig | |||
@@ -243,7 +243,7 @@ config IPW_DEBUG | |||
243 | 243 | ||
244 | config AIRO | 244 | config AIRO |
245 | tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards" | 245 | tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards" |
246 | depends on NET_RADIO && ISA && (PCI || BROKEN) | 246 | depends on NET_RADIO && ISA_DMA_API && (PCI || BROKEN) |
247 | ---help--- | 247 | ---help--- |
248 | This is the standard Linux driver to support Cisco/Aironet ISA and | 248 | This is the standard Linux driver to support Cisco/Aironet ISA and |
249 | PCI 802.11 wireless cards. | 249 | PCI 802.11 wireless cards. |
diff --git a/drivers/net/wireless/orinoco.c b/drivers/net/wireless/orinoco.c index 8de49fe57233..15ceaf615756 100644 --- a/drivers/net/wireless/orinoco.c +++ b/drivers/net/wireless/orinoco.c | |||
@@ -503,9 +503,14 @@ static int orinoco_xmit(struct sk_buff *skb, struct net_device *dev) | |||
503 | return 0; | 503 | return 0; |
504 | } | 504 | } |
505 | 505 | ||
506 | /* Length of the packet body */ | 506 | /* Check packet length, pad short packets, round up odd length */ |
507 | /* FIXME: what if the skb is smaller than this? */ | 507 | len = max_t(int, ALIGN(skb->len, 2), ETH_ZLEN); |
508 | len = max_t(int,skb->len - ETH_HLEN, ETH_ZLEN - ETH_HLEN); | 508 | if (skb->len < len) { |
509 | skb = skb_padto(skb, len); | ||
510 | if (skb == NULL) | ||
511 | goto fail; | ||
512 | } | ||
513 | len -= ETH_HLEN; | ||
509 | 514 | ||
510 | eh = (struct ethhdr *)skb->data; | 515 | eh = (struct ethhdr *)skb->data; |
511 | 516 | ||
@@ -557,8 +562,7 @@ static int orinoco_xmit(struct sk_buff *skb, struct net_device *dev) | |||
557 | p = skb->data; | 562 | p = skb->data; |
558 | } | 563 | } |
559 | 564 | ||
560 | /* Round up for odd length packets */ | 565 | err = hermes_bap_pwrite(hw, USER_BAP, p, data_len, |
561 | err = hermes_bap_pwrite(hw, USER_BAP, p, ALIGN(data_len, 2), | ||
562 | txfid, data_off); | 566 | txfid, data_off); |
563 | if (err) { | 567 | if (err) { |
564 | printk(KERN_ERR "%s: Error %d writing packet to BAP\n", | 568 | printk(KERN_ERR "%s: Error %d writing packet to BAP\n", |
@@ -574,8 +578,9 @@ static int orinoco_xmit(struct sk_buff *skb, struct net_device *dev) | |||
574 | txfid, NULL); | 578 | txfid, NULL); |
575 | if (err) { | 579 | if (err) { |
576 | netif_start_queue(dev); | 580 | netif_start_queue(dev); |
577 | printk(KERN_ERR "%s: Error %d transmitting packet\n", | 581 | if (net_ratelimit()) |
578 | dev->name, err); | 582 | printk(KERN_ERR "%s: Error %d transmitting packet\n", |
583 | dev->name, err); | ||
579 | stats->tx_errors++; | 584 | stats->tx_errors++; |
580 | goto fail; | 585 | goto fail; |
581 | } | 586 | } |
@@ -2458,7 +2463,6 @@ struct net_device *alloc_orinocodev(int sizeof_card, | |||
2458 | dev->watchdog_timeo = HZ; /* 1 second timeout */ | 2463 | dev->watchdog_timeo = HZ; /* 1 second timeout */ |
2459 | dev->get_stats = orinoco_get_stats; | 2464 | dev->get_stats = orinoco_get_stats; |
2460 | dev->ethtool_ops = &orinoco_ethtool_ops; | 2465 | dev->ethtool_ops = &orinoco_ethtool_ops; |
2461 | dev->get_wireless_stats = orinoco_get_wireless_stats; | ||
2462 | dev->wireless_handlers = (struct iw_handler_def *)&orinoco_handler_def; | 2466 | dev->wireless_handlers = (struct iw_handler_def *)&orinoco_handler_def; |
2463 | dev->change_mtu = orinoco_change_mtu; | 2467 | dev->change_mtu = orinoco_change_mtu; |
2464 | dev->set_multicast_list = orinoco_set_multicast_list; | 2468 | dev->set_multicast_list = orinoco_set_multicast_list; |
@@ -4399,6 +4403,7 @@ static const struct iw_handler_def orinoco_handler_def = { | |||
4399 | .standard = orinoco_handler, | 4403 | .standard = orinoco_handler, |
4400 | .private = orinoco_private_handler, | 4404 | .private = orinoco_private_handler, |
4401 | .private_args = orinoco_privtab, | 4405 | .private_args = orinoco_privtab, |
4406 | .get_wireless_stats = orinoco_get_wireless_stats, | ||
4402 | }; | 4407 | }; |
4403 | 4408 | ||
4404 | static void orinoco_get_drvinfo(struct net_device *dev, | 4409 | static void orinoco_get_drvinfo(struct net_device *dev, |
diff --git a/drivers/net/wireless/strip.c b/drivers/net/wireless/strip.c index 4b0acae22b0d..7bc7fc823128 100644 --- a/drivers/net/wireless/strip.c +++ b/drivers/net/wireless/strip.c | |||
@@ -1352,7 +1352,7 @@ static unsigned char *strip_make_packet(unsigned char *buffer, | |||
1352 | struct in_device *in_dev; | 1352 | struct in_device *in_dev; |
1353 | 1353 | ||
1354 | rcu_read_lock(); | 1354 | rcu_read_lock(); |
1355 | in_dev = __in_dev_get(strip_info->dev); | 1355 | in_dev = __in_dev_get_rcu(strip_info->dev); |
1356 | if (in_dev == NULL) { | 1356 | if (in_dev == NULL) { |
1357 | rcu_read_unlock(); | 1357 | rcu_read_unlock(); |
1358 | return NULL; | 1358 | return NULL; |
@@ -1508,7 +1508,7 @@ static void strip_send(struct strip *strip_info, struct sk_buff *skb) | |||
1508 | 1508 | ||
1509 | brd = addr = 0; | 1509 | brd = addr = 0; |
1510 | rcu_read_lock(); | 1510 | rcu_read_lock(); |
1511 | in_dev = __in_dev_get(strip_info->dev); | 1511 | in_dev = __in_dev_get_rcu(strip_info->dev); |
1512 | if (in_dev) { | 1512 | if (in_dev) { |
1513 | if (in_dev->ifa_list) { | 1513 | if (in_dev->ifa_list) { |
1514 | brd = in_dev->ifa_list->ifa_broadcast; | 1514 | brd = in_dev->ifa_list->ifa_broadcast; |