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