[bug report] staging: vt6656: vnt_beacon_xmit use extra_tx_headroom.

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

 



Hello Malcolm Priestley,

The patch 9deca1e3e2b6: "staging: vt6656: vnt_beacon_xmit use
extra_tx_headroom." from May 16, 2020, leads to the following static
checker warning:

	drivers/staging/vt6656/rxtx.c:729 vnt_beacon_xmit()
	warn: struct type mismatch 'vnt_beacon_buffer vs vnt_tx_usb_header'

drivers/staging/vt6656/rxtx.c
   660  static int vnt_beacon_xmit(struct vnt_private *priv, struct sk_buff *skb)
   661  {
   662          struct vnt_beacon_buffer *beacon_buffer;
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
So far as I can see this could be declared as a "vnt_tx_usb_header".
The "vnt_tx_usb_header" is the first member of the "vnt_beacon_buffer"
beacon struct.

   663          struct vnt_tx_short_buf_head *short_head;
   664          struct ieee80211_tx_info *info;
   665          struct vnt_usb_send_context *context;
   666          struct ieee80211_mgmt *mgmt_hdr;
   667          unsigned long flags;
   668          u32 frame_size = skb->len + 4;
   669          u16 current_rate, count;
   670  
   671          spin_lock_irqsave(&priv->lock, flags);
   672  
   673          context = vnt_get_free_context(priv);
   674          if (!context) {
   675                  dev_dbg(&priv->usb->dev, "%s No free context!\n", __func__);
   676                  spin_unlock_irqrestore(&priv->lock, flags);
   677                  return -ENOMEM;
   678          }
   679  
   680          context->skb = skb;
   681  
   682          spin_unlock_irqrestore(&priv->lock, flags);
   683  
   684          mgmt_hdr = (struct ieee80211_mgmt *)skb->data;
   685          short_head = skb_push(skb, sizeof(*short_head));
   686          count = skb->len;
   687  
   688          if (priv->bb_type == BB_TYPE_11A) {
   689                  current_rate = RATE_6M;
   690  
   691                  /* Get SignalField,ServiceField,Length */
   692                  vnt_get_phy_field(priv, frame_size, current_rate,
   693                                    PK_TYPE_11A, &short_head->ab);
   694  
   695                  /* Get TimeStampOff */
   696                  short_head->time_stamp_off =
   697                                  vnt_time_stamp_off(priv, current_rate);
   698          } else {
   699                  current_rate = RATE_1M;
   700                  short_head->fifo_ctl |= cpu_to_le16(FIFOCTL_11B);
   701  
   702                  /* Get SignalField,ServiceField,Length */
   703                  vnt_get_phy_field(priv, frame_size, current_rate,
   704                                    PK_TYPE_11B, &short_head->ab);
   705  
   706                  /* Get TimeStampOff */
   707                  short_head->time_stamp_off =
   708                          vnt_time_stamp_off(priv, current_rate);
   709          }
   710  
   711          /* Get Duration */
   712          short_head->duration = mgmt_hdr->duration;
   713  
   714          /* time stamp always 0 */
   715          mgmt_hdr->u.beacon.timestamp = 0;
   716  
   717          info = IEEE80211_SKB_CB(skb);
   718          if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) {
   719                  struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)mgmt_hdr;
   720  
   721                  hdr->duration_id = 0;
   722                  hdr->seq_ctrl = cpu_to_le16(priv->seq_counter << 4);
   723          }
   724  
   725          priv->seq_counter++;
   726          if (priv->seq_counter > 0x0fff)
   727                  priv->seq_counter = 0;
   728  
   729          beacon_buffer = skb_push(skb, sizeof(struct vnt_tx_usb_header));
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

   730          beacon_buffer->usb.tx_byte_count = cpu_to_le16(count);
   731          beacon_buffer->usb.pkt_no = context->pkt_no;
   732          beacon_buffer->usb.type = 0x01;

We only need "beacon_buffer->usb".

   733  
   734          context->type = CONTEXT_BEACON_PACKET;
   735          context->tx_buffer = beacon_buffer;
                ^^^^^^^^^^^^^^^^^^
This is a void pointer.

   736          context->buf_len = skb->len;
   737  
   738          spin_lock_irqsave(&priv->lock, flags);
   739  
   740          if (vnt_tx_context(priv, context))
   741                  ieee80211_free_txskb(priv->hw, context->skb);
   742  
   743          spin_unlock_irqrestore(&priv->lock, flags);
   744  
   745          return 0;
   746  }

regards,
dan carpenter
_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel



[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux