On 10 May 2018 00:55:01 CEST, kbuild test robot <[email protected]> wrote:
>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));
> ^
> ->
Huh, I could swear I compile tested this. Will send another version tomorrow,
sorry about that :/
-Toke
>
>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