All of lore.kernel.org
 help / color / mirror / Atom feed
From: Saravana Kannan <saravanak@google.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	John Stultz <john.stultz@linaro.org>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Rob Herring <robh+dt@kernel.org>, Andrew Lunn <andrew@lunn.ch>,
	Vladimir Oltean <olteanv@gmail.com>,
	Android Kernel Team <kernel-team@android.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v1 2/5] driver core: Set deferred probe reason when deferred by driver core
Date: Tue, 14 Sep 2021 00:58:25 -0700	[thread overview]
Message-ID: <CAGETcx8myxTU=F63MC_FFLXsWakMqBYBbajneV=buwXGs70j+w@mail.gmail.com> (raw)
In-Reply-To: <CAMuHMdU8n9LH7+sZ-OFuce_y89GsQvt+HGUYdQMYCqOxoM3Y7Q@mail.gmail.com>

On Tue, Sep 14, 2021 at 12:01 AM Geert Uytterhoeven
<geert@linux-m68k.org> wrote:
>
> Hi Saravana,
>
> On Tue, Sep 14, 2021 at 6:39 AM Saravana Kannan <saravanak@google.com> wrote:
> > When the driver core defers the probe of a device, set the deferred
> > probe reason so that it's easier to debug. The deferred probe reason is
> > available in debugfs under devices_deferred.
> >
> > Signed-off-by: Saravana Kannan <saravanak@google.com>
>
> Thanks for your patch!

Thanks for the reviews!

>
> > --- a/drivers/base/core.c
> > +++ b/drivers/base/core.c
> > @@ -955,6 +955,29 @@ static void device_links_missing_supplier(struct device *dev)
> >         }
> >  }
> >
> > +/**
> > + * dev_set_def_probe_reason - Set the deferred probe reason for a device
> > + * @dev: the pointer to the struct device
> > + * @fmt: printf-style format string
> > + * @...: arguments as specified in the format string
> > + *
> > + * This is a more caller-friendly version of device_set_deferred_probe_reason()
> > + * that takes variable argument inputs similar to dev_info().
> > + */
> > +static void dev_set_def_probe_reason(const struct device *dev, const char *fmt, ...)
>
> So this is indeed similar to device_set_deferred_probe_reason(),
> but the function's name is completely different, unlike e.g.
> (v)printf()?

Yes.

>
> > +{
> > +       struct va_format vaf;
> > +       va_list args;
> > +
> > +       va_start(args, fmt);
> > +       vaf.fmt = fmt;
> > +       vaf.va = &args;
> > +
> > +       device_set_deferred_probe_reason(dev, &vaf);
> > +
> > +       va_end(args);
> > +}
>
> I think you can just make this a macro wrapper calling
> dev_err_probe(dev, -EPROBE_DEFER, fmt, ...).
> Or open-code that below.

Good point. I think I can make it be a wrapper macro.

>
> > +
> >  /**
> >   * device_links_check_suppliers - Check presence of supplier drivers.
> >   * @dev: Consumer device.
> > @@ -975,6 +998,7 @@ int device_links_check_suppliers(struct device *dev)
> >  {
> >         struct device_link *link;
> >         int ret = 0;
> > +       struct fwnode_handle *sup_fw;
> >
> >         /*
> >          * Device waiting for supplier to become available is not allowed to
> > @@ -983,10 +1007,13 @@ int device_links_check_suppliers(struct device *dev)
> >         mutex_lock(&fwnode_link_lock);
> >         if (dev->fwnode && !list_empty(&dev->fwnode->suppliers) &&
> >             !fw_devlink_is_permissive()) {
> > +               sup_fw = list_first_entry(&dev->fwnode->suppliers,
> > +                                         struct fwnode_link,
> > +                                         c_hook)->supplier;
> >                 dev_dbg(dev, "probe deferral - wait for supplier %pfwP\n",
> > -                       list_first_entry(&dev->fwnode->suppliers,
> > -                       struct fwnode_link,
> > -                       c_hook)->supplier);
> > +                       sup_fw);
> > +               dev_set_def_probe_reason(dev,
> > +                       "wait for supplier %pfwP\n", sup_fw);
>
> dev_err_probe() would replace both the dev_dbg() and the
> dev_set_def_probe_reason().

I intentionally didn't use dev_err_probe() because:

1. I wanted the messages to be a bit different -- not have the "probe
deferral" in the deferred_devices file but have it in the dmesg logs
so that the log is clearer.
2. And more importantly, I'm working on a patch (could take a few
weeks) that'll make this place return -EPROBE_DEFER vs -ENODEV (or
whatever) for different situations. And using dev_err_probe() with
-ENODEV would cause it to print the error (when I don't want it to).
And always doing dev_err_probe(dev, -EPROBE_DEFER,...) while returning
-ENODEV would be confusing.

>
> >                 mutex_unlock(&fwnode_link_lock);
> >                 return -EPROBE_DEFER;
> >         }
> > @@ -1003,6 +1030,9 @@ int device_links_check_suppliers(struct device *dev)
> >                         device_links_missing_supplier(dev);
> >                         dev_dbg(dev, "probe deferral - supplier %s not ready\n",
> >                                 dev_name(link->supplier));
> > +                       dev_set_def_probe_reason(dev,
> > +                               "supplier %s not ready\n",
> > +                               dev_name(link->supplier));
>
> Likewise.

Same reason as above.

I mainly added you for comments on 5/5. Hopefully you'll have some
comments on that too by the time I'm up tomorrow :)

-Saravana

>
> >                         ret = -EPROBE_DEFER;
> >                         break;
> >                 }
>
> Gr{oetje,eeting}s,
>
>                         Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds

  reply	other threads:[~2021-09-14  7:59 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-14  4:39 [PATCH v1 0/5] fw_devlink improvements Saravana Kannan
2021-09-14  4:39 ` [PATCH v1 1/5] driver core: fw_devlink: Improve handling of cyclic dependencies Saravana Kannan
2021-09-14  6:16   ` Marek Szyprowski
2021-09-14  8:01     ` Saravana Kannan
2021-09-14 12:35   ` Rob Herring
2021-09-14 16:23     ` Saravana Kannan
2021-09-14  4:39 ` [PATCH v1 2/5] driver core: Set deferred probe reason when deferred by driver core Saravana Kannan
2021-09-14  7:01   ` Geert Uytterhoeven
2021-09-14  7:58     ` Saravana Kannan [this message]
2021-09-15  5:41       ` Saravana Kannan
2021-09-14  4:39 ` [PATCH v1 3/5] driver core: Create __fwnode_link_del() helper function Saravana Kannan
2021-09-14  7:04   ` Geert Uytterhoeven
2021-09-14  7:46     ` Saravana Kannan
2021-09-14  4:39 ` [PATCH v1 4/5] driver core: Add debug logs when fwnode links are added/deleted Saravana Kannan
2021-09-14  7:09   ` Geert Uytterhoeven
2021-09-14  4:39 ` [PATCH v1 5/5] driver core: Add fw_devlink.debug command line boolean parameter Saravana Kannan
2021-09-14 15:10   ` Andrew Lunn
2021-09-14 16:27     ` Saravana Kannan
2021-09-14 16:43       ` Andrew Lunn
2021-09-14 16:52         ` Rob Herring
2021-09-14 17:31           ` Saravana Kannan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAGETcx8myxTU=F63MC_FFLXsWakMqBYBbajneV=buwXGs70j+w@mail.gmail.com' \
    --to=saravanak@google.com \
    --cc=andrew@lunn.ch \
    --cc=geert@linux-m68k.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=john.stultz@linaro.org \
    --cc=kernel-team@android.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=olteanv@gmail.com \
    --cc=rafael@kernel.org \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.