All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rob Herring <robh@kernel.org>
To: Andrzej Hajda <a.hajda@samsung.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Javier Martinez Canillas <javierm@redhat.com>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
	Andy Shevchenko <andy.shevchenko@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	Russell King - ARM Linux <linux@armlinux.org.uk>
Subject: Re: [PATCH v4 1/3] driver core: add probe_err log helper
Date: Fri, 21 Dec 2018 16:47:44 -0600	[thread overview]
Message-ID: <CABGGisxcHWwhUcQML7XmriK_DLFGjmud3cKt8yp+K4G2CAL=9Q@mail.gmail.com> (raw)
In-Reply-To: <b9f7cb75-62a0-20f6-0e5b-1553852d81b2@samsung.com>

On Thu, Dec 20, 2018 at 5:38 AM Andrzej Hajda <a.hajda@samsung.com> wrote:
>
> On 20.12.2018 12:14, Greg Kroah-Hartman wrote:
> > On Thu, Dec 20, 2018 at 11:22:45AM +0100, Andrzej Hajda wrote:
> >> During probe every time driver gets resource it should usually check for error
> >> printk some message if it is not -EPROBE_DEFER and return the error. This
> >> pattern is simple but requires adding few lines after any resource acquisition
> >> code, as a result it is often omited or implemented only partially.
> >> probe_err helps to replace such code sequences with simple call, so code:
> >>      if (err != -EPROBE_DEFER)
> >>              dev_err(dev, ...);
> >>      return err;
> >> becomes:
> >>      return probe_err(dev, err, ...);
> > Can you show a driver being converted to use this to show if it really
> > will save a bunch of lines and make things simpler?  Usually you are
> > requesting lots of resources so you need to do more than just return,
> > you need to clean stuff up first.
>
>
> I have posted sample conversion patch (generated by cocci) in previous
> version of this patchset [1].
>
> I did not re-posted it again as it is quite big patch and it will not be
> applied without prior splitting it per subsystem.
>
> Regarding stuff cleaning: devm_* usually makes it unnecessary, but also
> even with necessary cleaning you can profit from probe_err, you just
> calls it without leaving probe - you have still handled correctly probe
> deferring.
>
> Here is sample usage (taken from beginning of the mentioned patch):
>
> ---
> diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c
> index 4b900fc659f7..52e891fe1586 100644
> --- a/drivers/ata/libahci_platform.c
> +++ b/drivers/ata/libahci_platform.c
> @@ -581,11 +581,8 @@ int ahci_platform_init_host(struct platform_device *pdev,
>         int i, irq, n_ports, rc;
>
>         irq = platform_get_irq(pdev, 0);
> -       if (irq <= 0) {
> -               if (irq != -EPROBE_DEFER)
> -                       dev_err(dev, "no irq\n");
> -               return irq;
> -       }
> +       if (irq <= 0)
> +               return probe_err(dev, irq, "no irq\n");

Shouldn't platform_get_irq (or what it calls) print the error message
(like we do for kmalloc), rather than every driver? We could get rid
of lots of error strings that way. I guess there are cases where no
irq is not an error and we wouldn't want to always print an error. In
some cases like that, we have 2 versions of the function.

Not what you're addressing here exactly, but what I'd like to see is
the ability to print the exact locations generating errors in the
first place. That would require wrapping all the error code
assignments and returns (or at least the common sources). If we're
going to make tree wide changes, then that might be the better place
to put the effort. If we had that, then maybe we'd need a lot fewer
error messages in drivers. I did a prototype implementation and
coccinelle script a while back that I could dust off if there's
interest. It was helpful in finding the source of errors, but did have
some false positives printed.

Rob

WARNING: multiple messages have this Message-ID (diff)
From: Rob Herring <robh@kernel.org>
To: Andrzej Hajda <a.hajda@samsung.com>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Javier Martinez Canillas <javierm@redhat.com>,
	Andy Shevchenko <andy.shevchenko@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	Russell King - ARM Linux <linux@armlinux.org.uk>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
	Marek Szyprowski <m.szyprowski@samsung.com>
Subject: Re: [PATCH v4 1/3] driver core: add probe_err log helper
Date: Fri, 21 Dec 2018 16:47:44 -0600	[thread overview]
Message-ID: <CABGGisxcHWwhUcQML7XmriK_DLFGjmud3cKt8yp+K4G2CAL=9Q@mail.gmail.com> (raw)
In-Reply-To: <b9f7cb75-62a0-20f6-0e5b-1553852d81b2@samsung.com>

On Thu, Dec 20, 2018 at 5:38 AM Andrzej Hajda <a.hajda@samsung.com> wrote:
>
> On 20.12.2018 12:14, Greg Kroah-Hartman wrote:
> > On Thu, Dec 20, 2018 at 11:22:45AM +0100, Andrzej Hajda wrote:
> >> During probe every time driver gets resource it should usually check for error
> >> printk some message if it is not -EPROBE_DEFER and return the error. This
> >> pattern is simple but requires adding few lines after any resource acquisition
> >> code, as a result it is often omited or implemented only partially.
> >> probe_err helps to replace such code sequences with simple call, so code:
> >>      if (err != -EPROBE_DEFER)
> >>              dev_err(dev, ...);
> >>      return err;
> >> becomes:
> >>      return probe_err(dev, err, ...);
> > Can you show a driver being converted to use this to show if it really
> > will save a bunch of lines and make things simpler?  Usually you are
> > requesting lots of resources so you need to do more than just return,
> > you need to clean stuff up first.
>
>
> I have posted sample conversion patch (generated by cocci) in previous
> version of this patchset [1].
>
> I did not re-posted it again as it is quite big patch and it will not be
> applied without prior splitting it per subsystem.
>
> Regarding stuff cleaning: devm_* usually makes it unnecessary, but also
> even with necessary cleaning you can profit from probe_err, you just
> calls it without leaving probe - you have still handled correctly probe
> deferring.
>
> Here is sample usage (taken from beginning of the mentioned patch):
>
> ---
> diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c
> index 4b900fc659f7..52e891fe1586 100644
> --- a/drivers/ata/libahci_platform.c
> +++ b/drivers/ata/libahci_platform.c
> @@ -581,11 +581,8 @@ int ahci_platform_init_host(struct platform_device *pdev,
>         int i, irq, n_ports, rc;
>
>         irq = platform_get_irq(pdev, 0);
> -       if (irq <= 0) {
> -               if (irq != -EPROBE_DEFER)
> -                       dev_err(dev, "no irq\n");
> -               return irq;
> -       }
> +       if (irq <= 0)
> +               return probe_err(dev, irq, "no irq\n");

Shouldn't platform_get_irq (or what it calls) print the error message
(like we do for kmalloc), rather than every driver? We could get rid
of lots of error strings that way. I guess there are cases where no
irq is not an error and we wouldn't want to always print an error. In
some cases like that, we have 2 versions of the function.

Not what you're addressing here exactly, but what I'd like to see is
the ability to print the exact locations generating errors in the
first place. That would require wrapping all the error code
assignments and returns (or at least the common sources). If we're
going to make tree wide changes, then that might be the better place
to put the effort. If we had that, then maybe we'd need a lot fewer
error messages in drivers. I did a prototype implementation and
coccinelle script a while back that I could dust off if there's
interest. It was helpful in finding the source of errors, but did have
some false positives printed.

Rob

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2018-12-21 22:48 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20181220102258eucas1p1ca5abb0b48d1f13d9234a4a7702a13da@eucas1p1.samsung.com>
2018-12-20 10:22 ` [PATCH v4 0/3] driver core: add probe error check helper Andrzej Hajda
2018-12-20 10:22   ` Andrzej Hajda
     [not found]   ` <CGME20181220102259eucas1p2f748c68e01cd4e09a266da879722e218@eucas1p2.samsung.com>
2018-12-20 10:22     ` [PATCH v4 1/3] driver core: add probe_err log helper Andrzej Hajda
2018-12-20 10:22       ` Andrzej Hajda
2018-12-20 10:35       ` Rafael J. Wysocki
2018-12-20 10:35         ` Rafael J. Wysocki
2018-12-20 11:14       ` Greg Kroah-Hartman
2018-12-20 11:14         ` Greg Kroah-Hartman
2018-12-20 11:37         ` Andrzej Hajda
2018-12-20 11:37           ` Andrzej Hajda
2018-12-21 22:47           ` Rob Herring [this message]
2018-12-21 22:47             ` Rob Herring
2018-12-22  7:24             ` [PATCH] driver core: platform: Add an error message to platform_get_irq*() Stephen Boyd
2018-12-22  7:24               ` Stephen Boyd
2018-12-22 10:33               ` Russell King - ARM Linux
2018-12-22 10:33                 ` Russell King - ARM Linux
2018-12-28 21:53                 ` Stephen Boyd
2018-12-28 21:53                   ` Stephen Boyd
2018-12-24  9:29             ` [PATCH v4 1/3] driver core: add probe_err log helper Andrzej Hajda
2018-12-24  9:29               ` Andrzej Hajda
2018-12-28 21:56             ` [PATCH v2] driver core: platform: Add an error message to platform_get_irq*() Stephen Boyd
2018-12-28 21:56               ` Stephen Boyd
2018-12-30 10:42               ` Andy Shevchenko
2018-12-30 10:42                 ` Andy Shevchenko
2019-01-02 18:17                 ` Stephen Boyd
2019-01-02 18:17                   ` Stephen Boyd
2019-01-02 18:51             ` [PATCH v3] " Stephen Boyd
2019-01-02 18:51               ` Stephen Boyd
2019-01-03  9:40               ` Rafael J. Wysocki
2019-01-03  9:40                 ` Rafael J. Wysocki
2019-01-03 16:11                 ` Stephen Boyd
2019-01-03 16:11                   ` Stephen Boyd
2019-01-03 17:22                   ` Rafael J. Wysocki
2019-01-03 17:22                     ` Rafael J. Wysocki
2019-01-03 17:25                     ` Stephen Boyd
2019-01-03 17:25                       ` Stephen Boyd
2019-01-03 17:38                       ` Rafael J. Wysocki
2019-01-03 17:38                         ` Rafael J. Wysocki
2019-01-03 17:51               ` Andy Shevchenko
2019-01-03 17:51                 ` Andy Shevchenko
     [not found]   ` <CGME20181220102259eucas1p1884a0b68ce342239c2a43a74cc50725a@eucas1p1.samsung.com>
2018-12-20 10:22     ` [PATCH v4 2/3] driver core: add deferring probe reason to devices_deferred property Andrzej Hajda
2018-12-20 10:22       ` Andrzej Hajda
2018-12-20 11:04       ` Rafael J. Wysocki
2018-12-20 11:04         ` Rafael J. Wysocki
2018-12-20 12:27         ` Andrzej Hajda
2018-12-20 12:27           ` Andrzej Hajda
2018-12-20 11:12       ` Greg Kroah-Hartman
2018-12-20 11:12         ` Greg Kroah-Hartman
2018-12-20 11:51         ` Andrzej Hajda
2018-12-20 11:51           ` Andrzej Hajda
     [not found]   ` <CGME20181220102300eucas1p210735c7753688a52a73ccf026884dd11@eucas1p2.samsung.com>
2018-12-20 10:22     ` [PATCH v4 3/3] driver core: add probe_err_ptr helper Andrzej Hajda
2018-12-20 10:22       ` Andrzej Hajda
2018-12-20 11:05       ` Rafael J. Wysocki
2018-12-20 11:05         ` Rafael J. Wysocki
2018-12-20 11:14       ` Greg Kroah-Hartman
2018-12-20 11:14         ` Greg Kroah-Hartman
     [not found]         ` <CGME20181221083246eucas1p22cade911a455344d351db6060d39ddce@eucas1p2.samsung.com>
2018-12-21  8:32           ` [PATCH] PCI: pcie-rockchip: use probe_err helpers instead of open coding Andrzej Hajda
2018-12-21  8:32             ` Andrzej Hajda
2018-12-22  5:42             ` kbuild test robot
2018-12-22  5:42               ` kbuild test robot

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='CABGGisxcHWwhUcQML7XmriK_DLFGjmud3cKt8yp+K4G2CAL=9Q@mail.gmail.com' \
    --to=robh@kernel.org \
    --cc=a.hajda@samsung.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=b.zolnierkie@samsung.com \
    --cc=broonie@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=javierm@redhat.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=m.szyprowski@samsung.com \
    --cc=rafael@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.