Search Linux Wireless

Re: [PATCH 3/3] net: Dynamically allocate struct station_info

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

 



Hi Toke,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on wireless-drivers-next/master]
[also build test ERROR on v4.17-rc4 next-20180509]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Toke-H-iland-J-rgensen/wireless-drivers-Dynamically-allocate-struct-station_info/20180510-034416
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git master
config: i386-randconfig-x000-201818 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   net/batman-adv/bat_v_elp.c: In function 'batadv_v_elp_get_throughput':
>> net/batman-adv/bat_v_elp.c:113:21: error: 'sinfo' is a pointer; did you mean to use '->'?
      throughput = sinfo.expected_throughput / 100;
                        ^
                        ->
   net/batman-adv/bat_v_elp.c:114:20: error: 'sinfo' is a pointer; did you mean to use '->'?
      filled = !!(sinfo.filled & BIT(NL80211_STA_INFO_EXPECTED_THROUGHPUT));
                       ^
                       ->

vim +113 net/batman-adv/bat_v_elp.c

    69	
    70	/**
    71	 * batadv_v_elp_get_throughput() - get the throughput towards a neighbour
    72	 * @neigh: the neighbour for which the throughput has to be obtained
    73	 *
    74	 * Return: The throughput towards the given neighbour in multiples of 100kpbs
    75	 *         (a value of '1' equals to 0.1Mbps, '10' equals 1Mbps, etc).
    76	 */
    77	static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh)
    78	{
    79		struct batadv_hard_iface *hard_iface = neigh->if_incoming;
    80		struct ethtool_link_ksettings link_settings;
    81		struct net_device *real_netdev;
    82		struct station_info *sinfo;
    83		u32 throughput;
    84		bool filled;
    85		int ret;
    86	
    87		/* if the user specified a customised value for this interface, then
    88		 * return it directly
    89		 */
    90		throughput =  atomic_read(&hard_iface->bat_v.throughput_override);
    91		if (throughput != 0)
    92			return throughput;
    93	
    94		/* if this is a wireless device, then ask its throughput through
    95		 * cfg80211 API
    96		 */
    97		if (batadv_is_wifi_hardif(hard_iface)) {
    98			if (!batadv_is_cfg80211_hardif(hard_iface))
    99				/* unsupported WiFi driver version */
   100				goto default_throughput;
   101	
   102			real_netdev = batadv_get_real_netdev(hard_iface->net_dev);
   103			if (!real_netdev)
   104				goto default_throughput;
   105	
   106			sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
   107			if (!sinfo)
   108				goto default_throughput;
   109	
   110			ret = cfg80211_get_station(real_netdev, neigh->addr, sinfo);
   111	
   112			/* just save these here instead of having complex free logic below */
 > 113			throughput = sinfo.expected_throughput / 100;
   114			filled = !!(sinfo.filled & BIT(NL80211_STA_INFO_EXPECTED_THROUGHPUT));
   115	
   116			kfree(sinfo);
   117	
   118			dev_put(real_netdev);
   119			if (ret == -ENOENT) {
   120				/* Node is not associated anymore! It would be
   121				 * possible to delete this neighbor. For now set
   122				 * the throughput metric to 0.
   123				 */
   124				return 0;
   125			}
   126			if (ret || !filled)
   127				goto default_throughput;
   128	
   129			return throughput;
   130		}
   131	
   132		/* if not a wifi interface, check if this device provides data via
   133		 * ethtool (e.g. an Ethernet adapter)
   134		 */
   135		memset(&link_settings, 0, sizeof(link_settings));
   136		rtnl_lock();
   137		ret = __ethtool_get_link_ksettings(hard_iface->net_dev, &link_settings);
   138		rtnl_unlock();
   139		if (ret == 0) {
   140			/* link characteristics might change over time */
   141			if (link_settings.base.duplex == DUPLEX_FULL)
   142				hard_iface->bat_v.flags |= BATADV_FULL_DUPLEX;
   143			else
   144				hard_iface->bat_v.flags &= ~BATADV_FULL_DUPLEX;
   145	
   146			throughput = link_settings.base.speed;
   147			if (throughput && throughput != SPEED_UNKNOWN)
   148				return throughput * 10;
   149		}
   150	
   151	default_throughput:
   152		if (!(hard_iface->bat_v.flags & BATADV_WARNING_DEFAULT)) {
   153			batadv_info(hard_iface->soft_iface,
   154				    "WiFi driver or ethtool info does not provide information about link speeds on interface %s, therefore defaulting to hardcoded throughput values of %u.%1u Mbps. Consider overriding the throughput manually or checking your driver.\n",
   155				    hard_iface->net_dev->name,
   156				    BATADV_THROUGHPUT_DEFAULT_VALUE / 10,
   157				    BATADV_THROUGHPUT_DEFAULT_VALUE % 10);
   158			hard_iface->bat_v.flags |= BATADV_WARNING_DEFAULT;
   159		}
   160	
   161		/* if none of the above cases apply, return the base_throughput */
   162		return BATADV_THROUGHPUT_DEFAULT_VALUE;
   163	}
   164	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip


[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