diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/ipw2100.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c index d429fd576a66..b0e23a88250f 100644 --- a/drivers/net/wireless/ipw2100.c +++ b/drivers/net/wireless/ipw2100.c | |||
@@ -2445,8 +2445,6 @@ static void isr_rx_monitor(struct ipw2100_priv *priv, int i, | |||
2445 | struct ipw2100_status *status = &priv->status_queue.drv[i]; | 2445 | struct ipw2100_status *status = &priv->status_queue.drv[i]; |
2446 | struct ipw2100_rx_packet *packet = &priv->rx_buffers[i]; | 2446 | struct ipw2100_rx_packet *packet = &priv->rx_buffers[i]; |
2447 | 2447 | ||
2448 | IPW_DEBUG_RX("Handler...\n"); | ||
2449 | |||
2450 | /* Magic struct that slots into the radiotap header -- no reason | 2448 | /* Magic struct that slots into the radiotap header -- no reason |
2451 | * to build this manually element by element, we can write it much | 2449 | * to build this manually element by element, we can write it much |
2452 | * more efficiently than we can parse it. ORDER MATTERS HERE */ | 2450 | * more efficiently than we can parse it. ORDER MATTERS HERE */ |
@@ -2455,11 +2453,15 @@ static void isr_rx_monitor(struct ipw2100_priv *priv, int i, | |||
2455 | s8 rt_dbmsignal; /* signal in dbM, kluged to signed */ | 2453 | s8 rt_dbmsignal; /* signal in dbM, kluged to signed */ |
2456 | } *ipw_rt; | 2454 | } *ipw_rt; |
2457 | 2455 | ||
2458 | if (unlikely(status->frame_size > skb_tailroom(packet->skb) - sizeof(struct ipw_rt_hdr))) { | 2456 | IPW_DEBUG_RX("Handler...\n"); |
2457 | |||
2458 | if (unlikely(status->frame_size > skb_tailroom(packet->skb) - | ||
2459 | sizeof(struct ipw_rt_hdr))) { | ||
2459 | IPW_DEBUG_INFO("%s: frame_size (%u) > skb_tailroom (%u)!" | 2460 | IPW_DEBUG_INFO("%s: frame_size (%u) > skb_tailroom (%u)!" |
2460 | " Dropping.\n", | 2461 | " Dropping.\n", |
2461 | priv->net_dev->name, | 2462 | priv->net_dev->name, |
2462 | status->frame_size, skb_tailroom(packet->skb)); | 2463 | status->frame_size, |
2464 | skb_tailroom(packet->skb)); | ||
2463 | priv->ieee->stats.rx_errors++; | 2465 | priv->ieee->stats.rx_errors++; |
2464 | return; | 2466 | return; |
2465 | } | 2467 | } |
@@ -2478,8 +2480,7 @@ static void isr_rx_monitor(struct ipw2100_priv *priv, int i, | |||
2478 | return; | 2480 | return; |
2479 | } | 2481 | } |
2480 | 2482 | ||
2481 | pci_unmap_single(priv->pci_dev, | 2483 | pci_unmap_single(priv->pci_dev, packet->dma_addr, |
2482 | packet->dma_addr, | ||
2483 | sizeof(struct ipw2100_rx), PCI_DMA_FROMDEVICE); | 2484 | sizeof(struct ipw2100_rx), PCI_DMA_FROMDEVICE); |
2484 | memmove(packet->skb->data + sizeof(struct ipw_rt_hdr), | 2485 | memmove(packet->skb->data + sizeof(struct ipw_rt_hdr), |
2485 | packet->skb->data, status->frame_size); | 2486 | packet->skb->data, status->frame_size); |
@@ -2488,7 +2489,7 @@ static void isr_rx_monitor(struct ipw2100_priv *priv, int i, | |||
2488 | 2489 | ||
2489 | ipw_rt->rt_hdr.it_version = PKTHDR_RADIOTAP_VERSION; | 2490 | ipw_rt->rt_hdr.it_version = PKTHDR_RADIOTAP_VERSION; |
2490 | ipw_rt->rt_hdr.it_pad = 0; /* always good to zero */ | 2491 | ipw_rt->rt_hdr.it_pad = 0; /* always good to zero */ |
2491 | ipw_rt->rt_hdr.it_len = sizeof(struct ipw_rt_hdr); /* total header+data */ | 2492 | ipw_rt->rt_hdr.it_len = sizeof(struct ipw_rt_hdr); /* total hdr+data */ |
2492 | 2493 | ||
2493 | ipw_rt->rt_hdr.it_present = 1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL; | 2494 | ipw_rt->rt_hdr.it_present = 1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL; |
2494 | 2495 | ||