On Tue, May 23, 2017 at 11:47:06PM +0200, Micha?? K??pie?? wrote: > > On Fri, May 19, 2017 at 09:44:45AM +0200, Micha?? K??pie?? wrote: > > > It is easier to simply store a module-wide > > > pointer to the last (most likely only) FUJ02E3 ACPI device found, make > > > the aforementioned API use it and cover our bases by warning the user if > > > firmware exposes multiple FUJ02E3 ACPI devices. > > > : > > > @@ -788,6 +789,9 @@ static int acpi_fujitsu_laptop_add(struct acpi_device *device) > > > if (!priv) > > > return -ENOMEM; > > > > > > + WARN_ONCE(fext, "More than one FUJ02E3 ACPI device was found. Driver may not work as intended."); > > > + fext = device; > > > + > > > fujitsu_laptop = priv; > > > fujitsu_laptop->acpi_handle = device->handle; > > > sprintf(acpi_device_name(device), "%s", > > > > I thought WARN_ONCE() printed the warning when it was encountered for the > > first time and then suppressed it on all other occasions. > > Correct. > > > If this is true > > then we'll get the warning even when there is only one FUJ02E3 in the > > system. Am I missing something? > > Probably the fact that the first argument of the macro is a conditional > expression ... Ah (having now had an opportunity to look at the source of WARN_ONCE()), it's tested within WARN_ONCE. > ("fext" is functionally equivalent to "fext != NULL" in this case). Indeed, by virtue of the test done in WARN_ONCE(). Ok, that makes sense. Regards jonathan