On Friday, May 27, 2016 01:15:12 PM Linus Torvalds wrote: > This is just a heads-up: for some reason the acpi layer and nvdimm use > the IS_ERR_VALUE() macro, and they use it incorrectly. > > To see warnings about it, change the macro from > > #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) > > to do a cast to a pointer and back (ie make the "(x)" part be > "(unsigned long)(void *)(x)" instead, which then will cause warnings > like > > warning: cast to pointer from integer of different size > [-Wint-to-pointer-cast] > > when passed an "int" argument. > > The reason "int" arguments are wrong is that the macro really is > designed to test the upper range of a pointer value. It happens to > work for signed integers too, but looking at the users, pretty much > none of them are right. The ACPI and nvdimm users are all about the > perfectly standard "zero for success, negative error code for > failure", and so using > > if (IS_ERROR_VALUE(rc)) > return rc; > > is just plain garbage. The code generally should just do > > if (rc) > return rc; > > which is simpler, smaller, and generates better code. > > This bug seems to have been so common in the power management code > that we even have a coccinelle script for it. But for some reason > several uses remain in acpi_debug.c and now there are cases in > drivers/nvdimm/ too. > > There are random various crap cases like that elsewhere too, but acpi > and nvdimm were just more dense with this bug than most other places. Under drivers/acpi/ I could only find IS_ERR_VALUE() in acpi_dbg.c, but those instances should be removed by the Arnd's patch if I'm not mistaken. Thanks, Rafael -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html