All of lore.kernel.org
 help / color / mirror / Atom feed
From: AKASHI Takahiro <takahiro.akashi@linaro.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 2/3] efi_loader: enumerate disk devices every time
Date: Thu, 10 Jan 2019 17:02:17 +0900	[thread overview]
Message-ID: <20190110080216.GE20286@linaro.org> (raw)
In-Reply-To: <4aadc6a4-42e0-eabb-5768-b8732fe9c47e@suse.de>

On Thu, Jan 10, 2019 at 08:30:13AM +0100, Alexander Graf wrote:
> 
> 
> On 10.01.19 08:26, AKASHI Takahiro wrote:
> > Alex,
> > 
> > On Thu, Jan 10, 2019 at 07:21:12AM +0100, Alexander Graf wrote:
> >>
> >>
> >> On 10.01.19 03:13, AKASHI Takahiro wrote:
> >>> Alex,
> >>>
> >>> On Wed, Jan 09, 2019 at 10:06:16AM +0100, Alexander Graf wrote:
> >>>>
> >>>>
> >>>> On 13.12.18 08:58, AKASHI Takahiro wrote:
> >>>>> Heinrich,
> >>>>>
> >>>>> On Tue, Dec 11, 2018 at 08:55:41PM +0100, Heinrich Schuchardt wrote:
> >>>>>> On 11/15/18 5:58 AM, AKASHI Takahiro wrote:
> >>>>>>> Currently, efi_init_obj_list() scan disk devices only once, and never
> >>>>>>> change a list of efi disk devices. This will possibly result in failing
> >>>>>>> to find a removable storage which may be added later on. See [1].
> >>>>>>>
> >>>>>>> In this patch, called is efi_disk_update() which is responsible for
> >>>>>>> re-scanning UCLASS_BLK devices and removing/adding efi disks if necessary.
> >>>>>>>
> >>>>>>> For example,
> >>>>>>>
> >>>>>>> => efishell devices
> >>>>>>> Scanning disk pci_mmc.blk...
> >>>>>>> Found 3 disks
> >>>>>>> Device Name
> >>>>>>> ============================================
> >>>>>>> /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)
> >>>>>>> /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/SD(0)/SD(0)
> >>>>>>> /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/SD(0)/SD(0)/HD(2,MBR,0x086246ba,0x40800,0x3f800)
> >>>>>>> => usb start
> >>>>>>> starting USB...
> >>>>>>> USB0:   USB EHCI 1.00
> >>>>>>> scanning bus 0 for devices... 3 USB Device(s) found
> >>>>>>>        scanning usb for storage devices... 1 Storage Device(s) found
> >>>>>>> => efishell devices
> >>>>>>> Scanning disk usb_mass_storage.lun0...
> >>>>>>> Device Name
> >>>>>>> ============================================
> >>>>>>> /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)
> >>>>>>> /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/SD(0)/SD(0)
> >>>>>>> /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/SD(0)/SD(0)/HD(2,MBR,0x086246ba,0x40800,0x3f800)
> >>>>>>> /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/USBClass(0,0,9,0,1)/USBClass(46f4,1,0,0,0)/HD(1,0x01,0,0x40,0x14fe4c)
> >>>>>>>
> >>>>>>> Without this patch, the last device, USB mass storage, won't show up.
> >>>>>>>
> >>>>>>> [1] https://lists.denx.de/pipermail/u-boot/2018-October/345307.html
> >>>>>>>
> >>>>>>> Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
> >>>>>>
> >>>>>> Why should we try to fix something in the EFI subsystems that goes wrong
> >>>>>> in the handling of device enumeration.
> >>>>>
> >>>>> No.
> >>>>> This is a natural result from how efi disks are currently implemented on u-boot.
> >>>>> Do you want to totally re-write/re-implement efi disks?
> >>>>
> >>>> Could we just make this event based for now? Call a hook from the
> >>>> storage dm subsystem when a new u-boot block device gets created to
> >>>> issue a sync of that in the efi subsystem?
> >>>
> >>> If I correctly understand you, your suggestion here corresponds
> >>> with my proposal#3 in [1] while my current approach is #2.
> >>>
> >>> [1] https://lists.denx.de/pipermail/u-boot/2018-October/345307.html
> >>
> >> Yes, I think so.
> >>
> >>> So we will call, say, efi_disk_create(struct udevice *) in
> >>> blk_create_device() and efi_dsik_delete() in blk_unbind_all().
> >>
> >> I would prefer if we didn't call them directly, but through an event
> >> mechanism. So the efi_disk subsystem registers an event with the dm
> >> block subsystem and that will just call all events when block devices
> >> get created which will automatically also include the efi disk creation
> >> callback. Same for reverse.
> > 
> > Do you mean efi event by "event?"
> > (I don't think there is any generic event interface on DM side.)
> > 
> > Whatever an "event" is or whether we call efi_disk_create() directly
> > or indirectly via an event, there is one (big?) issue in this approach
> > (while I've almost finished prototyping):
> > 
> > We cannot call efi_disk_create() within blk_create_device() because
> > some data fields of struct blk_desc, which are to be used by efi disk,
> > are initialized *after* blk_create_device() in driver side.
> > 
> > So we need to add a hook at/after every occurrence of blk_create_device()
> > on driver side. For example,
> > 
> > === drivers/scsi/scsi.c ===
> > int do_scsi_scan_one(struct udevice *dev, int id, int lun, bool verbose)
> > {
> > 	...
> > 	ret = blk_create_devicef(dev, "scsi_blk", str, IF_TYPE_SCSI, -1,
> > 				   bd.blksz, bd.lba, &bdev);
> > 	...
> > 	bdesc = dev_get_uclass_platdata(bdev);
> > 	bdesc->target = id;
> > 	bdesc->lun = lun;
> > 	...
> > 
> > 	/*
> > 	 * We need have efi_disk_create() called here because bdesc->target
> > 	 * and lun will be used by dp helpers in efi_disk_add_dev().
> > 	 */
> > 	efi_disk_create(bdev);
> > }
> > 
> > int scsi_scan_dev(struct udevice *dev, bool verbose)
> > {
> >         for (i = 0; i < uc_plat->max_id; i++)
> >                 for (lun = 0; lun < uc_plat->max_lun; lun++)
> >                         do_scsi_scan_one(dev, i, lun, verbose);
> > 	...
> > }
> > 
> > int scsi_scan(bool verbose)
> > {
> > 	ret = uclass_get(UCLASS_SCSI, &uc);
> > 	...
> >         uclass_foreach_dev(dev, uc)
> >                 ret = scsi_scan_dev(dev, verbose);
> > 	...
> > }
> > === ===
> > 
> > Since scsn_scan() can be directly called by "scsi rescan" command,
> > There seems to be no generic hook, or event, available in order to
> > call efi_disk_create().
> > 
> > Do I miss anything?
> 
> Could the event handler that gets called from somewhere around
> blk_create_device() just put it into an efi internal "todo list" which
> we then process using an efi event?
> 
> EFI events will only get triggered on the next entry to efi land, so by
> then we should be safe.

I think I now understand your suggestion; we are going to invent
a specialized event-queuing mechanism so that we can take any actions
later at appropriate time (probably in efi_init_obj_list()?).

But if so, it's not much different from my current approach where
a list of efi disks are updated in efi_init_obj_list() :)

-Takahiro Akashi


> 
> Alex

  reply	other threads:[~2019-01-10  8:02 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-15  4:58 [U-Boot] [PATCH v2 0/3] efi_loader: add removable device support AKASHI Takahiro
2018-11-15  4:58 ` [U-Boot] [PATCH v2 1/3] efi_loader: export efi_locate_handle() function AKASHI Takahiro
2018-11-15  4:58 ` [U-Boot] [PATCH v2 2/3] efi_loader: enumerate disk devices every time AKASHI Takahiro
2018-12-11 19:55   ` Heinrich Schuchardt
2018-12-13  7:58     ` AKASHI Takahiro
2019-01-09  1:05       ` AKASHI Takahiro
2019-01-09  9:06       ` Alexander Graf
2019-01-10  2:13         ` AKASHI Takahiro
2019-01-10  6:21           ` Alexander Graf
2019-01-10  7:26             ` AKASHI Takahiro
2019-01-10  7:30               ` Alexander Graf
2019-01-10  8:02                 ` AKASHI Takahiro [this message]
2019-01-10  8:15                   ` Alexander Graf
2019-01-10  9:16                     ` AKASHI Takahiro
2019-01-10  9:22                       ` Alexander Graf
2019-01-10 19:22                         ` Heinrich Schuchardt
2019-01-11  5:08                           ` AKASHI Takahiro
2019-01-11  4:29                         ` AKASHI Takahiro
2019-01-11  7:57                           ` Alexander Graf
2019-01-12 21:32                             ` Simon Glass
2019-01-12 22:00                               ` Alexander Graf
2019-01-16 21:34                                 ` Simon Glass
2019-01-22  8:29                             ` AKASHI Takahiro
2019-01-22  9:08                               ` Alexander Graf
2019-01-22 19:39                                 ` Simon Glass
2019-01-22 21:04                                   ` Heinrich Schuchardt
2019-01-23  8:06                                     ` AKASHI Takahiro
2019-01-23 21:58                                     ` Simon Glass
2019-01-24  0:53                                       ` AKASHI Takahiro
2019-01-24 20:18                                         ` Simon Glass
2019-01-24 21:19                                           ` Heinrich Schuchardt
2019-01-25  2:27                                             ` AKASHI Takahiro
2019-01-23  9:51                                   ` Alexander Graf
2019-01-23 22:01                                     ` Simon Glass
2019-01-25  8:27                                     ` AKASHI Takahiro
2019-01-25  8:52                                       ` Alexander Graf
2019-01-25  9:18                                         ` AKASHI Takahiro
2019-01-25  9:31                                           ` Alexander Graf
2019-01-28  8:56                                             ` AKASHI Takahiro
2019-01-28  9:36                                               ` Alexander Graf
2019-01-29  0:46                                               ` Simon Glass
2019-01-29  1:22                                                 ` AKASHI Takahiro
2019-01-23  8:12                                 ` AKASHI Takahiro
2019-01-23  9:30                                   ` Alexander Graf
2019-01-10 12:57         ` Simon Glass
2019-01-11  4:51           ` AKASHI Takahiro
2019-01-11  8:00             ` Alexander Graf
2019-01-11 13:03               ` Mark Kettenis
2018-11-15  4:58 ` [U-Boot] [PATCH v2 3/3] efi_loader: remove block device details from efi file AKASHI Takahiro
2019-01-09  9:18   ` Alexander Graf
2019-01-10  0:37     ` AKASHI Takahiro
2019-01-10  6:22       ` Alexander Graf
2019-01-10  6:36         ` AKASHI Takahiro

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=20190110080216.GE20286@linaro.org \
    --to=takahiro.akashi@linaro.org \
    --cc=u-boot@lists.denx.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 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.