All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] Re: qdev property bug?
       [not found]         ` <4B261082.4030806@redhat.com>
@ 2009-12-14 10:59           ` Michael S. Tsirkin
  2009-12-14 11:55             ` Alexander Graf
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 10:59 UTC (permalink / raw)
  To: Gerd Hoffmann, Anthony Liguori; +Cc: glommer, qemu-devel, Sebastian Herbszt

On Mon, Dec 14, 2009 at 11:16:34AM +0100, Gerd Hoffmann wrote:
> On 12/14/09 10:44, Michael S. Tsirkin wrote:
>> No, it did not even start booting the kernel. Just gave me blank screen.
>
> [ testing ]
>
> Oh.  That is something completely different.  A bug in the rom loader.  
> It fails to fit both e1000 (default nic) and virtio-net boot roms into  
> the option rom area and bails out (before loading seabios).  vl.c  
> doesn't check the return value and happily continues (without bios).  
> Which doesn't work out very well ...
>
> With two identical nics the (single) rom fits and qemu boots.
>
> Hmm.  Of course vl.c must be fixed to check the return value.

Yes.

> Not sure how to deal with the rom size issue.  The gPXE roms look quit  
> big compared to the older roms we had.

Hmm, it's a regression then ...

> Do they have tons of features  
> compiled in?  Can we make them smaller by disabling some?  Or maybe have  
> *one* rom which supports *all* qemu nics?  It would be larger of course,  
> but assuming a big share of the option rom is non-hardware specific code  
> which wouldn't be duplicated in memory then with two different cards it  
> might work out nevertheless?

Haven't looked at the code at all yet.
I would expect common code with all the features to be part of PXE
code in BIOS, not part of option rom. Isn't this how it is structured?

>  Or add a nic property to disable rom 
> loading?

Yes, and I think it should be off by default.

> cheers,
>   Gerd

Cc qemu and other people who participated in a similar discussion
in the past.

-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 10:59           ` [Qemu-devel] Re: qdev property bug? Michael S. Tsirkin
@ 2009-12-14 11:55             ` Alexander Graf
  2009-12-14 13:24               ` Michael S. Tsirkin
  2009-12-14 14:10               ` Anthony Liguori
  0 siblings, 2 replies; 101+ messages in thread
From: Alexander Graf @ 2009-12-14 11:55 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: glommer, Sebastian Herbszt, Gerd Hoffmann, qemu-devel


Am 14.12.2009 um 11:59 schrieb "Michael S. Tsirkin" <mst@redhat.com>:

> On Mon, Dec 14, 2009 at 11:16:34AM +0100, Gerd Hoffmann wrote:
>> On 12/14/09 10:44, Michael S. Tsirkin wrote:
>>> No, it did not even start booting the kernel. Just gave me blank  
>>> screen.
>>
>> [ testing ]
>>
>> Oh.  That is something completely different.  A bug in the rom  
>> loader.
>> It fails to fit both e1000 (default nic) and virtio-net boot roms  
>> into
>> the option rom area and bails out (before loading seabios).  vl.c
>> doesn't check the return value and happily continues (without bios).
>> Which doesn't work out very well ...
>>
>> With two identical nics the (single) rom fits and qemu boots.
>>
>> Hmm.  Of course vl.c must be fixed to check the return value.
>
> Yes.
>
>> Not sure how to deal with the rom size issue.  The gPXE roms look  
>> quit
>> big compared to the older roms we had.
>
> Hmm, it's a regression then ...

How does real hw handle this? I'm pretty sure most servers these days  
use more option rom space than this. They usually have some onboard  
raid bios, external storage, on-board nic, pci nic, ...

So there must be some way to just have more option rom space.  
Implementing anything else would just be a waste of time. It'd break  
again when ppl do device assignment.

Alex

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 11:55             ` Alexander Graf
@ 2009-12-14 13:24               ` Michael S. Tsirkin
  2009-12-14 13:35                 ` Alexander Graf
  2009-12-14 14:10               ` Anthony Liguori
  1 sibling, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 13:24 UTC (permalink / raw)
  To: Alexander Graf; +Cc: glommer, Sebastian Herbszt, Gerd Hoffmann, qemu-devel

On Mon, Dec 14, 2009 at 12:55:28PM +0100, Alexander Graf wrote:
>
> Am 14.12.2009 um 11:59 schrieb "Michael S. Tsirkin" <mst@redhat.com>:
>
>> On Mon, Dec 14, 2009 at 11:16:34AM +0100, Gerd Hoffmann wrote:
>>> On 12/14/09 10:44, Michael S. Tsirkin wrote:
>>>> No, it did not even start booting the kernel. Just gave me blank  
>>>> screen.
>>>
>>> [ testing ]
>>>
>>> Oh.  That is something completely different.  A bug in the rom  
>>> loader.
>>> It fails to fit both e1000 (default nic) and virtio-net boot roms  
>>> into
>>> the option rom area and bails out (before loading seabios).  vl.c
>>> doesn't check the return value and happily continues (without bios).
>>> Which doesn't work out very well ...
>>>
>>> With two identical nics the (single) rom fits and qemu boots.
>>>
>>> Hmm.  Of course vl.c must be fixed to check the return value.
>>
>> Yes.
>>
>>> Not sure how to deal with the rom size issue.  The gPXE roms look  
>>> quit
>>> big compared to the older roms we had.
>>
>> Hmm, it's a regression then ...
>
> How does real hw handle this? I'm pretty sure most servers these days  
> use more option rom space than this. They usually have some onboard raid 
> bios, external storage, on-board nic, pci nic, ...

Real hardware might do several things I know about
- option rom is typically small.
- option rom is not loaded always (BIOS option), or not for all cards.
There are might be other tricks.

> So there must be some way to just have more option rom space.  

What do you mean?

> Implementing anything else would just be a waste of time. It'd break  
> again when ppl do device assignment.
>
> Alex

We need some solution for 0.12 though IMO.
This does not need to address device assignment,
but it must be simple.

-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 13:24               ` Michael S. Tsirkin
@ 2009-12-14 13:35                 ` Alexander Graf
  2009-12-14 14:01                   ` Michael S. Tsirkin
  2009-12-14 14:11                   ` Anthony Liguori
  0 siblings, 2 replies; 101+ messages in thread
From: Alexander Graf @ 2009-12-14 13:35 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Kevin O'Connor, Gerd Hoffmann,
	Sebastian Herbszt

Michael S. Tsirkin wrote:
> On Mon, Dec 14, 2009 at 12:55:28PM +0100, Alexander Graf wrote:
>   
>> Am 14.12.2009 um 11:59 schrieb "Michael S. Tsirkin" <mst@redhat.com>:
>>
>>     
>>> On Mon, Dec 14, 2009 at 11:16:34AM +0100, Gerd Hoffmann wrote:
>>>       
>>>> On 12/14/09 10:44, Michael S. Tsirkin wrote:
>>>>         
>>>>> No, it did not even start booting the kernel. Just gave me blank  
>>>>> screen.
>>>>>           
>>>> [ testing ]
>>>>
>>>> Oh.  That is something completely different.  A bug in the rom  
>>>> loader.
>>>> It fails to fit both e1000 (default nic) and virtio-net boot roms  
>>>> into
>>>> the option rom area and bails out (before loading seabios).  vl.c
>>>> doesn't check the return value and happily continues (without bios).
>>>> Which doesn't work out very well ...
>>>>
>>>> With two identical nics the (single) rom fits and qemu boots.
>>>>
>>>> Hmm.  Of course vl.c must be fixed to check the return value.
>>>>         
>>> Yes.
>>>
>>>       
>>>> Not sure how to deal with the rom size issue.  The gPXE roms look  
>>>> quit
>>>> big compared to the older roms we had.
>>>>         
>>> Hmm, it's a regression then ...
>>>       
>> How does real hw handle this? I'm pretty sure most servers these days  
>> use more option rom space than this. They usually have some onboard raid 
>> bios, external storage, on-board nic, pci nic, ...
>>     
>
> Real hardware might do several things I know about
> - option rom is typically small.
> - option rom is not loaded always (BIOS option), or not for all cards.
> There are might be other tricks.
>   

There are probably other tricks. I was booting up a machine that had
like 5 options roms going through their initialization that all weren't
exactly small.

>> So there must be some way to just have more option rom space.  
>>     
>
> What do you mean?
>   

Well, what's keeping us from having 5 MB of option roms?

>> Implementing anything else would just be a waste of time. It'd break  
>> again when ppl do device assignment.
>>
>> Alex
>>     
>
> We need some solution for 0.12 though IMO.
> This does not need to address device assignment,
> but it must be simple.
>   

Agreed. If there is a solution that gives us the chance to support an
arbitrary number of option roms that wouldn't take forever to implement,
I'd rather take that one though.

Alex

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 13:35                 ` Alexander Graf
@ 2009-12-14 14:01                   ` Michael S. Tsirkin
  2009-12-14 17:00                     ` Glauber Costa
  2009-12-14 14:11                   ` Anthony Liguori
  1 sibling, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 14:01 UTC (permalink / raw)
  To: Alexander Graf
  Cc: glommer, qemu-devel, Kevin O'Connor, Gerd Hoffmann,
	Sebastian Herbszt

On Mon, Dec 14, 2009 at 02:35:31PM +0100, Alexander Graf wrote:
> Michael S. Tsirkin wrote:
> > On Mon, Dec 14, 2009 at 12:55:28PM +0100, Alexander Graf wrote:
> >   
> >> Am 14.12.2009 um 11:59 schrieb "Michael S. Tsirkin" <mst@redhat.com>:
> >>
> >>     
> >>> On Mon, Dec 14, 2009 at 11:16:34AM +0100, Gerd Hoffmann wrote:
> >>>       
> >>>> On 12/14/09 10:44, Michael S. Tsirkin wrote:
> >>>>         
> >>>>> No, it did not even start booting the kernel. Just gave me blank  
> >>>>> screen.
> >>>>>           
> >>>> [ testing ]
> >>>>
> >>>> Oh.  That is something completely different.  A bug in the rom  
> >>>> loader.
> >>>> It fails to fit both e1000 (default nic) and virtio-net boot roms  
> >>>> into
> >>>> the option rom area and bails out (before loading seabios).  vl.c
> >>>> doesn't check the return value and happily continues (without bios).
> >>>> Which doesn't work out very well ...
> >>>>
> >>>> With two identical nics the (single) rom fits and qemu boots.
> >>>>
> >>>> Hmm.  Of course vl.c must be fixed to check the return value.
> >>>>         
> >>> Yes.
> >>>
> >>>       
> >>>> Not sure how to deal with the rom size issue.  The gPXE roms look  
> >>>> quit
> >>>> big compared to the older roms we had.
> >>>>         
> >>> Hmm, it's a regression then ...
> >>>       
> >> How does real hw handle this? I'm pretty sure most servers these days  
> >> use more option rom space than this. They usually have some onboard raid 
> >> bios, external storage, on-board nic, pci nic, ...
> >>     
> >
> > Real hardware might do several things I know about
> > - option rom is typically small.
> > - option rom is not loaded always (BIOS option), or not for all cards.
> > There are might be other tricks.
> >   
> 
> There are probably other tricks. I was booting up a machine that had
> like 5 options roms going through their initialization that all weren't
> exactly small.

This might boil down to better ROMs. E.g.
maybe they request memory with PMM and then give it up
after initialization?


> >> So there must be some way to just have more option rom space.  
> >>     
> >
> > What do you mean?
> >   
> 
> Well, what's keeping us from having 5 MB of option roms?
> 
> >> Implementing anything else would just be a waste of time. It'd break  
> >> again when ppl do device assignment.
> >>
> >> Alex
> >>     
> >
> > We need some solution for 0.12 though IMO.
> > This does not need to address device assignment,
> > but it must be simple.
> >   
> 
> Agreed. If there is a solution that gives us the chance to support an
> arbitrary number of option roms that wouldn't take forever to implement,
> I'd rather take that one though.
> 
> Alex

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 11:55             ` Alexander Graf
  2009-12-14 13:24               ` Michael S. Tsirkin
@ 2009-12-14 14:10               ` Anthony Liguori
  2009-12-14 14:52                 ` Gerd Hoffmann
  1 sibling, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-14 14:10 UTC (permalink / raw)
  To: Alexander Graf
  Cc: qemu-devel, glommer, Sebastian Herbszt, Gerd Hoffmann,
	Michael S. Tsirkin

The old behavior with two different nic types and -boot n was "undefined".

The old etherboot roms were quite large.  To large to fit more than one 
(certainly not two).

> How does real hw handle this? I'm pretty sure most servers these days 
> use more option rom space than this. They usually have some onboard 
> raid bios, external storage, on-board nic, pci nic, ...

You can disable rom loading for individual cards.

> So there must be some way to just have more option rom space. 
> Implementing anything else would just be a waste of time. It'd break 
> again when ppl do device assignment.

gPXE is freakishly large as far as option roms go :-)

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 14:11                   ` Anthony Liguori
@ 2009-12-14 14:11                     ` Michael S. Tsirkin
  2009-12-14 14:13                       ` Michael S. Tsirkin
                                         ` (2 more replies)
  0 siblings, 3 replies; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 14:11 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Mon, Dec 14, 2009 at 08:11:59AM -0600, Anthony Liguori wrote:
> Alexander Graf wrote:
>> Michael S. Tsirkin wrote:
>>   
>>> On Mon, Dec 14, 2009 at 12:55:28PM +0100, Alexander Graf wrote:
>>>       
>>>> Am 14.12.2009 um 11:59 schrieb "Michael S. Tsirkin" <mst@redhat.com>:
>>>>
>>>>           
>>>>> On Mon, Dec 14, 2009 at 11:16:34AM +0100, Gerd Hoffmann wrote:
>>>>>               
>>>>>> On 12/14/09 10:44, Michael S. Tsirkin wrote:
>>>>>>                   
>>>>>>> No, it did not even start booting the kernel. Just gave me 
>>>>>>> blank  screen.
>>>>>>>                       
>>>>>> [ testing ]
>>>>>>
>>>>>> Oh.  That is something completely different.  A bug in the rom  
>>>>>> loader.
>>>>>> It fails to fit both e1000 (default nic) and virtio-net boot 
>>>>>> roms  into
>>>>>> the option rom area and bails out (before loading seabios).  vl.c
>>>>>> doesn't check the return value and happily continues (without bios).
>>>>>> Which doesn't work out very well ...
>>>>>>
>>>>>> With two identical nics the (single) rom fits and qemu boots.
>>>>>>
>>>>>> Hmm.  Of course vl.c must be fixed to check the return value.
>>>>>>                   
>>>>> Yes.
>>>>>
>>>>>               
>>>>>> Not sure how to deal with the rom size issue.  The gPXE roms 
>>>>>> look  quit
>>>>>> big compared to the older roms we had.
>>>>>>                   
>>>>> Hmm, it's a regression then ...
>>>>>               
>>>> How does real hw handle this? I'm pretty sure most servers these 
>>>> days  use more option rom space than this. They usually have some 
>>>> onboard raid bios, external storage, on-board nic, pci nic, ...
>>>>           
>>> Real hardware might do several things I know about
>>> - option rom is typically small.
>>> - option rom is not loaded always (BIOS option), or not for all cards.
>>> There are might be other tricks.
>>>       
>>
>> There are probably other tricks. I was booting up a machine that had
>> like 5 options roms going through their initialization that all weren't
>> exactly small.
>>
>>   
>>>> So there must be some way to just have more option rom space.       
>>>>       
>>> What do you mean?
>>>       
>>
>> Well, what's keeping us from having 5 MB of option roms?
>>   
>
> For starters, option roms run in real mode when you only have 1MB of  
> addressable memory :-)
>
>>>> Implementing anything else would just be a waste of time. It'd 
>>>> break  again when ppl do device assignment.
>>>>
>>>> Alex
>>>>           
>>> We need some solution for 0.12 though IMO.
>>> This does not need to address device assignment,
>>> but it must be simple.
>>>       
>>
>> Agreed. If there is a solution that gives us the chance to support an
>> arbitrary number of option roms that wouldn't take forever to implement,
>> I'd rather take that one though.
>>   
>
> For 0.12, we just need to fail gracefully (meaning stop loading option  
> roms when we run out of room).  It's not a regression compared to 0.11.
>
> Regards,
>
> Anthony Liguori


Well I am pretty sure that I used virtio + e1000 with 0.11
and apparently I can't now.
So it does look like a regression to me ...


-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 13:35                 ` Alexander Graf
  2009-12-14 14:01                   ` Michael S. Tsirkin
@ 2009-12-14 14:11                   ` Anthony Liguori
  2009-12-14 14:11                     ` Michael S. Tsirkin
  1 sibling, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-14 14:11 UTC (permalink / raw)
  To: Alexander Graf
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

Alexander Graf wrote:
> Michael S. Tsirkin wrote:
>   
>> On Mon, Dec 14, 2009 at 12:55:28PM +0100, Alexander Graf wrote:
>>   
>>     
>>> Am 14.12.2009 um 11:59 schrieb "Michael S. Tsirkin" <mst@redhat.com>:
>>>
>>>     
>>>       
>>>> On Mon, Dec 14, 2009 at 11:16:34AM +0100, Gerd Hoffmann wrote:
>>>>       
>>>>         
>>>>> On 12/14/09 10:44, Michael S. Tsirkin wrote:
>>>>>         
>>>>>           
>>>>>> No, it did not even start booting the kernel. Just gave me blank  
>>>>>> screen.
>>>>>>           
>>>>>>             
>>>>> [ testing ]
>>>>>
>>>>> Oh.  That is something completely different.  A bug in the rom  
>>>>> loader.
>>>>> It fails to fit both e1000 (default nic) and virtio-net boot roms  
>>>>> into
>>>>> the option rom area and bails out (before loading seabios).  vl.c
>>>>> doesn't check the return value and happily continues (without bios).
>>>>> Which doesn't work out very well ...
>>>>>
>>>>> With two identical nics the (single) rom fits and qemu boots.
>>>>>
>>>>> Hmm.  Of course vl.c must be fixed to check the return value.
>>>>>         
>>>>>           
>>>> Yes.
>>>>
>>>>       
>>>>         
>>>>> Not sure how to deal with the rom size issue.  The gPXE roms look  
>>>>> quit
>>>>> big compared to the older roms we had.
>>>>>         
>>>>>           
>>>> Hmm, it's a regression then ...
>>>>       
>>>>         
>>> How does real hw handle this? I'm pretty sure most servers these days  
>>> use more option rom space than this. They usually have some onboard raid 
>>> bios, external storage, on-board nic, pci nic, ...
>>>     
>>>       
>> Real hardware might do several things I know about
>> - option rom is typically small.
>> - option rom is not loaded always (BIOS option), or not for all cards.
>> There are might be other tricks.
>>   
>>     
>
> There are probably other tricks. I was booting up a machine that had
> like 5 options roms going through their initialization that all weren't
> exactly small.
>
>   
>>> So there must be some way to just have more option rom space.  
>>>     
>>>       
>> What do you mean?
>>   
>>     
>
> Well, what's keeping us from having 5 MB of option roms?
>   

For starters, option roms run in real mode when you only have 1MB of 
addressable memory :-)

>>> Implementing anything else would just be a waste of time. It'd break  
>>> again when ppl do device assignment.
>>>
>>> Alex
>>>     
>>>       
>> We need some solution for 0.12 though IMO.
>> This does not need to address device assignment,
>> but it must be simple.
>>   
>>     
>
> Agreed. If there is a solution that gives us the chance to support an
> arbitrary number of option roms that wouldn't take forever to implement,
> I'd rather take that one though.
>   

For 0.12, we just need to fail gracefully (meaning stop loading option 
roms when we run out of room).  It's not a regression compared to 0.11.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 14:11                     ` Michael S. Tsirkin
@ 2009-12-14 14:13                       ` Michael S. Tsirkin
  2009-12-14 14:25                         ` Anthony Liguori
  2009-12-14 14:22                       ` Anthony Liguori
  2009-12-14 17:01                       ` Glauber Costa
  2 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 14:13 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Mon, Dec 14, 2009 at 04:11:43PM +0200, Michael S. Tsirkin wrote:
> On Mon, Dec 14, 2009 at 08:11:59AM -0600, Anthony Liguori wrote:
> > Alexander Graf wrote:
> >> Michael S. Tsirkin wrote:
> >>   
> >>> On Mon, Dec 14, 2009 at 12:55:28PM +0100, Alexander Graf wrote:
> >>>       
> >>>> Am 14.12.2009 um 11:59 schrieb "Michael S. Tsirkin" <mst@redhat.com>:
> >>>>
> >>>>           
> >>>>> On Mon, Dec 14, 2009 at 11:16:34AM +0100, Gerd Hoffmann wrote:
> >>>>>               
> >>>>>> On 12/14/09 10:44, Michael S. Tsirkin wrote:
> >>>>>>                   
> >>>>>>> No, it did not even start booting the kernel. Just gave me 
> >>>>>>> blank  screen.
> >>>>>>>                       
> >>>>>> [ testing ]
> >>>>>>
> >>>>>> Oh.  That is something completely different.  A bug in the rom  
> >>>>>> loader.
> >>>>>> It fails to fit both e1000 (default nic) and virtio-net boot 
> >>>>>> roms  into
> >>>>>> the option rom area and bails out (before loading seabios).  vl.c
> >>>>>> doesn't check the return value and happily continues (without bios).
> >>>>>> Which doesn't work out very well ...
> >>>>>>
> >>>>>> With two identical nics the (single) rom fits and qemu boots.
> >>>>>>
> >>>>>> Hmm.  Of course vl.c must be fixed to check the return value.
> >>>>>>                   
> >>>>> Yes.
> >>>>>
> >>>>>               
> >>>>>> Not sure how to deal with the rom size issue.  The gPXE roms 
> >>>>>> look  quit
> >>>>>> big compared to the older roms we had.
> >>>>>>                   
> >>>>> Hmm, it's a regression then ...
> >>>>>               
> >>>> How does real hw handle this? I'm pretty sure most servers these 
> >>>> days  use more option rom space than this. They usually have some 
> >>>> onboard raid bios, external storage, on-board nic, pci nic, ...
> >>>>           
> >>> Real hardware might do several things I know about
> >>> - option rom is typically small.
> >>> - option rom is not loaded always (BIOS option), or not for all cards.
> >>> There are might be other tricks.
> >>>       
> >>
> >> There are probably other tricks. I was booting up a machine that had
> >> like 5 options roms going through their initialization that all weren't
> >> exactly small.
> >>
> >>   
> >>>> So there must be some way to just have more option rom space.       
> >>>>       
> >>> What do you mean?
> >>>       
> >>
> >> Well, what's keeping us from having 5 MB of option roms?
> >>   
> >
> > For starters, option roms run in real mode when you only have 1MB of  
> > addressable memory :-)
> >
> >>>> Implementing anything else would just be a waste of time. It'd 
> >>>> break  again when ppl do device assignment.
> >>>>
> >>>> Alex
> >>>>           
> >>> We need some solution for 0.12 though IMO.
> >>> This does not need to address device assignment,
> >>> but it must be simple.
> >>>       
> >>
> >> Agreed. If there is a solution that gives us the chance to support an
> >> arbitrary number of option roms that wouldn't take forever to implement,
> >> I'd rather take that one though.
> >>   
> >
> > For 0.12, we just need to fail gracefully (meaning stop loading option  
> > roms when we run out of room).  It's not a regression compared to 0.11.
> >
> > Regards,
> >
> > Anthony Liguori
> 
> 
> Well I am pretty sure that I used virtio + e1000 with 0.11
> and apparently I can't now.
> So it does look like a regression to me ...
> 

Further, we should error out when device is added.
Doing this during boot is way too late, management
won't be able to understand such errors and
won't be able to recover.

> -- 
> MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 14:11                     ` Michael S. Tsirkin
  2009-12-14 14:13                       ` Michael S. Tsirkin
@ 2009-12-14 14:22                       ` Anthony Liguori
  2009-12-14 17:03                         ` Glauber Costa
  2009-12-14 17:01                       ` Glauber Costa
  2 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-14 14:22 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

Michael S. Tsirkin wrote:
> Well I am pretty sure that I used virtio + e1000 with 0.11
> and apparently I can't now.
> So it does look like a regression to me ...
>   

That's what I said, we should make sure that we stop loading roms when 
we run out of room as opposed to trampling over the bios space.

But let's not try to solve the problem of fitting more roms into the 
space than we can.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 14:13                       ` Michael S. Tsirkin
@ 2009-12-14 14:25                         ` Anthony Liguori
  2009-12-14 16:20                           ` Michael S. Tsirkin
  2009-12-14 19:12                           ` Sebastian Herbszt
  0 siblings, 2 replies; 101+ messages in thread
From: Anthony Liguori @ 2009-12-14 14:25 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

Michael S. Tsirkin wrote:
>
> Further, we should error out when device is added.
> Doing this during boot is way too late, management
> won't be able to understand such errors and
> won't be able to recover.
>   

I don't quite understand this.

In 0.11, we never loaded option roms unless a user specified -boot n.  
If a user specified -boot n and used more than one nic type, I'm fairly 
certain it would error out during start up because it would run out of 
option rom space.  Maybe it required three types of nics, but the point 
still remains.

In 0.12, we always load the option rom for a PCI device.  An easy 
solution here would be to just gracefully handle the case where we ran 
out of option rom space and (silently) stop loading additional roms.  
With respect to -boot n, it makes the behavior buggy (you cannot boot 
from the second nic) but my original point is that that is not a 
regression from 0.11.

For 0.13, we should probably allow a user to suppress option rom loading 
for a given PCI device.  The limited space is a pretty good 
justification for that.

Regards,

Anthony Liguori

>> -- 
>> MST
>>     

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 14:10               ` Anthony Liguori
@ 2009-12-14 14:52                 ` Gerd Hoffmann
  2009-12-14 14:54                   ` Anthony Liguori
  0 siblings, 1 reply; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-14 14:52 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: qemu-devel, glommer, Sebastian Herbszt, Alexander Graf,
	Michael S. Tsirkin

On 12/14/09 15:10, Anthony Liguori wrote:
> The old behavior with two different nic types and -boot n was "undefined".
>
> The old etherboot roms were quite large. To large to fit more than one
> (certainly not two).

Two worked with the etherboot roms.

>> So there must be some way to just have more option rom space.
>> Implementing anything else would just be a waste of time. It'd break
>> again when ppl do device assignment.
>
> gPXE is freakishly large as far as option roms go :-)

With gPXE only one rom fits in.

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 14:52                 ` Gerd Hoffmann
@ 2009-12-14 14:54                   ` Anthony Liguori
  0 siblings, 0 replies; 101+ messages in thread
From: Anthony Liguori @ 2009-12-14 14:54 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: qemu-devel, glommer, Sebastian Herbszt, Alexander Graf,
	Michael S. Tsirkin

Gerd Hoffmann wrote:
> On 12/14/09 15:10, Anthony Liguori wrote:
>> The old behavior with two different nic types and -boot n was 
>> "undefined".
>>
>> The old etherboot roms were quite large. To large to fit more than one
>> (certainly not two).
>
> Two worked with the etherboot roms.

Yes, they were 32k.  Two did not work though if you were also using 
extboot (which was 2k).  Still, etherboot was not a BEV rom so you 
couldn't make sense out of two of them anyway (since they hijack int19).

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 14:25                         ` Anthony Liguori
@ 2009-12-14 16:20                           ` Michael S. Tsirkin
  2009-12-14 19:12                           ` Sebastian Herbszt
  1 sibling, 0 replies; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 16:20 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Mon, Dec 14, 2009 at 08:25:53AM -0600, Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
>>
>> Further, we should error out when device is added.
>> Doing this during boot is way too late, management
>> won't be able to understand such errors and
>> won't be able to recover.
>>   
>
> I don't quite understand this.
>
> In 0.11, we never loaded option roms unless a user specified -boot n.   
> If a user specified -boot n and used more than one nic type, I'm fairly  
> certain it would error out during start up because it would run out of  
> option rom space.  Maybe it required three types of nics, but the point  
> still remains.
>
> In 0.12, we always load the option rom for a PCI device.  An easy  
> solution here would be to just gracefully handle the case where we ran  
> out of option rom space and (silently) stop loading additional roms.   
> With respect to -boot n, it makes the behavior buggy (you cannot boot  
> from the second nic) but my original point is that that is not a  
> regression from 0.11.

Sorry, I misunderstood what you were saying.  I thought you suggested
handling it with exit(1) or something like that.  Yes, this hack will
work I think, unless we want to go back to 0.11 behaviour.

> For 0.13, we should probably allow a user to suppress option rom loading  
> for a given PCI device.  The limited space is a pretty good  
> justification for that.
>
> Regards,
>
> Anthony Liguori
>
>>> -- 
>>> MST
>>>     

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 14:01                   ` Michael S. Tsirkin
@ 2009-12-14 17:00                     ` Glauber Costa
  0 siblings, 0 replies; 101+ messages in thread
From: Glauber Costa @ 2009-12-14 17:00 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: qemu-devel, Alexander Graf, Kevin O'Connor, Gerd Hoffmann,
	Sebastian Herbszt

On Mon, Dec 14, 2009 at 04:01:43PM +0200, Michael S. Tsirkin wrote:
> On Mon, Dec 14, 2009 at 02:35:31PM +0100, Alexander Graf wrote:
> > Michael S. Tsirkin wrote:
> > > On Mon, Dec 14, 2009 at 12:55:28PM +0100, Alexander Graf wrote:
> > >   
> > >> Am 14.12.2009 um 11:59 schrieb "Michael S. Tsirkin" <mst@redhat.com>:
> > >>
> > >>     
> > >>> On Mon, Dec 14, 2009 at 11:16:34AM +0100, Gerd Hoffmann wrote:
> > >>>       
> > >>>> On 12/14/09 10:44, Michael S. Tsirkin wrote:
> > >>>>         
> > >>>>> No, it did not even start booting the kernel. Just gave me blank  
> > >>>>> screen.
> > >>>>>           
> > >>>> [ testing ]
> > >>>>
> > >>>> Oh.  That is something completely different.  A bug in the rom  
> > >>>> loader.
> > >>>> It fails to fit both e1000 (default nic) and virtio-net boot roms  
> > >>>> into
> > >>>> the option rom area and bails out (before loading seabios).  vl.c
> > >>>> doesn't check the return value and happily continues (without bios).
> > >>>> Which doesn't work out very well ...
> > >>>>
> > >>>> With two identical nics the (single) rom fits and qemu boots.
> > >>>>
> > >>>> Hmm.  Of course vl.c must be fixed to check the return value.
> > >>>>         
> > >>> Yes.
> > >>>
> > >>>       
> > >>>> Not sure how to deal with the rom size issue.  The gPXE roms look  
> > >>>> quit
> > >>>> big compared to the older roms we had.
> > >>>>         
> > >>> Hmm, it's a regression then ...
> > >>>       
> > >> How does real hw handle this? I'm pretty sure most servers these days  
> > >> use more option rom space than this. They usually have some onboard raid 
> > >> bios, external storage, on-board nic, pci nic, ...
> > >>     
> > >
> > > Real hardware might do several things I know about
> > > - option rom is typically small.
> > > - option rom is not loaded always (BIOS option), or not for all cards.
> > > There are might be other tricks.
> > >   
> > 
> > There are probably other tricks. I was booting up a machine that had
> > like 5 options roms going through their initialization that all weren't
> > exactly small.
> 
> This might boil down to better ROMs. E.g.
> maybe they request memory with PMM and then give it up
> after initialization?
That would be my guess.

However, gpxe rom are also used in real hardware. Maybe there
is some config trick we're missing?

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 14:11                     ` Michael S. Tsirkin
  2009-12-14 14:13                       ` Michael S. Tsirkin
  2009-12-14 14:22                       ` Anthony Liguori
@ 2009-12-14 17:01                       ` Glauber Costa
  2 siblings, 0 replies; 101+ messages in thread
From: Glauber Costa @ 2009-12-14 17:01 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: qemu-devel, Alexander Graf, Kevin O'Connor, Gerd Hoffmann,
	Sebastian Herbszt

On Mon, Dec 14, 2009 at 04:11:43PM +0200, Michael S. Tsirkin wrote:
> On Mon, Dec 14, 2009 at 08:11:59AM -0600, Anthony Liguori wrote:
> > Alexander Graf wrote:
> >> Michael S. Tsirkin wrote:
> >>   
> >>> On Mon, Dec 14, 2009 at 12:55:28PM +0100, Alexander Graf wrote:
> >>>       
> >>>> Am 14.12.2009 um 11:59 schrieb "Michael S. Tsirkin" <mst@redhat.com>:
> >>>>
> >>>>           
> >>>>> On Mon, Dec 14, 2009 at 11:16:34AM +0100, Gerd Hoffmann wrote:
> >>>>>               
> >>>>>> On 12/14/09 10:44, Michael S. Tsirkin wrote:
> >>>>>>                   
> >>>>>>> No, it did not even start booting the kernel. Just gave me 
> >>>>>>> blank  screen.
> >>>>>>>                       
> >>>>>> [ testing ]
> >>>>>>
> >>>>>> Oh.  That is something completely different.  A bug in the rom  
> >>>>>> loader.
> >>>>>> It fails to fit both e1000 (default nic) and virtio-net boot 
> >>>>>> roms  into
> >>>>>> the option rom area and bails out (before loading seabios).  vl.c
> >>>>>> doesn't check the return value and happily continues (without bios).
> >>>>>> Which doesn't work out very well ...
> >>>>>>
> >>>>>> With two identical nics the (single) rom fits and qemu boots.
> >>>>>>
> >>>>>> Hmm.  Of course vl.c must be fixed to check the return value.
> >>>>>>                   
> >>>>> Yes.
> >>>>>
> >>>>>               
> >>>>>> Not sure how to deal with the rom size issue.  The gPXE roms 
> >>>>>> look  quit
> >>>>>> big compared to the older roms we had.
> >>>>>>                   
> >>>>> Hmm, it's a regression then ...
> >>>>>               
> >>>> How does real hw handle this? I'm pretty sure most servers these 
> >>>> days  use more option rom space than this. They usually have some 
> >>>> onboard raid bios, external storage, on-board nic, pci nic, ...
> >>>>           
> >>> Real hardware might do several things I know about
> >>> - option rom is typically small.
> >>> - option rom is not loaded always (BIOS option), or not for all cards.
> >>> There are might be other tricks.
> >>>       
> >>
> >> There are probably other tricks. I was booting up a machine that had
> >> like 5 options roms going through their initialization that all weren't
> >> exactly small.
> >>
> >>   
> >>>> So there must be some way to just have more option rom space.       
> >>>>       
> >>> What do you mean?
> >>>       
> >>
> >> Well, what's keeping us from having 5 MB of option roms?
> >>   
> >
> > For starters, option roms run in real mode when you only have 1MB of  
> > addressable memory :-)
> >
> >>>> Implementing anything else would just be a waste of time. It'd 
> >>>> break  again when ppl do device assignment.
> >>>>
> >>>> Alex
> >>>>           
> >>> We need some solution for 0.12 though IMO.
> >>> This does not need to address device assignment,
> >>> but it must be simple.
> >>>       
> >>
> >> Agreed. If there is a solution that gives us the chance to support an
> >> arbitrary number of option roms that wouldn't take forever to implement,
> >> I'd rather take that one though.
> >>   
> >
> > For 0.12, we just need to fail gracefully (meaning stop loading option  
> > roms when we run out of room).  It's not a regression compared to 0.11.
> >
> > Regards,
> >
> > Anthony Liguori
> 
> 
> Well I am pretty sure that I used virtio + e1000 with 0.11
> and apparently I can't now.
> So it does look like a regression to me ...

e1000 is the problem here, since it is by far the largest roms
of them all.

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 14:22                       ` Anthony Liguori
@ 2009-12-14 17:03                         ` Glauber Costa
  0 siblings, 0 replies; 101+ messages in thread
From: Glauber Costa @ 2009-12-14 17:03 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Michael S. Tsirkin, qemu-devel, Alexander Graf,
	Kevin O'Connor, Gerd Hoffmann, Sebastian Herbszt

On Mon, Dec 14, 2009 at 08:22:12AM -0600, Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
> >Well I am pretty sure that I used virtio + e1000 with 0.11
> >and apparently I can't now.
> >So it does look like a regression to me ...
> 
> That's what I said, we should make sure that we stop loading roms
> when we run out of room as opposed to trampling over the bios space.

Can't we first load the bios?

Then we're pretty sure oproms will never trample it.

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 14:25                         ` Anthony Liguori
  2009-12-14 16:20                           ` Michael S. Tsirkin
@ 2009-12-14 19:12                           ` Sebastian Herbszt
  2009-12-14 19:20                             ` Michael S. Tsirkin
  2009-12-14 19:33                             ` Anthony Liguori
  1 sibling, 2 replies; 101+ messages in thread
From: Sebastian Herbszt @ 2009-12-14 19:12 UTC (permalink / raw)
  To: Anthony Liguori, Michael S. Tsirkin
  Cc: qemu-devel, glommer, Kevin O'Connor, Alexander Graf, Gerd Hoffmann

Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
>>
>> Further, we should error out when device is added.
>> Doing this during boot is way too late, management
>> won't be able to understand such errors and
>> won't be able to recover.
>>   
> 
> I don't quite understand this.
> 
> In 0.11, we never loaded option roms unless a user specified -boot n.  
> If a user specified -boot n and used more than one nic type, I'm fairly 
> certain it would error out during start up because it would run out of 
> option rom space.  Maybe it required three types of nics, but the point 
> still remains.

I think it used to be possible to have two different nic types and only load
one rom, e.g. -net nic,model=pcnet -net nic,model=e1000 -option-rom e1000.rom
Then use the boot menu to select the e1000 nic.

> In 0.12, we always load the option rom for a PCI device.  An easy 
> solution here would be to just gracefully handle the case where we ran 
> out of option rom space and (silently) stop loading additional roms.  
> With respect to -boot n, it makes the behavior buggy (you cannot boot 
> from the second nic) but my original point is that that is not a 
> regression from 0.11.

Even if i repeat myself [1] i suggest putting an option-rom loading flag to the -net option:
-net nic,model=e1000,rom=[on,off,e1000.bin]

> For 0.13, we should probably allow a user to suppress option rom loading 
> for a given PCI device.  The limited space is a pretty good 
> justification for that.

The default behaviour should be not loading option-roms; users should request those.

[1] http://lists.gnu.org/archive/html/qemu-devel/2009-11/msg01095.html

- Sebastian

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 19:12                           ` Sebastian Herbszt
@ 2009-12-14 19:20                             ` Michael S. Tsirkin
  2009-12-14 19:38                               ` Sebastian Herbszt
  2009-12-14 19:33                             ` Anthony Liguori
  1 sibling, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 19:20 UTC (permalink / raw)
  To: Sebastian Herbszt
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor, Gerd Hoffmann

On Mon, Dec 14, 2009 at 08:12:48PM +0100, Sebastian Herbszt wrote:
> Anthony Liguori wrote:
>> Michael S. Tsirkin wrote:
>>>
>>> Further, we should error out when device is added.
>>> Doing this during boot is way too late, management
>>> won't be able to understand such errors and
>>> won't be able to recover.
>>>   
>>
>> I don't quite understand this.
>>
>> In 0.11, we never loaded option roms unless a user specified -boot n.   
>> If a user specified -boot n and used more than one nic type, I'm fairly 
>> certain it would error out during start up because it would run out of  
>> option rom space.  Maybe it required three types of nics, but the point 
>> still remains.
>
> I think it used to be possible to have two different nic types and only load
> one rom, e.g. -net nic,model=pcnet -net nic,model=e1000 -option-rom e1000.rom
> Then use the boot menu to select the e1000 nic.
>
>> In 0.12, we always load the option rom for a PCI device.  An easy  
>> solution here would be to just gracefully handle the case where we ran  
>> out of option rom space and (silently) stop loading additional roms.   
>> With respect to -boot n, it makes the behavior buggy (you cannot boot  
>> from the second nic) but my original point is that that is not a  
>> regression from 0.11.
>
> Even if i repeat myself [1] i suggest putting an option-rom loading flag to the -net option:
> -net nic,model=e1000,rom=[on,off,e1000.bin]
>
>> For 0.13, we should probably allow a user to suppress option rom 
>> loading for a given PCI device.  The limited space is a pretty good  
>> justification for that.
>
> The default behaviour should be not loading option-roms; users should request those.
>
> [1] http://lists.gnu.org/archive/html/qemu-devel/2009-11/msg01095.html
>
> - Sebastian

I am not sure I agree. This is common for PXE and I think
makes sense there, but I think this might not
make sense for VGA rom or e.g. scsi.


-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 19:12                           ` Sebastian Herbszt
  2009-12-14 19:20                             ` Michael S. Tsirkin
@ 2009-12-14 19:33                             ` Anthony Liguori
  2009-12-14 19:42                               ` Michael S. Tsirkin
  2009-12-14 19:51                               ` Sebastian Herbszt
  1 sibling, 2 replies; 101+ messages in thread
From: Anthony Liguori @ 2009-12-14 19:33 UTC (permalink / raw)
  To: Sebastian Herbszt
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Gerd Hoffmann

Sebastian Herbszt wrote:
> Anthony Liguori wrote:
>> Michael S. Tsirkin wrote:
>>>
>>> Further, we should error out when device is added.
>>> Doing this during boot is way too late, management
>>> won't be able to understand such errors and
>>> won't be able to recover.
>>>   
>>
>> I don't quite understand this.
>>
>> In 0.11, we never loaded option roms unless a user specified -boot 
>> n.  If a user specified -boot n and used more than one nic type, I'm 
>> fairly certain it would error out during start up because it would 
>> run out of option rom space.  Maybe it required three types of nics, 
>> but the point still remains.
>
> I think it used to be possible to have two different nic types and 
> only load
> one rom, e.g. -net nic,model=pcnet -net nic,model=e1000 -option-rom 
> e1000.rom
> Then use the boot menu to select the e1000 nic.

That's a super hack :-)  The fact that works is pure luck.

>> In 0.12, we always load the option rom for a PCI device.  An easy 
>> solution here would be to just gracefully handle the case where we 
>> ran out of option rom space and (silently) stop loading additional 
>> roms.  With respect to -boot n, it makes the behavior buggy (you 
>> cannot boot from the second nic) but my original point is that that 
>> is not a regression from 0.11.
>
> Even if i repeat myself [1] i suggest putting an option-rom loading 
> flag to the -net option:
> -net nic,model=e1000,rom=[on,off,e1000.bin]

Well it ought to be a qdev property and it ought to be applicable to 
every PCI device.

>> For 0.13, we should probably allow a user to suppress option rom 
>> loading for a given PCI device.  The limited space is a pretty good 
>> justification for that.
>
> The default behaviour should be not loading option-roms; users should 
> request those.

I disagree.  A user should not have to decide whether they want PXE boot 
or not when they create a VM.  The less decisions a user has to make up 
front the easier qemu is to use.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 19:20                             ` Michael S. Tsirkin
@ 2009-12-14 19:38                               ` Sebastian Herbszt
  0 siblings, 0 replies; 101+ messages in thread
From: Sebastian Herbszt @ 2009-12-14 19:38 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor, Gerd Hoffmann

Michael S. Tsirkin wrote:
> On Mon, Dec 14, 2009 at 08:12:48PM +0100, Sebastian Herbszt wrote:
>> Anthony Liguori wrote:
>>> Michael S. Tsirkin wrote:
>>>>
>>>> Further, we should error out when device is added.
>>>> Doing this during boot is way too late, management
>>>> won't be able to understand such errors and
>>>> won't be able to recover.
>>>>   
>>>
>>> I don't quite understand this.
>>>
>>> In 0.11, we never loaded option roms unless a user specified -boot n.   
>>> If a user specified -boot n and used more than one nic type, I'm fairly 
>>> certain it would error out during start up because it would run out of  
>>> option rom space.  Maybe it required three types of nics, but the point 
>>> still remains.
>>
>> I think it used to be possible to have two different nic types and only load
>> one rom, e.g. -net nic,model=pcnet -net nic,model=e1000 -option-rom e1000.rom
>> Then use the boot menu to select the e1000 nic.
>>
>>> In 0.12, we always load the option rom for a PCI device.  An easy  
>>> solution here would be to just gracefully handle the case where we ran  
>>> out of option rom space and (silently) stop loading additional roms.   
>>> With respect to -boot n, it makes the behavior buggy (you cannot boot  
>>> from the second nic) but my original point is that that is not a  
>>> regression from 0.11.
>>
>> Even if i repeat myself [1] i suggest putting an option-rom loading flag to the -net option:
>> -net nic,model=e1000,rom=[on,off,e1000.bin]
>>
>>> For 0.13, we should probably allow a user to suppress option rom 
>>> loading for a given PCI device.  The limited space is a pretty good  
>>> justification for that.
>>
>> The default behaviour should be not loading option-roms; users should request those.
>>
>> [1] http://lists.gnu.org/archive/html/qemu-devel/2009-11/msg01095.html
>>
>> - Sebastian
> 
> I am not sure I agree. This is common for PXE and I think
> makes sense there, but I think this might not
> make sense for VGA rom or e.g. scsi.

I think it makes sense at least for nic and scsi. It might even be useful for vga, e.g. choose between
pci/onboard and agp vga and only load one of both roms.

- Sebastian

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 19:33                             ` Anthony Liguori
@ 2009-12-14 19:42                               ` Michael S. Tsirkin
  2009-12-14 19:59                                 ` Anthony Liguori
  2009-12-14 19:51                               ` Sebastian Herbszt
  1 sibling, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 19:42 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Mon, Dec 14, 2009 at 01:33:50PM -0600, Anthony Liguori wrote:
> Sebastian Herbszt wrote:
>> Anthony Liguori wrote:
>>> Michael S. Tsirkin wrote:
>>>>
>>>> Further, we should error out when device is added.
>>>> Doing this during boot is way too late, management
>>>> won't be able to understand such errors and
>>>> won't be able to recover.
>>>>   
>>>
>>> I don't quite understand this.
>>>
>>> In 0.11, we never loaded option roms unless a user specified -boot  
>>> n.  If a user specified -boot n and used more than one nic type, I'm  
>>> fairly certain it would error out during start up because it would  
>>> run out of option rom space.  Maybe it required three types of nics,  
>>> but the point still remains.
>>
>> I think it used to be possible to have two different nic types and  
>> only load
>> one rom, e.g. -net nic,model=pcnet -net nic,model=e1000 -option-rom  
>> e1000.rom
>> Then use the boot menu to select the e1000 nic.
>
> That's a super hack :-)  The fact that works is pure luck.
>
>>> In 0.12, we always load the option rom for a PCI device.  An easy  
>>> solution here would be to just gracefully handle the case where we  
>>> ran out of option rom space and (silently) stop loading additional  
>>> roms.  With respect to -boot n, it makes the behavior buggy (you  
>>> cannot boot from the second nic) but my original point is that that  
>>> is not a regression from 0.11.
>>
>> Even if i repeat myself [1] i suggest putting an option-rom loading  
>> flag to the -net option:
>> -net nic,model=e1000,rom=[on,off,e1000.bin]
>
> Well it ought to be a qdev property and it ought to be applicable to  
> every PCI device.
>
>>> For 0.13, we should probably allow a user to suppress option rom  
>>> loading for a given PCI device.  The limited space is a pretty good  
>>> justification for that.
>>
>> The default behaviour should be not loading option-roms; users should  
>> request those.
>
> I disagree.  A user should not have to decide whether they want PXE boot  
> or not when they create a VM.

At some level this is wrong. ROM presence is a hardware feature and you
definitely need to select your hardware when you create a VM.  For real
hardware, cards with PXE are sometimes more expensive than without as
they need ROM memory.  People do select hardware based on this.

Even when PXE is present in hardware, most BIOS
vendors will let you turn it on/off optionally,
for security if not for other reasons.

What the default should be depends on whether the
majority of our users use PXE. I guess not,
and if I am right default should be off.

>  The less decisions a user has to make up  
> front the easier qemu is to use.
>
> Regards,
>
> Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 19:33                             ` Anthony Liguori
  2009-12-14 19:42                               ` Michael S. Tsirkin
@ 2009-12-14 19:51                               ` Sebastian Herbszt
  1 sibling, 0 replies; 101+ messages in thread
From: Sebastian Herbszt @ 2009-12-14 19:51 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Gerd Hoffmann

Anthony Liguori wrote:
> Sebastian Herbszt wrote:
>> Anthony Liguori wrote:
>>> Michael S. Tsirkin wrote:
>>>>
>>>> Further, we should error out when device is added.
>>>> Doing this during boot is way too late, management
>>>> won't be able to understand such errors and
>>>> won't be able to recover.
>>>>   
>>>
>>> I don't quite understand this.
>>>
>>> In 0.11, we never loaded option roms unless a user specified -boot 
>>> n.  If a user specified -boot n and used more than one nic type, I'm 
>>> fairly certain it would error out during start up because it would 
>>> run out of option rom space.  Maybe it required three types of nics, 
>>> but the point still remains.
>>
>> I think it used to be possible to have two different nic types and 
>> only load
>> one rom, e.g. -net nic,model=pcnet -net nic,model=e1000 -option-rom 
>> e1000.rom
>> Then use the boot menu to select the e1000 nic.
> 
> That's a super hack :-)  The fact that works is pure luck.

Super hack? Maybe. Pure luck - no. Even if, it's still a regression if that's no
longer possible.

>>> In 0.12, we always load the option rom for a PCI device.  An easy 
>>> solution here would be to just gracefully handle the case where we 
>>> ran out of option rom space and (silently) stop loading additional 
>>> roms.  With respect to -boot n, it makes the behavior buggy (you 
>>> cannot boot from the second nic) but my original point is that that 
>>> is not a regression from 0.11.
>>
>> Even if i repeat myself [1] i suggest putting an option-rom loading 
>> flag to the -net option:
>> -net nic,model=e1000,rom=[on,off,e1000.bin]
> 
> Well it ought to be a qdev property and it ought to be applicable to 
> every PCI device.

And ISA too.

>>> For 0.13, we should probably allow a user to suppress option rom 
>>> loading for a given PCI device.  The limited space is a pretty good 
>>> justification for that.
>>
>> The default behaviour should be not loading option-roms; users should 
>> request those.
> 
> I disagree.  A user should not have to decide whether they want PXE boot 
> or not when they create a VM.  The less decisions a user has to make up 
> front the easier qemu is to use.

If i want PXE boot on my computer, i have to enter the BIOS and enable it.
If qemu starts to automagically enable stuff people might want to use, some
people will end up with long command lines just to disable it again.

- Sebastian

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 19:42                               ` Michael S. Tsirkin
@ 2009-12-14 19:59                                 ` Anthony Liguori
  2009-12-14 20:20                                   ` Michael S. Tsirkin
  0 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-14 19:59 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

Michael S. Tsirkin wrote:
> At some level this is wrong. ROM presence is a hardware feature and you
> definitely need to select your hardware when you create a VM.  For real
> hardware, cards with PXE are sometimes more expensive than without as
> they need ROM memory.  People do select hardware based on this.
>
> Even when PXE is present in hardware, most BIOS
> vendors will let you turn it on/off optionally,
> for security if not for other reasons.
>
> What the default should be depends on whether the
> majority of our users use PXE. I guess not,
> and if I am right default should be off.
>   

The real way to pose this question is, what is the impact to users by 
keeping this on to those that don't use it vs. the cost of turning it 
off by default for users that do need it.

So far, it's not clear to me that anyone has demonstrated how this is 
harmful for people that don't want pxe booting.  Assuming we fix the bug 
about rom loading, then there's really no impact to users.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 19:59                                 ` Anthony Liguori
@ 2009-12-14 20:20                                   ` Michael S. Tsirkin
  2009-12-14 20:32                                     ` Gerd Hoffmann
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 20:20 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Mon, Dec 14, 2009 at 01:59:47PM -0600, Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
>> At some level this is wrong. ROM presence is a hardware feature and you
>> definitely need to select your hardware when you create a VM.  For real
>> hardware, cards with PXE are sometimes more expensive than without as
>> they need ROM memory.  People do select hardware based on this.
>>
>> Even when PXE is present in hardware, most BIOS
>> vendors will let you turn it on/off optionally,
>> for security if not for other reasons.
>>
>> What the default should be depends on whether the
>> majority of our users use PXE. I guess not,
>> and if I am right default should be off.
>>   
>
> The real way to pose this question is, what is the impact to users by  
> keeping this on to those that don't use it vs. the cost of turning it  
> off by default for users that do need it.
>
> So far, it's not clear to me that anyone has demonstrated how this is  
> harmful for people that don't want pxe booting.  Assuming we fix the bug  
> about rom loading, then there's really no impact to users.
>
> Regards,
>
> Anthony Liguori

PXE booting might have security impact. You do not want to
do this if you are on a hostile network.

-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 20:20                                   ` Michael S. Tsirkin
@ 2009-12-14 20:32                                     ` Gerd Hoffmann
  2009-12-14 20:34                                       ` Michael S. Tsirkin
  2009-12-14 20:38                                       ` Sebastian Herbszt
  0 siblings, 2 replies; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-14 20:32 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Sebastian Herbszt

On 12/14/09 21:20, Michael S. Tsirkin wrote:
>> So far, it's not clear to me that anyone has demonstrated how this is
>> harmful for people that don't want pxe booting.  Assuming we fix the bug
>> about rom loading, then there's really no impact to users.

Fix (v2) is on the list already.

> PXE booting might have security impact. You do not want to
> do this if you are on a hostile network.

Option rom loaded doesn't imply pxe boot will be tried.  It only means 
PXE boot can be selected, either via

   -boot order=[something with 'n' here]

or via

   -boot menu=on + F12 + picking menu entry

By default qemu doesn't try to PXE-boot, even if no other bootable 
device is available.

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 20:32                                     ` Gerd Hoffmann
@ 2009-12-14 20:34                                       ` Michael S. Tsirkin
  2009-12-14 20:36                                         ` Michael S. Tsirkin
                                                           ` (2 more replies)
  2009-12-14 20:38                                       ` Sebastian Herbszt
  1 sibling, 3 replies; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 20:34 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Sebastian Herbszt

On Mon, Dec 14, 2009 at 09:32:30PM +0100, Gerd Hoffmann wrote:
> On 12/14/09 21:20, Michael S. Tsirkin wrote:
>>> So far, it's not clear to me that anyone has demonstrated how this is
>>> harmful for people that don't want pxe booting.  Assuming we fix the bug
>>> about rom loading, then there's really no impact to users.
>
> Fix (v2) is on the list already.
>
>> PXE booting might have security impact. You do not want to
>> do this if you are on a hostile network.
>
> Option rom loaded doesn't imply pxe boot will be tried.  It only means  
> PXE boot can be selected, either via
>
>   -boot order=[something with 'n' here]
>
> or via
>
>   -boot menu=on + F12 + picking menu entry
>
> By default qemu doesn't try to PXE-boot, even if no other bootable  
> device is available.
>
> cheers,
>   Gerd

I guess so. But then, why are we loading it in BIOS
and wasting memory? Let's only shadow the ROM
when PXE is selected?


-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 20:34                                       ` Michael S. Tsirkin
@ 2009-12-14 20:36                                         ` Michael S. Tsirkin
  2009-12-14 20:44                                           ` Anthony Liguori
  2009-12-14 20:43                                         ` [Qemu-devel] Re: qdev property bug? Anthony Liguori
  2009-12-14 20:47                                         ` Sebastian Herbszt
  2 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 20:36 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Sebastian Herbszt

On Mon, Dec 14, 2009 at 10:34:28PM +0200, Michael S. Tsirkin wrote:
> On Mon, Dec 14, 2009 at 09:32:30PM +0100, Gerd Hoffmann wrote:
> > On 12/14/09 21:20, Michael S. Tsirkin wrote:
> >>> So far, it's not clear to me that anyone has demonstrated how this is
> >>> harmful for people that don't want pxe booting.  Assuming we fix the bug
> >>> about rom loading, then there's really no impact to users.
> >
> > Fix (v2) is on the list already.
> >
> >> PXE booting might have security impact. You do not want to
> >> do this if you are on a hostile network.
> >
> > Option rom loaded doesn't imply pxe boot will be tried.  It only means  
> > PXE boot can be selected, either via
> >
> >   -boot order=[something with 'n' here]
> >
> > or via
> >
> >   -boot menu=on + F12 + picking menu entry
> >
> > By default qemu doesn't try to PXE-boot, even if no other bootable  
> > device is available.
> >
> > cheers,
> >   Gerd
> 
> I guess so. But then, why are we loading it in BIOS
> and wasting memory? Let's only shadow the ROM
> when PXE is selected?

Or, we could have a very small ROM, that loads
more actual code from card or from qemu directly
when it is run.

> 
> -- 
> MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 20:32                                     ` Gerd Hoffmann
  2009-12-14 20:34                                       ` Michael S. Tsirkin
@ 2009-12-14 20:38                                       ` Sebastian Herbszt
  1 sibling, 0 replies; 101+ messages in thread
From: Sebastian Herbszt @ 2009-12-14 20:38 UTC (permalink / raw)
  To: Gerd Hoffmann, Michael S. Tsirkin
  Cc: glommer, Kevin O'Connor, Alexander Graf, qemu-devel

Gerd Hoffmann wrote:
> On 12/14/09 21:20, Michael S. Tsirkin wrote:
>>> So far, it's not clear to me that anyone has demonstrated how this is
>>> harmful for people that don't want pxe booting.  Assuming we fix the bug
>>> about rom loading, then there's really no impact to users.
> 
> Fix (v2) is on the list already.
> 
>> PXE booting might have security impact. You do not want to
>> do this if you are on a hostile network.
> 
> Option rom loaded doesn't imply pxe boot will be tried.  It only means 
> PXE boot can be selected, either via
> 
>   -boot order=[something with 'n' here]
> 
> or via
> 
>   -boot menu=on + F12 + picking menu entry
> 
> By default qemu doesn't try to PXE-boot, even if no other bootable 
> device is available.

Tho this depends on the option rom, e.g. Etherboot hooks INT 19h.

- Sebastian

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 20:34                                       ` Michael S. Tsirkin
  2009-12-14 20:36                                         ` Michael S. Tsirkin
@ 2009-12-14 20:43                                         ` Anthony Liguori
  2009-12-14 20:50                                           ` Michael S. Tsirkin
  2009-12-14 20:47                                         ` Sebastian Herbszt
  2 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-14 20:43 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

Michael S. Tsirkin wrote:
> On Mon, Dec 14, 2009 at 09:32:30PM +0100, Gerd Hoffmann wrote:
>   
>> On 12/14/09 21:20, Michael S. Tsirkin wrote:
>>     
>>>> So far, it's not clear to me that anyone has demonstrated how this is
>>>> harmful for people that don't want pxe booting.  Assuming we fix the bug
>>>> about rom loading, then there's really no impact to users.
>>>>         
>> Fix (v2) is on the list already.
>>
>>     
>>> PXE booting might have security impact. You do not want to
>>> do this if you are on a hostile network.
>>>       
>> Option rom loaded doesn't imply pxe boot will be tried.  It only means  
>> PXE boot can be selected, either via
>>
>>   -boot order=[something with 'n' here]
>>
>> or via
>>
>>   -boot menu=on + F12 + picking menu entry
>>
>> By default qemu doesn't try to PXE-boot, even if no other bootable  
>> device is available.
>>
>> cheers,
>>   Gerd
>>     
>
> I guess so. But then, why are we loading it in BIOS
> and wasting memory? Let's only shadow the ROM
> when PXE is selected?
>   

Because it can be selected by the user via the menu and because it can 
be selected at runtime via the boot_set monitor command.

Also, the comment about "wasting memory" not quite accurate.  The memory 
region in question is only used for roms.  If we didn't put roms there, 
it would go to waste.

Currently, the only roms we load are pxe roms or things specified by 
-option-rom.  You could certainly argue that making -option-rom higher 
priority than implicit pxe roms is valuable but removing the pxe roms 
really serves no purpose.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 20:36                                         ` Michael S. Tsirkin
@ 2009-12-14 20:44                                           ` Anthony Liguori
  2009-12-14 20:51                                             ` Michael S. Tsirkin
  0 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-14 20:44 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

Michael S. Tsirkin wrote:
> Or, we could have a very small ROM, that loads
> more actual code from card or from qemu directly
> when it is run.
>   

It's not as simple as it sounds but it's possible, in theory at least.

But I think the question really is, what problem are we trying to solve?

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 20:34                                       ` Michael S. Tsirkin
  2009-12-14 20:36                                         ` Michael S. Tsirkin
  2009-12-14 20:43                                         ` [Qemu-devel] Re: qdev property bug? Anthony Liguori
@ 2009-12-14 20:47                                         ` Sebastian Herbszt
  2009-12-14 20:56                                           ` Anthony Liguori
  2 siblings, 1 reply; 101+ messages in thread
From: Sebastian Herbszt @ 2009-12-14 20:47 UTC (permalink / raw)
  To: Michael S. Tsirkin, Gerd Hoffmann
  Cc: glommer, Kevin O'Connor, Alexander Graf, qemu-devel

Michael S. Tsirkin wrote:
> On Mon, Dec 14, 2009 at 09:32:30PM +0100, Gerd Hoffmann wrote:
>> On 12/14/09 21:20, Michael S. Tsirkin wrote:
>>>> So far, it's not clear to me that anyone has demonstrated how this is
>>>> harmful for people that don't want pxe booting.  Assuming we fix the bug
>>>> about rom loading, then there's really no impact to users.
>>
>> Fix (v2) is on the list already.
>>
>>> PXE booting might have security impact. You do not want to
>>> do this if you are on a hostile network.
>>
>> Option rom loaded doesn't imply pxe boot will be tried.  It only means  
>> PXE boot can be selected, either via
>>
>>   -boot order=[something with 'n' here]
>>
>> or via
>>
>>   -boot menu=on + F12 + picking menu entry
>>
>> By default qemu doesn't try to PXE-boot, even if no other bootable  
>> device is available.
>>
>> cheers,
>>   Gerd
> 
> I guess so. But then, why are we loading it in BIOS
> and wasting memory? Let's only shadow the ROM
> when PXE is selected?

Some DOS-based software might need the UMA (RAM UMB).

- Sebastian

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 20:43                                         ` [Qemu-devel] Re: qdev property bug? Anthony Liguori
@ 2009-12-14 20:50                                           ` Michael S. Tsirkin
  2009-12-14 21:05                                             ` Anthony Liguori
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 20:50 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Mon, Dec 14, 2009 at 02:43:38PM -0600, Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
>> On Mon, Dec 14, 2009 at 09:32:30PM +0100, Gerd Hoffmann wrote:
>>   
>>> On 12/14/09 21:20, Michael S. Tsirkin wrote:
>>>     
>>>>> So far, it's not clear to me that anyone has demonstrated how this is
>>>>> harmful for people that don't want pxe booting.  Assuming we fix the bug
>>>>> about rom loading, then there's really no impact to users.
>>>>>         
>>> Fix (v2) is on the list already.
>>>
>>>     
>>>> PXE booting might have security impact. You do not want to
>>>> do this if you are on a hostile network.
>>>>       
>>> Option rom loaded doesn't imply pxe boot will be tried.  It only 
>>> means  PXE boot can be selected, either via
>>>
>>>   -boot order=[something with 'n' here]
>>>
>>> or via
>>>
>>>   -boot menu=on + F12 + picking menu entry
>>>
>>> By default qemu doesn't try to PXE-boot, even if no other bootable   
>>> device is available.
>>>
>>> cheers,
>>>   Gerd
>>>     
>>
>> I guess so. But then, why are we loading it in BIOS
>> and wasting memory? Let's only shadow the ROM
>> when PXE is selected?
>>   
>
> Because it can be selected by the user via the menu and because it can  
> be selected at runtime via the boot_set monitor command.

Yes, but it's not like we have nowhere to store them.
We could shadow ROM when it is actually needed.

> Also, the comment about "wasting memory" not quite accurate.  The memory  
> region in question is only used for roms.  If we didn't put roms there,  
> it would go to waste.

Some BIOSes I saw have an option not to use the first 1M for rom
shadowing :). Seriously as you see we are already
running out of that 1M.

> Currently, the only roms we load are pxe roms or things specified by  
> -option-rom.  You could certainly argue that making -option-rom higher  
> priority than implicit pxe roms is valuable but removing the pxe roms  
> really serves no purpose.
>
> Regards,
>
> Anthony Liguori

I am concerned about management.  User selects "PXE support" when
creating VM, and creationg succeeds, but in fact PXE can not work
because we can not shadow the ROM.

Sounds bad. If device creation failed,
user would get feedback when it is expected.

-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 20:44                                           ` Anthony Liguori
@ 2009-12-14 20:51                                             ` Michael S. Tsirkin
  2009-12-15  2:37                                               ` Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?) Anthony Liguori
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-14 20:51 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Mon, Dec 14, 2009 at 02:44:34PM -0600, Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
>> Or, we could have a very small ROM, that loads
>> more actual code from card or from qemu directly
>> when it is run.
>>   
>
> It's not as simple as it sounds but it's possible, in theory at least.
>
> But I think the question really is, what problem are we trying to solve?

Support 256 devices on PCI bus seamlessly.

> Regards,
>
> Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 20:47                                         ` Sebastian Herbszt
@ 2009-12-14 20:56                                           ` Anthony Liguori
  0 siblings, 0 replies; 101+ messages in thread
From: Anthony Liguori @ 2009-12-14 20:56 UTC (permalink / raw)
  To: Sebastian Herbszt
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Gerd Hoffmann

Sebastian Herbszt wrote:
> Some DOS-based software might need the UMA (RAM UMB).

I don't think that's the workload to optimize for in terms of the 
default settings.  Certainly, it's important to allow such workloads to 
disable all unnecessary rom loading but I don't think it's justification 
for default settings.

> - Sebastian
>

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 20:50                                           ` Michael S. Tsirkin
@ 2009-12-14 21:05                                             ` Anthony Liguori
  2009-12-14 21:36                                               ` Sebastian Herbszt
  2009-12-15  4:23                                               ` Kevin O'Connor
  0 siblings, 2 replies; 101+ messages in thread
From: Anthony Liguori @ 2009-12-14 21:05 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

Michael S. Tsirkin wrote:
> On Mon, Dec 14, 2009 at 02:43:38PM -0600, Anthony Liguori wrote:
>   
>> Because it can be selected by the user via the menu and because it can  
>> be selected at runtime via the boot_set monitor command.
>>     
>
> Yes, but it's not like we have nowhere to store them.
> We could shadow ROM when it is actually needed.
>   

I believe the way this works with real BIOSes is that the rom is 
initially loaded somewhere outside of the 1M region and it's init is 
executed.  It's then the rom's job to execute it's initialization.  
Afterwards, the bios copies the rom into the 1M region.  This is how PMM 
works.

The idea is that while outside of the 1M region, the rom can eliminate 
unnecessary code and update it's own header to reflect it's new, 
improved code size. 

I don't know whether gpxe will actually reduce it's size as part of this 
process so it may not matter.  After running the option roms init 
vector, the rom must be relocated into the option rom space though so 
even this technique is not a solution unless gpxe is able to discard a 
lot of bits it doesn't need.

>> Also, the comment about "wasting memory" not quite accurate.  The memory  
>> region in question is only used for roms.  If we didn't put roms there,  
>> it would go to waste.
>>     
>
> Some BIOSes I saw have an option not to use the first 1M for rom
> shadowing :). Seriously as you see we are already
> running out of that 1M.
>   

I think that's just the first phase of rom loading.

>> Currently, the only roms we load are pxe roms or things specified by  
>> -option-rom.  You could certainly argue that making -option-rom higher  
>> priority than implicit pxe roms is valuable but removing the pxe roms  
>> really serves no purpose.
>>
>> Regards,
>>
>> Anthony Liguori
>>     
>
> I am concerned about management.  User selects "PXE support" when
> creating VM, and creationg succeeds, but in fact PXE can not work
> because we can not shadow the ROM.
>
> Sounds bad. If device creation failed,
> user would get feedback when it is expected.
>   

It's unfortunately much more complicated than this :-/

Ignore the case of one nic, that should Just Work today.

If you have two nics, even if we are able to load both roms, we have no 
way of communicating to the bios that we want to use one BEV device vs. 
another.  That means if you have two nics that are both capable of pxe 
booting, '-boot n' really cannot be used to determine which one actually 
gets to pxe boot.

We'll have the same problem with BCV based extboot.  We really need to 
improve -boot to support things other than the concept of "first disk" 
and "first nic".

That's why I'm a fan of the intermediate solution of just stopping 
loading roms when we run out of room.  It's just as well defined 
behavior as we have even if we could load more roms.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 21:05                                             ` Anthony Liguori
@ 2009-12-14 21:36                                               ` Sebastian Herbszt
  2009-12-14 21:52                                                 ` Anthony Liguori
  2009-12-15  4:23                                               ` Kevin O'Connor
  1 sibling, 1 reply; 101+ messages in thread
From: Sebastian Herbszt @ 2009-12-14 21:36 UTC (permalink / raw)
  To: Anthony Liguori, Michael S. Tsirkin
  Cc: qemu-devel, glommer, Kevin O'Connor, Gerd Hoffmann, Alexander Graf

Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
>> On Mon, Dec 14, 2009 at 02:43:38PM -0600, Anthony Liguori wrote:
>>   
>>> Because it can be selected by the user via the menu and because it can  
>>> be selected at runtime via the boot_set monitor command.
>>>     
>>
>> Yes, but it's not like we have nowhere to store them.
>> We could shadow ROM when it is actually needed.
>>   
> 
> I believe the way this works with real BIOSes is that the rom is 
> initially loaded somewhere outside of the 1M region and it's init is 
> executed.  It's then the rom's job to execute it's initialization.  
> Afterwards, the bios copies the rom into the 1M region.  This is how PMM 
> works.
> 
> The idea is that while outside of the 1M region, the rom can eliminate 
> unnecessary code and update it's own header to reflect it's new, 
> improved code size. 

It's more like the following (pci 2.2):
- enable and map expansion rom bar
- find rom and copy to ram (0xC000-0xDFFFF)
- disable expansion rom bar
- call rom init
- rom might resize itself (DDIM)
- write protect rom

PMM doesn't have (anything?) to do with this and the rom doesn't have to be loaded
outside of 1MB.

> I don't know whether gpxe will actually reduce it's size as part of this 
> process so it may not matter.  After running the option roms init 
> vector, the rom must be relocated into the option rom space though so 
> even this technique is not a solution unless gpxe is able to discard a 
> lot of bits it doesn't need.

gPXE supports DDIM.

>>> Also, the comment about "wasting memory" not quite accurate.  The memory  
>>> region in question is only used for roms.  If we didn't put roms there,  
>>> it would go to waste.
>>>     
>>
>> Some BIOSes I saw have an option not to use the first 1M for rom
>> shadowing :). Seriously as you see we are already
>> running out of that 1M.
>>   
> 
> I think that's just the first phase of rom loading.

- Sebastian

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 21:36                                               ` Sebastian Herbszt
@ 2009-12-14 21:52                                                 ` Anthony Liguori
  2009-12-14 22:14                                                   ` Sebastian Herbszt
  0 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-14 21:52 UTC (permalink / raw)
  To: Sebastian Herbszt
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Gerd Hoffmann

Sebastian Herbszt wrote:
> Anthony Liguori wrote:
>> Michael S. Tsirkin wrote:
>>> On Mon, Dec 14, 2009 at 02:43:38PM -0600, Anthony Liguori wrote:
>>>  
>>>> Because it can be selected by the user via the menu and because it 
>>>> can  be selected at runtime via the boot_set monitor command.
>>>>     
>>>
>>> Yes, but it's not like we have nowhere to store them.
>>> We could shadow ROM when it is actually needed.
>>>   
>>
>> I believe the way this works with real BIOSes is that the rom is 
>> initially loaded somewhere outside of the 1M region and it's init is 
>> executed.  It's then the rom's job to execute it's initialization.  
>> Afterwards, the bios copies the rom into the 1M region.  This is how 
>> PMM works.
>>
>> The idea is that while outside of the 1M region, the rom can 
>> eliminate unnecessary code and update it's own header to reflect it's 
>> new, improved code size. 
>
> It's more like the following (pci 2.2):
> - enable and map expansion rom bar
> - find rom and copy to ram (0xC000-0xDFFFF)
> - disable expansion rom bar
> - call rom init
> - rom might resize itself (DDIM)
> - write protect rom
>
> PMM doesn't have (anything?) to do with this and the rom doesn't have 
> to be loaded
> outside of 1MB.

Well PMM is used to do the resizing.

But it sounds like the problem is that we should not be loading the roms 
into the rom space.  Instead, seabios should be mapping them into that 
space, running the rom init, then moving to the next one.

I suspect we need to either need to implement the proper pci interface 
for seabios to do this or we need to provide a pv channel.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 21:52                                                 ` Anthony Liguori
@ 2009-12-14 22:14                                                   ` Sebastian Herbszt
  0 siblings, 0 replies; 101+ messages in thread
From: Sebastian Herbszt @ 2009-12-14 22:14 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Gerd Hoffmann

Anthony Liguori wrote:
> Sebastian Herbszt wrote:
>> Anthony Liguori wrote:
>>> Michael S. Tsirkin wrote:
>>>> On Mon, Dec 14, 2009 at 02:43:38PM -0600, Anthony Liguori wrote:
>>>>  
>>>>> Because it can be selected by the user via the menu and because it 
>>>>> can  be selected at runtime via the boot_set monitor command.
>>>>>     
>>>>
>>>> Yes, but it's not like we have nowhere to store them.
>>>> We could shadow ROM when it is actually needed.
>>>>   
>>>
>>> I believe the way this works with real BIOSes is that the rom is 
>>> initially loaded somewhere outside of the 1M region and it's init is 
>>> executed.  It's then the rom's job to execute it's initialization.  
>>> Afterwards, the bios copies the rom into the 1M region.  This is how 
>>> PMM works.
>>>
>>> The idea is that while outside of the 1M region, the rom can 
>>> eliminate unnecessary code and update it's own header to reflect it's 
>>> new, improved code size. 
>>
>> It's more like the following (pci 2.2):
>> - enable and map expansion rom bar
>> - find rom and copy to ram (0xC000-0xDFFFF)
>> - disable expansion rom bar
>> - call rom init
>> - rom might resize itself (DDIM)
>> - write protect rom
>>
>> PMM doesn't have (anything?) to do with this and the rom doesn't have 
>> to be loaded
>> outside of 1MB.
> 
> Well PMM is used to do the resizing.

You can shrink in-place with rom layout like [header, run-time code, init code]. The init
code can then just be "truncated". You only need PMM if you can't manage with the allocated
memory.

> But it sounds like the problem is that we should not be loading the roms 
> into the rom space.  Instead, seabios should be mapping them into that 
> space, running the rom init, then moving to the next one.
> 
> I suspect we need to either need to implement the proper pci interface 
> for seabios to do this or we need to provide a pv channel.

I suggested a proper pci interface before [1]; please no pv channel.

[1] http://lists.gnu.org/archive/html/qemu-devel/2009-11/msg01823.html

- Sebastian

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-14 20:51                                             ` Michael S. Tsirkin
@ 2009-12-15  2:37                                               ` Anthony Liguori
  2009-12-15  3:55                                                 ` Kevin O'Connor
                                                                   ` (3 more replies)
  0 siblings, 4 replies; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15  2:37 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

[-- Attachment #1: Type: text/plain, Size: 1348 bytes --]

Michael S. Tsirkin wrote:
> On Mon, Dec 14, 2009 at 02:44:34PM -0600, Anthony Liguori wrote:
>   
>> Michael S. Tsirkin wrote:
>>     
>>> Or, we could have a very small ROM, that loads
>>> more actual code from card or from qemu directly
>>> when it is run.
>>>   
>>>       
>> It's not as simple as it sounds but it's possible, in theory at least.
>>
>> But I think the question really is, what problem are we trying to solve?
>>     
>
> Support 256 devices on PCI bus seamlessly

Okay, I think I've figured out how this is supposed to work.  With these 
two patches to SeaBIOS and the patch to qemu, I can run:

qemu -net nic,model=rtl8139 -net nic,model=virtio -net nic,model=e1000 
-boot menu=on

And all three option roms load.  I can also select which NIC I want to 
boot from using the F12 menu.  This works by not actually loading the 
option roms in the 1M space, but instead making them mappable through 
the PCI devices.  With PMM and DDIM, the result is that we only have to 
copy in 2K for each option rom which means we can support up to 48 
unique option roms.  That should be plenty for now.

These patches are very rough but I'll clean them up tomorrow.  I'm not 
sure the best way to integrate with the rom infrastructure since we no 
longer have a physical address to map to.  Any suggestions Gerd?

Regards,

Anthony Liguori

[-- Attachment #2: 0001-Do-not-guard-qemu-shadow-ram-work-around-in-CONFIG_O.patch --]
[-- Type: application/mbox, Size: 1849 bytes --]

[-- Attachment #3: 0001-Support-PCI-based-option-rom-loading.patch --]
[-- Type: application/mbox, Size: 4742 bytes --]

[-- Attachment #4: 0002-Disable-CONFIG_OPTIONROMS_DEPLOYED-by-default.patch --]
[-- Type: application/mbox, Size: 921 bytes --]

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15  2:37                                               ` Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?) Anthony Liguori
@ 2009-12-15  3:55                                                 ` Kevin O'Connor
  2009-12-15  4:34                                                 ` Kevin O'Connor
                                                                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 101+ messages in thread
From: Kevin O'Connor @ 2009-12-15  3:55 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Gerd Hoffmann, Sebastian Herbszt

On Mon, Dec 14, 2009 at 08:37:44PM -0600, Anthony Liguori wrote:
> Okay, I think I've figured out how this is supposed to work.  With these  
> two patches to SeaBIOS and the patch to qemu, I can run:

Yes - I think this is the best way to fix this.  Space optimizations
can be most easily done by allowing SeaBIOS to copy the option roms
into the area between 0xc0000-0xf0000.  This is also what a real BIOS
would do, and it's what SeaBIOS does when it is run on real hardware.

-Kevin

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [Qemu-devel] Re: qdev property bug?
  2009-12-14 21:05                                             ` Anthony Liguori
  2009-12-14 21:36                                               ` Sebastian Herbszt
@ 2009-12-15  4:23                                               ` Kevin O'Connor
  1 sibling, 0 replies; 101+ messages in thread
From: Kevin O'Connor @ 2009-12-15  4:23 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Gerd Hoffmann, Sebastian Herbszt

On Mon, Dec 14, 2009 at 03:05:22PM -0600, Anthony Liguori wrote:
> I believe the way this works with real BIOSes is that the rom is  
> initially loaded somewhere outside of the 1M region and it's init is  
> executed.  It's then the rom's job to execute it's initialization.   
> Afterwards, the bios copies the rom into the 1M region.  This is how PMM  
> works.

The option rom load is generally a little different.  The BIOS enables
the PCI rom bar, verifies the rom, copies the rom to the
0xa0000-0xf0000 region, unmaps the PCI rom bar, and then jumps to the
rom it just copied.  The rom may reduce its reported rom size to
effectively shrink its memory footprint.  As you noted in another
post, gPXE does this today by relocating itself into PMM allocated
memory.

The PCIv3 spec does define a feature where the bios can copy the rom
to some random area of memory and execute it - the rom is then
responsible for copying itself into the 0xa0000-0xf0000 region.
However, this support is optional for the BIOS to implement; SeaBIOS
doesn't implement it.

Having SeaBIOS copy the roms from PCI space enables a number of space
optimizations.  First, if SeaBIOS copies the roms, it can pack them so
that rom shrinking actually works.  As it is now, a rom can shrink
itself, but because SeaBIOS doesn't deploy the roms, the saved space
isn't utilized for other roms.  Second, SeaBIOS right now is about 75K
in size, but to satisfy qemu it fills itself to an even 128K.  When
SeaBIOS copies roms, it knows it can use the unused parts of the
e-segment (another 50K).

One idea I've been thinking about is to have SeaBIOS hoist it's 32bit
code into high-memory (much like what gPXE does).  This would make the
remaining parts of the e-segment available for roms.  It would also
free up another 30K of the f-segment for roms (the PCIv3 spec permits
roms to be located in the f-segment).  However, implementing this
doesn't seem like a high priority as most roms seem to fit okay today
(when rom shrinking works).

-Kevin

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15  2:37                                               ` Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?) Anthony Liguori
  2009-12-15  3:55                                                 ` Kevin O'Connor
@ 2009-12-15  4:34                                                 ` Kevin O'Connor
  2009-12-15 13:15                                                   ` Anthony Liguori
  2009-12-15  9:17                                                 ` Gerd Hoffmann
  2009-12-15 10:51                                                 ` Michael S. Tsirkin
  3 siblings, 1 reply; 101+ messages in thread
From: Kevin O'Connor @ 2009-12-15  4:34 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: seabios, qemu-devel

On Mon, Dec 14, 2009 at 08:37:44PM -0600, Anthony Liguori wrote:
> Okay, I think I've figured out how this is supposed to work.  With these  
> two patches to SeaBIOS and the patch to qemu, I can run:

I'm not sure why "Do not guard qemu shadow ram work around in
CONFIG_OPTIONROMS_DEPLOYED" patch is needed.  The code today is:

        if (CONFIG_OPTIONROMS_DEPLOYED) {
            int reg = pci_config_readb(bdf, 0x5a + i);
            if ((reg & 0x11) != 0x11) {
                // Need to copy optionroms to work around qemu implementation
                void *mem = (void*)(BUILD_ROM_START + i * 32*1024);
                memcpy((void*)BUILD_BIOS_TMP_ADDR, mem, 32*1024);
                pci_config_writeb(bdf, 0x5a + i, 0x33);
                memcpy(mem, (void*)BUILD_BIOS_TMP_ADDR, 32*1024);
                clear = 1;
            } else {
                pci_config_writeb(bdf, 0x5a + i, 0x33);
            }
        } else {
            pci_config_writeb(bdf, 0x5a + i, 0x33);
        }

So, in the non CONFIG_OPTIONROMS_DEPLOYED case, SeaBIOS will just do
the write enable call (pci_config_writeb(bdf, 0x5a + i, 0x33)).  The
CONFIG_OPTIONROMS_DEPLOYED case should just be to copy the roms qemu
has deployed.  If SeaBIOS is filling in the 0xc0000-0xf0000 space, it
shouldn't matter if the contents of that space is lost during the
write enable.

Let me know if I've missed something.

-Kevin

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15  2:37                                               ` Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?) Anthony Liguori
  2009-12-15  3:55                                                 ` Kevin O'Connor
  2009-12-15  4:34                                                 ` Kevin O'Connor
@ 2009-12-15  9:17                                                 ` Gerd Hoffmann
  2009-12-15 10:14                                                   ` Gerd Hoffmann
                                                                     ` (2 more replies)
  2009-12-15 10:51                                                 ` Michael S. Tsirkin
  3 siblings, 3 replies; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-15  9:17 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Sebastian Herbszt

On 12/15/09 03:37, Anthony Liguori wrote:
> Okay, I think I've figured out how this is supposed to work. With these
> two patches to SeaBIOS and the patch to qemu, I can run:
>
> qemu -net nic,model=rtl8139 -net nic,model=virtio -net nic,model=e1000
> -boot menu=on
>
> And all three option roms load. I can also select which NIC I want to
> boot from using the F12 menu. This works by not actually loading the
> option roms in the 1M space, but instead making them mappable through
> the PCI devices. With PMM and DDIM, the result is that we only have to
> copy in 2K for each option rom which means we can support up to 48
> unique option roms. That should be plenty for now.
>
> These patches are very rough but I'll clean them up tomorrow. I'm not
> sure the best way to integrate with the rom infrastructure since we no
> longer have a physical address to map to. Any suggestions Gerd?

Is this needed in the first place?  Integration into pci like your patch 
does looks sensible to me.  That wouldn't get us re-loading on reset, 
but as the guest shouldn't be able to modify the roms I don't think we 
need this ...

We could also add a "romfile" property to the pci bus and do everything 
(except setting the default filename) in generic pci code.

I'm more worried about the CONFIG_OPTIONROMS_DEPLOYED patches for 
seabios, although I don't fully understand what they are doing.  There 
are non-pci option roms (linuxboot, multiboot, extboot) which qemu will 
continue to deploy the way roms are deployed today.

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15  9:17                                                 ` Gerd Hoffmann
@ 2009-12-15 10:14                                                   ` Gerd Hoffmann
  2009-12-15 19:10                                                     ` Anthony Liguori
  2009-12-15 19:35                                                     ` Anthony Liguori
  2009-12-15 13:16                                                   ` Anthony Liguori
  2009-12-15 19:21                                                   ` Anthony Liguori
  2 siblings, 2 replies; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-15 10:14 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Sebastian Herbszt

   Hi,

> We could also add a "romfile" property to the pci bus and do everything
> (except setting the default filename) in generic pci code.

Patch attached (incremental to yours).

> I'm more worried about the CONFIG_OPTIONROMS_DEPLOYED patches for
> seabios, although I don't fully understand what they are doing. There
> are non-pci option roms (linuxboot, multiboot, extboot) which qemu will
> continue to deploy the way roms are deployed today.

-kernel didn't work on a quick test.

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15  2:37                                               ` Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?) Anthony Liguori
                                                                   ` (2 preceding siblings ...)
  2009-12-15  9:17                                                 ` Gerd Hoffmann
@ 2009-12-15 10:51                                                 ` Michael S. Tsirkin
  2009-12-15 19:05                                                   ` Anthony Liguori
  3 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-15 10:51 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Mon, Dec 14, 2009 at 08:37:44PM -0600, Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
>> On Mon, Dec 14, 2009 at 02:44:34PM -0600, Anthony Liguori wrote:
>>   
>>> Michael S. Tsirkin wrote:
>>>     
>>>> Or, we could have a very small ROM, that loads
>>>> more actual code from card or from qemu directly
>>>> when it is run.
>>>>         
>>> It's not as simple as it sounds but it's possible, in theory at least.
>>>
>>> But I think the question really is, what problem are we trying to solve?
>>>     
>>
>> Support 256 devices on PCI bus seamlessly
>
> Okay, I think I've figured out how this is supposed to work.  With these  
> two patches to SeaBIOS and the patch to qemu, I can run:
>
> qemu -net nic,model=rtl8139 -net nic,model=virtio -net nic,model=e1000  
> -boot menu=on
>
> And all three option roms load.  I can also select which NIC I want to  
> boot from using the F12 menu.  This works by not actually loading the  
> option roms in the 1M space, but instead making them mappable through  
> the PCI devices.  With PMM and DDIM, the result is that we only have to  
> copy in 2K for each option rom which means we can support up to 48  
> unique option roms.  That should be plenty for now.
>
> These patches are very rough but I'll clean them up tomorrow.  I'm not  
> sure the best way to integrate with the rom infrastructure since we no  
> longer have a physical address to map to.  Any suggestions Gerd?
>
> Regards,
>
> Anthony Liguori

>From a quick overview, I see register memory but no unregister?

-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15  4:34                                                 ` Kevin O'Connor
@ 2009-12-15 13:15                                                   ` Anthony Liguori
  2009-12-15 14:20                                                     ` Anthony Liguori
  0 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 13:15 UTC (permalink / raw)
  To: Kevin O'Connor; +Cc: seabios, qemu-devel

Kevin O'Connor wrote:
> On Mon, Dec 14, 2009 at 08:37:44PM -0600, Anthony Liguori wrote:
>   
>> Okay, I think I've figured out how this is supposed to work.  With these  
>> two patches to SeaBIOS and the patch to qemu, I can run:
>>     
>
> I'm not sure why "Do not guard qemu shadow ram work around in
> CONFIG_OPTIONROMS_DEPLOYED" patch is needed.  The code today is:
>
>         if (CONFIG_OPTIONROMS_DEPLOYED) {
>             int reg = pci_config_readb(bdf, 0x5a + i);
>             if ((reg & 0x11) != 0x11) {
>                 // Need to copy optionroms to work around qemu implementation
>                 void *mem = (void*)(BUILD_ROM_START + i * 32*1024);
>                 memcpy((void*)BUILD_BIOS_TMP_ADDR, mem, 32*1024);
>                 pci_config_writeb(bdf, 0x5a + i, 0x33);
>                 memcpy(mem, (void*)BUILD_BIOS_TMP_ADDR, 32*1024);
>                 clear = 1;
>             } else {
>                 pci_config_writeb(bdf, 0x5a + i, 0x33);
>             }
>         } else {
>             pci_config_writeb(bdf, 0x5a + i, 0x33);
>         }
>
> So, in the non CONFIG_OPTIONROMS_DEPLOYED case, SeaBIOS will just do
> the write enable call (pci_config_writeb(bdf, 0x5a + i, 0x33)).  The
> CONFIG_OPTIONROMS_DEPLOYED case should just be to copy the roms qemu
> has deployed.  If SeaBIOS is filling in the 0xc0000-0xf0000 space, it
> shouldn't matter if the contents of that space is lost during the
> write enable.
>   

The bios gets mapped in 0xe0000 .. 0x100000 so if SeaBIOS fills the 
0xc0000-0xf0000 space it will write over half of the bios.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15  9:17                                                 ` Gerd Hoffmann
  2009-12-15 10:14                                                   ` Gerd Hoffmann
@ 2009-12-15 13:16                                                   ` Anthony Liguori
  2009-12-15 21:24                                                     ` Sebastian Herbszt
  2009-12-15 19:21                                                   ` Anthony Liguori
  2 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 13:16 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Sebastian Herbszt

Gerd Hoffmann wrote:
> On 12/15/09 03:37, Anthony Liguori wrote:
>> Okay, I think I've figured out how this is supposed to work. With these
>> two patches to SeaBIOS and the patch to qemu, I can run:
>>
>> qemu -net nic,model=rtl8139 -net nic,model=virtio -net nic,model=e1000
>> -boot menu=on
>>
>> And all three option roms load. I can also select which NIC I want to
>> boot from using the F12 menu. This works by not actually loading the
>> option roms in the 1M space, but instead making them mappable through
>> the PCI devices. With PMM and DDIM, the result is that we only have to
>> copy in 2K for each option rom which means we can support up to 48
>> unique option roms. That should be plenty for now.
>>
>> These patches are very rough but I'll clean them up tomorrow. I'm not
>> sure the best way to integrate with the rom infrastructure since we no
>> longer have a physical address to map to. Any suggestions Gerd?
>
> Is this needed in the first place?  Integration into pci like your 
> patch does looks sensible to me.  That wouldn't get us re-loading on 
> reset, but as the guest shouldn't be able to modify the roms I don't 
> think we need this ...
>
> We could also add a "romfile" property to the pci bus and do 
> everything (except setting the default filename) in generic pci code.
>
> I'm more worried about the CONFIG_OPTIONROMS_DEPLOYED patches for 
> seabios, although I don't fully understand what they are doing.  There 
> are non-pci option roms (linuxboot, multiboot, extboot) which qemu 
> will continue to deploy the way roms are deployed today.

That's a good point.  Need to think about how to best handle that.  
SeaBIOS supports up to two static option roms so maybe what we need to 
do is make use of that mechanism for things like linuxboot/extboot.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 13:15                                                   ` Anthony Liguori
@ 2009-12-15 14:20                                                     ` Anthony Liguori
  2009-12-15 14:33                                                       ` [SeaBIOS] " Avi Kivity
  0 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 14:20 UTC (permalink / raw)
  To: Kevin O'Connor; +Cc: seabios, qemu-devel

Anthony Liguori wrote: 
>
> The bios gets mapped in 0xe0000 .. 0x100000 so if SeaBIOS fills the 
> 0xc0000-0xf0000 space it will write over half of the bios.

I'm a little confused by this.  SeaBIOS seems to assume that it only has 
to deal with the 0xf0000 .. 0x100000 space as the bios which is 
certainly true (i don't think there's anything special about the 0xe0000 
.. 0xf0000 region).

I'm not sure why we load the 128K worth of bios instead of just loading 64K.

Regards,

Anthony Liguori

> Regards,
>
> Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [SeaBIOS] Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 14:20                                                     ` Anthony Liguori
@ 2009-12-15 14:33                                                       ` Avi Kivity
  2009-12-15 17:35                                                         ` Anthony Liguori
  0 siblings, 1 reply; 101+ messages in thread
From: Avi Kivity @ 2009-12-15 14:33 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Kevin O'Connor, seabios, qemu-devel

On 12/15/2009 04:20 PM, Anthony Liguori wrote:
> Anthony Liguori wrote:
>>
>> The bios gets mapped in 0xe0000 .. 0x100000 so if SeaBIOS fills the 
>> 0xc0000-0xf0000 space it will write over half of the bios.
>
> I'm a little confused by this.  SeaBIOS seems to assume that it only 
> has to deal with the 0xf0000 .. 0x100000 space as the bios which is 
> certainly true (i don't think there's anything special about the 
> 0xe0000 .. 0xf0000 region).
>
> I'm not sure why we load the 128K worth of bios instead of just 
> loading 64K.
>

bochs bios required all 128kB, so this is probably a leftover.

-- 
error compiling committee.c: too many arguments to function

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [SeaBIOS] Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 14:33                                                       ` [SeaBIOS] " Avi Kivity
@ 2009-12-15 17:35                                                         ` Anthony Liguori
  2009-12-15 23:54                                                           ` Kevin OConnor
  0 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 17:35 UTC (permalink / raw)
  To: Avi Kivity; +Cc: Kevin O'Connor, seabios, qemu-devel

Avi Kivity wrote:
> On 12/15/2009 04:20 PM, Anthony Liguori wrote:
>> Anthony Liguori wrote:
>>>
>>> The bios gets mapped in 0xe0000 .. 0x100000 so if SeaBIOS fills the 
>>> 0xc0000-0xf0000 space it will write over half of the bios.
>>
>> I'm a little confused by this.  SeaBIOS seems to assume that it only 
>> has to deal with the 0xf0000 .. 0x100000 space as the bios which is 
>> certainly true (i don't think there's anything special about the 
>> 0xe0000 .. 0xf0000 region).
>>
>> I'm not sure why we load the 128K worth of bios instead of just 
>> loading 64K.
>>
>
> bochs bios required all 128kB, so this is probably a leftover.

This is apparently well defined in the PIIX spec.  There is a bit of a 
difference between the lower half and upper half of the BIOS region 
though and I expect this is part of what the problem is.  FYI, the 
following patch works.  Surprisingly, we only need to restore the 
0xe8000..0xe8fff region.  Still trying to understand what's happening.

diff --git a/src/shadow.c b/src/shadow.c
index f0f97c5..860f461 100644
--- a/src/shadow.c
+++ b/src/shadow.c
@@ -29,7 +29,8 @@ __make_bios_writable(u16 bdf)
     int clear = 0;
     int i;
     for (i=0; i<6; i++) {
-        if (CONFIG_OPTIONROMS_DEPLOYED) {
+        /* need to copy 0xe8000 bios region for qemu */
+        if (i==5) {
             int reg = pci_config_readb(bdf, 0x5a + i);
             if ((reg & 0x11) != 0x11) {
                 // Need to copy optionroms to work around qemu 
implementation

Regards,

Anthony Liguori

^ permalink raw reply related	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 10:51                                                 ` Michael S. Tsirkin
@ 2009-12-15 19:05                                                   ` Anthony Liguori
  2009-12-15 19:06                                                     ` Anthony Liguori
  0 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 19:05 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

Michael S. Tsirkin wrote:
> From a quick overview, I see register memory but no unregister?
>   

There's no cpu_unregister_physical_memory() in qemu.  Devices can 
unregister an io memory type but this is not io memory, this is ram.

We should qemu_ram_free() though.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 19:05                                                   ` Anthony Liguori
@ 2009-12-15 19:06                                                     ` Anthony Liguori
  0 siblings, 0 replies; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 19:06 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
>> From a quick overview, I see register memory but no unregister?
>>   
>
> There's no cpu_unregister_physical_memory() in qemu.  Devices can 
> unregister an io memory type but this is not io memory, this is ram.
>
> We should qemu_ram_free() though.

Except it's a nop :-)

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 10:14                                                   ` Gerd Hoffmann
@ 2009-12-15 19:10                                                     ` Anthony Liguori
  2009-12-16 12:03                                                       ` Gerd Hoffmann
  2009-12-15 19:35                                                     ` Anthony Liguori
  1 sibling, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 19:10 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Sebastian Herbszt

Gerd Hoffmann wrote:
>   Hi,
>
>> We could also add a "romfile" property to the pci bus and do everything
>> (except setting the default filename) in generic pci code.
>
> Patch attached (incremental to yours).

Sounds great, but no patch is attached.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15  9:17                                                 ` Gerd Hoffmann
  2009-12-15 10:14                                                   ` Gerd Hoffmann
  2009-12-15 13:16                                                   ` Anthony Liguori
@ 2009-12-15 19:21                                                   ` Anthony Liguori
  2009-12-15 21:19                                                     ` Michael S. Tsirkin
  2 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 19:21 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Sebastian Herbszt

Gerd Hoffmann wrote:
> On 12/15/09 03:37, Anthony Liguori wrote:
>> Okay, I think I've figured out how this is supposed to work. With these
>> two patches to SeaBIOS and the patch to qemu, I can run:
>>
>> qemu -net nic,model=rtl8139 -net nic,model=virtio -net nic,model=e1000
>> -boot menu=on
>>
>> And all three option roms load. I can also select which NIC I want to
>> boot from using the F12 menu. This works by not actually loading the
>> option roms in the 1M space, but instead making them mappable through
>> the PCI devices. With PMM and DDIM, the result is that we only have to
>> copy in 2K for each option rom which means we can support up to 48
>> unique option roms. That should be plenty for now.
>>
>> These patches are very rough but I'll clean them up tomorrow. I'm not
>> sure the best way to integrate with the rom infrastructure since we no
>> longer have a physical address to map to. Any suggestions Gerd?
>
> Is this needed in the first place?

Only if we care about 'info roms' working.  Problem is roms is very 
centric now to roms at a static guest physical location.  In this case, 
the rom lives in hardware and is mapped into physical memory based on 
what the guest does.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 10:14                                                   ` Gerd Hoffmann
  2009-12-15 19:10                                                     ` Anthony Liguori
@ 2009-12-15 19:35                                                     ` Anthony Liguori
  2009-12-15 21:17                                                       ` Michael S. Tsirkin
  1 sibling, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 19:35 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Michael S. Tsirkin, glommer, seabios, qemu-devel, Alexander Graf,
	Kevin O'Connor, Sebastian Herbszt

Gerd Hoffmann wrote:
> -kernel didn't work on a quick test.

Thinking about how to fix this, we have two options.  The first would be 
to use the support in SeaBIOS for static roms but that would limit us to 
two user supplied option roms (including kernel/multiboot/extboot).  We 
could extend this to more than two roms but I think that's generally ugly.

Alternatively, we could introduce a special rom-only PCI device.  
Besides getting support for a much greater number of option roms, it 
also gives us a much nicer way to integrate multiboot/linux boot support 
via qdev (instead of the ugly machine hack we have now).

We could make them multifunction devices so that we don't unnecessarily 
burn PCI slots to support roms.

Regards,

Anthony Liguori
> cheers,
>   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 19:35                                                     ` Anthony Liguori
@ 2009-12-15 21:17                                                       ` Michael S. Tsirkin
  2009-12-15 21:41                                                         ` Anthony Liguori
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-15 21:17 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: glommer, seabios, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Tue, Dec 15, 2009 at 01:35:52PM -0600, Anthony Liguori wrote:
> Gerd Hoffmann wrote:
>> -kernel didn't work on a quick test.
>
> Thinking about how to fix this, we have two options.

Hmm, can you pls explain why it stops working?

> The first would be  
> to use the support in SeaBIOS for static roms but that would limit us to  
> two user supplied option roms (including kernel/multiboot/extboot).  We  
> could extend this to more than two roms but I think that's generally 
> ugly.
>
> Alternatively, we could introduce a special rom-only PCI device.   
> Besides getting support for a much greater number of option roms, it  
> also gives us a much nicer way to integrate multiboot/linux boot support  
> via qdev (instead of the ugly machine hack we have now).
>
> We could make them multifunction devices so that we don't unnecessarily  
> burn PCI slots to support roms.
>
> Regards,
>
> Anthony Liguori
>> cheers,
>>   Gerd

Will be a problem for non-PCI systems?

-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 19:21                                                   ` Anthony Liguori
@ 2009-12-15 21:19                                                     ` Michael S. Tsirkin
  2009-12-15 21:45                                                       ` Anthony Liguori
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-15 21:19 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Tue, Dec 15, 2009 at 01:21:38PM -0600, Anthony Liguori wrote:
> Gerd Hoffmann wrote:
>> On 12/15/09 03:37, Anthony Liguori wrote:
>>> Okay, I think I've figured out how this is supposed to work. With these
>>> two patches to SeaBIOS and the patch to qemu, I can run:
>>>
>>> qemu -net nic,model=rtl8139 -net nic,model=virtio -net nic,model=e1000
>>> -boot menu=on
>>>
>>> And all three option roms load. I can also select which NIC I want to
>>> boot from using the F12 menu. This works by not actually loading the
>>> option roms in the 1M space, but instead making them mappable through
>>> the PCI devices. With PMM and DDIM, the result is that we only have to
>>> copy in 2K for each option rom which means we can support up to 48
>>> unique option roms. That should be plenty for now.
>>>
>>> These patches are very rough but I'll clean them up tomorrow. I'm not
>>> sure the best way to integrate with the rom infrastructure since we no
>>> longer have a physical address to map to. Any suggestions Gerd?
>>
>> Is this needed in the first place?
>
> Only if we care about 'info roms' working.  Problem is roms is very  
> centric now to roms at a static guest physical location.  In this case,  
> the rom lives in hardware and is mapped into physical memory based on  
> what the guest does.
>
> Regards,
>
> Anthony Liguori


I also think it is very important to have roms sent during
migration, otherwise things break if we migrate in the middle
of accessing roms.

-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 13:16                                                   ` Anthony Liguori
@ 2009-12-15 21:24                                                     ` Sebastian Herbszt
  2009-12-15 21:31                                                       ` Anthony Liguori
  2009-12-16  4:29                                                       ` Kevin O'Connor
  0 siblings, 2 replies; 101+ messages in thread
From: Sebastian Herbszt @ 2009-12-15 21:24 UTC (permalink / raw)
  To: Anthony Liguori, Gerd Hoffmann
  Cc: qemu-devel, glommer, Kevin O'Connor, Alexander Graf,
	Michael S. Tsirkin

Anthony Liguori wrote:
> Gerd Hoffmann wrote:
>> I'm more worried about the CONFIG_OPTIONROMS_DEPLOYED patches for 
>> seabios, although I don't fully understand what they are doing.  There 
>> are non-pci option roms (linuxboot, multiboot, extboot) which qemu 
>> will continue to deploy the way roms are deployed today.
> 
> That's a good point.  Need to think about how to best handle that.  
> SeaBIOS supports up to two static option roms so maybe what we need to 
> do is make use of that mechanism for things like linuxboot/extboot.

Keep loading custom roms (e.g. from -option-rom) with rom_add_file starting at 0xc8000.
Modify SeaBIOS to scan the memory range for pre-deployed option roms before deploying
PCI roms. SeaBIOS will find the last pre-deployed rom and have a starting address for
deploying PCI roms. This will keep ISA option roms working.

- Sebastian

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:24                                                     ` Sebastian Herbszt
@ 2009-12-15 21:31                                                       ` Anthony Liguori
  2009-12-15 21:38                                                         ` Sebastian Herbszt
  2009-12-16  4:29                                                       ` Kevin O'Connor
  1 sibling, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 21:31 UTC (permalink / raw)
  To: Sebastian Herbszt
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Gerd Hoffmann

Sebastian Herbszt wrote:
> Anthony Liguori wrote:
>> Gerd Hoffmann wrote:
>>> I'm more worried about the CONFIG_OPTIONROMS_DEPLOYED patches for 
>>> seabios, although I don't fully understand what they are doing.  
>>> There are non-pci option roms (linuxboot, multiboot, extboot) which 
>>> qemu will continue to deploy the way roms are deployed today.
>>
>> That's a good point.  Need to think about how to best handle that.  
>> SeaBIOS supports up to two static option roms so maybe what we need 
>> to do is make use of that mechanism for things like linuxboot/extboot.
>
> Keep loading custom roms (e.g. from -option-rom) with rom_add_file 
> starting at 0xc8000.
> Modify SeaBIOS to scan the memory range for pre-deployed option roms 
> before deploying
> PCI roms. SeaBIOS will find the last pre-deployed rom and have a 
> starting address for
> deploying PCI roms. This will keep ISA option roms working.

If we make -option-rom appear through a PCI device, then DDIM will work 
properly for those roms.  Also, it would be nice if Linux boot used a 
PCI device instead of fw_cfg to load the kernel into memory.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:31                                                       ` Anthony Liguori
@ 2009-12-15 21:38                                                         ` Sebastian Herbszt
  2009-12-15 22:00                                                           ` Anthony Liguori
  0 siblings, 1 reply; 101+ messages in thread
From: Sebastian Herbszt @ 2009-12-15 21:38 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Gerd Hoffmann

Anthony Liguori wrote:
> Sebastian Herbszt wrote:
>> Anthony Liguori wrote:
>>> Gerd Hoffmann wrote:
>>>> I'm more worried about the CONFIG_OPTIONROMS_DEPLOYED patches for 
>>>> seabios, although I don't fully understand what they are doing.  
>>>> There are non-pci option roms (linuxboot, multiboot, extboot) which 
>>>> qemu will continue to deploy the way roms are deployed today.
>>>
>>> That's a good point.  Need to think about how to best handle that.  
>>> SeaBIOS supports up to two static option roms so maybe what we need 
>>> to do is make use of that mechanism for things like linuxboot/extboot.
>>
>> Keep loading custom roms (e.g. from -option-rom) with rom_add_file 
>> starting at 0xc8000.
>> Modify SeaBIOS to scan the memory range for pre-deployed option roms 
>> before deploying
>> PCI roms. SeaBIOS will find the last pre-deployed rom and have a 
>> starting address for
>> deploying PCI roms. This will keep ISA option roms working.
> 
> If we make -option-rom appear through a PCI device, then DDIM will work 
> properly for those roms.  Also, it would be nice if Linux boot used a 
> PCI device instead of fw_cfg to load the kernel into memory.

What about isapc? Or (pci)pc with isa card? Keeping the possibility of having
option roms pre-deployed also allows using Bochs BIOS until SeaBIOS has no
more regressions.

- Sebastian

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:17                                                       ` Michael S. Tsirkin
@ 2009-12-15 21:41                                                         ` Anthony Liguori
  2009-12-16  0:33                                                           ` Chris Wright
                                                                             ` (2 more replies)
  0 siblings, 3 replies; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 21:41 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Chris Wright, glommer, seabios, qemu-devel, Alexander Graf,
	Kevin O'Connor, Gerd Hoffmann, Sebastian Herbszt

Michael S. Tsirkin wrote:
> On Tue, Dec 15, 2009 at 01:35:52PM -0600, Anthony Liguori wrote:
>   
>> Gerd Hoffmann wrote:
>>     
>>> -kernel didn't work on a quick test.
>>>       
>> Thinking about how to fix this, we have two options.
>>     
>
> Hmm, can you pls explain why it stops working?
>   

Sure.  SeaBIOS loads roms in a few ways.

If CONFIG_OPTIONROMS_DEPLOYED, then SeaBIOS scans the 0xc0000..0xf0000 
region for anything that looks like a rom.  This is how Bochs did it and 
is what qemu supports.  This is not how modern systems work though.

Modern systems (SeaBIOS with !CONFIG_OPTIONROMS_DEPLOYED), walk the PCI 
bus and look for any device with a PCI_ROM_ADDRESS that maps a valid 
option rom.  It will map the rom in PCI memory and run it's init 
function.  The rom can use PMM to allocate temporary memory to 
reorganize itself.  During this time, the rom area is writable.  The rom 
will create a stub that's usually pretty small that gets loaded by the 
BIOS after init into the 0xc0000..0xf0000 region.

So when !CONFIG_OPTIONROMS_DEPLOYED, SeaBIOS does look in this region 
for roms because it maps them all from the actual PCI devices.

SeaBIOS can also load roms from up to two fixed physical addresses (when 
!CONFIG_OPTIONROMS_DEPLOYED) or from a CBFS payload. 

BTW, I'm pretty sure this style of option rom loading (from a PCI 
device) is going to be required for device passthrough if we want to 
support running those roms in the guests.  In fact, it should Just Work 
with my patches !CONFIG_OPTIONROMS_DEPLOYED in SeaBIOS.

>> Regards,
>>
>> Anthony Liguori
>>     
>>> cheers,
>>>   Gerd
>>>       
>
> Will be a problem for non-PCI systems?
>   

You mean, non-PCI x86 systems?  I think -m isapc is mainly used for dos 
guests.  I don't think it's really useful in combination with -kernel 
and certainly not for extboot.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:19                                                     ` Michael S. Tsirkin
@ 2009-12-15 21:45                                                       ` Anthony Liguori
  2009-12-15 21:52                                                         ` Michael S. Tsirkin
  0 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 21:45 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

Michael S. Tsirkin wrote:
> On Tue, Dec 15, 2009 at 01:21:38PM -0600, Anthony Liguori wrote:
>   
>> Gerd Hoffmann wrote:
>>     
>>> On 12/15/09 03:37, Anthony Liguori wrote:
>>>       
>>>> Okay, I think I've figured out how this is supposed to work. With these
>>>> two patches to SeaBIOS and the patch to qemu, I can run:
>>>>
>>>> qemu -net nic,model=rtl8139 -net nic,model=virtio -net nic,model=e1000
>>>> -boot menu=on
>>>>
>>>> And all three option roms load. I can also select which NIC I want to
>>>> boot from using the F12 menu. This works by not actually loading the
>>>> option roms in the 1M space, but instead making them mappable through
>>>> the PCI devices. With PMM and DDIM, the result is that we only have to
>>>> copy in 2K for each option rom which means we can support up to 48
>>>> unique option roms. That should be plenty for now.
>>>>
>>>> These patches are very rough but I'll clean them up tomorrow. I'm not
>>>> sure the best way to integrate with the rom infrastructure since we no
>>>> longer have a physical address to map to. Any suggestions Gerd?
>>>>         
>>> Is this needed in the first place?
>>>       
>> Only if we care about 'info roms' working.  Problem is roms is very  
>> centric now to roms at a static guest physical location.  In this case,  
>> the rom lives in hardware and is mapped into physical memory based on  
>> what the guest does.
>>
>> Regards,
>>
>> Anthony Liguori
>>     
>
>
> I also think it is very important to have roms sent during
> migration, otherwise things break if we migrate in the middle
> of accessing roms.
>   

Heh, this is going to be really broken with my patches :-)

We're during qemu_ram_alloc() and we currently don't have a means to 
associate ram with anything meaningful.  This means that if you hot plug 
on two ends in different orders (even with fixed slots), the returned 
qemu_ram_alloc() pointers will be different for the same device.  This 
means when you did the live migration of the rom contents, you'd get the 
wrong roms in the wrong places.

I think we need to improve how we do qemu_ram_alloc() such that we can 
associate some meaningful context with each allocated chunk that we can 
migrate with the chunk of ram.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:45                                                       ` Anthony Liguori
@ 2009-12-15 21:52                                                         ` Michael S. Tsirkin
  2009-12-15 21:57                                                           ` Anthony Liguori
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-15 21:52 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Tue, Dec 15, 2009 at 03:45:24PM -0600, Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
>> On Tue, Dec 15, 2009 at 01:21:38PM -0600, Anthony Liguori wrote:
>>   
>>> Gerd Hoffmann wrote:
>>>     
>>>> On 12/15/09 03:37, Anthony Liguori wrote:
>>>>       
>>>>> Okay, I think I've figured out how this is supposed to work. With these
>>>>> two patches to SeaBIOS and the patch to qemu, I can run:
>>>>>
>>>>> qemu -net nic,model=rtl8139 -net nic,model=virtio -net nic,model=e1000
>>>>> -boot menu=on
>>>>>
>>>>> And all three option roms load. I can also select which NIC I want to
>>>>> boot from using the F12 menu. This works by not actually loading the
>>>>> option roms in the 1M space, but instead making them mappable through
>>>>> the PCI devices. With PMM and DDIM, the result is that we only have to
>>>>> copy in 2K for each option rom which means we can support up to 48
>>>>> unique option roms. That should be plenty for now.
>>>>>
>>>>> These patches are very rough but I'll clean them up tomorrow. I'm not
>>>>> sure the best way to integrate with the rom infrastructure since we no
>>>>> longer have a physical address to map to. Any suggestions Gerd?
>>>>>         
>>>> Is this needed in the first place?
>>>>       
>>> Only if we care about 'info roms' working.  Problem is roms is very   
>>> centric now to roms at a static guest physical location.  In this 
>>> case,  the rom lives in hardware and is mapped into physical memory 
>>> based on  what the guest does.
>>>
>>> Regards,
>>>
>>> Anthony Liguori
>>>     
>>
>>
>> I also think it is very important to have roms sent during
>> migration, otherwise things break if we migrate in the middle
>> of accessing roms.
>>   
>
> Heh, this is going to be really broken with my patches :-)
>
> We're during qemu_ram_alloc() and we currently don't have a means to  
> associate ram with anything meaningful.  This means that if you hot plug  
> on two ends in different orders (even with fixed slots), the returned  
> qemu_ram_alloc() pointers will be different for the same device.  This  
> means when you did the live migration of the rom contents, you'd get the  
> wrong roms in the wrong places.
>
> I think we need to improve how we do qemu_ram_alloc() such that we can  
> associate some meaningful context with each allocated chunk that we can  
> migrate with the chunk of ram.
>
> Regards,
>
> Anthony Liguori

Hmm. You think all this is 0.12 material?

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:52                                                         ` Michael S. Tsirkin
@ 2009-12-15 21:57                                                           ` Anthony Liguori
  2009-12-15 21:59                                                             ` Michael S. Tsirkin
  0 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 21:57 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

Michael S. Tsirkin wrote:
>> Heh, this is going to be really broken with my patches :-)
>>
>> We're during qemu_ram_alloc() and we currently don't have a means to  
>> associate ram with anything meaningful.  This means that if you hot plug  
>> on two ends in different orders (even with fixed slots), the returned  
>> qemu_ram_alloc() pointers will be different for the same device.  This  
>> means when you did the live migration of the rom contents, you'd get the  
>> wrong roms in the wrong places.
>>
>> I think we need to improve how we do qemu_ram_alloc() such that we can  
>> associate some meaningful context with each allocated chunk that we can  
>> migrate with the chunk of ram.
>>
>> Regards,
>>
>> Anthony Liguori
>>     
>
> Hmm. You think all this is 0.12 material?
>   
I think it's stable-0.12 material because it's badly broken right now 
but it's clearly not a candidate for 0.12.0 as it still doesn't work 
reliably.

I'm going to pull in Gerd's fix for 0.12.0.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:57                                                           ` Anthony Liguori
@ 2009-12-15 21:59                                                             ` Michael S. Tsirkin
  2009-12-15 22:26                                                               ` Anthony Liguori
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-15 21:59 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Tue, Dec 15, 2009 at 03:57:30PM -0600, Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
>>> Heh, this is going to be really broken with my patches :-)
>>>
>>> We're during qemu_ram_alloc() and we currently don't have a means to  
>>> associate ram with anything meaningful.  This means that if you hot 
>>> plug  on two ends in different orders (even with fixed slots), the 
>>> returned  qemu_ram_alloc() pointers will be different for the same 
>>> device.  This  means when you did the live migration of the rom 
>>> contents, you'd get the  wrong roms in the wrong places.
>>>
>>> I think we need to improve how we do qemu_ram_alloc() such that we 
>>> can  associate some meaningful context with each allocated chunk that 
>>> we can  migrate with the chunk of ram.
>>>
>>> Regards,
>>>
>>> Anthony Liguori
>>>     
>>
>> Hmm. You think all this is 0.12 material?
>>   
> I think it's stable-0.12 material because it's badly broken right now  

I thought the rule was no guest visible changes in stable series?

> but it's clearly not a candidate for 0.12.0 as it still doesn't work  
> reliably.
>
> I'm going to pull in Gerd's fix for 0.12.0.
>
> Regards,
>
> Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:38                                                         ` Sebastian Herbszt
@ 2009-12-15 22:00                                                           ` Anthony Liguori
  2009-12-17 21:14                                                             ` Sebastian Herbszt
  0 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 22:00 UTC (permalink / raw)
  To: Sebastian Herbszt
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Gerd Hoffmann

Sebastian Herbszt wrote:
> What about isapc? Or (pci)pc with isa card?

I'm not sure how the bios enumerates isa option roms on bare metal.  
That said, I don't know that it's all that important to support 
-option-rom, -kernel, or extboot on isapc.

The isa version of cirrus-vga will still load it's rom with rom_add.  I 
guess SeaBIOS needs to know how to properly initialize that.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:59                                                             ` Michael S. Tsirkin
@ 2009-12-15 22:26                                                               ` Anthony Liguori
  2009-12-15 22:51                                                                 ` Sebastian Herbszt
  0 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-15 22:26 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

Michael S. Tsirkin wrote:
>> I think it's stable-0.12 material because it's badly broken right now  
>>     
>
> I thought the rule was no guest visible changes in stable series?
>   

Yeah, good point, so we need to figure out something for 0.12.0.

Sebastian's suggestion of loading roms from 0xc0000 first and then from 
PCI devices is a good one, but I think the problem with that is that the 
roms don't necessarily have to be contiguous in that space.  For 
instance, the lower bios portions are technically in the rom area which 
leaves a big gap in the middle.

We could just assume that knowledge in SeaBIOS.

We'll also need the ability to select whether to use PCI or legacy rom 
loading for each PCI device (via a qdev property).  This will need to be 
plumbed into the machine compat bits such that -M pc-0.11.0 uses legacy 
rom loading.  Otherwise, the PCI devices will be detectably different 
within the guest.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 22:26                                                               ` Anthony Liguori
@ 2009-12-15 22:51                                                                 ` Sebastian Herbszt
  2009-12-16 14:49                                                                   ` Gerd Hoffmann
  0 siblings, 1 reply; 101+ messages in thread
From: Sebastian Herbszt @ 2009-12-15 22:51 UTC (permalink / raw)
  To: Anthony Liguori, Michael S. Tsirkin
  Cc: qemu-devel, glommer, Kevin O'Connor, Gerd Hoffmann, Alexander Graf

Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
>>> I think it's stable-0.12 material because it's badly broken right now  
>>>     
>>
>> I thought the rule was no guest visible changes in stable series?
>>   
> 
> Yeah, good point, so we need to figure out something for 0.12.0.
> 
> Sebastian's suggestion of loading roms from 0xc0000 first and then from 
> PCI devices is a good one, but I think the problem with that is that the 
> roms don't necessarily have to be contiguous in that space.  For 
> instance, the lower bios portions are technically in the rom area which 
> leaves a big gap in the middle.

I don't think i get your objection - mind to explain it a little bit?
My suggestion was like this:
PCI pc and -option-rom rom1.bin -option-rom rom2.bin

Qemu will map rom1.bin to PC_ROM_MIN_OPTION (0xc8000) and map rom2.bin
to 0xd0000. Either qemu will map vga bios to PC_ROM_MIN_VGA (0xc0000) or
SeaBIOS will map it there (with pci 3.0 it could map it somewhere else, but i doubt thats
a good idea). In case the vga bios size is below 0x8000, some rom space is lost. SeaBIOS
will scan the option rom space starting at PC_ROM_MIN_OPTION and adjust its RomEnd in
case a rom is found. Then it will start the pci scan and map pci option roms after RomEnd.

- Sebastian

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [SeaBIOS] Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 17:35                                                         ` Anthony Liguori
@ 2009-12-15 23:54                                                           ` Kevin OConnor
  2009-12-16  0:41                                                             ` Anthony Liguori
  0 siblings, 1 reply; 101+ messages in thread
From: Kevin OConnor @ 2009-12-15 23:54 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: seabios, Avi Kivity, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 1132 bytes --]

On Tue, Dec 15, 2009 at 12:35 PM, Anthony Liguori <anthony@codemonkey.ws>wrote:

> Avi Kivity wrote:
>
>> bochs bios required all 128kB, so this is probably a leftover.
>>
>
> This is apparently well defined in the PIIX spec.  There is a bit of a
> difference between the lower half and upper half of the BIOS region though
> and I expect this is part of what the problem is.  FYI, the following patch
> works.  Surprisingly, we only need to restore the 0xe8000..0xe8fff region.
>  Still trying to understand what's happening.
>
>
SeaBIOS is currently using over 64K of space.  So, it is extending into the
e-segment
and thus needs to have the e-segment copied properly (I missed that in my
earlier email).

SeaBIOS is only extending a few K into the e-segment, so only that part
needs to
be saved and restored.

Should SeaBIOS options be trimmed so that it fit under 64K, then the build
would
create only a 64K rom.  However, since it is larger than 64K, it pads itself
to 128K.  As
mentioned before, SeaBIOS can still copy roms into the unused parts of the
e-segment,
as it knows which parts of the e-segment it is using.

-Kevin

[-- Attachment #2: Type: text/html, Size: 1643 bytes --]

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:41                                                         ` Anthony Liguori
@ 2009-12-16  0:33                                                           ` Chris Wright
  2009-12-16  1:32                                                             ` Anthony Liguori
  2009-12-16  4:57                                                           ` Kevin O'Connor
  2009-12-16 14:41                                                           ` Gerd Hoffmann
  2 siblings, 1 reply; 101+ messages in thread
From: Chris Wright @ 2009-12-16  0:33 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Chris Wright, Michael S. Tsirkin, glommer, seabios, qemu-devel,
	Alexander Graf, Kevin O'Connor, Gerd Hoffmann,
	Sebastian Herbszt

* Anthony Liguori (anthony@codemonkey.ws) wrote:
> BTW, I'm pretty sure this style of option rom loading (from a PCI
> device) is going to be required for device passthrough if we want to
> support running those roms in the guests.

I think so too.

> In fact, it should Just
> Work with my patches !CONFIG_OPTIONROMS_DEPLOYED in SeaBIOS.

What would be the magic to boot from that ROM?

thanks,
-chris

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [SeaBIOS] Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 23:54                                                           ` Kevin OConnor
@ 2009-12-16  0:41                                                             ` Anthony Liguori
  2009-12-16  4:20                                                               ` Kevin O'Connor
  0 siblings, 1 reply; 101+ messages in thread
From: Anthony Liguori @ 2009-12-16  0:41 UTC (permalink / raw)
  To: Kevin OConnor; +Cc: seabios, Avi Kivity, qemu-devel

Kevin OConnor wrote:
> On Tue, Dec 15, 2009 at 12:35 PM, Anthony Liguori 
> <anthony@codemonkey.ws <mailto:anthony@codemonkey.ws>> wrote:
>
>     Avi Kivity wrote:
>
>         bochs bios required all 128kB, so this is probably a leftover.
>
>
>     This is apparently well defined in the PIIX spec.  There is a bit
>     of a difference between the lower half and upper half of the BIOS
>     region though and I expect this is part of what the problem is.
>      FYI, the following patch works.  Surprisingly, we only need to
>     restore the 0xe8000..0xe8fff region.  Still trying to understand
>     what's happening.
>
>
> SeaBIOS is currently using over 64K of space.  So, it is extending 
> into the e-segment
> and thus needs to have the e-segment copied properly (I missed that in my
> earlier email).

Okay.  So I assume this is something that SeaBIOS needs to do?  I've 
been trying to understand the origin of:

// Need to copy optionroms to work around qemu implementation

What is it that we're doing wrong in the qemu implementation?  If it's 
the lack of PCI option loading, then I guess we're okay post my changes 
provided that SeaBIOS can take care of what it needs in the e-segment.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16  0:33                                                           ` Chris Wright
@ 2009-12-16  1:32                                                             ` Anthony Liguori
  0 siblings, 0 replies; 101+ messages in thread
From: Anthony Liguori @ 2009-12-16  1:32 UTC (permalink / raw)
  To: Chris Wright
  Cc: Michael S. Tsirkin, glommer, seabios, qemu-devel, Alexander Graf,
	Kevin O'Connor, Gerd Hoffmann, Sebastian Herbszt

Chris Wright wrote:
> * Anthony Liguori (anthony@codemonkey.ws) wrote:
>   
>> BTW, I'm pretty sure this style of option rom loading (from a PCI
>> device) is going to be required for device passthrough if we want to
>> support running those roms in the guests.
>>     
>
> I think so too.
>
>   
>> In fact, it should Just
>> Work with my patches !CONFIG_OPTIONROMS_DEPLOYED in SeaBIOS.
>>     
>
> What would be the magic to boot from that ROM?
>   

Setup device assignment, add -boot menu=on with my patches, and hit F12 
when prompted.  In theory, you should see an entry for the device.

If not, the output with DEBUG_BIOS enabled in hw/pc.c would be very 
interesting.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [SeaBIOS] Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16  0:41                                                             ` Anthony Liguori
@ 2009-12-16  4:20                                                               ` Kevin O'Connor
  0 siblings, 0 replies; 101+ messages in thread
From: Kevin O'Connor @ 2009-12-16  4:20 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: seabios, Avi Kivity, qemu-devel

On Tue, Dec 15, 2009 at 06:41:33PM -0600, Anthony Liguori wrote:
> Kevin OConnor wrote:
>> SeaBIOS is currently using over 64K of space.  So, it is extending
>> into the e-segment and thus needs to have the e-segment copied
>> properly (I missed that in my earlier email).
>
> Okay.  So I assume this is something that SeaBIOS needs to do?  I've  
> been trying to understand the origin of:
>
> // Need to copy optionroms to work around qemu implementation
>
> What is it that we're doing wrong in the qemu implementation?

The comment is referring to the fact that enabling write access to
that area causes the existing contents to be discarded, and SeaBIOS
needs to copy the contents elsewhere, enable the write, and then copy
the contents back.  A real machine shadow implementation wouldn't
require that.  Though, I don't think it's a big deal to handle this
in SeaBIOS.

>If it's  
> the lack of PCI option loading, then I guess we're okay post my changes  
> provided that SeaBIOS can take care of what it needs in the e-segment.

Yes - I think your changes are fine.

-Kevin

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:24                                                     ` Sebastian Herbszt
  2009-12-15 21:31                                                       ` Anthony Liguori
@ 2009-12-16  4:29                                                       ` Kevin O'Connor
  2009-12-16 12:01                                                         ` Gerd Hoffmann
  1 sibling, 1 reply; 101+ messages in thread
From: Kevin O'Connor @ 2009-12-16  4:29 UTC (permalink / raw)
  To: Sebastian Herbszt
  Cc: Michael S. Tsirkin, glommer, seabios, qemu-devel, Alexander Graf,
	Gerd Hoffmann

On Tue, Dec 15, 2009 at 10:24:29PM +0100, Sebastian Herbszt wrote:
> Keep loading custom roms (e.g. from -option-rom) with rom_add_file
> starting at 0xc8000.  Modify SeaBIOS to scan the memory range for
> pre-deployed option roms before deploying PCI roms. SeaBIOS will
> find the last pre-deployed rom and have a starting address for
> deploying PCI roms. This will keep ISA option roms working.

Unfortunately, if the SeaBIOS post entry gets called again (eg, on
ctrl+alt+del), it wont know which roms were originally present, and
which roms were deployed by SeaBIOS on the first boot.

-Kevin

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:41                                                         ` Anthony Liguori
  2009-12-16  0:33                                                           ` Chris Wright
@ 2009-12-16  4:57                                                           ` Kevin O'Connor
  2009-12-16 12:31                                                             ` Gerd Hoffmann
  2009-12-16 16:22                                                             ` Gerd Hoffmann
  2009-12-16 14:41                                                           ` Gerd Hoffmann
  2 siblings, 2 replies; 101+ messages in thread
From: Kevin O'Connor @ 2009-12-16  4:57 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Chris Wright, Michael S. Tsirkin, glommer, seabios, qemu-devel,
	Alexander Graf, Gerd Hoffmann, Sebastian Herbszt

On Tue, Dec 15, 2009 at 03:41:02PM -0600, Anthony Liguori wrote:
> SeaBIOS can also load roms from up to two fixed physical addresses (when  
> !CONFIG_OPTIONROMS_DEPLOYED) or from a CBFS payload. 

The support for loading of two static option roms wont work well for
qemu - it requires compiling into SeaBIOS the PCI ids of the roms.

The CBFS payload loading is closer to what qemu wants.  Basically,
CBFS (coreboot filesystem) is a mechanism that coreboot uses for
storing named files in flash.  Code to mix PCI bar roms with other
roms is something SeaBIOS already handles with the CBFS system.  I
doubt it would be worthwhile to introduce CBFS to qemu, but I think
adding a "named file" interface to qemu cfg would help.

That way, SeaBIOS could load roms from the PCI bar, CBFS, or qemu cfg
without having to duplicate the logic.

This came up before in the discussion at:

http://lists.gnu.org/archive/html/qemu-devel/2009-09/msg01200.html

Right now, qemu cfg uses two ports - a file select port (0x510) and a
data port (0x511).  Perhaps two new ports could be added - a file name
port (0x0512) and a file length port (0x513).

Basically, if there is some way for SeaBIOS to walk a list of "files"
in the "qemu cfg" space, then it should be straight forward to enhance
the existing code in seabios to extract and deploy roms in addition to
those found in the PCI bar.

> You mean, non-PCI x86 systems?  I think -m isapc is mainly used for dos  
> guests.  I don't think it's really useful in combination with -kernel  
> and certainly not for extboot.

I think the issue here is that a "-m isapc" machine wont be able to
run the vga rom if the vga rom is only available from a pci bar.

-Kevin

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16  4:29                                                       ` Kevin O'Connor
@ 2009-12-16 12:01                                                         ` Gerd Hoffmann
  0 siblings, 0 replies; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-16 12:01 UTC (permalink / raw)
  To: Kevin O'Connor
  Cc: Michael S. Tsirkin, glommer, seabios, qemu-devel, Alexander Graf,
	Sebastian Herbszt

On 12/16/09 05:29, Kevin O'Connor wrote:
> On Tue, Dec 15, 2009 at 10:24:29PM +0100, Sebastian Herbszt wrote:
>> Keep loading custom roms (e.g. from -option-rom) with rom_add_file
>> starting at 0xc8000.  Modify SeaBIOS to scan the memory range for
>> pre-deployed option roms before deploying PCI roms. SeaBIOS will
>> find the last pre-deployed rom and have a starting address for
>> deploying PCI roms. This will keep ISA option roms working.
>
> Unfortunately, if the SeaBIOS post entry gets called again (eg, on
> ctrl+alt+del), it wont know which roms were originally present, and
> which roms were deployed by SeaBIOS on the first boot.

option roms loaded by seabios via pci seem to care only about the pci 
device they where loaded from.  So this optionrom <=> pcidevice 
relationship must be stored somewhere.  Can SeaBIOS use that to figure 
which option roms where loaded by seabios itself?

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 19:10                                                     ` Anthony Liguori
@ 2009-12-16 12:03                                                       ` Gerd Hoffmann
  2009-12-16 12:39                                                         ` Michael S. Tsirkin
  0 siblings, 1 reply; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-16 12:03 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Sebastian Herbszt

[-- Attachment #1: Type: text/plain, Size: 335 bytes --]

On 12/15/09 20:10, Anthony Liguori wrote:
> Gerd Hoffmann wrote:
>> Hi,
>>
>>> We could also add a "romfile" property to the pci bus and do everything
>>> (except setting the default filename) in generic pci code.
>>
>> Patch attached (incremental to yours).
>
> Sounds great, but no patch is attached.

Next try ...

cheers,
   Gerd


[-- Attachment #2: 0001-pci-add-romfile-property.patch --]
[-- Type: text/plain, Size: 112990 bytes --]

>From dfbe5a62db3da79d3d8b73634915471921f6e8ee Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kraxel@redhat.com>
Date: Tue, 15 Dec 2009 11:04:31 +0100
Subject: [PATCH] pci: add romfile property

Add romfile as bus property to pci, load the file into the rom bar
when specified.
---
 hw/cirrus_vga.c  |    4 +++-
 hw/e1000.c       |    8 ++------
 hw/pci.c         |   19 ++++++++++++++++---
 hw/pci.h         |    3 +--
 hw/rtl8139.c     |    8 ++------
 hw/virtio-pci.c  |    8 ++------
 pc-bios/bios.bin |  Bin 131072 -> 131072 bytes
 7 files changed, 26 insertions(+), 24 deletions(-)

diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c
index b08d2ae..b2886c4 100644
--- a/hw/cirrus_vga.c
+++ b/hw/cirrus_vga.c
@@ -3211,7 +3211,9 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev)
      }
 
      /* ROM BIOS */
-     pci_add_option_rom((PCIDevice *)d, VGABIOS_CIRRUS_FILENAME);
+     if (dev->rom_filename == NULL) {
+         dev->rom_filename = qemu_strdup(VGABIOS_CIRRUS_FILENAME);
+     }
      return 0;
 }
 
diff --git a/hw/e1000.c b/hw/e1000.c
index f795601..021f666 100644
--- a/hw/e1000.c
+++ b/hw/e1000.c
@@ -1122,12 +1122,8 @@ static int pci_e1000_init(PCIDevice *pci_dev)
 
     qemu_format_nic_info_str(&d->nic->nc, macaddr);
 
-    if (!pci_dev->qdev.hotplugged) {
-        static int loaded = 0;
-        if (!loaded) {
-            pci_add_option_rom(&d->dev, "pxe-e1000.bin");
-            loaded = 1;
-        }
+    if (pci_dev->rom_filename == NULL) {
+        pci_dev->rom_filename = qemu_strdup("pxe-e1000.bin");
     }
     return 0;
 }
diff --git a/hw/pci.c b/hw/pci.c
index dbdfdbf..3ff7d0c 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -63,12 +63,14 @@ static struct BusInfo pci_bus_info = {
     .print_dev  = pcibus_dev_print,
     .props      = (Property[]) {
         DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1),
+        DEFINE_PROP_STRING("romfile", PCIDevice, rom_filename),
         DEFINE_PROP_END_OF_LIST()
     }
 };
 
 static void pci_update_mappings(PCIDevice *d);
 static void pci_set_irq(void *opaque, int irq_num, int level);
+static int pci_add_option_rom(PCIDevice *pdev);
 
 target_phys_addr_t pci_mem_base;
 static uint16_t pci_default_sub_vendor_id = PCI_SUBVENDOR_ID_REDHAT_QUMRANET;
@@ -1387,6 +1389,7 @@ static int pci_qdev_init(DeviceState *qdev, DeviceInfo *base)
     rc = info->init(pci_dev);
     if (rc != 0)
         return rc;
+    pci_add_option_rom(pci_dev);
     if (qdev->hotplugged)
         bus->hotplug(pci_dev, 1);
     return 0;
@@ -1470,18 +1473,28 @@ static void pci_map_option_rom(PCIDevice *pdev, int region_num, pcibus_t addr, p
 }
 
 /* Add an option rom for the device */
-int pci_add_option_rom(PCIDevice *pdev, const char *name)
+static int pci_add_option_rom(PCIDevice *pdev)
 {
     int size;
     char *path;
     void *ptr;
 
-    path = qemu_find_file(QEMU_FILE_TYPE_BIOS, name);
+    if (!pdev->rom_filename)
+        return 0;
+    if (strlen(pdev->rom_filename) == 0)
+        return 0;
+
+    path = qemu_find_file(QEMU_FILE_TYPE_BIOS, pdev->rom_filename);
     if (path == NULL) {
-        path = qemu_strdup(name);
+        path = qemu_strdup(pdev->rom_filename);
     }
 
     size = get_image_size(path);
+    if (size < 0) {
+        qemu_error("%s: failed to find romfile \"%s\"\n", __FUNCTION__,
+                   pdev->rom_filename);
+        return -1;
+    }
     if (size & (size - 1)) {
         size = 1 << qemu_fls(size);
     }
diff --git a/hw/pci.h b/hw/pci.h
index 89b3f55..c27e800 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -245,6 +245,7 @@ struct PCIDevice {
     int32_t version_id;
 
     /* Location of option rom */
+    char *rom_filename;
     ram_addr_t rom_offset;
 };
 
@@ -257,8 +258,6 @@ void pci_register_bar(PCIDevice *pci_dev, int region_num,
                             pcibus_t size, int type,
                             PCIMapIORegionFunc *map_func);
 
-int pci_add_option_rom(PCIDevice *pdev, const char *name);
-
 int pci_add_capability(PCIDevice *pci_dev, uint8_t cap_id, uint8_t cap_size);
 
 void pci_del_capability(PCIDevice *pci_dev, uint8_t cap_id, uint8_t cap_size);
diff --git a/hw/rtl8139.c b/hw/rtl8139.c
index 2cee97b..d096711 100644
--- a/hw/rtl8139.c
+++ b/hw/rtl8139.c
@@ -3354,12 +3354,8 @@ static int pci_rtl8139_init(PCIDevice *dev)
         rtl8139_get_next_tctr_time(s,qemu_get_clock(vm_clock)));
 #endif /* RTL8139_ONBOARD_TIMER */
 
-    if (!dev->qdev.hotplugged) {
-        static int loaded = 0;
-        if (!loaded) {
-            pci_add_option_rom(&s->dev, "pxe-rtl8139.bin");
-            loaded = 1;
-        }
+    if (dev->rom_filename == NULL) {
+        dev->rom_filename = qemu_strdup("pxe-rtl8139.bin");
     }
     return 0;
 }
diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index 85f14a2..e38fe70 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -519,12 +519,8 @@ static int virtio_net_init_pci(PCIDevice *pci_dev)
     /* make the actual value visible */
     proxy->nvectors = vdev->nvectors;
 
-    if (!pci_dev->qdev.hotplugged) {
-        static int loaded = 0;
-        if (!loaded) {
-            pci_add_option_rom(pci_dev, "pxe-virtio.bin");
-            loaded = 1;
-        }
+    if (pci_dev->rom_filename == NULL) {
+        pci_dev->rom_filename = qemu_strdup("pxe-virtio.bin");
     }
     return 0;
 }
diff --git a/pc-bios/bios.bin b/pc-bios/bios.bin
index 29495801950660c19630444e410ff30d673e46af..4e7ae7efeb5964454d263a8b6482206c9d7bc358 100644
GIT binary patch
literal 131072
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

literal 131072
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
XbdY_vvYmBgPq`*{;x*HzVUqY?{>O0J

-- 
1.6.5.2


^ permalink raw reply related	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16  4:57                                                           ` Kevin O'Connor
@ 2009-12-16 12:31                                                             ` Gerd Hoffmann
  2009-12-16 16:22                                                             ` Gerd Hoffmann
  1 sibling, 0 replies; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-16 12:31 UTC (permalink / raw)
  To: Kevin O'Connor
  Cc: Chris Wright, Michael S. Tsirkin, glommer, seabios, qemu-devel,
	Alexander Graf, Sebastian Herbszt

   Hi,

> Basically, if there is some way for SeaBIOS to walk a list of "files"
> in the "qemu cfg" space, then it should be straight forward to enhance
> the existing code in seabios to extract and deploy roms in addition to
> those found in the PCI bar.

I think using fw_config is the only sane way to make it work, especially 
in case we switch vga bios load to pci bar too.

base address for vga bios    is 0xc0000
base address for option roms is 0xc8000

If the vga bios is larger than 0x08000 bytes then the first option rom 
has to be loaded at a higher address.  Which is actually the case, check 
'info roms':

addr=00000000000c0000 size=0x008c00 mem=ram name="vgabios-cirrus.bin"
addr=00000000000c9000 size=0x00dc00 mem=ram name="pxe-virtio.bin"
addr=00000000fffe0000 size=0x020000 mem=rom name="bios.bin"

Thus having qemu load -- say -- linuxboot.bin and seabios load 
vgabios-cirrus.bin and pxe-virtio.bin simply isn't going to work.  qemu 
has no idea what address linuxboot.bin can be loaded at (without 
introducing dirty hacks).

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 12:03                                                       ` Gerd Hoffmann
@ 2009-12-16 12:39                                                         ` Michael S. Tsirkin
  2009-12-16 13:42                                                           ` Gerd Hoffmann
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-16 12:39 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Sebastian Herbszt

On Wed, Dec 16, 2009 at 01:03:06PM +0100, Gerd Hoffmann wrote:
> On 12/15/09 20:10, Anthony Liguori wrote:
>> Gerd Hoffmann wrote:
>>> Hi,
>>>
>>>> We could also add a "romfile" property to the pci bus and do everything
>>>> (except setting the default filename) in generic pci code.
>>>
>>> Patch attached (incremental to yours).
>>
>> Sounds great, but no patch is attached.
>
> Next try ...
>
> cheers,
>   Gerd
>

What will happen when we find a bug in one of ROMs
I wonder? I think we will need to keep the old ROM
around, and put it in as part of compat machine type?




> >From dfbe5a62db3da79d3d8b73634915471921f6e8ee Mon Sep 17 00:00:00 2001
> From: Gerd Hoffmann <kraxel@redhat.com>
> Date: Tue, 15 Dec 2009 11:04:31 +0100
> Subject: [PATCH] pci: add romfile property
> 
> Add romfile as bus property to pci, load the file into the rom bar
> when specified.
> ---
>  hw/cirrus_vga.c  |    4 +++-
>  hw/e1000.c       |    8 ++------
>  hw/pci.c         |   19 ++++++++++++++++---
>  hw/pci.h         |    3 +--
>  hw/rtl8139.c     |    8 ++------
>  hw/virtio-pci.c  |    8 ++------
>  pc-bios/bios.bin |  Bin 131072 -> 131072 bytes
>  7 files changed, 26 insertions(+), 24 deletions(-)
> 
> diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c
> index b08d2ae..b2886c4 100644
> --- a/hw/cirrus_vga.c
> +++ b/hw/cirrus_vga.c
> @@ -3211,7 +3211,9 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev)
>       }
>  
>       /* ROM BIOS */
> -     pci_add_option_rom((PCIDevice *)d, VGABIOS_CIRRUS_FILENAME);
> +     if (dev->rom_filename == NULL) {
> +         dev->rom_filename = qemu_strdup(VGABIOS_CIRRUS_FILENAME);
> +     }
>       return 0;
>  }
>  
> diff --git a/hw/e1000.c b/hw/e1000.c
> index f795601..021f666 100644
> --- a/hw/e1000.c
> +++ b/hw/e1000.c
> @@ -1122,12 +1122,8 @@ static int pci_e1000_init(PCIDevice *pci_dev)
>  
>      qemu_format_nic_info_str(&d->nic->nc, macaddr);
>  
> -    if (!pci_dev->qdev.hotplugged) {
> -        static int loaded = 0;
> -        if (!loaded) {
> -            pci_add_option_rom(&d->dev, "pxe-e1000.bin");
> -            loaded = 1;
> -        }
> +    if (pci_dev->rom_filename == NULL) {
> +        pci_dev->rom_filename = qemu_strdup("pxe-e1000.bin");
>      }
>      return 0;
>  }
> diff --git a/hw/pci.c b/hw/pci.c
> index dbdfdbf..3ff7d0c 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -63,12 +63,14 @@ static struct BusInfo pci_bus_info = {
>      .print_dev  = pcibus_dev_print,
>      .props      = (Property[]) {
>          DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1),
> +        DEFINE_PROP_STRING("romfile", PCIDevice, rom_filename),
>          DEFINE_PROP_END_OF_LIST()
>      }
>  };
>  
>  static void pci_update_mappings(PCIDevice *d);
>  static void pci_set_irq(void *opaque, int irq_num, int level);
> +static int pci_add_option_rom(PCIDevice *pdev);
>  
>  target_phys_addr_t pci_mem_base;
>  static uint16_t pci_default_sub_vendor_id = PCI_SUBVENDOR_ID_REDHAT_QUMRANET;
> @@ -1387,6 +1389,7 @@ static int pci_qdev_init(DeviceState *qdev, DeviceInfo *base)
>      rc = info->init(pci_dev);
>      if (rc != 0)
>          return rc;
> +    pci_add_option_rom(pci_dev);
>      if (qdev->hotplugged)
>          bus->hotplug(pci_dev, 1);
>      return 0;
> @@ -1470,18 +1473,28 @@ static void pci_map_option_rom(PCIDevice *pdev, int region_num, pcibus_t addr, p
>  }
>  
>  /* Add an option rom for the device */
> -int pci_add_option_rom(PCIDevice *pdev, const char *name)
> +static int pci_add_option_rom(PCIDevice *pdev)
>  {
>      int size;
>      char *path;
>      void *ptr;
>  
> -    path = qemu_find_file(QEMU_FILE_TYPE_BIOS, name);
> +    if (!pdev->rom_filename)
> +        return 0;
> +    if (strlen(pdev->rom_filename) == 0)
> +        return 0;
> +
> +    path = qemu_find_file(QEMU_FILE_TYPE_BIOS, pdev->rom_filename);
>      if (path == NULL) {
> -        path = qemu_strdup(name);
> +        path = qemu_strdup(pdev->rom_filename);
>      }
>  
>      size = get_image_size(path);
> +    if (size < 0) {
> +        qemu_error("%s: failed to find romfile \"%s\"\n", __FUNCTION__,
> +                   pdev->rom_filename);
> +        return -1;
> +    }
>      if (size & (size - 1)) {
>          size = 1 << qemu_fls(size);
>      }
> diff --git a/hw/pci.h b/hw/pci.h
> index 89b3f55..c27e800 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -245,6 +245,7 @@ struct PCIDevice {
>      int32_t version_id;
>  
>      /* Location of option rom */
> +    char *rom_filename;
>      ram_addr_t rom_offset;
>  };
>  
> @@ -257,8 +258,6 @@ void pci_register_bar(PCIDevice *pci_dev, int region_num,
>                              pcibus_t size, int type,
>                              PCIMapIORegionFunc *map_func);
>  
> -int pci_add_option_rom(PCIDevice *pdev, const char *name);
> -
>  int pci_add_capability(PCIDevice *pci_dev, uint8_t cap_id, uint8_t cap_size);
>  
>  void pci_del_capability(PCIDevice *pci_dev, uint8_t cap_id, uint8_t cap_size);
> diff --git a/hw/rtl8139.c b/hw/rtl8139.c
> index 2cee97b..d096711 100644
> --- a/hw/rtl8139.c
> +++ b/hw/rtl8139.c
> @@ -3354,12 +3354,8 @@ static int pci_rtl8139_init(PCIDevice *dev)
>          rtl8139_get_next_tctr_time(s,qemu_get_clock(vm_clock)));
>  #endif /* RTL8139_ONBOARD_TIMER */
>  
> -    if (!dev->qdev.hotplugged) {
> -        static int loaded = 0;
> -        if (!loaded) {
> -            pci_add_option_rom(&s->dev, "pxe-rtl8139.bin");
> -            loaded = 1;
> -        }
> +    if (dev->rom_filename == NULL) {
> +        dev->rom_filename = qemu_strdup("pxe-rtl8139.bin");
>      }
>      return 0;
>  }
> diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
> index 85f14a2..e38fe70 100644
> --- a/hw/virtio-pci.c
> +++ b/hw/virtio-pci.c
> @@ -519,12 +519,8 @@ static int virtio_net_init_pci(PCIDevice *pci_dev)
>      /* make the actual value visible */
>      proxy->nvectors = vdev->nvectors;
>  
> -    if (!pci_dev->qdev.hotplugged) {
> -        static int loaded = 0;
> -        if (!loaded) {
> -            pci_add_option_rom(pci_dev, "pxe-virtio.bin");
> -            loaded = 1;
> -        }
> +    if (pci_dev->rom_filename == NULL) {
> +        pci_dev->rom_filename = qemu_strdup("pxe-virtio.bin");
>      }
>      return 0;
>  }
> diff --git a/pc-bios/bios.bin b/pc-bios/bios.bin
> index 29495801950660c19630444e410ff30d673e46af..4e7ae7efeb5964454d263a8b6482206c9d7bc358 100644
> GIT binary patch
> literal 131072
> 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
> 
> literal 131072
> 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
> XbdY_vvYmBgPq`*{;x*HzVUqY?{>O0J
> 
> -- 
> 1.6.5.2
> 

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 12:39                                                         ` Michael S. Tsirkin
@ 2009-12-16 13:42                                                           ` Gerd Hoffmann
  2009-12-16 13:52                                                             ` Michael S. Tsirkin
  0 siblings, 1 reply; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-16 13:42 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Sebastian Herbszt

   Hi,

> What will happen when we find a bug in one of ROMs
> I wonder? I think we will need to keep the old ROM
> around, and put it in as part of compat machine type?

What do you want?
Old way to load the rom?
Old rom binaries (i.e. etherboot)?
Both?

The new way to load the roms is a guest-visible change (devices get a 
rom bar they had not before), so we might want to have a backward 
compatibility property for that.  Not sure whenever this is a problem.

Allowing old ROMs isn't easy as they don't support BEV.

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 13:42                                                           ` Gerd Hoffmann
@ 2009-12-16 13:52                                                             ` Michael S. Tsirkin
  2009-12-16 14:12                                                               ` Kevin O'Connor
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-16 13:52 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: glommer, qemu-devel, Alexander Graf, Kevin O'Connor,
	Sebastian Herbszt

On Wed, Dec 16, 2009 at 02:42:51PM +0100, Gerd Hoffmann wrote:
>   Hi,
>
>> What will happen when we find a bug in one of ROMs
>> I wonder? I think we will need to keep the old ROM
>> around, and put it in as part of compat machine type?
>
> What do you want?
> Old way to load the rom?
> Old rom binaries (i.e. etherboot)?
> Both?
>
> The new way to load the roms is a guest-visible change (devices get a  
> rom bar they had not before), so we might want to have a backward  
> compatibility property for that.  Not sure whenever this is a problem.
>
> Allowing old ROMs isn't easy as they don't support BEV.
>
> cheers,
>   Gerd


I am mostly concerned with migrating between qemu versions with
different roms, while guest was in the middle of running ROM.
This might be solved if we migrated ROM content together with
the device and put some padding in ROM content so that
size can be kept constant.

-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 13:52                                                             ` Michael S. Tsirkin
@ 2009-12-16 14:12                                                               ` Kevin O'Connor
  2009-12-16 14:14                                                                 ` Michael S. Tsirkin
  2009-12-16 14:17                                                                 ` Gleb Natapov
  0 siblings, 2 replies; 101+ messages in thread
From: Kevin O'Connor @ 2009-12-16 14:12 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, seabios, qemu-devel, Alexander Graf, Gerd Hoffmann,
	Sebastian Herbszt

On Wed, Dec 16, 2009 at 03:52:34PM +0200, Michael S. Tsirkin wrote:
> I am mostly concerned with migrating between qemu versions with
> different roms, while guest was in the middle of running ROM.
> This might be solved if we migrated ROM content together with
> the device and put some padding in ROM content so that
> size can be kept constant.

SeaBIOS will always copy the roms into the 0xc0000-0xf0000 memory area
(regardless of CONFIG_OPTIONROMS_DEPLOYED).  So, if one migrates a
machine while running a rom, the memory holding the rom should get
migrated with everything else.

-Kevin

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 14:12                                                               ` Kevin O'Connor
@ 2009-12-16 14:14                                                                 ` Michael S. Tsirkin
  2009-12-16 14:17                                                                 ` Gleb Natapov
  1 sibling, 0 replies; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-16 14:14 UTC (permalink / raw)
  To: Kevin O'Connor
  Cc: glommer, seabios, qemu-devel, Alexander Graf, Gerd Hoffmann,
	Sebastian Herbszt

On Wed, Dec 16, 2009 at 09:12:21AM -0500, Kevin O'Connor wrote:
> On Wed, Dec 16, 2009 at 03:52:34PM +0200, Michael S. Tsirkin wrote:
> > I am mostly concerned with migrating between qemu versions with
> > different roms, while guest was in the middle of running ROM.
> > This might be solved if we migrated ROM content together with
> > the device and put some padding in ROM content so that
> > size can be kept constant.
> 
> SeaBIOS will always copy the roms into the 0xc0000-0xf0000 memory area
> (regardless of CONFIG_OPTIONROMS_DEPLOYED).  So, if one migrates a
> machine while running a rom, the memory holding the rom should get
> migrated with everything else.
> 
> -Kevin

Ah, cool. We still have the issue of migrating while ROM is being
read, but this bug existed already.

-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 14:17                                                                 ` Gleb Natapov
@ 2009-12-16 14:15                                                                   ` Michael S. Tsirkin
  2009-12-16 14:18                                                                     ` Gleb Natapov
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-16 14:15 UTC (permalink / raw)
  To: Gleb Natapov
  Cc: glommer, seabios, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Wed, Dec 16, 2009 at 04:17:11PM +0200, Gleb Natapov wrote:
> On Wed, Dec 16, 2009 at 09:12:21AM -0500, Kevin O'Connor wrote:
> > On Wed, Dec 16, 2009 at 03:52:34PM +0200, Michael S. Tsirkin wrote:
> > > I am mostly concerned with migrating between qemu versions with
> > > different roms, while guest was in the middle of running ROM.
> > > This might be solved if we migrated ROM content together with
> > > the device and put some padding in ROM content so that
> > > size can be kept constant.
> > 
> > SeaBIOS will always copy the roms into the 0xc0000-0xf0000 memory area
> > (regardless of CONFIG_OPTIONROMS_DEPLOYED).  So, if one migrates a
> > machine while running a rom, the memory holding the rom should get
> > migrated with everything else.
> > 
> Yes, but if migration happens in the middle of the copying...

Yes. This is not a new bug though.

> --
> 			Gleb.

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 14:12                                                               ` Kevin O'Connor
  2009-12-16 14:14                                                                 ` Michael S. Tsirkin
@ 2009-12-16 14:17                                                                 ` Gleb Natapov
  2009-12-16 14:15                                                                   ` Michael S. Tsirkin
  1 sibling, 1 reply; 101+ messages in thread
From: Gleb Natapov @ 2009-12-16 14:17 UTC (permalink / raw)
  To: Kevin O'Connor
  Cc: Michael S. Tsirkin, glommer, seabios, Alexander Graf, qemu-devel,
	Gerd Hoffmann, Sebastian Herbszt

On Wed, Dec 16, 2009 at 09:12:21AM -0500, Kevin O'Connor wrote:
> On Wed, Dec 16, 2009 at 03:52:34PM +0200, Michael S. Tsirkin wrote:
> > I am mostly concerned with migrating between qemu versions with
> > different roms, while guest was in the middle of running ROM.
> > This might be solved if we migrated ROM content together with
> > the device and put some padding in ROM content so that
> > size can be kept constant.
> 
> SeaBIOS will always copy the roms into the 0xc0000-0xf0000 memory area
> (regardless of CONFIG_OPTIONROMS_DEPLOYED).  So, if one migrates a
> machine while running a rom, the memory holding the rom should get
> migrated with everything else.
> 
Yes, but if migration happens in the middle of the copying...

--
			Gleb.

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 14:15                                                                   ` Michael S. Tsirkin
@ 2009-12-16 14:18                                                                     ` Gleb Natapov
  2009-12-16 14:24                                                                       ` Michael S. Tsirkin
  0 siblings, 1 reply; 101+ messages in thread
From: Gleb Natapov @ 2009-12-16 14:18 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, seabios, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Wed, Dec 16, 2009 at 04:15:16PM +0200, Michael S. Tsirkin wrote:
> On Wed, Dec 16, 2009 at 04:17:11PM +0200, Gleb Natapov wrote:
> > On Wed, Dec 16, 2009 at 09:12:21AM -0500, Kevin O'Connor wrote:
> > > On Wed, Dec 16, 2009 at 03:52:34PM +0200, Michael S. Tsirkin wrote:
> > > > I am mostly concerned with migrating between qemu versions with
> > > > different roms, while guest was in the middle of running ROM.
> > > > This might be solved if we migrated ROM content together with
> > > > the device and put some padding in ROM content so that
> > > > size can be kept constant.
> > > 
> > > SeaBIOS will always copy the roms into the 0xc0000-0xf0000 memory area
> > > (regardless of CONFIG_OPTIONROMS_DEPLOYED).  So, if one migrates a
> > > machine while running a rom, the memory holding the rom should get
> > > migrated with everything else.
> > > 
> > Yes, but if migration happens in the middle of the copying...
> 
> Yes. This is not a new bug though.
> 
How so?

--
			Gleb.

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 14:18                                                                     ` Gleb Natapov
@ 2009-12-16 14:24                                                                       ` Michael S. Tsirkin
  2009-12-16 14:28                                                                         ` Gleb Natapov
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-16 14:24 UTC (permalink / raw)
  To: Gleb Natapov
  Cc: glommer, seabios, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Wed, Dec 16, 2009 at 04:18:49PM +0200, Gleb Natapov wrote:
> On Wed, Dec 16, 2009 at 04:15:16PM +0200, Michael S. Tsirkin wrote:
> > On Wed, Dec 16, 2009 at 04:17:11PM +0200, Gleb Natapov wrote:
> > > On Wed, Dec 16, 2009 at 09:12:21AM -0500, Kevin O'Connor wrote:
> > > > On Wed, Dec 16, 2009 at 03:52:34PM +0200, Michael S. Tsirkin wrote:
> > > > > I am mostly concerned with migrating between qemu versions with
> > > > > different roms, while guest was in the middle of running ROM.
> > > > > This might be solved if we migrated ROM content together with
> > > > > the device and put some padding in ROM content so that
> > > > > size can be kept constant.
> > > > 
> > > > SeaBIOS will always copy the roms into the 0xc0000-0xf0000 memory area
> > > > (regardless of CONFIG_OPTIONROMS_DEPLOYED).  So, if one migrates a
> > > > machine while running a rom, the memory holding the rom should get
> > > > migrated with everything else.
> > > > 
> > > Yes, but if migration happens in the middle of the copying...
> > 
> > Yes. This is not a new bug though.
> > 
> How so?

BIOS already reads roms from devices, does it not?
If we migrate in the middle of this process to
a device with a different ROM, tough.

> --
> 			Gleb.

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 14:28                                                                         ` Gleb Natapov
@ 2009-12-16 14:28                                                                           ` Michael S. Tsirkin
  0 siblings, 0 replies; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-16 14:28 UTC (permalink / raw)
  To: Gleb Natapov
  Cc: glommer, seabios, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Wed, Dec 16, 2009 at 04:28:49PM +0200, Gleb Natapov wrote:
> On Wed, Dec 16, 2009 at 04:24:59PM +0200, Michael S. Tsirkin wrote:
> > On Wed, Dec 16, 2009 at 04:18:49PM +0200, Gleb Natapov wrote:
> > > On Wed, Dec 16, 2009 at 04:15:16PM +0200, Michael S. Tsirkin wrote:
> > > > On Wed, Dec 16, 2009 at 04:17:11PM +0200, Gleb Natapov wrote:
> > > > > On Wed, Dec 16, 2009 at 09:12:21AM -0500, Kevin O'Connor wrote:
> > > > > > On Wed, Dec 16, 2009 at 03:52:34PM +0200, Michael S. Tsirkin wrote:
> > > > > > > I am mostly concerned with migrating between qemu versions with
> > > > > > > different roms, while guest was in the middle of running ROM.
> > > > > > > This might be solved if we migrated ROM content together with
> > > > > > > the device and put some padding in ROM content so that
> > > > > > > size can be kept constant.
> > > > > > 
> > > > > > SeaBIOS will always copy the roms into the 0xc0000-0xf0000 memory area
> > > > > > (regardless of CONFIG_OPTIONROMS_DEPLOYED).  So, if one migrates a
> > > > > > machine while running a rom, the memory holding the rom should get
> > > > > > migrated with everything else.
> > > > > > 
> > > > > Yes, but if migration happens in the middle of the copying...
> > > > 
> > > > Yes. This is not a new bug though.
> > > > 
> > > How so?
> > 
> > BIOS already reads roms from devices, does it not?
> No it doesn't.

Oh, you are right, we do this on device init.

> > If we migrate in the middle of this process to
> > a device with a different ROM, tough.
> > 
> > > --
> > > 			Gleb.
> 
> --
> 			Gleb.

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 14:24                                                                       ` Michael S. Tsirkin
@ 2009-12-16 14:28                                                                         ` Gleb Natapov
  2009-12-16 14:28                                                                           ` Michael S. Tsirkin
  0 siblings, 1 reply; 101+ messages in thread
From: Gleb Natapov @ 2009-12-16 14:28 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: glommer, seabios, qemu-devel, Alexander Graf, Kevin O'Connor,
	Gerd Hoffmann, Sebastian Herbszt

On Wed, Dec 16, 2009 at 04:24:59PM +0200, Michael S. Tsirkin wrote:
> On Wed, Dec 16, 2009 at 04:18:49PM +0200, Gleb Natapov wrote:
> > On Wed, Dec 16, 2009 at 04:15:16PM +0200, Michael S. Tsirkin wrote:
> > > On Wed, Dec 16, 2009 at 04:17:11PM +0200, Gleb Natapov wrote:
> > > > On Wed, Dec 16, 2009 at 09:12:21AM -0500, Kevin O'Connor wrote:
> > > > > On Wed, Dec 16, 2009 at 03:52:34PM +0200, Michael S. Tsirkin wrote:
> > > > > > I am mostly concerned with migrating between qemu versions with
> > > > > > different roms, while guest was in the middle of running ROM.
> > > > > > This might be solved if we migrated ROM content together with
> > > > > > the device and put some padding in ROM content so that
> > > > > > size can be kept constant.
> > > > > 
> > > > > SeaBIOS will always copy the roms into the 0xc0000-0xf0000 memory area
> > > > > (regardless of CONFIG_OPTIONROMS_DEPLOYED).  So, if one migrates a
> > > > > machine while running a rom, the memory holding the rom should get
> > > > > migrated with everything else.
> > > > > 
> > > > Yes, but if migration happens in the middle of the copying...
> > > 
> > > Yes. This is not a new bug though.
> > > 
> > How so?
> 
> BIOS already reads roms from devices, does it not?
No it doesn't.

> If we migrate in the middle of this process to
> a device with a different ROM, tough.
> 
> > --
> > 			Gleb.

--
			Gleb.

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 21:41                                                         ` Anthony Liguori
  2009-12-16  0:33                                                           ` Chris Wright
  2009-12-16  4:57                                                           ` Kevin O'Connor
@ 2009-12-16 14:41                                                           ` Gerd Hoffmann
  2009-12-16 14:41                                                             ` Michael S. Tsirkin
  2 siblings, 1 reply; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-16 14:41 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Chris Wright, Michael S. Tsirkin, glommer, seabios,
	Alexander Graf, qemu-devel, Kevin O'Connor,
	Sebastian Herbszt

On 12/15/09 22:41, Anthony Liguori wrote:
> BTW, I'm pretty sure this style of option rom loading (from a PCI
> device) is going to be required for device passthrough if we want to
> support running those roms in the guests.

Well, qemu-kvm has quite some code to poke the rom out of /proc/bus/pci 
and feed it into the rom loader.  All this can simply be dropped then.

cheers
   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 14:41                                                           ` Gerd Hoffmann
@ 2009-12-16 14:41                                                             ` Michael S. Tsirkin
  2009-12-16 14:50                                                               ` [SeaBIOS] " Gleb Natapov
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-16 14:41 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Chris Wright, glommer, seabios, qemu-devel, Alexander Graf,
	Kevin O'Connor, Sebastian Herbszt

On Wed, Dec 16, 2009 at 03:41:22PM +0100, Gerd Hoffmann wrote:
> On 12/15/09 22:41, Anthony Liguori wrote:
>> BTW, I'm pretty sure this style of option rom loading (from a PCI
>> device) is going to be required for device passthrough if we want to
>> support running those roms in the guests.
>
> Well, qemu-kvm has quite some code to poke the rom out of /proc/bus/pci  
> and feed it into the rom loader.  All this can simply be dropped then.
>
> cheers
>   Gerd

It's probably safer not to assume that guest does not run
the rom directly.

-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 22:51                                                                 ` Sebastian Herbszt
@ 2009-12-16 14:49                                                                   ` Gerd Hoffmann
  2009-12-17 20:33                                                                     ` Sebastian Herbszt
  0 siblings, 1 reply; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-16 14:49 UTC (permalink / raw)
  To: Sebastian Herbszt
  Cc: Michael S. Tsirkin, glommer, Alexander Graf, qemu-devel,
	Kevin O'Connor

On 12/15/09 23:51, Sebastian Herbszt wrote:
> Qemu will map rom1.bin to PC_ROM_MIN_OPTION (0xc8000) and map rom2.bin
> to 0xd0000.

No.

rom1.bin will be loaded to max(0xc8000, 0xc0000 + cirrus-bios-size)
aligned to 2k, which (with cirrus) is 0xc90000.

rom2.bin will be loaded after rom1.bin (also 2k aligned), so the address 
will depend on rom1.bin size.

> Either qemu will map vga bios to PC_ROM_MIN_VGA (0xc0000) or
> SeaBIOS will map it there (with pci 3.0 it could map it somewhere else,
> but i doubt thats
> a good idea). In case the vga bios size is below 0x8000, some rom space
> is lost.

Because it is larger than 0x8000 option roms will be overwritten when 
loaded to 0xc8000

> SeaBIOS
> will scan the option rom space starting at PC_ROM_MIN_OPTION and adjust
> its RomEnd in
> case a rom is found. Then it will start the pci scan and map pci option
> roms after RomEnd.

Doesn't fly.

I think either qemu or seabios should load *all* roms. I think the idea 
to provide non-pci roms via fw_cfg and let seabios load them is the best 
idea we had so far.

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: [SeaBIOS] Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 14:41                                                             ` Michael S. Tsirkin
@ 2009-12-16 14:50                                                               ` Gleb Natapov
  0 siblings, 0 replies; 101+ messages in thread
From: Gleb Natapov @ 2009-12-16 14:50 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Chris Wright, glommer, seabios, Alexander Graf, qemu-devel,
	Gerd Hoffmann, Sebastian Herbszt

On Wed, Dec 16, 2009 at 04:41:33PM +0200, Michael S. Tsirkin wrote:
> On Wed, Dec 16, 2009 at 03:41:22PM +0100, Gerd Hoffmann wrote:
> > On 12/15/09 22:41, Anthony Liguori wrote:
> >> BTW, I'm pretty sure this style of option rom loading (from a PCI
> >> device) is going to be required for device passthrough if we want to
> >> support running those roms in the guests.
> >
> > Well, qemu-kvm has quite some code to poke the rom out of /proc/bus/pci  
> > and feed it into the rom loader.  All this can simply be dropped then.
> >
> > cheers
> >   Gerd
> 
> It's probably safer not to assume that guest does not run
> the rom directly.
> 
Directly from PCI ROM? Is this even possible?

--
			Gleb.

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16  4:57                                                           ` Kevin O'Connor
  2009-12-16 12:31                                                             ` Gerd Hoffmann
@ 2009-12-16 16:22                                                             ` Gerd Hoffmann
  2009-12-17  1:24                                                               ` Kevin O'Connor
  1 sibling, 1 reply; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-16 16:22 UTC (permalink / raw)
  To: Kevin O'Connor
  Cc: Chris Wright, Michael S. Tsirkin, glommer, seabios, qemu-devel,
	Alexander Graf, Sebastian Herbszt

> Right now, qemu cfg uses two ports - a file select port (0x510) and a
> data port (0x511).  Perhaps two new ports could be added - a file name
> port (0x0512) and a file length port (0x513).
>
> Basically, if there is some way for SeaBIOS to walk a list of "files"
> in the "qemu cfg" space, then it should be straight forward to enhance
> the existing code in seabios to extract and deploy roms in addition to
> those found in the PCI bar.

What information does seabios need?

It probably needs to know whenever the rom in question is the vga bios 
or an option rom.

It probably also wants to get the vga bios first I assume?

Is a (file) name needed?

Would seabios load the option roms one by one or all in one go?

I'd tend to have one fw_cfg entry which returns structed data, like this:

struct fw_files {
   u32 filecount;
   struct fw_file {
     u32  type;        /* vga, option, other? */
     u32  size;        /* file size */
     u32  select;      /* write this to 0x510 to read it */
     u32  reserved;    /* you never know ;) */
     char name[16];    /* maybe: filename */
   };
};

What do you think?

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 16:22                                                             ` Gerd Hoffmann
@ 2009-12-17  1:24                                                               ` Kevin O'Connor
  2009-12-17  9:45                                                                 ` Gerd Hoffmann
  0 siblings, 1 reply; 101+ messages in thread
From: Kevin O'Connor @ 2009-12-17  1:24 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Chris Wright, Michael S. Tsirkin, glommer, seabios, qemu-devel,
	Alexander Graf, Sebastian Herbszt

On Wed, Dec 16, 2009 at 05:22:41PM +0100, Gerd Hoffmann wrote:
>> Right now, qemu cfg uses two ports - a file select port (0x510) and a
>> data port (0x511).  Perhaps two new ports could be added - a file name
>> port (0x0512) and a file length port (0x513).
>>
>> Basically, if there is some way for SeaBIOS to walk a list of "files"
>> in the "qemu cfg" space, then it should be straight forward to enhance
>> the existing code in seabios to extract and deploy roms in addition to
>> those found in the PCI bar.
>
> What information does seabios need?
>
> It probably needs to know whenever the rom in question is the vga bios  
> or an option rom.
>
> It probably also wants to get the vga bios first I assume?

The current "CBFS" mechanism looks for named "files" of the following
form:

- pciVVVV,DDDD.rom - a rom associated with a PCI device with the given
  vendor and device id.

- vgaroms/* - any "file" starting with the "vgaroms/" prefix is
  treated as a vga option rom not associated with any specific pci
  device.

- genroms/* - any "file" starting with the "genroms/" prefix is
  treated as a generic option rom not associated with any specific pci
  device.

The deployment order is: find the PCI vga device and look for a
corresponding "pciVVVV,DDDD.rom" file or a PCI bar for it, deploy any
"vgaroms/*" roms, iterate through all non-vga PCI devices and deploy
their corresponding "pciVVVV,DDDD.rom" or PCI bar roms, deploy any
"genroms/*" roms.

When SeaBIOS deploys a rom that is associated with a specific PCI
device (either "pciVVVV,DDDD.rom" or PCI bar), it passes the PCI
location as a parameter to the rom (as is required in the PCI firmware
spec).  Roms not associated with a device (genroms/*, vgaroms/*, and
when CONFIG_OPTIONROMS_DEPLOYED) don't pass in the PCI id, so they
have a slightly different calling convention.

> Is a (file) name needed?

Associating a name to the fw_cfg entries and using the naming
convention above would allow SeaBIOS to reuse its existing code.  It
seems to me that both coreboot and qemu are trying to solve the same
problem, so using the same mechanism seems advantageous.

BTW, my preference would be to assign a name to all fw_cfg entries;
even the existing ones.

> Would seabios load the option roms one by one or all in one go?

One by one - so it can satisfy the requirement of passing the PCI
location as a parameter to roms that may need that while still
handling roms not associated with a device (eg, kvm's vbios, the
-kernel rom, etc.).

> I'd tend to have one fw_cfg entry which returns structed data, like this:
>
> struct fw_files {
>   u32 filecount;
>   struct fw_file {
>     u32  type;        /* vga, option, other? */
>     u32  size;        /* file size */
>     u32  select;      /* write this to 0x510 to read it */
>     u32  reserved;    /* you never know ;) */
>     char name[16];    /* maybe: filename */
>   };
> };
>
> What do you think?

It works for me.  The name would need to be larger (64 bytes?).  The
current scheme essentially encodes 'type' into the name, so it
wouldn't be needed.

-Kevin

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-17  1:24                                                               ` Kevin O'Connor
@ 2009-12-17  9:45                                                                 ` Gerd Hoffmann
  2009-12-17  9:50                                                                   ` Michael S. Tsirkin
  0 siblings, 1 reply; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-17  9:45 UTC (permalink / raw)
  To: Kevin O'Connor
  Cc: Chris Wright, Michael S. Tsirkin, glommer, seabios, qemu-devel,
	Alexander Graf, Sebastian Herbszt

On 12/17/09 02:24, Kevin O'Connor wrote:
> On Wed, Dec 16, 2009 at 05:22:41PM +0100, Gerd Hoffmann wrote:
> The current "CBFS" mechanism looks for named "files" of the following
> form:
>
> - pciVVVV,DDDD.rom - a rom associated with a PCI device with the given
>    vendor and device id.

Might be useful for backward compatibility with older qemu versions as 
adding a rom bar to the pci devices is a guest-visible change in pci 
config space.

> - vgaroms/* - any "file" starting with the "vgaroms/" prefix is
>    treated as a vga option rom not associated with any specific pci
>    device.

obvious place for vgabios.

> - genroms/* - any "file" starting with the "genroms/" prefix is
>    treated as a generic option rom not associated with any specific pci
>    device.

and this for the non-pci roms like extboot &

> Associating a name to the fw_cfg entries and using the naming
> convention above would allow SeaBIOS to reuse its existing code.

Ok.

>> I'd tend to have one fw_cfg entry which returns structed data, like this:
>>
>> struct fw_files {
>>    u32 filecount;
>>    struct fw_file {
>>      u32  type;        /* vga, option, other? */
>>      u32  size;        /* file size */
>>      u32  select;      /* write this to 0x510 to read it */
>>      u32  reserved;    /* you never know ;) */
>>      char name[16];    /* maybe: filename */
>>    };
>> };
>>
>> What do you think?
>
> It works for me.  The name would need to be larger (64 bytes?).

I'd size name so it pads the struct to 32 or 64 bytes total.  32bit 
size, 16bit select, 16bit reserved, leaves 24 bytes for the name with 32 
bytes.  Hmm, better to go for a 64 byte struct, leaving 56 bytes for the 
name, which should be enougth.

I'll have patches ready later today.

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-17  9:45                                                                 ` Gerd Hoffmann
@ 2009-12-17  9:50                                                                   ` Michael S. Tsirkin
  2009-12-17 10:40                                                                     ` Gerd Hoffmann
  0 siblings, 1 reply; 101+ messages in thread
From: Michael S. Tsirkin @ 2009-12-17  9:50 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Chris Wright, glommer, seabios, qemu-devel, Alexander Graf,
	Kevin O'Connor, Sebastian Herbszt

On Thu, Dec 17, 2009 at 10:45:45AM +0100, Gerd Hoffmann wrote:
> On 12/17/09 02:24, Kevin O'Connor wrote:
>> On Wed, Dec 16, 2009 at 05:22:41PM +0100, Gerd Hoffmann wrote:
>> The current "CBFS" mechanism looks for named "files" of the following
>> form:
>>
>> - pciVVVV,DDDD.rom - a rom associated with a PCI device with the given
>>    vendor and device id.
>
> Might be useful for backward compatibility with older qemu versions as  
> adding a rom bar to the pci devices is a guest-visible change in pci  
> config space.
>
>> - vgaroms/* - any "file" starting with the "vgaroms/" prefix is
>>    treated as a vga option rom not associated with any specific pci
>>    device.
>
> obvious place for vgabios.
>
>> - genroms/* - any "file" starting with the "genroms/" prefix is
>>    treated as a generic option rom not associated with any specific pci
>>    device.
>
> and this for the non-pci roms like extboot &
>
>> Associating a name to the fw_cfg entries and using the naming
>> convention above would allow SeaBIOS to reuse its existing code.
>
> Ok.
>
>>> I'd tend to have one fw_cfg entry which returns structed data, like this:
>>>
>>> struct fw_files {
>>>    u32 filecount;
>>>    struct fw_file {
>>>      u32  type;        /* vga, option, other? */
>>>      u32  size;        /* file size */
>>>      u32  select;      /* write this to 0x510 to read it */
>>>      u32  reserved;    /* you never know ;) */
>>>      char name[16];    /* maybe: filename */

Can't name simply be null terminated?

>>>    };
>>> };
>>>
>>> What do you think?
>>
>> It works for me.  The name would need to be larger (64 bytes?).
>
> I'd size name so it pads the struct to 32 or 64 bytes total.  32bit  
> size, 16bit select, 16bit reserved, leaves 24 bytes for the name with 32  
> bytes.  Hmm, better to go for a 64 byte struct, leaving 56 bytes for the  
> name, which should be enougth.
>
> I'll have patches ready later today.
>
> cheers,
>   Gerd

-- 
MST

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-17  9:50                                                                   ` Michael S. Tsirkin
@ 2009-12-17 10:40                                                                     ` Gerd Hoffmann
  0 siblings, 0 replies; 101+ messages in thread
From: Gerd Hoffmann @ 2009-12-17 10:40 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Chris Wright, glommer, seabios, qemu-devel, Alexander Graf,
	Kevin O'Connor, Sebastian Herbszt

>>>> struct fw_files {
>>>>     u32 filecount;
>>>>     struct fw_file {
>>>>       u32  type;        /* vga, option, other? */
>>>>       u32  size;        /* file size */
>>>>       u32  select;      /* write this to 0x510 to read it */
>>>>       u32  reserved;    /* you never know ;) */
>>>>       char name[16];    /* maybe: filename */
>
> Can't name simply be null terminated?

It can, but it wouldn't be simple ...

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-16 14:49                                                                   ` Gerd Hoffmann
@ 2009-12-17 20:33                                                                     ` Sebastian Herbszt
  0 siblings, 0 replies; 101+ messages in thread
From: Sebastian Herbszt @ 2009-12-17 20:33 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Michael S. Tsirkin, glommer, Alexander Graf, qemu-devel,
	Kevin O'Connor

Gerd Hoffmann wrote:
> On 12/15/09 23:51, Sebastian Herbszt wrote:
>> Qemu will map rom1.bin to PC_ROM_MIN_OPTION (0xc8000) and map rom2.bin
>> to 0xd0000.
> 
> No.
> 
> rom1.bin will be loaded to max(0xc8000, 0xc0000 + cirrus-bios-size)
> aligned to 2k, which (with cirrus) is 0xc90000.

My bad - for some reason i assumed the vga bios has to be 32k max.

> rom2.bin will be loaded after rom1.bin (also 2k aligned), so the address 
> will depend on rom1.bin size.
> 
>> Either qemu will map vga bios to PC_ROM_MIN_VGA (0xc0000) or
>> SeaBIOS will map it there (with pci 3.0 it could map it somewhere else,
>> but i doubt thats
>> a good idea). In case the vga bios size is below 0x8000, some rom space
>> is lost.
> 
> Because it is larger than 0x8000 option roms will be overwritten when 
> loaded to 0xc8000
> 
>> SeaBIOS
>> will scan the option rom space starting at PC_ROM_MIN_OPTION and adjust
>> its RomEnd in
>> case a rom is found. Then it will start the pci scan and map pci option
>> roms after RomEnd.
> 
> Doesn't fly.
> 
> I think either qemu or seabios should load *all* roms. I think the idea 
> to provide non-pci roms via fw_cfg and let seabios load them is the best 
> idea we had so far.

I don't think that is what happens on real hardware with ISA cards which have an option rom.
Therefore i suggest inverting some of my suggestion from above and put the qemu loaded roms
not at the beginning of the option rom space, but starting at the end of it, e.g. rom1.bin below 0xe0000
and rom2.bin below rom1.bin (considering rom length and alignment). SeaBIOS could then locate
those roms and setup it's "RomEnd" (max. pci rom loading address) according to it.

- Sebastian

^ permalink raw reply	[flat|nested] 101+ messages in thread

* Re: Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)
  2009-12-15 22:00                                                           ` Anthony Liguori
@ 2009-12-17 21:14                                                             ` Sebastian Herbszt
  0 siblings, 0 replies; 101+ messages in thread
From: Sebastian Herbszt @ 2009-12-17 21:14 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Michael S. Tsirkin, glommer, qemu-devel, Alexander Graf,
	Kevin O'Connor, Gerd Hoffmann

Anthony Liguori wrote:
> Sebastian Herbszt wrote:
>> What about isapc? Or (pci)pc with isa card?
> 
> I'm not sure how the bios enumerates isa option roms on bare metal.  

Let's give this a shot:

A typical isa expansion card seems to have a jumper to select a I/O port, IRQ and
boot rom location, e.g. 280, 10, cc00.
In its default configuration the PMC directs access to 0xc0000-0xdffff to pci and
doesn't respond to those. Those accesses are forwarded to isa. Now they can be
decoded by the expansion card. I assume isa option roms just appear to be there and
the bios only needs to scan for them. This seems to be exactly what qemu does right
now with "-option-rom".

- Sebastian

^ permalink raw reply	[flat|nested] 101+ messages in thread

end of thread, other threads:[~2009-12-17 21:16 UTC | newest]

Thread overview: 101+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20091213200259.GB25615@redhat.com>
     [not found] ` <4B260683.8000506@redhat.com>
     [not found]   ` <20091214093414.GA30459@redhat.com>
     [not found]     ` <4B26090B.8010707@redhat.com>
     [not found]       ` <20091214094406.GB32140@redhat.com>
     [not found]         ` <4B261082.4030806@redhat.com>
2009-12-14 10:59           ` [Qemu-devel] Re: qdev property bug? Michael S. Tsirkin
2009-12-14 11:55             ` Alexander Graf
2009-12-14 13:24               ` Michael S. Tsirkin
2009-12-14 13:35                 ` Alexander Graf
2009-12-14 14:01                   ` Michael S. Tsirkin
2009-12-14 17:00                     ` Glauber Costa
2009-12-14 14:11                   ` Anthony Liguori
2009-12-14 14:11                     ` Michael S. Tsirkin
2009-12-14 14:13                       ` Michael S. Tsirkin
2009-12-14 14:25                         ` Anthony Liguori
2009-12-14 16:20                           ` Michael S. Tsirkin
2009-12-14 19:12                           ` Sebastian Herbszt
2009-12-14 19:20                             ` Michael S. Tsirkin
2009-12-14 19:38                               ` Sebastian Herbszt
2009-12-14 19:33                             ` Anthony Liguori
2009-12-14 19:42                               ` Michael S. Tsirkin
2009-12-14 19:59                                 ` Anthony Liguori
2009-12-14 20:20                                   ` Michael S. Tsirkin
2009-12-14 20:32                                     ` Gerd Hoffmann
2009-12-14 20:34                                       ` Michael S. Tsirkin
2009-12-14 20:36                                         ` Michael S. Tsirkin
2009-12-14 20:44                                           ` Anthony Liguori
2009-12-14 20:51                                             ` Michael S. Tsirkin
2009-12-15  2:37                                               ` Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?) Anthony Liguori
2009-12-15  3:55                                                 ` Kevin O'Connor
2009-12-15  4:34                                                 ` Kevin O'Connor
2009-12-15 13:15                                                   ` Anthony Liguori
2009-12-15 14:20                                                     ` Anthony Liguori
2009-12-15 14:33                                                       ` [SeaBIOS] " Avi Kivity
2009-12-15 17:35                                                         ` Anthony Liguori
2009-12-15 23:54                                                           ` Kevin OConnor
2009-12-16  0:41                                                             ` Anthony Liguori
2009-12-16  4:20                                                               ` Kevin O'Connor
2009-12-15  9:17                                                 ` Gerd Hoffmann
2009-12-15 10:14                                                   ` Gerd Hoffmann
2009-12-15 19:10                                                     ` Anthony Liguori
2009-12-16 12:03                                                       ` Gerd Hoffmann
2009-12-16 12:39                                                         ` Michael S. Tsirkin
2009-12-16 13:42                                                           ` Gerd Hoffmann
2009-12-16 13:52                                                             ` Michael S. Tsirkin
2009-12-16 14:12                                                               ` Kevin O'Connor
2009-12-16 14:14                                                                 ` Michael S. Tsirkin
2009-12-16 14:17                                                                 ` Gleb Natapov
2009-12-16 14:15                                                                   ` Michael S. Tsirkin
2009-12-16 14:18                                                                     ` Gleb Natapov
2009-12-16 14:24                                                                       ` Michael S. Tsirkin
2009-12-16 14:28                                                                         ` Gleb Natapov
2009-12-16 14:28                                                                           ` Michael S. Tsirkin
2009-12-15 19:35                                                     ` Anthony Liguori
2009-12-15 21:17                                                       ` Michael S. Tsirkin
2009-12-15 21:41                                                         ` Anthony Liguori
2009-12-16  0:33                                                           ` Chris Wright
2009-12-16  1:32                                                             ` Anthony Liguori
2009-12-16  4:57                                                           ` Kevin O'Connor
2009-12-16 12:31                                                             ` Gerd Hoffmann
2009-12-16 16:22                                                             ` Gerd Hoffmann
2009-12-17  1:24                                                               ` Kevin O'Connor
2009-12-17  9:45                                                                 ` Gerd Hoffmann
2009-12-17  9:50                                                                   ` Michael S. Tsirkin
2009-12-17 10:40                                                                     ` Gerd Hoffmann
2009-12-16 14:41                                                           ` Gerd Hoffmann
2009-12-16 14:41                                                             ` Michael S. Tsirkin
2009-12-16 14:50                                                               ` [SeaBIOS] " Gleb Natapov
2009-12-15 13:16                                                   ` Anthony Liguori
2009-12-15 21:24                                                     ` Sebastian Herbszt
2009-12-15 21:31                                                       ` Anthony Liguori
2009-12-15 21:38                                                         ` Sebastian Herbszt
2009-12-15 22:00                                                           ` Anthony Liguori
2009-12-17 21:14                                                             ` Sebastian Herbszt
2009-12-16  4:29                                                       ` Kevin O'Connor
2009-12-16 12:01                                                         ` Gerd Hoffmann
2009-12-15 19:21                                                   ` Anthony Liguori
2009-12-15 21:19                                                     ` Michael S. Tsirkin
2009-12-15 21:45                                                       ` Anthony Liguori
2009-12-15 21:52                                                         ` Michael S. Tsirkin
2009-12-15 21:57                                                           ` Anthony Liguori
2009-12-15 21:59                                                             ` Michael S. Tsirkin
2009-12-15 22:26                                                               ` Anthony Liguori
2009-12-15 22:51                                                                 ` Sebastian Herbszt
2009-12-16 14:49                                                                   ` Gerd Hoffmann
2009-12-17 20:33                                                                     ` Sebastian Herbszt
2009-12-15 10:51                                                 ` Michael S. Tsirkin
2009-12-15 19:05                                                   ` Anthony Liguori
2009-12-15 19:06                                                     ` Anthony Liguori
2009-12-14 20:43                                         ` [Qemu-devel] Re: qdev property bug? Anthony Liguori
2009-12-14 20:50                                           ` Michael S. Tsirkin
2009-12-14 21:05                                             ` Anthony Liguori
2009-12-14 21:36                                               ` Sebastian Herbszt
2009-12-14 21:52                                                 ` Anthony Liguori
2009-12-14 22:14                                                   ` Sebastian Herbszt
2009-12-15  4:23                                               ` Kevin O'Connor
2009-12-14 20:47                                         ` Sebastian Herbszt
2009-12-14 20:56                                           ` Anthony Liguori
2009-12-14 20:38                                       ` Sebastian Herbszt
2009-12-14 19:51                               ` Sebastian Herbszt
2009-12-14 14:22                       ` Anthony Liguori
2009-12-14 17:03                         ` Glauber Costa
2009-12-14 17:01                       ` Glauber Costa
2009-12-14 14:10               ` Anthony Liguori
2009-12-14 14:52                 ` Gerd Hoffmann
2009-12-14 14:54                   ` Anthony Liguori

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.