Re: [patch v6 2/3] platform/mellanox: mlxreg-hotplug: allow driver for ARM architecture
From: Darren Hart
Date: Tue Jan 02 2018 - 19:15:27 EST
On Wed, Dec 20, 2017 at 05:11:51PM +0800, kbuild test robot wrote:
> Hi Vadim,
>
Hi Vadim,
This has been a long time in development, and has been tricky to get everyone
aligned for review. I'm prioritizing this series now and will commit to
reviewing in a timely manner. I assume you have seen the build error below -
will you prepare a v7 which addresses the build issue?
Regards,
> I love your patch! Yet something to improve:
>
> [auto build test ERROR on platform-drivers-x86/for-next]
> [also build test ERROR on v4.15-rc4 next-20171220]
> [cannot apply to linus/master]
> [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/Vadim-Pasternak/drivers-platform-replace-module-x86-mlxcpld-hotplug-with-mellanox-mlxreg-hotplug/20171220-163359
> base: git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git for-next
> config: sparc64-allyesconfig (attached as .config)
> compiler: sparc64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
> reproduce:
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # save the attached .config to linux build tree
> make.cross ARCH=sparc64
>
> Note: the linux-review/Vadim-Pasternak/drivers-platform-replace-module-x86-mlxcpld-hotplug-with-mellanox-mlxreg-hotplug/20171220-163359 HEAD 7e98e72a743e69069c34f3bbd3b9289740e30de0 builds fine.
> It only hurts bisectibility.
>
> All errors (new ones prefixed by >>):
>
> drivers/platform/mellanox/mlxreg-hotplug.c: In function 'mlxreg_hotplug_attr_show':
> >> drivers/platform/mellanox/mlxreg-hotplug.c:224:17: error: implicit declaration of function 'inb' [-Werror=implicit-function-declaration]
> reg_val = !!!(inb(priv->plat->psu_reg_offset) & BIT(index));
> ^~~
> drivers/platform/mellanox/mlxreg-hotplug.c: In function 'mlxreg_hotplug_work_helper':
> >> drivers/platform/mellanox/mlxreg-hotplug.c:305:2: error: implicit declaration of function 'outb' [-Werror=implicit-function-declaration]
> outb(0, offset + MLXREG_HOTPLUG_MASK_OFF);
> ^~~~
> cc1: some warnings being treated as errors
>
> vim +/inb +224 drivers/platform/mellanox/mlxreg-hotplug.c
>
> 86a4f473 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 210
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 211 static ssize_t mlxreg_hotplug_attr_show(struct device *dev,
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 212 struct device_attribute *attr,
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 213 char *buf)
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 214 {
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 215 struct platform_device *pdev = to_platform_device(dev);
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 216 struct mlxreg_hotplug_priv_data *priv = platform_get_drvdata(pdev);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 217 int index = to_sensor_dev_attr_2(attr)->index;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 218 int nr = to_sensor_dev_attr_2(attr)->nr;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 219 u8 reg_val = 0;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 220
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 221 switch (nr) {
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 222 case MLXREG_HOTPLUG_ATTR_TYPE_PSU:
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 223 /* Bit = 0 : PSU is present. */
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 @224 reg_val = !!!(inb(priv->plat->psu_reg_offset) & BIT(index));
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 225 break;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 226
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 227 case MLXREG_HOTPLUG_ATTR_TYPE_PWR:
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 228 /* Bit = 1 : power cable is attached. */
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 229 reg_val = !!(inb(priv->plat->pwr_reg_offset) & BIT(index %
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 230 priv->plat->pwr_count));
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 231 break;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 232
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 233 case MLXREG_HOTPLUG_ATTR_TYPE_FAN:
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 234 /* Bit = 0 : FAN is present. */
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 235 reg_val = !!!(inb(priv->plat->fan_reg_offset) & BIT(index %
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 236 priv->plat->fan_count));
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 237 break;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 238 }
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 239
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 240 return sprintf(buf, "%u\n", reg_val);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 241 }
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 242
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 243 #define PRIV_ATTR(i) priv->mlxreg_hotplug_attr[i]
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 244 #define PRIV_DEV_ATTR(i) priv->mlxreg_hotplug_dev_attr[i]
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 245 static int mlxreg_hotplug_attr_init(struct mlxreg_hotplug_priv_data *priv)
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 246 {
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 247 int num_attrs = priv->plat->psu_count + priv->plat->pwr_count +
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 248 priv->plat->fan_count;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 249 int i;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 250
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 251 priv->group.attrs = devm_kzalloc(&priv->pdev->dev, num_attrs *
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 252 sizeof(struct attribute *),
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 253 GFP_KERNEL);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 254 if (!priv->group.attrs)
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 255 return -ENOMEM;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 256
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 257 for (i = 0; i < num_attrs; i++) {
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 258 PRIV_ATTR(i) = &PRIV_DEV_ATTR(i).dev_attr.attr;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 259
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 260 if (i < priv->plat->psu_count) {
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 261 PRIV_ATTR(i)->name = devm_kasprintf(&priv->pdev->dev,
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 262 GFP_KERNEL, "psu%u", i + 1);
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 263 PRIV_DEV_ATTR(i).nr = MLXREG_HOTPLUG_ATTR_TYPE_PSU;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 264 } else if (i < priv->plat->psu_count + priv->plat->pwr_count) {
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 265 PRIV_ATTR(i)->name = devm_kasprintf(&priv->pdev->dev,
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 266 GFP_KERNEL, "pwr%u", i %
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 267 priv->plat->pwr_count + 1);
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 268 PRIV_DEV_ATTR(i).nr = MLXREG_HOTPLUG_ATTR_TYPE_PWR;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 269 } else {
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 270 PRIV_ATTR(i)->name = devm_kasprintf(&priv->pdev->dev,
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 271 GFP_KERNEL, "fan%u", i %
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 272 priv->plat->fan_count + 1);
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 273 PRIV_DEV_ATTR(i).nr = MLXREG_HOTPLUG_ATTR_TYPE_FAN;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 274 }
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 275
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 276 if (!PRIV_ATTR(i)->name) {
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 277 dev_err(&priv->pdev->dev, "Memory allocation failed for sysfs attribute %d.\n",
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 278 i + 1);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 279 return -ENOMEM;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 280 }
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 281
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 282 PRIV_DEV_ATTR(i).dev_attr.attr.name = PRIV_ATTR(i)->name;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 283 PRIV_DEV_ATTR(i).dev_attr.attr.mode = S_IRUGO;
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 284 PRIV_DEV_ATTR(i).dev_attr.show = mlxreg_hotplug_attr_show;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 285 PRIV_DEV_ATTR(i).index = i;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 286 sysfs_attr_init(&PRIV_DEV_ATTR(i).dev_attr.attr);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 287 }
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 288
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 289 priv->group.attrs = priv->mlxreg_hotplug_attr;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 290 priv->groups[0] = &priv->group;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 291 priv->groups[1] = NULL;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 292
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 293 return 0;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 294 }
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 295
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 296 static inline void
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 297 mlxreg_hotplug_work_helper(struct device *dev,
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 298 struct mlxreg_hotplug_device *item, u8 is_inverse,
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 299 u16 offset, u8 mask, u8 *cache)
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 300 {
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 301 u8 val, asserted;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 302 int bit;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 303
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 304 /* Mask event. */
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 @305 outb(0, offset + MLXREG_HOTPLUG_MASK_OFF);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 306 /* Read status. */
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 307 val = inb(offset) & mask;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 308 asserted = *cache ^ val;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 309 *cache = val;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 310
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 311 /*
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 312 * Validate if item related to received signal type is valid.
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 313 * It should never happen, excepted the situation when some
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 314 * piece of hardware is broken. In such situation just produce
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 315 * error message and return. Caller must continue to handle the
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 316 * signals from other devices if any.
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 317 */
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 318 if (unlikely(!item)) {
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 319 dev_err(dev, "False signal is received: register at offset 0x%02x, mask 0x%02x.\n",
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 320 offset, mask);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 321 return;
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 322 }
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 323
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 324 for_each_set_bit(bit, (unsigned long *)&asserted, 8) {
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 325 if (val & BIT(bit)) {
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 326 if (is_inverse)
> 86a4f473 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 327 mlxreg_hotplug_dev_disable(item + bit);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 328 else
> 86a4f473 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 329 mlxreg_hotplug_dev_enable(item + bit);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 330 } else {
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 331 if (is_inverse)
> 86a4f473 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 332 mlxreg_hotplug_dev_enable(item + bit);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 333 else
> 86a4f473 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 334 mlxreg_hotplug_dev_disable(item + bit);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 335 }
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 336 }
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 337
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 338 /* Acknowledge event. */
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 339 outb(0, offset + MLXREG_HOTPLUG_EVENT_OFF);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 340 /* Unmask event. */
> ebea1439 drivers/platform/mellanox/mlxreg-hotplug.c Vadim Pasternak 2017-12-18 341 outb(mask, offset + MLXREG_HOTPLUG_MASK_OFF);
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 342 }
> 30488704 drivers/platform/x86/mlxcpld-hotplug.c Vadim Pasternak 2016-10-20 343
>
> :::::: The code at line 224 was first introduced by commit
> :::::: 304887041d953b6692c0d4a9f8fafb252d32e9a0 platform/x86: Introduce support for Mellanox hotplug driver
>
> :::::: TO: Vadim Pasternak <vadimp@xxxxxxxxxxxx>
> :::::: CC: Darren Hart <dvhart@xxxxxxxxxxxxxxx>
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation
--
Darren Hart
VMware Open Source Technology Center