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. > ... > 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. -- With Best Regards, Andy Shevchenko