Message ID | 20210526174436.2208277-1-jic23@kernel.org |
---|---|
State | New |
Headers | show |
Series | i2c: core: Add stub for i2c_verify_client() if !CONFIG_I2C | expand |
On 26/05/2021 19.44, Jonathan Cameron wrote: > From: Jonathan Cameron <Jonathan.Cameron@huawei.com> > > If I2C is not compiled, there is no way we should see a call to > i2c_verify_client() on a device that is an i2c client. As such, > provide a stub to return NULL to resolve an associated build failure. > > The build is failing with this link error > ld: fxls8962af-core.o: in function `fxls8962af_fifo_transfer': > fxls8962af-core.c: undefined reference to `i2c_verify_client' > > Reported-by: Tom Rix <trix@redhat.com> > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > Fixes: 68068fad0e1c ("iio: accel: fxls8962af: fix errata bug E3 - I2C burst reads") > Cc: Sean Nyekjaer <sean@geanix.com> > Cc: Wolfram Sang <wsa@kernel.org> Reviewed-by: Sean Nyekjaer <sean@geanix.com> > --- > > Note the broken patch is only in the IIO/togreg branch at the moment. Didn't quite get that the stub was should go in linux/i2c.h, thought I had to make a stub in the driver. But this seems appropriate :) /Sean
Hi Jonathan, > Fixes: 68068fad0e1c ("iio: accel: fxls8962af: fix errata bug E3 - I2C burst reads") > Cc: Sean Nyekjaer <sean@geanix.com> > Cc: Wolfram Sang <wsa@kernel.org> > --- > > Note the broken patch is only in the IIO/togreg branch at the moment. Then the fixes tag should be removed. It is only for upstream commits. It means we will have a merge dependency the next cycle, so I will send my pull request early. > > include/linux/i2c.h | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/include/linux/i2c.h b/include/linux/i2c.h > index e8f2ac8c9c3d..aa52738b9c46 100644 > --- a/include/linux/i2c.h > +++ b/include/linux/i2c.h > @@ -343,7 +343,14 @@ struct i2c_client { > }; > #define to_i2c_client(d) container_of(d, struct i2c_client, dev) > > +#if IS_ENABLED(CONFIG_I2C) Hmm, can't we move this into an already existing IS_ENABLED block?
On Thu, 27 May 2021 22:23:34 +0200 Wolfram Sang <wsa@kernel.org> wrote: > Hi Jonathan, > > > Fixes: 68068fad0e1c ("iio: accel: fxls8962af: fix errata bug E3 - I2C burst reads") > > Cc: Sean Nyekjaer <sean@geanix.com> > > Cc: Wolfram Sang <wsa@kernel.org> > > --- > > > > Note the broken patch is only in the IIO/togreg branch at the moment. > > Then the fixes tag should be removed. It is only for upstream commits. Ok, so that is there because my assumption was that mostly like I'd take this patch through IIO, in which case it's directly valid and necessary for backport information purposes. I'm guessing this one is unlikely to cause merge conflicts given how localized it is... You would do an immutable branch that I can pull into IIO. I'd really like to avoid rebasing the IIO tree unless absolutely necessary as people are working on top if it. > It means we will have a merge dependency the next cycle, so I will send > my pull request early. Doesn't work. There is a high chance the original patch will get ported back to earlier kernels and there is no reference to let anyone know they also need this one to avoid potential build issues on the stable kernel. So, if you want to take this through I2C, the path forwards would be. 1) You take this one through I2C 2) I apply the original fix (which #ifdefs the relevant code out in the driver). 3) Once (1) is in mainline next cycle, I can revert (2) on the basis it is no longer necessary. I'm fine with doing it this way as it avoids any cross dependencies. > > > > > include/linux/i2c.h | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/include/linux/i2c.h b/include/linux/i2c.h > > index e8f2ac8c9c3d..aa52738b9c46 100644 > > --- a/include/linux/i2c.h > > +++ b/include/linux/i2c.h > > @@ -343,7 +343,14 @@ struct i2c_client { > > }; > > #define to_i2c_client(d) container_of(d, struct i2c_client, dev) > > > > +#if IS_ENABLED(CONFIG_I2C) > > Hmm, can't we move this into an already existing IS_ENABLED block? There aren't any similar #if / #else blocks for CONFIG_I2C in i2c.h so it seemed neater to just add one around this individual element and not destroy the general organization of the file. Jonathan > >
Hi Jonathan > Ok, so that is there because my assumption was that mostly like I'd take > this patch through IIO, in which case it's directly valid and necessary > for backport information purposes. I'm guessing this one is unlikely to > cause merge conflicts given how localized it is... I see. Makes sense. > You would do an immutable branch that I can pull into IIO. I'd really like > to avoid rebasing the IIO tree unless absolutely necessary as people are > working on top if it. Sure, let's avoid rebasing. > Doesn't work. There is a high chance the original patch will get ported > back to earlier kernels and there is no reference to let anyone know they > also need this one to avoid potential build issues on the stable kernel. > > So, if you want to take this through I2C, the path forwards would be. > 1) You take this one through I2C > 2) I apply the original fix (which #ifdefs the relevant code out in the > driver). > 3) Once (1) is in mainline next cycle, I can revert (2) on the basis > it is no longer necessary. > > I'm fine with doing it this way as it avoids any cross dependencies. The other solution is that you make an immutable branch for me? IIUC, this would be easiest? It would work for me. > > > +#if IS_ENABLED(CONFIG_I2C) > > > > Hmm, can't we move this into an already existing IS_ENABLED block? > > There aren't any similar #if / #else blocks for CONFIG_I2C in i2c.h > so it seemed neater to just add one around this individual element > and not destroy the general organization of the file. Could be argued. I'd still prefer to add it at line 480 (5.13-rc3) with the #else branch added if you don't mind. Thanks and kind regards, Wolfram
On Thu, 3 Jun 2021 13:55:59 +0200 Wolfram Sang <wsa@kernel.org> wrote: > Hi Jonathan > > > Ok, so that is there because my assumption was that mostly like I'd take > > this patch through IIO, in which case it's directly valid and necessary > > for backport information purposes. I'm guessing this one is unlikely to > > cause merge conflicts given how localized it is... > > I see. Makes sense. > > > You would do an immutable branch that I can pull into IIO. I'd really like > > to avoid rebasing the IIO tree unless absolutely necessary as people are > > working on top if it. > > Sure, let's avoid rebasing. > > > Doesn't work. There is a high chance the original patch will get ported > > back to earlier kernels and there is no reference to let anyone know they > > also need this one to avoid potential build issues on the stable kernel. > > > > So, if you want to take this through I2C, the path forwards would be. > > 1) You take this one through I2C > > 2) I apply the original fix (which #ifdefs the relevant code out in the > > driver). > > 3) Once (1) is in mainline next cycle, I can revert (2) on the basis > > it is no longer necessary. > > > > I'm fine with doing it this way as it avoids any cross dependencies. > > The other solution is that you make an immutable branch for me? IIUC, > this would be easiest? It would work for me. Sure, I'll do that once we've agreed a v2 > > > > > +#if IS_ENABLED(CONFIG_I2C) > > > > > > Hmm, can't we move this into an already existing IS_ENABLED block? > > > > There aren't any similar #if / #else blocks for CONFIG_I2C in i2c.h > > so it seemed neater to just add one around this individual element > > and not destroy the general organization of the file. > > Could be argued. I'd still prefer to add it at line 480 (5.13-rc3) with > the #else branch added if you don't mind. Sure, I'll move it. Jonathan > > Thanks and kind regards, > > Wolfram > >
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index e8f2ac8c9c3d..aa52738b9c46 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h @@ -343,7 +343,14 @@ struct i2c_client { }; #define to_i2c_client(d) container_of(d, struct i2c_client, dev) +#if IS_ENABLED(CONFIG_I2C) struct i2c_client *i2c_verify_client(struct device *dev); +#else +static inline struct i2c_client *i2c_verify_client(struct device *dev) +{ + return NULL; +} +#endif struct i2c_adapter *i2c_verify_adapter(struct device *dev); const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id, const struct i2c_client *client);