[ath6kl:ath10k-pending-sdio-usb 19/23] drivers/net/wireless/ath/ath10k/mac.c:5062:26: warning: cast from pointer to integer of different size

kbuild test robot fengguang.wu at intel.com
Sat Dec 2 10:11:25 PST 2017


tree:   https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git ath10k-pending-sdio-usb
head:   c595220acc6c02730d3316eecbbea2543303bb4f
commit: 35461ca94f6aa2f7a6d71f8c397649237385f63a [19/23] ath10k_sdio: high latency fixes for beacon buffer
config: i386-randconfig-x007-201749 (attached as .config)
compiler: gcc-7 (Debian 7.2.0-12) 7.2.1 20171025
reproduce:
        git checkout 35461ca94f6aa2f7a6d71f8c397649237385f63a
        # save the attached .config to linux build tree
        make ARCH=i386 

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:5062:26: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
       arvif->beacon_paddr = (dma_addr_t)arvif->beacon_buf;
                             ^

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

  4925	
  4926	/*
  4927	 * TODO:
  4928	 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
  4929	 * because we will send mgmt frames without CCK. This requirement
  4930	 * for P2P_FIND/GO_NEG should be handled by checking CCK flag
  4931	 * in the TX packet.
  4932	 */
  4933	static int ath10k_add_interface(struct ieee80211_hw *hw,
  4934					struct ieee80211_vif *vif)
  4935	{
  4936		struct ath10k *ar = hw->priv;
  4937		struct ath10k_vif *arvif = (void *)vif->drv_priv;
  4938		struct ath10k_peer *peer;
  4939		enum wmi_sta_powersave_param param;
  4940		int ret = 0;
  4941		u32 value;
  4942		int bit;
  4943		int i;
  4944		u32 vdev_param;
  4945	
  4946		vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD;
  4947	
  4948		mutex_lock(&ar->conf_mutex);
  4949	
  4950		memset(arvif, 0, sizeof(*arvif));
  4951		ath10k_mac_txq_init(vif->txq);
  4952	
  4953		arvif->ar = ar;
  4954		arvif->vif = vif;
  4955	
  4956		INIT_LIST_HEAD(&arvif->list);
  4957		INIT_WORK(&arvif->ap_csa_work, ath10k_mac_vif_ap_csa_work);
  4958		INIT_DELAYED_WORK(&arvif->connection_loss_work,
  4959				  ath10k_mac_vif_sta_connection_loss_work);
  4960	
  4961		for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) {
  4962			arvif->bitrate_mask.control[i].legacy = 0xffffffff;
  4963			memset(arvif->bitrate_mask.control[i].ht_mcs, 0xff,
  4964			       sizeof(arvif->bitrate_mask.control[i].ht_mcs));
  4965			memset(arvif->bitrate_mask.control[i].vht_mcs, 0xff,
  4966			       sizeof(arvif->bitrate_mask.control[i].vht_mcs));
  4967		}
  4968	
  4969		if (ar->num_peers >= ar->max_num_peers) {
  4970			ath10k_warn(ar, "refusing vdev creation due to insufficient peer entry resources in firmware\n");
  4971			ret = -ENOBUFS;
  4972			goto err;
  4973		}
  4974	
  4975		if (ar->free_vdev_map == 0) {
  4976			ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n");
  4977			ret = -EBUSY;
  4978			goto err;
  4979		}
  4980		bit = __ffs64(ar->free_vdev_map);
  4981	
  4982		ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n",
  4983			   bit, ar->free_vdev_map);
  4984	
  4985		arvif->vdev_id = bit;
  4986		arvif->vdev_subtype =
  4987			ath10k_wmi_get_vdev_subtype(ar, WMI_VDEV_SUBTYPE_NONE);
  4988	
  4989		switch (vif->type) {
  4990		case NL80211_IFTYPE_P2P_DEVICE:
  4991			arvif->vdev_type = WMI_VDEV_TYPE_STA;
  4992			arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
  4993						(ar, WMI_VDEV_SUBTYPE_P2P_DEVICE);
  4994			break;
  4995		case NL80211_IFTYPE_UNSPECIFIED:
  4996		case NL80211_IFTYPE_STATION:
  4997			arvif->vdev_type = WMI_VDEV_TYPE_STA;
  4998			if (vif->p2p)
  4999				arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
  5000						(ar, WMI_VDEV_SUBTYPE_P2P_CLIENT);
  5001			break;
  5002		case NL80211_IFTYPE_ADHOC:
  5003			arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
  5004			break;
  5005		case NL80211_IFTYPE_MESH_POINT:
  5006			if (test_bit(WMI_SERVICE_MESH_11S, ar->wmi.svc_map)) {
  5007				arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
  5008							(ar, WMI_VDEV_SUBTYPE_MESH_11S);
  5009			} else if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
  5010				ret = -EINVAL;
  5011				ath10k_warn(ar, "must load driver with rawmode=1 to add mesh interfaces\n");
  5012				goto err;
  5013			}
  5014			arvif->vdev_type = WMI_VDEV_TYPE_AP;
  5015			break;
  5016		case NL80211_IFTYPE_AP:
  5017			arvif->vdev_type = WMI_VDEV_TYPE_AP;
  5018	
  5019			if (vif->p2p)
  5020				arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype
  5021							(ar, WMI_VDEV_SUBTYPE_P2P_GO);
  5022			break;
  5023		case NL80211_IFTYPE_MONITOR:
  5024			arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
  5025			break;
  5026		default:
  5027			WARN_ON(1);
  5028			break;
  5029		}
  5030	
  5031		/* Using vdev_id as queue number will make it very easy to do per-vif
  5032		 * tx queue locking. This shouldn't wrap due to interface combinations
  5033		 * but do a modulo for correctness sake and prevent using offchannel tx
  5034		 * queues for regular vif tx.
  5035		 */
  5036		vif->cab_queue = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
  5037		for (i = 0; i < ARRAY_SIZE(vif->hw_queue); i++)
  5038			vif->hw_queue[i] = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
  5039	
  5040		/* Some firmware revisions don't wait for beacon tx completion before
  5041		 * sending another SWBA event. This could lead to hardware using old
  5042		 * (freed) beacon data in some cases, e.g. tx credit starvation
  5043		 * combined with missed TBTT. This is very very rare.
  5044		 *
  5045		 * On non-IOMMU-enabled hosts this could be a possible security issue
  5046		 * because hw could beacon some random data on the air.  On
  5047		 * IOMMU-enabled hosts DMAR faults would occur in most cases and target
  5048		 * device would crash.
  5049		 *
  5050		 * Since there are no beacon tx completions (implicit nor explicit)
  5051		 * propagated to host the only workaround for this is to allocate a
  5052		 * DMA-coherent buffer for a lifetime of a vif and use it for all
  5053		 * beacon tx commands. Worst case for this approach is some beacons may
  5054		 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
  5055		 */
  5056		if (vif->type == NL80211_IFTYPE_ADHOC ||
  5057		    vif->type == NL80211_IFTYPE_MESH_POINT ||
  5058		    vif->type == NL80211_IFTYPE_AP) {
  5059			if (ar->is_high_latency) {
  5060				arvif->beacon_buf = kmalloc(IEEE80211_MAX_FRAME_LEN,
  5061							    GFP_KERNEL);
> 5062				arvif->beacon_paddr = (dma_addr_t)arvif->beacon_buf;
  5063			} else {
  5064				arvif->beacon_buf =
  5065					dma_zalloc_coherent(ar->dev,
  5066							    IEEE80211_MAX_FRAME_LEN,
  5067							    &arvif->beacon_paddr,
  5068							    GFP_ATOMIC);
  5069			}
  5070			if (!arvif->beacon_buf) {
  5071				ret = -ENOMEM;
  5072				ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
  5073					    ret);
  5074				goto err;
  5075			}
  5076		}
  5077		if (test_bit(ATH10K_FLAG_HW_CRYPTO_DISABLED, &ar->dev_flags))
  5078			arvif->nohwcrypt = true;
  5079	
  5080		if (arvif->nohwcrypt &&
  5081		    !test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
  5082			ath10k_warn(ar, "cryptmode module param needed for sw crypto\n");
  5083			goto err;
  5084		}
  5085	
  5086		ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
  5087			   arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
  5088			   arvif->beacon_buf ? "single-buf" : "per-skb");
  5089	
  5090		ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
  5091					     arvif->vdev_subtype, vif->addr);
  5092		if (ret) {
  5093			ath10k_warn(ar, "failed to create WMI vdev %i: %d\n",
  5094				    arvif->vdev_id, ret);
  5095			goto err;
  5096		}
  5097	
  5098		ar->free_vdev_map &= ~(1LL << arvif->vdev_id);
  5099		spin_lock_bh(&ar->data_lock);
  5100		list_add(&arvif->list, &ar->arvifs);
  5101		spin_unlock_bh(&ar->data_lock);
  5102	
  5103		/* It makes no sense to have firmware do keepalives. mac80211 already
  5104		 * takes care of this with idle connection polling.
  5105		 */
  5106		ret = ath10k_mac_vif_disable_keepalive(arvif);
  5107		if (ret) {
  5108			ath10k_warn(ar, "failed to disable keepalive on vdev %i: %d\n",
  5109				    arvif->vdev_id, ret);
  5110			goto err_vdev_delete;
  5111		}
  5112	
  5113		arvif->def_wep_key_idx = -1;
  5114	
  5115		vdev_param = ar->wmi.vdev_param->tx_encap_type;
  5116		ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
  5117						ATH10K_HW_TXRX_NATIVE_WIFI);
  5118		/* 10.X firmware does not support this VDEV parameter. Do not warn */
  5119		if (ret && ret != -EOPNOTSUPP) {
  5120			ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
  5121				    arvif->vdev_id, ret);
  5122			goto err_vdev_delete;
  5123		}
  5124	
  5125		/* Configuring number of spatial stream for monitor interface is causing
  5126		 * target assert in qca9888 and qca6174.
  5127		 */
  5128		if (ar->cfg_tx_chainmask && (vif->type != NL80211_IFTYPE_MONITOR)) {
  5129			u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
  5130	
  5131			vdev_param = ar->wmi.vdev_param->nss;
  5132			ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
  5133							nss);
  5134			if (ret) {
  5135				ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
  5136					    arvif->vdev_id, ar->cfg_tx_chainmask, nss,
  5137					    ret);
  5138				goto err_vdev_delete;
  5139			}
  5140		}
  5141	
  5142		if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
  5143		    arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
  5144			ret = ath10k_peer_create(ar, vif, NULL, arvif->vdev_id,
  5145						 vif->addr, WMI_PEER_TYPE_DEFAULT);
  5146			if (ret) {
  5147				ath10k_warn(ar, "failed to create vdev %i peer for AP/IBSS: %d\n",
  5148					    arvif->vdev_id, ret);
  5149				goto err_vdev_delete;
  5150			}
  5151	
  5152			spin_lock_bh(&ar->data_lock);
  5153	
  5154			peer = ath10k_peer_find(ar, arvif->vdev_id, vif->addr);
  5155			if (!peer) {
  5156				ath10k_warn(ar, "failed to lookup peer %pM on vdev %i\n",
  5157					    vif->addr, arvif->vdev_id);
  5158				spin_unlock_bh(&ar->data_lock);
  5159				ret = -ENOENT;
  5160				goto err_peer_delete;
  5161			}
  5162	
  5163			arvif->peer_id = find_first_bit(peer->peer_ids,
  5164							ATH10K_MAX_NUM_PEER_IDS);
  5165	
  5166			spin_unlock_bh(&ar->data_lock);
  5167		} else {
  5168			arvif->peer_id = HTT_INVALID_PEERID;
  5169		}
  5170	
  5171		if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
  5172			ret = ath10k_mac_set_kickout(arvif);
  5173			if (ret) {
  5174				ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
  5175					    arvif->vdev_id, ret);
  5176				goto err_peer_delete;
  5177			}
  5178		}
  5179	
  5180		if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
  5181			param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
  5182			value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
  5183			ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
  5184							  param, value);
  5185			if (ret) {
  5186				ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
  5187					    arvif->vdev_id, ret);
  5188				goto err_peer_delete;
  5189			}
  5190	
  5191			ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
  5192			if (ret) {
  5193				ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
  5194					    arvif->vdev_id, ret);
  5195				goto err_peer_delete;
  5196			}
  5197	
  5198			ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
  5199			if (ret) {
  5200				ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
  5201					    arvif->vdev_id, ret);
  5202				goto err_peer_delete;
  5203			}
  5204		}
  5205	
  5206		ret = ath10k_mac_set_txbf_conf(arvif);
  5207		if (ret) {
  5208			ath10k_warn(ar, "failed to set txbf for vdev %d: %d\n",
  5209				    arvif->vdev_id, ret);
  5210			goto err_peer_delete;
  5211		}
  5212	
  5213		ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
  5214		if (ret) {
  5215			ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
  5216				    arvif->vdev_id, ret);
  5217			goto err_peer_delete;
  5218		}
  5219	
  5220		arvif->txpower = vif->bss_conf.txpower;
  5221		ret = ath10k_mac_txpower_recalc(ar);
  5222		if (ret) {
  5223			ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
  5224			goto err_peer_delete;
  5225		}
  5226	
  5227		if (vif->type == NL80211_IFTYPE_MONITOR) {
  5228			ar->monitor_arvif = arvif;
  5229			ret = ath10k_monitor_recalc(ar);
  5230			if (ret) {
  5231				ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
  5232				goto err_peer_delete;
  5233			}
  5234		}
  5235	
  5236		spin_lock_bh(&ar->htt.tx_lock);
  5237		if (!ar->tx_paused)
  5238			ieee80211_wake_queue(ar->hw, arvif->vdev_id);
  5239		spin_unlock_bh(&ar->htt.tx_lock);
  5240	
  5241		mutex_unlock(&ar->conf_mutex);
  5242		return 0;
  5243	
  5244	err_peer_delete:
  5245		if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
  5246		    arvif->vdev_type == WMI_VDEV_TYPE_IBSS)
  5247			ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
  5248	
  5249	err_vdev_delete:
  5250		ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
  5251		ar->free_vdev_map |= 1LL << arvif->vdev_id;
  5252		spin_lock_bh(&ar->data_lock);
  5253		list_del(&arvif->list);
  5254		spin_unlock_bh(&ar->data_lock);
  5255	
  5256	err:
  5257		if (arvif->beacon_buf) {
  5258			if (ar->is_high_latency)
  5259				kfree(arvif->beacon_buf);
  5260			else
  5261				dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
  5262						  arvif->beacon_buf,
  5263						  arvif->beacon_paddr);
  5264			arvif->beacon_buf = NULL;
  5265		}
  5266	
  5267		mutex_unlock(&ar->conf_mutex);
  5268	
  5269		return ret;
  5270	}
  5271	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 25533 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/ath10k/attachments/20171203/7c06a5e2/attachment-0001.gz>


More information about the ath10k mailing list