On Fri, 28 Aug 2020 17:01:18 -0700 Douglas Anderson <dianders@xxxxxxxxxxxx> wrote: > On one board I found that: > probe of 5-0028 returned 1 after 259547 usecs > > There's no reason to block probe of all other devices on our probe. > Turn on async probe. > > Signed-off-by: Douglas Anderson <dianders@xxxxxxxxxxxx> > --- > NOTE: I haven't done any analysis of the driver to see _why_ it's so > slow, only that I have measured it to be slow. Someone could > certainly take the time to profile / optimize it, but in any case it > still won't hurt to be async. Hmm. It is vanishingly rare to use that flag so I'm not particularly keen on starting to deploy it when we don't know why a particular driver is taking so long. I agree it should be safe but I don't like oddities I don't understand! There are some sleeps in there but they are all of the order of a few msecs. Could it be there is a regulator that is coming up very slowly? Any other ideas? Jonathan > > This is a very safe flag to turn on since: > > 1. It's not like our probe order was defined by anything anyway. When > we probe is at the whim of when our i2c controller probes and that can > be any time. > > 2. If some other driver needs us then they have to handle the fact > that we might not have probed yet anyway. > > 3. There may be other drivers probing at the same time as us anyway > because _they_ used async probe. > > While I won't say that it's impossible to tickle a bug by turning on > async probe, I would assert that in almost all cases the bug was > already there and needed to be fixed anyway. > > ALSO NOTE: measurement / testing was done on the downstream Chrome OS > 5.4 tree. I confirmed compiling on mainline. > > drivers/iio/proximity/sx9310.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/iio/proximity/sx9310.c b/drivers/iio/proximity/sx9310.c > index dc2e11b43431..444cafc53408 100644 > --- a/drivers/iio/proximity/sx9310.c > +++ b/drivers/iio/proximity/sx9310.c > @@ -1054,6 +1054,7 @@ static struct i2c_driver sx9310_driver = { > .acpi_match_table = ACPI_PTR(sx9310_acpi_match), > .of_match_table = of_match_ptr(sx9310_of_match), > .pm = &sx9310_pm_ops, > + .probe_type = PROBE_PREFER_ASYNCHRONOUS, > }, > .probe = sx9310_probe, > .id_table = sx9310_id,