[linux-next:master 3525/10297] drivers/net/wireless/ath/ath10k/mac.c:5586:26: warning: cast from pointer to integer of different size

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

 



Hi Alagu,

FYI, the error/warning still remains.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   3196a52aff93186897f15f1a6c03220ce6523d82
commit: e263bdab9c0e8025fb7f41f153709a9cda51f6b6 [3525/10297] ath10k: high latency fixes for beacon buffer
config: i386-randconfig-a014-20211004 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
        # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=e263bdab9c0e8025fb7f41f153709a9cda51f6b6
        git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout e263bdab9c0e8025fb7f41f153709a9cda51f6b6
        # save the attached .config to linux build tree
        make W=1 ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

   drivers/net/wireless/ath/ath10k/mac.c: In function 'ath10k_add_interface':
>> drivers/net/wireless/ath/ath10k/mac.c:5586:26: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    5586 |    arvif->beacon_paddr = (dma_addr_t)arvif->beacon_buf;
         |                          ^


vim +5586 drivers/net/wireless/ath/ath10k/mac.c

  5449	
  5450	/*
  5451	 * TODO:
  5452	 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
  5453	 * because we will send mgmt frames without CCK. This requirement
  5454	 * for P2P_FIND/GO_NEG should be handled by checking CCK flag
  5455	 * in the TX packet.
  5456	 */
  5457	static int ath10k_add_interface(struct ieee80211_hw *hw,
  5458					struct ieee80211_vif *vif)
  5459	{
  5460		struct ath10k *ar = hw->priv;
  5461		struct ath10k_vif *arvif = (void *)vif->drv_priv;
  5462		struct ath10k_peer *peer;
  5463		enum wmi_sta_powersave_param param;
  5464		int ret = 0;
  5465		u32 value;
  5466		int bit;
  5467		int i;
  5468		u32 vdev_param;
  5469	
  5470		vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD;
  5471	
  5472		mutex_lock(&ar->conf_mutex);
  5473	
  5474		memset(arvif, 0, sizeof(*arvif));
  5475		ath10k_mac_txq_init(vif->txq);
  5476	
  5477		arvif->ar = ar;
  5478		arvif->vif = vif;
  5479	
  5480		INIT_LIST_HEAD(&arvif->list);
  5481		INIT_WORK(&arvif->ap_csa_work, ath10k_mac_vif_ap_csa_work);
  5482		INIT_DELAYED_WORK(&arvif->connection_loss_work,
  5483				  ath10k_mac_vif_sta_connection_loss_work);
  5484	
  5485		for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) {
  5486			arvif->bitrate_mask.control[i].legacy = 0xffffffff;
  5487			memset(arvif->bitrate_mask.control[i].ht_mcs, 0xff,
  5488			       sizeof(arvif->bitrate_mask.control[i].ht_mcs));
  5489			memset(arvif->bitrate_mask.control[i].vht_mcs, 0xff,
  5490			       sizeof(arvif->bitrate_mask.control[i].vht_mcs));
  5491		}
  5492	
  5493		if (ar->num_peers >= ar->max_num_peers) {
  5494			ath10k_warn(ar, "refusing vdev creation due to insufficient peer entry resources in firmware\n");
  5495			ret = -ENOBUFS;
  5496			goto err;
  5497		}
  5498	
  5499		if (ar->free_vdev_map == 0) {
  5500			ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n");
  5501			ret = -EBUSY;
  5502			goto err;
  5503		}
  5504		bit = __ffs64(ar->free_vdev_map);
  5505	
  5506		ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n",
  5507			   bit, ar->free_vdev_map);
  5508	
  5509		arvif->vdev_id = bit;
  5510		arvif->vdev_subtype =
  5511			ath10k_wmi_get_vdev_subtype(ar, WMI_VDEV_SUBTYPE_NONE);
  5512	
  5513		switch (vif->type) {
  5514		case NL80211_IFTYPE_P2P_DEVICE:
  5515			arvif->vdev_type = WMI_VDEV_TYPE_STA;
  5516			arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
  5517						(ar, WMI_VDEV_SUBTYPE_P2P_DEVICE);
  5518			break;
  5519		case NL80211_IFTYPE_UNSPECIFIED:
  5520		case NL80211_IFTYPE_STATION:
  5521			arvif->vdev_type = WMI_VDEV_TYPE_STA;
  5522			if (vif->p2p)
  5523				arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
  5524						(ar, WMI_VDEV_SUBTYPE_P2P_CLIENT);
  5525			break;
  5526		case NL80211_IFTYPE_ADHOC:
  5527			arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
  5528			break;
  5529		case NL80211_IFTYPE_MESH_POINT:
  5530			if (test_bit(WMI_SERVICE_MESH_11S, ar->wmi.svc_map)) {
  5531				arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
  5532							(ar, WMI_VDEV_SUBTYPE_MESH_11S);
  5533			} else if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
  5534				ret = -EINVAL;
  5535				ath10k_warn(ar, "must load driver with rawmode=1 to add mesh interfaces\n");
  5536				goto err;
  5537			}
  5538			arvif->vdev_type = WMI_VDEV_TYPE_AP;
  5539			break;
  5540		case NL80211_IFTYPE_AP:
  5541			arvif->vdev_type = WMI_VDEV_TYPE_AP;
  5542	
  5543			if (vif->p2p)
  5544				arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
  5545							(ar, WMI_VDEV_SUBTYPE_P2P_GO);
  5546			break;
  5547		case NL80211_IFTYPE_MONITOR:
  5548			arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
  5549			break;
  5550		default:
  5551			WARN_ON(1);
  5552			break;
  5553		}
  5554	
  5555		/* Using vdev_id as queue number will make it very easy to do per-vif
  5556		 * tx queue locking. This shouldn't wrap due to interface combinations
  5557		 * but do a modulo for correctness sake and prevent using offchannel tx
  5558		 * queues for regular vif tx.
  5559		 */
  5560		vif->cab_queue = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
  5561		for (i = 0; i < ARRAY_SIZE(vif->hw_queue); i++)
  5562			vif->hw_queue[i] = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
  5563	
  5564		/* Some firmware revisions don't wait for beacon tx completion before
  5565		 * sending another SWBA event. This could lead to hardware using old
  5566		 * (freed) beacon data in some cases, e.g. tx credit starvation
  5567		 * combined with missed TBTT. This is very rare.
  5568		 *
  5569		 * On non-IOMMU-enabled hosts this could be a possible security issue
  5570		 * because hw could beacon some random data on the air.  On
  5571		 * IOMMU-enabled hosts DMAR faults would occur in most cases and target
  5572		 * device would crash.
  5573		 *
  5574		 * Since there are no beacon tx completions (implicit nor explicit)
  5575		 * propagated to host the only workaround for this is to allocate a
  5576		 * DMA-coherent buffer for a lifetime of a vif and use it for all
  5577		 * beacon tx commands. Worst case for this approach is some beacons may
  5578		 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
  5579		 */
  5580		if (vif->type == NL80211_IFTYPE_ADHOC ||
  5581		    vif->type == NL80211_IFTYPE_MESH_POINT ||
  5582		    vif->type == NL80211_IFTYPE_AP) {
  5583			if (ar->bus_param.dev_type == ATH10K_DEV_TYPE_HL) {
  5584				arvif->beacon_buf = kmalloc(IEEE80211_MAX_FRAME_LEN,
  5585							    GFP_KERNEL);
> 5586				arvif->beacon_paddr = (dma_addr_t)arvif->beacon_buf;
  5587			} else {
  5588				arvif->beacon_buf =
  5589					dma_alloc_coherent(ar->dev,
  5590							   IEEE80211_MAX_FRAME_LEN,
  5591							   &arvif->beacon_paddr,
  5592							   GFP_ATOMIC);
  5593			}
  5594			if (!arvif->beacon_buf) {
  5595				ret = -ENOMEM;
  5596				ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
  5597					    ret);
  5598				goto err;
  5599			}
  5600		}
  5601		if (test_bit(ATH10K_FLAG_HW_CRYPTO_DISABLED, &ar->dev_flags))
  5602			arvif->nohwcrypt = true;
  5603	
  5604		if (arvif->nohwcrypt &&
  5605		    !test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
  5606			ret = -EINVAL;
  5607			ath10k_warn(ar, "cryptmode module param needed for sw crypto\n");
  5608			goto err;
  5609		}
  5610	
  5611		ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
  5612			   arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
  5613			   arvif->beacon_buf ? "single-buf" : "per-skb");
  5614	
  5615		ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
  5616					     arvif->vdev_subtype, vif->addr);
  5617		if (ret) {
  5618			ath10k_warn(ar, "failed to create WMI vdev %i: %d\n",
  5619				    arvif->vdev_id, ret);
  5620			goto err;
  5621		}
  5622	
  5623		if (test_bit(WMI_SERVICE_VDEV_DISABLE_4_ADDR_SRC_LRN_SUPPORT,
  5624			     ar->wmi.svc_map)) {
  5625			vdev_param = ar->wmi.vdev_param->disable_4addr_src_lrn;
  5626			ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
  5627							WMI_VDEV_DISABLE_4_ADDR_SRC_LRN);
  5628			if (ret && ret != -EOPNOTSUPP) {
  5629				ath10k_warn(ar, "failed to disable 4addr src lrn vdev %i: %d\n",
  5630					    arvif->vdev_id, ret);
  5631			}
  5632		}
  5633	
  5634		ar->free_vdev_map &= ~(1LL << arvif->vdev_id);
  5635		spin_lock_bh(&ar->data_lock);
  5636		list_add(&arvif->list, &ar->arvifs);
  5637		spin_unlock_bh(&ar->data_lock);
  5638	
  5639		/* It makes no sense to have firmware do keepalives. mac80211 already
  5640		 * takes care of this with idle connection polling.
  5641		 */
  5642		ret = ath10k_mac_vif_disable_keepalive(arvif);
  5643		if (ret) {
  5644			ath10k_warn(ar, "failed to disable keepalive on vdev %i: %d\n",
  5645				    arvif->vdev_id, ret);
  5646			goto err_vdev_delete;
  5647		}
  5648	
  5649		arvif->def_wep_key_idx = -1;
  5650	
  5651		vdev_param = ar->wmi.vdev_param->tx_encap_type;
  5652		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
  5653						ATH10K_HW_TXRX_NATIVE_WIFI);
  5654		/* 10.X firmware does not support this VDEV parameter. Do not warn */
  5655		if (ret && ret != -EOPNOTSUPP) {
  5656			ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
  5657				    arvif->vdev_id, ret);
  5658			goto err_vdev_delete;
  5659		}
  5660	
  5661		/* Configuring number of spatial stream for monitor interface is causing
  5662		 * target assert in qca9888 and qca6174.
  5663		 */
  5664		if (ar->cfg_tx_chainmask && (vif->type != NL80211_IFTYPE_MONITOR)) {
  5665			u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
  5666	
  5667			vdev_param = ar->wmi.vdev_param->nss;
  5668			ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
  5669							nss);
  5670			if (ret) {
  5671				ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
  5672					    arvif->vdev_id, ar->cfg_tx_chainmask, nss,
  5673					    ret);
  5674				goto err_vdev_delete;
  5675			}
  5676		}
  5677	
  5678		if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
  5679		    arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
  5680			ret = ath10k_peer_create(ar, vif, NULL, arvif->vdev_id,
  5681						 vif->addr, WMI_PEER_TYPE_DEFAULT);
  5682			if (ret) {
  5683				ath10k_warn(ar, "failed to create vdev %i peer for AP/IBSS: %d\n",
  5684					    arvif->vdev_id, ret);
  5685				goto err_vdev_delete;
  5686			}
  5687	
  5688			spin_lock_bh(&ar->data_lock);
  5689	
  5690			peer = ath10k_peer_find(ar, arvif->vdev_id, vif->addr);
  5691			if (!peer) {
  5692				ath10k_warn(ar, "failed to lookup peer %pM on vdev %i\n",
  5693					    vif->addr, arvif->vdev_id);
  5694				spin_unlock_bh(&ar->data_lock);
  5695				ret = -ENOENT;
  5696				goto err_peer_delete;
  5697			}
  5698	
  5699			arvif->peer_id = find_first_bit(peer->peer_ids,
  5700							ATH10K_MAX_NUM_PEER_IDS);
  5701	
  5702			spin_unlock_bh(&ar->data_lock);
  5703		} else {
  5704			arvif->peer_id = HTT_INVALID_PEERID;
  5705		}
  5706	
  5707		if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
  5708			ret = ath10k_mac_set_kickout(arvif);
  5709			if (ret) {
  5710				ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
  5711					    arvif->vdev_id, ret);
  5712				goto err_peer_delete;
  5713			}
  5714		}
  5715	
  5716		if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
  5717			param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
  5718			value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
  5719			ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
  5720							  param, value);
  5721			if (ret) {
  5722				ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
  5723					    arvif->vdev_id, ret);
  5724				goto err_peer_delete;
  5725			}
  5726	
  5727			ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
  5728			if (ret) {
  5729				ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
  5730					    arvif->vdev_id, ret);
  5731				goto err_peer_delete;
  5732			}
  5733	
  5734			ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
  5735			if (ret) {
  5736				ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
  5737					    arvif->vdev_id, ret);
  5738				goto err_peer_delete;
  5739			}
  5740		}
  5741	
  5742		ret = ath10k_mac_set_txbf_conf(arvif);
  5743		if (ret) {
  5744			ath10k_warn(ar, "failed to set txbf for vdev %d: %d\n",
  5745				    arvif->vdev_id, ret);
  5746			goto err_peer_delete;
  5747		}
  5748	
  5749		ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
  5750		if (ret) {
  5751			ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
  5752				    arvif->vdev_id, ret);
  5753			goto err_peer_delete;
  5754		}
  5755	
  5756		arvif->txpower = vif->bss_conf.txpower;
  5757		ret = ath10k_mac_txpower_recalc(ar);
  5758		if (ret) {
  5759			ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
  5760			goto err_peer_delete;
  5761		}
  5762	
  5763		if (test_bit(WMI_SERVICE_RTT_RESPONDER_ROLE, ar->wmi.svc_map)) {
  5764			vdev_param = ar->wmi.vdev_param->rtt_responder_role;
  5765			ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
  5766							arvif->ftm_responder);
  5767	
  5768			/* It is harmless to not set FTM role. Do not warn */
  5769			if (ret && ret != -EOPNOTSUPP)
  5770				ath10k_warn(ar, "failed to set vdev %i FTM Responder: %d\n",
  5771					    arvif->vdev_id, ret);
  5772		}
  5773	
  5774		if (vif->type == NL80211_IFTYPE_MONITOR) {
  5775			ar->monitor_arvif = arvif;
  5776			ret = ath10k_monitor_recalc(ar);
  5777			if (ret) {
  5778				ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
  5779				goto err_peer_delete;
  5780			}
  5781		}
  5782	
  5783		spin_lock_bh(&ar->htt.tx_lock);
  5784		if (!ar->tx_paused)
  5785			ieee80211_wake_queue(ar->hw, arvif->vdev_id);
  5786		spin_unlock_bh(&ar->htt.tx_lock);
  5787	
  5788		mutex_unlock(&ar->conf_mutex);
  5789		return 0;
  5790	
  5791	err_peer_delete:
  5792		if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
  5793		    arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
  5794			ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
  5795			ath10k_wait_for_peer_delete_done(ar, arvif->vdev_id,
  5796							 vif->addr);
  5797		}
  5798	
  5799	err_vdev_delete:
  5800		ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
  5801		ar->free_vdev_map |= 1LL << arvif->vdev_id;
  5802		spin_lock_bh(&ar->data_lock);
  5803		list_del(&arvif->list);
  5804		spin_unlock_bh(&ar->data_lock);
  5805	
  5806	err:
  5807		if (arvif->beacon_buf) {
  5808			if (ar->bus_param.dev_type == ATH10K_DEV_TYPE_HL)
  5809				kfree(arvif->beacon_buf);
  5810			else
  5811				dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
  5812						  arvif->beacon_buf,
  5813						  arvif->beacon_paddr);
  5814			arvif->beacon_buf = NULL;
  5815		}
  5816	
  5817		mutex_unlock(&ar->conf_mutex);
  5818	
  5819		return ret;
  5820	}
  5821	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux