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 20:15:42 +0200 [thread overview]
Message-ID: <20101127181541.GC14385@redhat.com> (raw)
In-Reply-To: <20101127174726.GA15238@morn.localdomain>
On Sat, Nov 27, 2010 at 12:47:26PM -0500, Kevin O'Connor wrote:
> On Sat, Nov 27, 2010 at 07:06:19PM +0200, Gleb Natapov wrote:
> > 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:
> > > > 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.
>
> Thinking about this further - since the optionrom must be 2k aligned
> there are only 96 spots a rom can be in. So, it should be simple to
> just have optionrom_setup() declare a "u16 romaddr_to_bdf[96]".
>
That will work too.
> > > > > 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.
> > >
> > > 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.
>
> I don't think seabios should try to parse the path. Instead, I think
> seabios should build a name for each device it finds using the same
> algorithm that qemu uses and then just do a string compare to see if
> there is a match.
>
> Also, if qemu wants seabios to boot from a rom, I think it should tell
> seabios that - something like "/pci@i0cf8/rom@4.0/bcv@0" to mean make
> the drive declared by the rom on pci device 4 function 0 in the first
> found bcv the c: drive.
>
Qemu does not know that Seabios needs optionrom to boot from a device.
It knows even less about bcvs in option rom. Qemu knows about device
itself, not how firmware boots from it.
> > 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.
>
> I'm okay with adding scsi support to seabios. However, the problem
> doesn't go away as network booting still requires a rom.
But bev can be only one, so we do not have this problem with bev. Boot
priority of a bev is boot priority of pci device it was loaded from.
>
> > > > 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.
>
> I'm confused by this. SeaBIOS can't boot the device in this situation
> - it can only run a rom. I think qemu should try to send info on
> which rom to run, not which device to boot. Each rom is uniquely
> identifiable by the pci device it came from (or fw_cfg slot), and each
> BCV can be identified by either its instance or its product name.
>
For Qemu those optionroms are just binary blobs. It doesn't know why they
are needed at all (there is no difference for qemu between vga rom and
e1000 rom).
BTW are you actually aware of any option rom with multiple BCVs and, if
yes, how those BCVs differ?
--
Gleb.
next prev parent reply other threads:[~2010-11-27 18:15 UTC|newest]
Thread overview: 69+ 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 ` [PATCHv6 01/16] Introduce fw_name field to DeviceInfo structure 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 ` [PATCHv6 03/16] Keep track of ISA ports ISA device is using in qdev 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 ` [PATCHv6 05/16] Store IDE bus id in IDEBus structure for easy access 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 ` [PATCHv6 07/16] Add get_dev_path callback for system bus 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 ` [PATCHv6 09/16] Record which USBDevice USBPort belongs too 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 ` [PATCHv6 11/16] Add get_dev_path callback to scsi bus Gleb Natapov
2010-11-17 16:43 ` [PATCHv6 12/16] Add bootindex parameter to net/block/fd device 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 ` [PATCHv6 14/16] Add bootindex for option roms 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 ` [PATCHv6 16/16] Pass boot device list to firmware Gleb Natapov
2010-11-23 15:31 ` [PATCHv6 00/16] boot order specification Gleb Natapov
2010-11-23 16:12 ` Anthony Liguori
2010-11-23 19:30 ` Blue Swirl
2010-11-27 20:56 ` Avi Kivity
2010-11-28 7:54 ` Gleb Natapov
2010-11-28 9:38 ` Avi Kivity
2010-11-28 9:47 ` Gleb Natapov
2010-11-28 12:39 ` Blue Swirl
2010-11-28 13:03 ` Gleb Natapov
2010-11-28 13:13 ` Michael S. Tsirkin
2010-11-28 13:19 ` Gleb Natapov
2010-11-28 13:22 ` Blue Swirl
2010-11-28 17:02 ` Michael S. Tsirkin
2010-11-28 17:23 ` Michael S. Tsirkin
2010-11-28 18:54 ` Gleb Natapov
2010-11-28 19:09 ` Michael S. Tsirkin
2010-11-28 19:20 ` Gleb Natapov
2010-11-28 13:25 ` Gleb Natapov
2010-11-24 1:19 ` Kevin O'Connor
2010-11-24 10:03 ` Gleb Natapov
2010-11-27 15:41 ` Kevin O'Connor
2010-11-27 16:22 ` Gleb Natapov
2010-11-27 16:49 ` Kevin O'Connor
2010-11-27 17:06 ` Gleb Natapov
2010-11-27 17:47 ` Kevin O'Connor
2010-11-27 18:15 ` Gleb Natapov [this message]
2010-11-27 18:40 ` Kevin O'Connor
2010-11-27 19:04 ` Gleb Natapov
2010-11-27 21:07 ` Kevin O'Connor
2010-11-28 7:45 ` Gleb Natapov
2010-11-28 17:15 ` Kevin O'Connor
2010-11-28 18:47 ` Gleb Natapov
2010-11-28 19:11 ` [SeaBIOS] " Peter Stuge
2010-11-28 19:52 ` Gleb Natapov
2010-11-30 1:34 ` Kevin O'Connor
2010-11-30 14:01 ` Gleb Natapov
2010-12-01 2:53 ` Kevin O'Connor
2010-12-01 12:27 ` Gleb Natapov
2010-12-02 2:25 ` Kevin O'Connor
2010-12-02 12:30 ` Gleb Natapov
2010-12-02 15:07 ` [SeaBIOS] " Peter Stuge
2010-12-02 17:13 ` Gleb Natapov
2010-12-02 21:22 ` Sebastian Herbszt
2010-12-03 2:01 ` Kevin O'Connor
2010-12-03 5:55 ` Gleb Natapov
2010-11-29 10:50 ` Gerd Hoffmann
2010-11-30 1:55 ` Kevin O'Connor
2010-11-30 14:59 ` Gleb Natapov
2010-11-28 19:00 ` [SeaBIOS] " Peter Stuge
2010-11-28 19:16 ` Gleb Natapov
2010-11-29 10:19 ` Gerd Hoffmann
2010-11-29 12:07 ` 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=20101127181541.GC14385@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox