Search Linux Wireless

Re: [PATCH] d80211: remove hosttime from ieee80211_rx_status

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Friday 09 February 2007 05:59, Michael Wu wrote:
> d80211: remove hosttime from ieee80211_rx_status
> 
> Nobody fills hosttime in ieee80211_rx_status. Removing it allows
> ieee80211_rx_status to fit in skb->cb.
> 
> Signed-off-by: Michael Wu <flamingice@xxxxxxxxxxxx>
> ---

I'd like to see some kind of
BUILD_BUG_ON(sizeof(struct ieee80211_rx_status) > sizeof(skb->cb));
somewhere in the code to prevent unintentional future bugs.

>  include/net/d80211.h   |    1 -
>  net/d80211/ieee80211.c |   25 +++++--------------------
>  2 files changed, 5 insertions(+), 21 deletions(-)
> 
> diff --git a/include/net/d80211.h b/include/net/d80211.h
> index 326def5..0b7b963 100644
> --- a/include/net/d80211.h
> +++ b/include/net/d80211.h
> @@ -225,7 +225,6 @@ struct ieee80211_tx_control {
>   * (the subset supported by hardware) to the 802.11 code with each received
>   * frame. */
>  struct ieee80211_rx_status {
> -        u64 hosttime;
>  	u64 mactime;
>          int freq; /* receive frequency in Mhz */
>          int channel;
> diff --git a/net/d80211/ieee80211.c b/net/d80211/ieee80211.c
> index bbcefa9..7a92bfe 100644
> --- a/net/d80211/ieee80211.c
> +++ b/net/d80211/ieee80211.c
> @@ -2627,7 +2627,7 @@ ieee80211_fill_frame_info(struct ieee802
>                  struct timespec ts;
>  		struct ieee80211_rate *rate;
>  
> -                jiffies_to_timespec(status->hosttime, &ts);
> +		jiffies_to_timespec(jiffies, &ts);
>  		fi->hosttime = cpu_to_be64((u64) ts.tv_sec * 1000000 +
>  					   ts.tv_nsec / 1000);
>  		fi->mactime = cpu_to_be64(status->mactime);
> @@ -4019,25 +4019,11 @@ static void ieee80211_stat_refresh(unsig
>  void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb,
>  			  struct ieee80211_rx_status *status)
>  {
> -	struct ieee80211_rx_status *saved;
>  	struct ieee80211_local *local = hw_to_local(hw);
>  
>  	skb->dev = local->mdev;
> -	saved = kmalloc(sizeof(struct ieee80211_rx_status), GFP_ATOMIC);
> -	if (unlikely(!saved)) {
> -		if (net_ratelimit())
> -			printk(KERN_WARNING "%s: Not enough memory, "
> -			       "dropping packet", skb->dev->name);
> -		/* should be dev_kfree_skb_irq, but due to this function being
> -		 * named _irqsafe instead of just _irq we can't be sure that
> -		 * people won't call it from non-irq contexts */
> -		dev_kfree_skb_any(skb);
> -		return;
> -	}
> -	memcpy(saved, status, sizeof(struct ieee80211_rx_status));
> -	/* copy pointer to saved status into skb->cb for use by tasklet */
> -	memcpy(skb->cb, &saved, sizeof(saved));
> -
> +	/* copy status into skb->cb for use by tasklet */
> +	memcpy(skb->cb, status, sizeof(struct ieee80211_rx_status));
>  	skb->pkt_type = ieee80211_rx_msg;
>  	skb_queue_tail(&local->skb_queue, skb);
>  	tasklet_schedule(&local->tasklet);
> @@ -4096,13 +4082,12 @@ static void ieee80211_tasklet_handler(un
>  	       (skb = skb_dequeue(&local->skb_queue_unreliable))) {
>                  switch (skb->pkt_type) {
>  		case ieee80211_rx_msg:
> -			/* get pointer to saved status out of skb->cb */
> -			memcpy(&rx_status, skb->cb, sizeof(rx_status));
> +			/* status is in skb->cb */
> +			rx_status = (struct ieee80211_rx_status *) skb->cb;
>  			/* Clear skb->type in order to not confuse kernel
>  			 * netstack. */
>  			skb->pkt_type = 0;
>  			__ieee80211_rx(local_to_hw(local), skb, rx_status);
> -			kfree(rx_status);
>  			break;
>  		case ieee80211_tx_status_msg:
>  			/* get pointer to saved status out of skb->cb */
> 
-
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux