All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gleb Natapov <gleb@redhat.com>
To: "Kevin O'Connor" <kevin@koconnor.net>
Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org, blauwirbel@gmail.com,
	armbru@redhat.com, alex.williamson@redhat.com, mst@redhat.com,
	Anthony Liguori <aliguori@us.ibm.com>
Subject: Re: [PATCHv6 00/16] boot order specification
Date: Sat, 27 Nov 2010 19:06:19 +0200	[thread overview]
Message-ID: <20101127170619.GB14385@redhat.com> (raw)
In-Reply-To: <20101127164939.GA13605@morn.localdomain>

On Sat, Nov 27, 2010 at 11:49:39AM -0500, Kevin O'Connor wrote:
> On Sat, Nov 27, 2010 at 06:22:16PM +0200, Gleb Natapov wrote:
> > On Sat, Nov 27, 2010 at 10:41:10AM -0500, Kevin O'Connor wrote:
> > > On Wed, Nov 24, 2010 at 12:03:11PM +0200, Gleb Natapov wrote:
> > > > BEV should be easy. When you register BEV found on pci card you search
> > > > for device path to that pci card to determine BEV's boot order.
> > > 
> > > SeaBIOS has two separate optionrom passes - one to extract the roms
> > > from the cards and one to find BEVs and BCVs.  In order to correlate a
> > > rom to a pci device SeaBIOS would have to keep track of each rom it
> > > deploys and then correlate it during the BEV/BCV scan.
> > > 
> > Yeah. I looked at the Seabios code. The simplest would be to change
> > device path to point to rom instead of pci device.  So if there is device
> > path /pci@i0cf8/ethernet@3 when rom is copied into the memory the path
> > is changed to be /rom@addr where addr is memory address where rom was
> > copied.
> 
> Seabios would change its local copy of the path?
> 
Yes.

> [...]
> > > How will seabios even know it's a SCSI card?  All seabios sees is a
> > > PCI device with a valid option rom bar.  Further, I don't see how
> > > seabios will know which BCV is which lun.
> > > 
> > Seabios knows that this is SCSI card from its device class.
> 
> I assume "ethernet" would be from device class as well?
> 
Yes.

> This seems fragile - it would require seabios to keep a list of device
> classes to name mappings, and a user may not be able to boot from a
> device if seabios isn't programmed for it (eg, a passthrough device).
> 
Seabios can ignore device name from device path since the same
information is present in pci config space of the device. So the device path
can be /pci@i0cf8/scis@4 or /pci@i0cf8/@4 Seabios can detect that device
is scsi just by looking at config space of pci device in slot 4 function 0.

For, scsi I think, proper solution would be to have Seabios support for
scsi controller emulated by qemu. This will make all devices bootable from
BCV known to Seabios and will not require option rom. The only problem
then will be with pass through devices, but since now only the whole
scsi controller can be passed through not individual targets qemu can
point device path only to the controller and not individual targets too.

> > Unfortunately it looks like bcv does not provide enough info to know what
> > target it corresponds too. I can't think of enything smart we can do
> > here, so lets just treat all bcvs as same priority.
> 
> There's the product name and there's the order it was registered in
> (ie, the third bcv on the rom).
Doesn't help much if we can't correlate bcv to device path.

> 
> [...]
> > > > That just broken optionrom. I can't see how we can solve this without
> > > > communicating with such optionrom and letting it know what device we
> > > > want to boot from.
> > > 
> > > I wouldn't call it broken as the BIOS Boot Spec (BBS) specifically
> > > states that optionroms can do this.  I don't know how many roms
> > > actually do it.
> > > 
> > BSS tries to documents things post factum. I hope it doesn't encourage
> > this type of option roms. But how it works if we have two scsi cards
> > both have same option rom and each one of them tries to register bcv for
> > all scsi card it found. Won't we have two bcvs registered for each scsi
> > car then?
> 
> First optionrom finds all devices for that type of scsi card.  Second
> optionrom detects that its drives have already been probed and resizes
> itself to zero.
> 
> > > The BCV and BEVs have a "product name string" that could be used to
> > > identify which one to boot.  Unfortunately, there isn't a good way for
> > > qemu to find these strings (though maybe it could just hard code them
> > > for roms it ships with).  SeaBIOS does show them in the boot menu, so
> > > a user could manually copy them to a command line.
> > > 
> > Two disks can have same product name no? And qemu can't even know
> > product names for pass through devices. Also I wouldn't worry about
> > optioroms qemu ships. We can fix those.
> 
> The product name is supposed to be unique.  From the spec:
> 
>   The data within each header must be valid. Especially the `BCV' and
>   `Pointer to Product Name String' fields. The BCV should point to a
>   procedure that installs only that device into INT 13h services. It
>   is strongly recommended that the Product Name String for each header
>   uniquely identify the device to which that header belongs, so that
>   when these strings are displayed to the user in a menu, the user can
>   intelligently recognize and choose devices connected to that
>   controller without having to open up the computer.
> 
The spec is "strongly recommended", not requires, but I guess if product
violates this recommendation it will have the same problem on real HW
too.

--
			Gleb.

WARNING: multiple messages have this Message-ID (diff)
From: Gleb Natapov <gleb@redhat.com>
To: Kevin O'Connor <kevin@koconnor.net>
Cc: Anthony Liguori <aliguori@us.ibm.com>,
	kvm@vger.kernel.org, mst@redhat.com, qemu-devel@nongnu.org,
	armbru@redhat.com, blauwirbel@gmail.com,
	alex.williamson@redhat.com
Subject: [Qemu-devel] Re: [PATCHv6 00/16] boot order specification
Date: Sat, 27 Nov 2010 19:06:19 +0200	[thread overview]
Message-ID: <20101127170619.GB14385@redhat.com> (raw)
In-Reply-To: <20101127164939.GA13605@morn.localdomain>

On Sat, Nov 27, 2010 at 11:49:39AM -0500, Kevin O'Connor wrote:
> On Sat, Nov 27, 2010 at 06:22:16PM +0200, Gleb Natapov wrote:
> > On Sat, Nov 27, 2010 at 10:41:10AM -0500, Kevin O'Connor wrote:
> > > On Wed, Nov 24, 2010 at 12:03:11PM +0200, Gleb Natapov wrote:
> > > > BEV should be easy. When you register BEV found on pci card you search
> > > > for device path to that pci card to determine BEV's boot order.
> > > 
> > > SeaBIOS has two separate optionrom passes - one to extract the roms
> > > from the cards and one to find BEVs and BCVs.  In order to correlate a
> > > rom to a pci device SeaBIOS would have to keep track of each rom it
> > > deploys and then correlate it during the BEV/BCV scan.
> > > 
> > Yeah. I looked at the Seabios code. The simplest would be to change
> > device path to point to rom instead of pci device.  So if there is device
> > path /pci@i0cf8/ethernet@3 when rom is copied into the memory the path
> > is changed to be /rom@addr where addr is memory address where rom was
> > copied.
> 
> Seabios would change its local copy of the path?
> 
Yes.

> [...]
> > > How will seabios even know it's a SCSI card?  All seabios sees is a
> > > PCI device with a valid option rom bar.  Further, I don't see how
> > > seabios will know which BCV is which lun.
> > > 
> > Seabios knows that this is SCSI card from its device class.
> 
> I assume "ethernet" would be from device class as well?
> 
Yes.

> This seems fragile - it would require seabios to keep a list of device
> classes to name mappings, and a user may not be able to boot from a
> device if seabios isn't programmed for it (eg, a passthrough device).
> 
Seabios can ignore device name from device path since the same
information is present in pci config space of the device. So the device path
can be /pci@i0cf8/scis@4 or /pci@i0cf8/@4 Seabios can detect that device
is scsi just by looking at config space of pci device in slot 4 function 0.

For, scsi I think, proper solution would be to have Seabios support for
scsi controller emulated by qemu. This will make all devices bootable from
BCV known to Seabios and will not require option rom. The only problem
then will be with pass through devices, but since now only the whole
scsi controller can be passed through not individual targets qemu can
point device path only to the controller and not individual targets too.

> > Unfortunately it looks like bcv does not provide enough info to know what
> > target it corresponds too. I can't think of enything smart we can do
> > here, so lets just treat all bcvs as same priority.
> 
> There's the product name and there's the order it was registered in
> (ie, the third bcv on the rom).
Doesn't help much if we can't correlate bcv to device path.

> 
> [...]
> > > > That just broken optionrom. I can't see how we can solve this without
> > > > communicating with such optionrom and letting it know what device we
> > > > want to boot from.
> > > 
> > > I wouldn't call it broken as the BIOS Boot Spec (BBS) specifically
> > > states that optionroms can do this.  I don't know how many roms
> > > actually do it.
> > > 
> > BSS tries to documents things post factum. I hope it doesn't encourage
> > this type of option roms. But how it works if we have two scsi cards
> > both have same option rom and each one of them tries to register bcv for
> > all scsi card it found. Won't we have two bcvs registered for each scsi
> > car then?
> 
> First optionrom finds all devices for that type of scsi card.  Second
> optionrom detects that its drives have already been probed and resizes
> itself to zero.
> 
> > > The BCV and BEVs have a "product name string" that could be used to
> > > identify which one to boot.  Unfortunately, there isn't a good way for
> > > qemu to find these strings (though maybe it could just hard code them
> > > for roms it ships with).  SeaBIOS does show them in the boot menu, so
> > > a user could manually copy them to a command line.
> > > 
> > Two disks can have same product name no? And qemu can't even know
> > product names for pass through devices. Also I wouldn't worry about
> > optioroms qemu ships. We can fix those.
> 
> The product name is supposed to be unique.  From the spec:
> 
>   The data within each header must be valid. Especially the `BCV' and
>   `Pointer to Product Name String' fields. The BCV should point to a
>   procedure that installs only that device into INT 13h services. It
>   is strongly recommended that the Product Name String for each header
>   uniquely identify the device to which that header belongs, so that
>   when these strings are displayed to the user in a menu, the user can
>   intelligently recognize and choose devices connected to that
>   controller without having to open up the computer.
> 
The spec is "strongly recommended", not requires, but I guess if product
violates this recommendation it will have the same problem on real HW
too.

--
			Gleb.

  reply	other threads:[~2010-11-27 17:06 UTC|newest]

Thread overview: 136+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-17 16:43 [PATCHv6 00/16] boot order specification Gleb Natapov
2010-11-17 16:43 ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 01/16] Introduce fw_name field to DeviceInfo structure Gleb Natapov
2010-11-17 16:43   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 02/16] Introduce new BusInfo callback get_fw_dev_path Gleb Natapov
2010-11-17 16:43   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 03/16] Keep track of ISA ports ISA device is using in qdev Gleb Natapov
2010-11-17 16:43   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 04/16] Add get_fw_dev_path callback to ISA bus " Gleb Natapov
2010-11-17 16:43   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 05/16] Store IDE bus id in IDEBus structure for easy access Gleb Natapov
2010-11-17 16:43   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 06/16] Add get_fw_dev_path callback to IDE bus Gleb Natapov
2010-11-17 16:43   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 07/16] Add get_dev_path callback for system bus Gleb Natapov
2010-11-17 16:43   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 08/16] Add get_fw_dev_path callback for pci bus Gleb Natapov
2010-11-17 16:43   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 09/16] Record which USBDevice USBPort belongs too Gleb Natapov
2010-11-17 16:43   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 10/16] Add get_dev_path callback for usb bus Gleb Natapov
2010-11-17 16:43   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 11/16] Add get_dev_path callback to scsi bus Gleb Natapov
2010-11-17 16:43   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 12/16] Add bootindex parameter to net/block/fd device Gleb Natapov
2010-11-17 16:43   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:44 ` [PATCHv6 13/16] Change fw_cfg_add_file() to get full file path as a parameter Gleb Natapov
2010-11-17 16:44   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:44 ` [PATCHv6 14/16] Add bootindex for option roms Gleb Natapov
2010-11-17 16:44   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:44 ` [PATCHv6 15/16] Add notifier that will be called when machine is fully created Gleb Natapov
2010-11-17 16:44   ` [Qemu-devel] " Gleb Natapov
2010-11-17 16:44 ` [PATCHv6 16/16] Pass boot device list to firmware Gleb Natapov
2010-11-17 16:44   ` [Qemu-devel] " Gleb Natapov
2010-11-23 15:31 ` [PATCHv6 00/16] boot order specification Gleb Natapov
2010-11-23 15:31   ` [Qemu-devel] " Gleb Natapov
2010-11-23 16:12   ` Anthony Liguori
2010-11-23 16:12     ` [Qemu-devel] " Anthony Liguori
2010-11-23 19:30     ` Blue Swirl
2010-11-23 19:30       ` [Qemu-devel] " Blue Swirl
2010-11-27 20:56     ` Avi Kivity
2010-11-27 20:56       ` [Qemu-devel] " Avi Kivity
2010-11-28  7:54       ` Gleb Natapov
2010-11-28  7:54         ` [Qemu-devel] " Gleb Natapov
2010-11-28  9:38         ` Avi Kivity
2010-11-28  9:38           ` [Qemu-devel] " Avi Kivity
2010-11-28  9:47           ` Gleb Natapov
2010-11-28  9:47             ` [Qemu-devel] " Gleb Natapov
2010-11-28 12:39         ` Blue Swirl
2010-11-28 12:39           ` [Qemu-devel] " Blue Swirl
2010-11-28 13:03           ` Gleb Natapov
2010-11-28 13:03             ` [Qemu-devel] " Gleb Natapov
2010-11-28 13:13         ` Michael S. Tsirkin
2010-11-28 13:13           ` [Qemu-devel] " Michael S. Tsirkin
2010-11-28 13:19           ` Gleb Natapov
2010-11-28 13:19             ` [Qemu-devel] " Gleb Natapov
2010-11-28 13:22             ` Blue Swirl
2010-11-28 13:22               ` [Qemu-devel] " Blue Swirl
2010-11-28 17:02               ` Michael S. Tsirkin
2010-11-28 17:02                 ` [Qemu-devel] " Michael S. Tsirkin
2010-11-28 17:23             ` Michael S. Tsirkin
2010-11-28 17:23               ` [Qemu-devel] " Michael S. Tsirkin
2010-11-28 18:54               ` Gleb Natapov
2010-11-28 18:54                 ` [Qemu-devel] " Gleb Natapov
2010-11-28 19:09                 ` Michael S. Tsirkin
2010-11-28 19:09                   ` [Qemu-devel] " Michael S. Tsirkin
2010-11-28 19:20                   ` Gleb Natapov
2010-11-28 19:20                     ` [Qemu-devel] " Gleb Natapov
2010-11-28 13:25           ` Gleb Natapov
2010-11-28 13:25             ` [Qemu-devel] " Gleb Natapov
2010-11-24  1:19   ` Kevin O'Connor
2010-11-24  1:19     ` [Qemu-devel] " Kevin O'Connor
2010-11-24 10:03     ` Gleb Natapov
2010-11-24 10:03       ` [Qemu-devel] " Gleb Natapov
2010-11-27 15:41       ` Kevin O'Connor
2010-11-27 15:41         ` [Qemu-devel] " Kevin O'Connor
2010-11-27 16:22         ` Gleb Natapov
2010-11-27 16:22           ` [Qemu-devel] " Gleb Natapov
2010-11-27 16:49           ` Kevin O'Connor
2010-11-27 16:49             ` [Qemu-devel] " Kevin O'Connor
2010-11-27 17:06             ` Gleb Natapov [this message]
2010-11-27 17:06               ` Gleb Natapov
2010-11-27 17:47               ` Kevin O'Connor
2010-11-27 17:47                 ` [Qemu-devel] " Kevin O'Connor
2010-11-27 18:15                 ` Gleb Natapov
2010-11-27 18:15                   ` [Qemu-devel] " Gleb Natapov
2010-11-27 18:40                   ` Kevin O'Connor
2010-11-27 18:40                     ` [Qemu-devel] " Kevin O'Connor
2010-11-27 19:04                     ` Gleb Natapov
2010-11-27 19:04                       ` [Qemu-devel] " Gleb Natapov
2010-11-27 21:07                       ` Kevin O'Connor
2010-11-27 21:07                         ` [Qemu-devel] " Kevin O'Connor
2010-11-28  7:45                         ` Gleb Natapov
2010-11-28  7:45                           ` [Qemu-devel] " Gleb Natapov
2010-11-28 17:15                           ` Kevin O'Connor
2010-11-28 17:15                             ` [Qemu-devel] " Kevin O'Connor
2010-11-28 18:47                             ` Gleb Natapov
2010-11-28 18:47                               ` [Qemu-devel] " Gleb Natapov
2010-11-30  1:34                               ` Kevin O'Connor
2010-11-30 14:01                                 ` Gleb Natapov
2010-11-30 14:01                                   ` [Qemu-devel] " Gleb Natapov
2010-12-01  2:53                                   ` Kevin O'Connor
2010-12-01  2:53                                     ` [Qemu-devel] " Kevin O'Connor
2010-12-01 12:27                                     ` Gleb Natapov
2010-12-01 12:27                                       ` [Qemu-devel] " Gleb Natapov
2010-12-02  2:25                                       ` Kevin O'Connor
2010-12-02  2:25                                         ` [Qemu-devel] " Kevin O'Connor
2010-12-02 12:30                                         ` Gleb Natapov
2010-12-02 12:30                                           ` [Qemu-devel] " Gleb Natapov
2010-12-02 15:07                                           ` [SeaBIOS] " Peter Stuge
2010-12-02 15:07                                             ` [Qemu-devel] " Peter Stuge
2010-12-02 17:13                                             ` Gleb Natapov
2010-12-02 17:13                                               ` [Qemu-devel] " Gleb Natapov
2010-12-02 21:22                                           ` Sebastian Herbszt
2010-12-02 21:22                                             ` [Qemu-devel] " Sebastian Herbszt
2010-12-03  2:01                                           ` Kevin O'Connor
2010-12-03  2:01                                             ` [Qemu-devel] " Kevin O'Connor
2010-12-03  5:55                                             ` Gleb Natapov
2010-12-03  5:55                                               ` [Qemu-devel] " Gleb Natapov
2010-11-29 10:50                             ` Gerd Hoffmann
2010-11-29 10:50                               ` [Qemu-devel] " Gerd Hoffmann
2010-11-30  1:55                               ` Kevin O'Connor
2010-11-30 14:59                                 ` Gleb Natapov
2010-11-30 14:59                                   ` [Qemu-devel] " Gleb Natapov
2010-11-28 19:00                           ` [SeaBIOS] " Peter Stuge
2010-11-28 19:00                             ` [Qemu-devel] " Peter Stuge
2010-11-28 19:11                             ` Peter Stuge
2010-11-28 19:11                               ` [Qemu-devel] " Peter Stuge
2010-11-28 19:52                               ` Gleb Natapov
2010-11-28 19:52                                 ` [Qemu-devel] " Gleb Natapov
2010-11-28 19:16                             ` Gleb Natapov
2010-11-28 19:16                               ` [Qemu-devel] " Gleb Natapov
2010-11-29 10:19                     ` Gerd Hoffmann
2010-11-29 10:19                       ` [Qemu-devel] " Gerd Hoffmann
2010-11-29 12:07                       ` Gleb Natapov
2010-11-29 12:07                         ` [Qemu-devel] " Gleb Natapov

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=20101127170619.GB14385@redhat.com \
    --to=gleb@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=armbru@redhat.com \
    --cc=blauwirbel@gmail.com \
    --cc=kevin@koconnor.net \
    --cc=kvm@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.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.