On Tue, 2024-09-03 at 18:14 +0300, Andy Shevchenko wrote: > On Tue, Sep 03, 2024 at 05:00:51PM +0200, Gergo Koteles wrote: > > On Thu, 2024-08-29 at 19:50 +0300, Andy Shevchenko wrote: > > > First of all, it's a bit counterintuitive to have something like > > > > > > int err; > > > ... > > > scoped_guard(...) > > > err = foo(...); > > > if (err) > > > return err; > > > > > > Second, with a particular kernel configuration and compiler version in > > > one of such cases the objtool is not happy: > > > > > > ideapad-laptop.o: warning: objtool: .text.fan_mode_show: unexpected end of section > > > > > > I'm not an expert on all this, but the theory is that compiler and > > > linker in this case can't understand that 'result' variable will be > > > always initialized as long as no error has been returned. Assigning > > > 'result' to a dummy value helps with this. Note, that fixing the > > > scoped_guard() scope (as per above) does not make issue gone. > > > > > > That said, assign dummy value and make the scope_guard() clear of its scope. > > > For the sake of consistency do it in the entire file. > > > > > > > Interestingly, if I open a scope manually and use the plain guard, the > > warning disappears. > > Yes, that's what I also have, but I avoid that approach because in that case > the printing will be done inside the lock, widening the critical section for > no benefits. > This is intended to be an inner block scope within the function, it does not expand the critical section. > > ... > > unsigned long result; > > int err; > > > > { > > guard(mutex)(&priv->vpc_mutex); > > err = read_ec_data(priv->adev->handle, VPCCMD_R_FAN, > > &result); > > if (err) > > return err; > > } > > ... > > > > This looks a bit strange, but is probably easier for the compiler than > > the for loop of scoped_guard. > > > > But I don't know how well this style fits into the kernel. >