From: "Michal Suchánek" <msuchanek@suse.de>
To: Simon Glass <sjg@chromium.org>
Cc: U-Boot Mailing List <u-boot@lists.denx.de>,
Heinrich Schuchardt <xypron.glpk@gmx.de>,
AKASHI Takahiro <takahiro.akashi@linaro.org>,
Bin Meng <bmeng.cn@gmail.com>, Stefan Roese <sr@denx.de>
Subject: Re: [PATCH v4 04/21] dm: blk: Add probe in blk_first_device/blk_next_device
Date: Mon, 10 Oct 2022 21:49:20 +0200 [thread overview]
Message-ID: <20221010194920.GW28810@kitsune.suse.cz> (raw)
In-Reply-To: <CAPnjgZ38fh-UX7D2is4Tcu7CzTcDRHhFAaRTQam0aAXZ9LqutA@mail.gmail.com>
On Sun, Oct 02, 2022 at 07:10:40PM -0600, Simon Glass wrote:
> Hi Michal,
>
> On Sun, 2 Oct 2022 at 13:34, Michal Suchánek <msuchanek@suse.de> wrote:
> >
> > On Thu, Sep 29, 2022 at 04:00:26AM -0600, Simon Glass wrote:
> > > Hi Michal,
> > >
> > > On Sun, 25 Sept 2022 at 02:28, Michal Suchanek <msuchanek@suse.de> wrote:
> > > >
> > > > The description claims that the device is probed but it isn't.
> > > >
> > > > Add the device_probe() call.
> > > >
> > > > Also consolidate the iteration into one function.
> > > >
> > > > Fixes: 8a5cbc065d ("dm: blk: Use uclass_find_first/next_device() in blk_first/next_device()")
> > > > Signed-off-by: Michal Suchanek <msuchanek@suse.de>
> > > > ---
> > > > drivers/block/blk-uclass.c | 46 ++++++++++++++++++--------------------
> > > > 1 file changed, 22 insertions(+), 24 deletions(-)
> > > >
> > > > diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c
> > > > index 21c5209bb6..992f8ad3da 100644
> > > > --- a/drivers/block/blk-uclass.c
> > > > +++ b/drivers/block/blk-uclass.c
> > > > @@ -361,45 +361,43 @@ int blk_dselect_hwpart(struct blk_desc *desc, int hwpart)
> > > > return blk_select_hwpart(desc->bdev, hwpart);
> > > > }
> > > >
> > > > -int blk_first_device(int if_type, struct udevice **devp)
> > > > +static int _blk_next_device(int if_type, struct udevice **devp)
> > > > {
> > > > struct blk_desc *desc;
> > > > - int ret;
> > > > + int ret = 0;
> > > > +
> > > > + for (; *devp; uclass_find_next_device(devp)) {
> > > > + desc = dev_get_uclass_plat(*devp);
> > > > + if (desc->if_type == if_type) {
> > > > + ret = device_probe(*devp);
> > > > + if (!ret)
> > > > + return 0;
> > > > + }
> > > > + }
> > > >
> > > > - ret = uclass_find_first_device(UCLASS_BLK, devp);
> > > > if (ret)
> > > > return ret;
> > > > - if (!*devp)
> > > > - return -ENODEV;
> > > > - do {
> > > > - desc = dev_get_uclass_plat(*devp);
> > > > - if (desc->if_type == if_type)
> > > > - return 0;
> > > > - ret = uclass_find_next_device(devp);
> > > > - if (ret)
> > > > - return ret;
> > > > - } while (*devp);
> > >
> > > This looks wrong since a media device may have other devices under it,
> > > e.g. UCLASS_BOOTDEV so I think you should keep the existing code and
> > > just call uclass_probe() at the end.
> > >
> > > You could add a test for this by checking that only the BLK device is probed.
> >
> > The description says that it returns ready to use device, and that's not
> > possible when the device is only probed at the end when it is to be
> > returned.
>
> Why is that?
There are two options:
- probe the device, and skip it if it fails, potentially probing
multiple devices before returning one
- decide what device to return, probe it, and if it fails return
non-activated device
> > There are some tests of this function but very few users so it may be OK
> > to change the semantic again to resemble the _check variant uclass
> > iterator and retorn broken devices but I don't think that was the intent
> > here with using uclass_first_device/uclass_next_device originally.
>
> I agree.
>
> >
> > Also this change only makes a difference to the amount of devices probed
> > for callers that only call the blk_first_device and never move on to the
> > next. Callers that use the functions for iteration will move on to the
> > next device and probe it anyway.
>
> OK, perhaps I understand this. But don't you need to update the
> comment in the header file to say that devices that don't probe are
> silently skipped?
They are not ready to use so they cannot be returned by the current
description?
>
> Also it really does need a test.
Right, tests are good to prevent similar regression in the future.
Thanks
Michal
next prev parent reply other threads:[~2022-10-10 19:49 UTC|newest]
Thread overview: 133+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-04 17:59 [PATCH] dm: core: Do not stop uclass iteration on error Michal Suchanek
2022-08-04 19:22 ` Simon Glass
2022-08-04 19:36 ` Michal Suchánek
2022-08-04 20:30 ` Simon Glass
2022-08-17 8:27 ` [PATCH v2] " Michal Suchanek
2022-08-18 17:49 ` Simon Glass
2022-08-18 19:46 ` Michal Suchánek
2022-08-19 20:23 ` [PATCH v3] " Michal Suchanek
2022-08-28 1:52 ` Simon Glass
2022-08-30 10:23 ` Michal Suchánek
2022-08-30 15:56 ` Simon Glass
2022-08-30 16:48 ` Michal Suchánek
2022-08-31 3:15 ` Simon Glass
2022-08-31 7:39 ` Michal Suchánek
2022-08-31 17:44 ` Simon Glass
2022-09-17 15:02 ` Simon Glass
2022-09-17 17:04 ` Michal Suchánek
2022-09-24 20:09 ` Michal Suchánek
2022-09-25 14:15 ` Simon Glass
2022-09-25 16:38 ` Michal Suchánek
2022-09-25 8:27 ` [PATCH v4 00/21] " Michal Suchanek
2022-09-25 8:27 ` [PATCH v4 01/21] dm: pci: Fix doc typo first -> next Michal Suchanek
2022-09-29 9:59 ` Simon Glass
2022-10-22 1:06 ` Simon Glass
2022-09-25 8:27 ` [PATCH v4 02/21] dm: core: Add note about device_probe idempotence Michal Suchanek
2022-09-29 9:59 ` Simon Glass
2022-09-25 8:27 ` [PATCH v4 03/21] dm: core: Document return value of device bind functions Michal Suchanek
2022-09-29 9:59 ` Simon Glass
2022-09-25 8:27 ` [PATCH v4 04/21] dm: blk: Add probe in blk_first_device/blk_next_device Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-10-02 19:34 ` Michal Suchánek
2022-10-03 1:10 ` Simon Glass
2022-10-10 19:49 ` Michal Suchánek [this message]
2022-10-10 21:33 ` Michal Suchánek
2022-10-10 22:33 ` Simon Glass
2022-11-10 2:15 ` Simon Glass
2022-09-25 8:27 ` [PATCH v4 05/21] dm: core: Fix uclass_probe_all to really probe all devices Michal Suchanek
2022-09-25 8:27 ` [PATCH v4 06/21] dm: treewide: Do not opencode uclass_probe_all() Michal Suchanek
2022-09-25 8:28 ` [PATCH v4 07/21] dm: pci: Fix device PCI iteration Michal Suchanek
2022-09-25 8:28 ` [PATCH v4 08/21] bootstd: Fix listing boot devices Michal Suchanek
2022-09-25 8:28 ` [PATCH v4 09/21] usb: ether: Fix error handling in usb_ether_init Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-25 8:28 ` [PATCH v4 10/21] stdio: Fix class iteration in stdio_add_devices() Michal Suchanek
2022-09-25 8:28 ` [PATCH v4 11/21] video: ipuv3: Fix error handling when getting the display Michal Suchanek
2022-09-25 8:28 ` [PATCH v4 12/21] w1: Fix bus counting in w1_get_bus Michal Suchanek
2022-09-25 8:28 ` [PATCH v4 13/21] w1: Clean up device iteration in w1_bus_find_dev Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-25 8:28 ` [PATCH v4 14/21] dma: Eliminate unused variable in dma_get_cfg() Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-25 8:28 ` [PATCH v4 15/21] cmd: List all uclass devices regardless of probe error Michal Suchanek
2022-09-25 8:28 ` [PATCH v4 16/21] dm: treewide: Use uclass_first_device_err when accessing one device Michal Suchanek
2022-09-25 8:28 ` [PATCH v4 17/21] dm: treewide: Use uclass_next_device_err when accessing second device Michal Suchanek
2022-09-25 8:28 ` [PATCH v4 18/21] dm: blk: Do not use uclass_next_device_err Michal Suchanek
2022-09-25 8:28 ` [PATCH v4 19/21] dm: treewide: Do not use the return value of simple uclass iterator Michal Suchanek
2022-09-25 8:28 ` [PATCH v4 20/21] dm: core: Switch uclass_*_device_err to use uclass_*_device_check Michal Suchanek
2022-09-25 11:08 ` [PATCH] fixup: " Michal Suchanek
2022-09-29 10:00 ` [PATCH v4 20/21] " Simon Glass
2022-09-25 8:28 ` [PATCH v4 21/21] dm: core: Do not stop uclass iteration on error Michal Suchanek
2022-09-27 21:37 ` [PATCH v5 00/15] " Michal Suchanek
2022-09-27 21:37 ` [PATCH v5 01/15] dm: core: Fix uclass_probe_all to really probe all devices Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-27 21:37 ` [PATCH v5 02/15] dm: treewide: Do not opencode uclass_probe_all() Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-27 21:37 ` [PATCH v5 03/15] dm: pci: Fix device PCI iteration Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-27 21:37 ` [PATCH v5 04/15] bootstd: Fix listing boot devices Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-10-02 19:19 ` Michal Suchánek
2022-09-27 21:37 ` [PATCH v5 05/15] usb: ether: Fix error handling in usb_ether_init Michal Suchanek
2022-09-27 21:37 ` [PATCH v5 06/15] stdio: Fix class iteration in stdio_add_devices() Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-27 21:37 ` [PATCH v5 07/15] video: ipuv3: Fix error handling when getting the display Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-27 21:38 ` [PATCH v5 08/15] w1: Fix bus counting in w1_get_bus Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-27 21:38 ` [PATCH v5 09/15] cmd: List all uclass devices regardless of probe error Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-10-02 19:10 ` Michal Suchánek
2022-10-03 1:10 ` Simon Glass
2022-09-27 21:38 ` [PATCH v5 10/15] dm: treewide: Use uclass_first_device_err when accessing one device Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-27 21:38 ` [PATCH v5 11/15] dm: treewide: Use uclass_next_device_err when accessing second device Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-27 21:38 ` [PATCH v5 12/15] dm: blk: Do not use uclass_next_device_err Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-27 21:38 ` [PATCH v5 13/15] dm: core: Switch uclass_*_device_err to use uclass_*_device_check Michal Suchanek
2022-09-27 21:38 ` [PATCH v5 14/15] dm: treewide: Do not use the return value of simple uclass iterator Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-27 21:38 ` [PATCH v5 15/15] dm: core: Do not stop uclass iteration on error Michal Suchanek
2022-09-29 10:00 ` Simon Glass
2022-09-29 10:00 ` [PATCH v5 00/15] " Simon Glass
2022-10-12 19:57 ` [PATCH v6 00/20] " Michal Suchanek
2022-10-12 19:57 ` [PATCH v6 01/20] dm: core: Fix uclass_probe_all to really probe all devices Michal Suchanek
2022-10-12 22:14 ` Simon Glass
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:57 ` [PATCH v6 02/20] dm: treewide: Do not opencode uclass_probe_all() Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:57 ` [PATCH v6 03/20] dm: pci: Fix device PCI iteration Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:57 ` [PATCH v6 04/20] bootstd: Fix listing boot devices Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:57 ` [PATCH v6 05/20] usb: ether: Fix error handling in usb_ether_init Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:57 ` [PATCH v6 06/20] stdio: Fix class iteration in stdio_add_devices() Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:57 ` [PATCH v6 07/20] video: ipuv3: Fix error handling when getting the display Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:57 ` [PATCH v6 08/20] w1: Fix bus counting in w1_get_bus Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:57 ` [PATCH v6 09/20] cmd: List all uclass devices regardless of probe error Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:57 ` [PATCH v6 10/20] dm: treewide: Use uclass_first_device_err when accessing one device Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:58 ` [PATCH v6 11/20] dm: treewide: Use uclass_next_device_err when accessing second device Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:58 ` [PATCH v6 12/20] dm: blk: Do not use uclass_next_device_err Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:58 ` [PATCH v6 13/20] net: eth-uclass: Do not set device on error Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:58 ` [PATCH v6 14/20] dm: pci: Update error handling in pci_sriov_init Michal Suchanek
2022-10-12 22:14 ` Simon Glass
2022-10-12 19:58 ` [PATCH v6 15/20] mpc83xx: gazerbeam: Update sysinfo_get error handling Michal Suchanek
2022-10-12 22:14 ` Simon Glass
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:58 ` [PATCH v6 16/20] dm: core: Switch uclass_foreach_dev_probe to use simple iterator Michal Suchanek
2022-10-12 22:14 ` Simon Glass
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:58 ` [PATCH v6 17/20] dm: core: Switch uclass_*_device_err to use uclass_*_device_check Michal Suchanek
2022-10-17 21:29 ` Simon Glass
2022-10-12 19:58 ` [PATCH v6 18/20] dm: core: Non-activated device may be returned from uclass iterators that provide error handling Michal Suchanek
2022-10-12 22:14 ` Simon Glass
2022-10-12 19:58 ` [PATCH v6 19/20] dm: treewide: Do not use the return value of simple uclass iterator Michal Suchanek
2022-10-12 19:58 ` [PATCH v6 20/20] dm: core: Do not stop uclass iteration on error Michal Suchanek
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=20221010194920.GW28810@kitsune.suse.cz \
--to=msuchanek@suse.de \
--cc=bmeng.cn@gmail.com \
--cc=sjg@chromium.org \
--cc=sr@denx.de \
--cc=takahiro.akashi@linaro.org \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox