Search Linux Wireless

Re: [PATCH v2] mac80211: Mesh Fast xmit support

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

 



Hi Sriram,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on 35610745d71df567297bb40c5e4263cda38dddd5]

url:    https://github.com/intel-lab-lkp/linux/commits/Sriram-R/mac80211-Mesh-Fast-xmit-support/20220801-150754
base:   35610745d71df567297bb40c5e4263cda38dddd5
config: microblaze-randconfig-s033-20220803 (https://download.01.org/0day-ci/archive/20220803/202208031727.gD3OOS6X-lkp@xxxxxxxxx/config)
compiler: microblaze-linux-gcc (GCC) 12.1.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.4-39-gce1a6720-dirty
        # https://github.com/intel-lab-lkp/linux/commit/0818e073d360fa23c2a1e61f49d67a7b3e99a4e6
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Sriram-R/mac80211-Mesh-Fast-xmit-support/20220801-150754
        git checkout 0818e073d360fa23c2a1e61f49d67a7b3e99a4e6
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=microblaze SHELL=/bin/bash net/mac80211/

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

sparse warnings: (new ones prefixed by >>)
>> net/mac80211/mesh_pathtbl.c:464:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
>> net/mac80211/mesh_pathtbl.c:464:17: sparse:    struct mesh_path [noderef] __rcu *
>> net/mac80211/mesh_pathtbl.c:464:17: sparse:    struct mesh_path *
   net/mac80211/mesh_pathtbl.c:471:18: sparse: sparse: incompatible types in comparison expression (different address spaces):
   net/mac80211/mesh_pathtbl.c:471:18: sparse:    struct mesh_path [noderef] __rcu *
   net/mac80211/mesh_pathtbl.c:471:18: sparse:    struct mesh_path *
   net/mac80211/mesh_pathtbl.c:509:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
>> net/mac80211/mesh_pathtbl.c:509:25: sparse:    struct ieee80211_key [noderef] __rcu *
>> net/mac80211/mesh_pathtbl.c:509:25: sparse:    struct ieee80211_key *
   net/mac80211/mesh_pathtbl.c:656:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
   net/mac80211/mesh_pathtbl.c:656:9: sparse:    struct mesh_path [noderef] __rcu *
   net/mac80211/mesh_pathtbl.c:656:9: sparse:    struct mesh_path *
   net/mac80211/mesh_pathtbl.c:657:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
   net/mac80211/mesh_pathtbl.c:657:9: sparse:    struct mesh_path [noderef] __rcu *
   net/mac80211/mesh_pathtbl.c:657:9: sparse:    struct mesh_path *
   net/mac80211/mesh_pathtbl.c:658:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
   net/mac80211/mesh_pathtbl.c:658:9: sparse:    struct ieee80211_key [noderef] __rcu *
   net/mac80211/mesh_pathtbl.c:658:9: sparse:    struct ieee80211_key *
   net/mac80211/mesh_pathtbl.c:757:31: sparse: sparse: incompatible types in comparison expression (different address spaces):
   net/mac80211/mesh_pathtbl.c:757:31: sparse:    struct mesh_path [noderef] __rcu *
   net/mac80211/mesh_pathtbl.c:757:31: sparse:    struct mesh_path *

vim +464 net/mac80211/mesh_pathtbl.c

   434	
   435	struct mhdr_cache_entry *mesh_fill_cached_hdr(struct ieee80211_sub_if_data *sdata,
   436						      struct sk_buff *skb)
   437	{
   438		struct mesh_hdr_cache *cache;
   439		struct mhdr_cache_entry *entry;
   440		struct mesh_path *mpath, *mppath;
   441		struct ieee80211s_hdr *meshhdr;
   442		struct ieee80211_hdr *hdr;
   443		struct sta_info *new_nhop;
   444		struct ieee80211_key *key;
   445		struct ethhdr *eth;
   446		u8 sa[ETH_ALEN];
   447	
   448		u8 tid;
   449	
   450		cache = &sdata->u.mesh.hdr_cache;
   451	
   452		if (!cache->enabled)
   453			return NULL;
   454	
   455		entry = rhashtable_lookup(&cache->rhead, skb->data,
   456					  mesh_hdr_rht_params);
   457		if (!entry)
   458			return NULL;
   459	
   460		/* Avoid extra work in this path */
   461		if (skb_headroom(skb) < (entry->hdrlen - ETH_HLEN + 2))
   462			return NULL;
   463	
 > 464		mpath = rcu_dereference(entry->mpath);
   465		if (!mpath)
   466			return NULL;
   467	
   468		/* This check is with assumption that only 6addr frames are
   469		 * supported currently for caching
   470		 */
   471		mppath = rcu_dereference(entry->mppath);
   472		if (!mppath)
   473			return NULL;
   474	
   475		if (!(mpath->flags & MESH_PATH_ACTIVE))
   476			return NULL;
   477	
   478		if (mpath_expired(mpath))
   479			return NULL;
   480	
   481		/* If the skb is shared we need to obtain our own copy */
   482		if (skb_shared(skb)) {
   483			struct sk_buff *tmp_skb = skb;
   484	
   485			skb = skb_clone(skb, GFP_ATOMIC);
   486			kfree_skb(tmp_skb);
   487	
   488			if (!skb)
   489				return NULL;
   490		}
   491	
   492		/* In case there was a path refresh and update after we last used
   493		 * update the next hop addr.
   494		 */
   495		spin_lock_bh(&mpath->state_lock);
   496		if (entry->path_change_count != mpath->path_change_count) {
   497			new_nhop = rcu_dereference(mpath->next_hop);
   498			if (!new_nhop) {
   499				spin_unlock_bh(&mpath->state_lock);
   500				return NULL;
   501			}
   502			memcpy(&entry->hdr[4], new_nhop->sta.addr, ETH_ALEN);
   503	
   504			/* update key. pn_offs will be same */
   505			if (entry->key)	{
   506				key = rcu_access_pointer(new_nhop->ptk[new_nhop->ptk_idx]);
   507				if (!key)
   508					key = rcu_access_pointer(sdata->default_unicast_key);
 > 509				rcu_assign_pointer(entry->key, key);
   510			}
   511			entry->path_change_count = mpath->path_change_count;
   512		}
   513		spin_unlock_bh(&mpath->state_lock);
   514	
   515		/* backup eth SA to copy as eaddr2/SA in the mesh header */
   516		eth = (struct ethhdr *)skb->data;
   517		ether_addr_copy(sa, eth->h_source);
   518	
   519		/* Pull DA:SA */
   520		skb_pull(skb, ETH_ALEN * 2);
   521	
   522		memcpy(skb_push(skb, entry->hdrlen), entry->hdr, entry->hdrlen);
   523	
   524		meshhdr = (struct ieee80211s_hdr *)(skb->data + entry->machdr_len);
   525		hdr = (struct ieee80211_hdr *)skb->data;
   526	
   527		/* Update mutables */
   528		tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
   529		*ieee80211_get_qos_ctl(hdr) = tid;
   530	
   531		put_unaligned(cpu_to_le32(sdata->u.mesh.mesh_seqnum), &meshhdr->seqnum);
   532		sdata->u.mesh.mesh_seqnum++;
   533	
   534		memcpy(meshhdr->eaddr2, sa, ETH_ALEN);
   535		meshhdr->ttl = sdata->u.mesh.mshcfg.dot11MeshTTL;
   536	
   537		if (mpath->flags & (MESH_PATH_REQ_QUEUED | MESH_PATH_FIXED))
   538			goto out;
   539	
   540		/* Refresh the path, in case there is a change in nexthop after refresh
   541		 * hdr will be updated on next lookup
   542		 */
   543		if (time_after(jiffies,
   544			       mpath->exp_time -
   545			       msecs_to_jiffies(sdata->u.mesh.mshcfg.path_refresh_time)) &&
   546		    !(mpath->flags & MESH_PATH_RESOLVING) &&
   547		    !(mpath->flags & MESH_PATH_FIXED)) {
   548			mesh_queue_preq(mpath, PREQ_Q_F_START | PREQ_Q_F_REFRESH);
   549		}
   550	
   551	out:
   552		mppath->exp_time = jiffies;
   553		entry->timestamp = jiffies;
   554	
   555		return entry;
   556	}
   557	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux