* [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@redhat.com, Sebastian Herbszt, Gerd Hoffmann, qemu-devel@nongnu.org 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@redhat.com, Sebastian Herbszt, Gerd Hoffmann, qemu-devel@nongnu.org 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@redhat.com, qemu-devel@nongnu.org, 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@redhat.com, qemu-devel@nongnu.org, 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 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@nongnu.org, 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 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@redhat.com, qemu-devel@nongnu.org, 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 ` 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@redhat.com, qemu-devel@nongnu.org, 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 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@redhat.com, qemu-devel@nongnu.org, 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: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@redhat.com, qemu-devel@nongnu.org, 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: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@redhat.com, qemu-devel@nongnu.org, 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: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: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: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: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: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: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: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
* 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: 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 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 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: [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: [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: [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 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 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 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 zcmeFaeS8!}wm050)00fXgr2~lL4yoBXpk2ZjJpX0on(>_5O5&8ih_}3oDfK2GDARd zP3#2I8RxFMi+lIQ^@{B7^}61>S#~dZK{1oSOu)AY>LREFaB)KO5=9}r&hLAwCoiDx zKA+F;dH!oYq`SK6RMn|dr%s(Zb*hHr)PE`kR0^mRP${5NK&6060hIzO1yl;C6i_Lk zQb47EN&%GuDg{&us1#5spi)4kfJy<C0xAVm3aAuNDWFn7rGQESl>#aSR0^mRP${5N zK&6060hIzO1yl;C6i_LkQb47EN&%GuDg{&us1#5spi)4kfJy<C0xAVm3aAuNDWFn7 zrGQESl>#aSR0^mRP${5NK&6060hIzO1yl;C6i_LkQb47EN&%GuDg{&us1#5spi)4k zfJy<C0xAVm3aAuNDWFn7rGQESl>#aSR0^mRP${5NK&6060hIzO1yl;C6i_LkQb47E zN&%GuDg{&us1#5spi)4kfJy<C0xAVm3aAuNDWFn7rGQESl>#aSR0^mRP${5NK&606 z0hIzO1yl;C6i_LkQb47EN&%GuDg{&us1#5spi)4kfJy<C0xAVm3aAuNDWFn7rGQES zl>#aSR0^mRP${5NK&6060hIzO1yl;C6i_LkQb47EN&%GuDg{&us1#5spi)4kfJy<C z0xAVm3aAuNDWFn7rGQESl>#aSR0^mRP${5NK&6060hIzO1yl;C6i_LkQb47EN&%Gu zDg{&us1#5spi)4kfJ%Y?yA*KlxO`Q|J=UPhD0CZ~JNob;M>%(JVIAje=D1kyF{h+! z<XZpAofcke-Nv2F==H?5@{Om&?yF~HW5!n=1N-XKoDp7Iv}AF<cTD+ufoq{h-65g& zO`z+&J3ZjdHwkrr#D^5`EirnZ<Wu%}jW4{qOyH(x8Y=kdnhHafcv0^;A&;or;~rjj z&K;YcY4GT!4F-Ai7Aj31onFo(Vm&V#(#wsWXlcDMWuF}5wVCSLJjdj-US270DV3Kn zP~PymHk7rL%5n`UYbllGqOz7!SuSHrn|womS#iGmP163J>EUo#><lkovGU;#sjF4X zbKL2U#rfh%qZE+30@>DKoNtabc1JAQm9p>rS+PC2J|4*M(%bT|S@KC?XP49)zQNw0 zt8MdqE$%WdU(q4?eObxk#h7(EU)B-==nTiBOcc1kZjWbT&Bbt-<Eo;huD@vHSgFe& zGPUSY{0zi$>!L)z)*mv6eJ1gfurD(#_C-}ihplzb&lNc7p#Mao)EoLOkfv~gcvQgW zbCFN8^7&Nc)1-WsMm~+o=gP>ZLHTq<K6&Lc6QANSK{_b)E??1eH@>LD#gjace_t|N zy=H5Jwzf^EP1bN6nwBwMs2h!-cak+HWlzJyoX_5s5mOac@<FVyv%@z>+m$2tR9{-- z;d78!eW~32<kJ(XFRc=4{~e8edSvyb@$QuBOH+ip_we2GZ+KK+DirG45Rh-HzT|Pw zsJ^t`{c!cAN}=vg1oBfnTF2u-WS5`zj;%YiVOZ<rNW}R=Vvr~7LupsTVfhi?O5S@T zzV4*2+gg(&V6E#TfffS-{XokABpsF~;#=5>TqwU+nq;khN>k~X?j0)|uIua|pMzxC z;vLI+UyrKg)BP~AJb-1GxAt_P?4^v$z)lA5LMz|ghLI8a9pXW!NYon?)qtpr-^f?k zP}^uVH$-PV<j%>s%bh88&)~|zBWcp^ntyP;;c(5BUC7~1+PM+U*g?!I^-2d%vsOtb znptt;6|{<C8!e|%QG#?)iN6iiFog1@js>pQ!Cs*T^!Ku*b%#80t|t0^0^bkHb60ah zlU?f&nsknEr8!)g5Uw<ZD-&IB5zJ!Zm|Ye?SOH<T(BoEz&we{#jp0f@TxoD!B*4iE z;PMVIl;n2?ZMSm0PRU{EZ&a-7o_PT41zJ*PXyg%&19lzYy*c&!*|@AfaJu?ZtY@lk zq4j=Ww)J*2W_&=)%}(Fz>2n6Nt+P2T#;bie9$9g%Gx`Ley)X1{s1`ZK13Eku+RC8E z46lF4n%EC4b%$0mEaxomQ20Jc>VA_*tkB(bE!{n-RPF7YmR?q_w|O?|bV}LQTd!+V zBH9FuwW0iO43)W@6mq?CcsRF6dW82D@DF#0yOR2QqLpg%YSRz6d8u7K=haDC=|E@` zL`J^LLG(F}?p*pHqoR1yEp_-dTIV&N3{zu!QAZ`(Iyb;^dFfpWRVr9JOEl8gQeUVB zh@8u|R@gif2oCT`pvxUY=`x4YN?(VT0#MkVZOxHq*B$za9l&=`0|2ZU3XHac+G95n z0dC?rdfnjYXkC3#q5TMyBFa;H3W=zlU=ufWX+)rONFS%SR~V$=+22b+c`QVo&#dz$ zMoI6doRbX={N45Z)Oioog+1R$f1mKa)VGZCD!q~j8XF{xA<1anvIY|ezKvqYEOz%! z*Sqjt5j7n#>v#x!{Z<ALgv?Iyj(UWE7g~){S3mee1kR^-MSvLqfQ8z*5NkCXt%g(p z2z75@fO*GcAnaXZO+Npbv<4&T;6$@^+zD@78luzpRv6L`3Y&fbK%wcL;TVhl<Gipv zO4{xJM=Zcins3wJ#k}#E93!1T#@iNJ6Kalfm%;7}t>)r37TT}rsJRpl8@P4zgeLt+ zDx^C$J>ao<=U7eX!ULh5plSYM*DB(Lg8-Ed_(QSItqfG=ozfVpS(?l+&9+*$5^k85 zAaM-d*(7+9&mWXJC-T;D?P!T%`XU~!-;37oljFQZR)?W(pC?&9(?8d)r@1z5V6IKa zTzgMl*qxHT-r$*p@{GtK-zMECJ;0+tUMe%77^5`P$fk5@rb(K?=5}q$K2UvEB5`^< z&-KqMyjA+h#hEy+g&yMGaC0Fr4vj=Jr4H1!)K^UjlAV{jcMc9kgA}MaP9o47CF!JF z@?B36LH1yrfJz}y%itP$jE2~wymu8J{=hp7BMs#HHR%0t$BLD*UJ8ZH*5z#6kw9wT zGPLfARk2q)g*uEMPL9vexu4A7g*xa+T+gf2|Czklmg#W)997AA4fA>LvTX0;dBXNg zgTt2@=RotiHIA+m!uEX&T)!oJOoYz?>1*Nju3`QY!^B-?@gi4s!wjYX2o6^Z0m&C= zM9V7y6ze|`>u?3B{1BC&Y1r{8KB_kuIgftFM+oK%+uN?Itli;~shq7SN8FVl-$1yy z_y<tPR#!A$A&F{$VnUKPD81*)f>sf|&b+`SQ0iu+rtHCV--b56{LX%``}PAVd&Eo8 z!n6O4DBCL(S8`~M&%5RWfoq<FxV!+b;V`7m*X<E%>k%Ps;HBPrkpP^*Of9FapKlCi zW@F%ogPD2s^70><-ofb0Ohd?wkW<RcXc+S@%C5d7ROJfWJEXleC#VGfMQ!oEoA;I^ z)j$6}l6`i~D+G46(-ZF$<4j<1O+f!syrN|x5|ODyR7stKVuG*Fw(6vhgr<$w1R+I& zz>)gSkALTLfzx!vf9%^3EnPfW?{5ImxK8OrT9-#JZ1>9(gp>&fMt_Zt+IZvBda;jN zXL8*}bXwELq}ao9bm%ZhCi_=LSh-(ALLGi-f3cowcplQ@EnAjAO5^#IeHwrKep!3= zd6eBb`XH5kRw?_W(Da^*dy16H=4#L}L>kzGL)svH++br3=?bCiy@|VDMd?D*C6-CL z(4Q?9*&wy*iBB6A>#GZ`I!*OPJVv)cD*9ZF;?W0UKJw*9p~X_@bjrKpKTPgnm=f+| z8P``f%!@kb=iRsZ@--=KryFvkefe6v48D9FUNOFW9<NwmzW#JW6kzb7Q6RJmgie9r z3Bs2jUEg^cg&)Nzu4`L=!>by1bTdX?SRN*JL$_sET_TD8@PJ6~U~-u>A)C=_<CW%` zS#zC8GC95c?$^+EnqWr=O(iC;-GHFEMT;hr<ofmb3;5<S2PGhe^DPQXW~;c-YUJD_ zAP{)3+iHfqGTrVxTP6!E2HF+HIM1$i;yprak3xSy(q7Xef5wbk*R~<bIibWP=gtLS zLb}=Nwq^mVgz*xp68j9ESVBPqeB|c{uo)viEGLZrFG?mHJUX%aFyxuO8N7pW%H-fc z<AJvX?b>EU3qSy+^+Q`c9L4kAWbb+&^YG1>k4^oPeEr+?bF4Q4E8e@><gB?8=Bh>s zO}oK!z3~@G+(bj%goSm}rH~T~3yg^bsDl?FZ4$78z~^YG56_#Fw424Zd8kA;N?+9+ zK{hVsko2B(7?XTFv=)GkkiM>8XdNlMe%0VVW5AF{i~Bz)WmNx1uh=b!oi?Q3;PgIZ z9WHi6HO4{<1?urcs!$@xD)}KpMmSqItrx9F3qz+_Y@-2?Qs=c)N+8-uAJ@MPz)8df zQE0TmyTC}4Tfj59>&^Ix#)s2u{D^o3cn_yX96bcCVWBk&ID(ZBaQaUe@DY!c5tKag zWnXdBUt;Sa3JA$KFK-R4r`efsT+k&8+uxQh67NVSz$EWq!y?boL=3p~cY@Q0`Icx- zwt(})^35%1PWV-W8w@+g8ifThwLG@JjVD+e6NZWrBQ!cJI;AgtZs@C|$Mt&p0=zW| zt81w%(t**y+W^(D9r^>uL3j(V?@jRcBp_O=M55y;(&X<kAyR?F@{&aw{5{lg5-NHZ zhXqiJ5v52MF+2VOSVLJL@q?)X0yAX~Xf^Lg{WaeoSHJN7;hEwEv**iz{T{CQ4&;;# zfoxqIm*<YI-l&VSxW5vbqWqy~%!T!KO^W~sp=tZec-8NfdiVFes_{h4o>jZY(<^Lm zm+S`2ON;YU4*ANXrLRxcwr!Xd(@}jX?1^`!kkCE<bvWEi3uE~XA!VZ80^Q)|QC8Av zhRWxe1o{p@X(=zqhVJ_Y#BYSWMB)94Mu+rwsa@=j#w>CRW<a5-&EIW^L({8U`|v!o z?J8<tuM<0>y+3~QGGfxtZq$o!hh>;Y9<pkMrnmh^3{qztaEauQPB>5HImNy!>*CIJ zM0@mNhe6(JmxBPhrdYB2={(51s#|LIKr&Tt>ytXqY`c7FJcoAaIZPDky+6@P(b9nx zOdwu6od|!vhvt*FLOS$O@4uQ&XiB24^DFb6@aH(n3|a7Y{Kv9BbjMjpf`RF+SDAu( zB1Eb=`Fn`c$uxfaeOin!v#-|rQ$+bTTkUxD3movU8L5d7v=(qTt*-14g?!JxDDV;h zNg5}TG~Q1$79SDeSZg>*ukHdAh>sEyLOM1-2=$v02dQ&M^(D>dbK>z{@wCIc(V8R% zqexVpzJ6kTGcvJ$`_Cp;AdwJy1w)Od#k)}fE9zu@2PA(Ij4X|dq`jw=T6B%Cp%!T` z&5ckApb%7FSR~Y4g;gfwHKFbt-coN`hfsGCA;^wIX|pvC4aEd|2j?cW*<wp?7ixRZ z_6Dpc>klZiSBBE`$iyYKMUm9HvvD}dpF2-CqcAQs93*Irjl>Y~LNgE}G@Vf<_@4d= ze!_V+m2Rj$rg6_xdbgSMhCzh})M{*`c7#H!72r8&O-7@8{9u=Vu5|g|T@TZU`OO(9 z!}9IEB~gtppRRtxnvMFko*N=Hx7vVBGd)7Dp97Kx1xe~$G{fSn9pDNqws_AuL~KO? zz89^}(`z&1oj_zMibN`1s<pm|mor#veHm{JhX6ri5KwS4g7gm}FdLx1!e`4Cd}HZw zAk+o@3w>GlXGBEQ)GqNNl+>3H5m8dVp5uFIsFJEvl+;7+r@XbS%dn0Bzh<Mjn<29U zn+RCv41&K6LA#=^+L^k_R=;BRSg}tpY;LQ!8_DXm2ZOL7?mbdjF9^c3t@wn>SR*r~ z^^&%DzoN9BA*D4_^9lj>yZ|8dcaqp14FMz6zKU-~Venz%5E|!wtFUT4(wjN7obZI6 ztz}L4e?;7q{lu+g93#}lqV{WudjXh4h<k93Z^uyLMk~Y(3$-5tsGq<y6$1B#TA}C! z*opuKl9^Z%IKA1{T&FbCMuFJ~+>5sZ@2qpRRvDP^ZWBr|f*HJ<v0jGIkHI%By}<x8 zv!x|@)eHfxXI#Sre0^tINGrCbi=EZS%fEOWvPL|j`{2m_KCxRTPjz}%-s@e0svgL4 z)?DQHs^L!YlBvp&(&iK|+_w%BatF*q!k^n`Xh3Y?#Wq|0%pWx@;W0B#a(b8COFAbj z0B@ACB#R=lyeqT459DQNh1&hVDnlpKig?qS@i5-v1+L0abBW_GaqC9!<gh?_^FBoH zp!ut{3L~!P075MkCmnz&|4Q;>@y?Q+Gpf0&+jdkV2{VeVDq)9B30kV+c3704sY?4- zlhAZl>O|giQh*i7YLKg(P%`g@{e2}7FB=%o2%lM}Zw_OGvzd-(6EUkZu!H90o_hi5 z{NVHl$3T~-*Nt*w@t!5$MY`I((3EYhPXb?O%~eqD6D4gdOJiXMP}2{vPS4s3r4z=# z4*Ufi3xuX@>jDJ(pGzIUDvzy?*I4J!;F{xbZ6YBwN)Cse(#kZaR5i^hm1THGrEMUS zMH0q#)$)>dqp$u$%=f-5%~nc)-CZl~_vL?6bCIGeZgPrGexvn_^j7c<(P>c?v7RH| zTz>jYzVegwx824GpZM%X>0s#DQ>Z1V({j?2e9&%qgK!6LT?HkW6!)0N7aWESKGTLF zy}1p{1YJHcj6dLQwn4%r3cj(l>>D{qqBl`W&jE<*nq4$?4xPO}_8&)AwZ#O2yp^Pz zbTp+c^f(5Y<bR9Q4cRI*`AGpG1f+{+T1n$LmEP+f3Be&94dpV>x;+~Xh<jiU9as_8 zoO}ox8>XnJ3<#h<fyIDoLp4d942Z(tC=n%Xb6~36O@mda-9&M0`P*DSa_EGC2^?iH zQ9Tm@$!r~*DB_igBG$Ew+L(_P_-d{BfFglDows_<<9jT=eQ#Ke^xAA47D*+`qx8Bp z0iPu26Y<ti?u7_IsGA84!Wggd$VKnf21Nz!3ypx{26cO}u>CpfQl$8gBnaDUt;;Cb zZHn>J$8vlqp$A#CA;#bEA}hUNvvm=ogzbN`E~a-=jyByd)P93D_H<K2|Nl1OM=15$ zCg{+VIfxz6-;@#kO_>Q@i>9kr!5<B^)+_)4KRaF-(_mmfNW4Ef1jCH{6S6XqY4++~ zp>6}-7|RCO97_>&T_L#6FG+8cppZ8wd#>w35|`Z4o=gDGca3+@v<_%kxbA>yup8vt z=RazS>5{$@wtwJ1YKXypQ;frvNq~<7P&Td(yOz+`bNE`e95lKcIQpKmTIjWzb#nhK zj&7ZVSoA6-#-m~c6(&+TI~mdF>}(hSYpqH6fGOV!LeNZ!*+Qt(W1O^tA!*bZ(Z+9y zv*uXink#`qL;N(8JGPbdqMlEYP`gj4J%V?pP5z=4g|SQ;><%HWHAeZ4Lm`d$MtOHa zXM0%*PK4U_0znN^peEG|bq)B2v1c*{PxPRLwtiCz;(c`-_f=ThbSuJ6@BOzru~DaQ zX^X~}^ly_WGPvnZyojl?ty7)SrYZRHF0`gfzq}nGD1=0jA=D7tbkL%mAOq1vX!^u| zjF(<yGy#bTI5Z3kmR1aVMi`oj(S~TwGXh9Pi6Kk<rl}~orvnMCBqqce+=r0dLajdn zs;gQOU@(|6m{ly33edVo(@W>Ri(VSf(?C591;HE`6A6x>=KKh84hp0qpylKxkwhye zA5n^}zN+`2s~Uc>3lI(7-Sqrz2cBf;ybm;B#cto@KdN<NC93nyiPwN!RIsr9kliW0 zL`4TS(O#hj_GM!$0-UUGrOi~St7aF8GA1;A4_V1Vo&Q}j_S5PxOuen>4x&|UFSL4j zCl-xg6uzqUkd=R2^HijT{Gh14=8_4^QqM8h&xotHf5BFT*fAMg2%4=@&>uF4UkXyd zf7K`+7ear=LPpvR(eq&af#ZcKhvX5V7ZHVs`@Pun<Zn9uh#d>U6WE(bW%X)2w<&eb z9a86)uK%Grvy?iQ%fc6rAU8HLa?`JF?36-7EnWs`xAb>qP)nVITKpG<!uHN{evNz9 z7mw7pOP&6Z9<ye8$a4p_LSUe5mseC@yy#w7eetTtJm0mK>f3h=i)5P09$Y5d<^#sz zIz#cTh!=Mm2c`OeL38AMB>$F@JFx;VhKBzG6s>K(h%#0%vu6J;4Yqyj_rq*;6Z9e- zG*Vsjhp@(n8X;|@c2H-MEQBiiKgNP~k4P6-H)GS)Of+pzX{*~OywrC7z_@m)i|p-@ zjxfO#{jp@UVgtO-0Amr>6uk72|B6xkhk(5gwt>>kH#|QMOoRP~==v_P(<JNZWx)_0 zUR`J%ei>K^z-oB&BZSpWga|ebgt|}A5J*%A8_%*9S~|Cq4hD<lc*2Q+yn=|9mocEA zTlR%q{aNc95bx!!^$9J72(iTbSp(1S^Isf`T@$1^G~kdz2^Ng5mQJPMcL)X(YRWlK zD^a!sOxSKt?oa;jNco;Ax#_1j9t9iS-0}@t#>$t;AOxh=$5Y{n$+^?rR(|7QsA2{* zPEZ;*gDqv<TFe3m#9byfZfIv-;YN3&!i{f1;rrqdJ5*gy$Tb1I-19Z?!}!ul2b*6* zg`sa@(;^aeBOa1Qo3Y3}3_1j+1VGDc0rn>XdoKdk5&^4ii-467ST2^O|AUm!e@4K5 zj*pamjjx7&8HuPtg!D-(bwOwt8V_E1oK^Q4jA2yWuZaZ{U}VJJ$C8vit>01!ZK1=g znVuY2<g~QksBP_~uI*H!rwnpNpqe<N06A%XN6tSeAj4b%DtTu&N?zJO>dmbqAIGw4 zQ#Fcu5Q|yH0`*6bvGvCz`V%rK0aiSrp88a1lKuZM)V#YCa+z6(q!3wcqz*FaYK6Mr zGnhRR%*FmftI1G<KsjK&*;doGKA4jlXP<87s$;oUu3CrPEeq%Yjz9Z{mdOW)b2U92 zo;&Fw{T(}?A;kz)^EMT}?Xq;>Orz%bUsKwSZ~Nk}@GQBAl5|v3>@_9LWhGI0JLy3s z2{EiB!h&#!JuU7sGhQL_H>9x(*>ZD($@M8w>-oc&`+J_FCdGIsCquCon)>`-8l<Z= z<d{(nE--RC9z@Vr!`Wc5+FfN$e|O#e(t+`p5g8LuDAapKIw&61IcwT48yizj%M<(4 zdzI!5NsT{U<L9b5&R%nY<|fa7*1SJRX^`(qqv<rmo0-FsT)G87v*+`0nE7&qreGXz z$-{c!K@7LWHS2lD!UY!3+?uon`PmjvjyKN)AESF~(($>_^CRhP-7?zY9PiEknU%(8 zO<HcI-Qh8NZS;8q`^@(Y_bxTc!?Jt;O7E!J52Iu@_PrNk&pTqps5|7g<h#s-$_k)D zd#^n7Qh3b7bihb>C$z3aS288vhvep72puc}X!7obY`A^-b$$UnfKY`tG`$VeJ97ev z2*(Wg+hA9im`iBNib7^6awBSvf?%|N4JROY4Ph9Sv|)L)`7oA6bF9hL%@o4g^b!V! z^p(G7^bQ0#>G1w9r3=D#VpR)eOu&SK5^3``!M8C!EcGc{Cq~In&PPY|t4#y@uwD!! zX}8a25j%M)hqf{%Ve@7@ioFaqtvXT4;jz8B{i6TNXwoou#{`LM`r;;Y-JFy|Tft^2 z$2bx5yYT0StQOrv*nN1&nu@ATXh)jQV`DgCDU!r-1`ak6V<zzA<szw<s?6>FZk4%T zpjgXvl<DCSN(DrsX7nEM$a>LVjFOXLF6Q~WN5!<q?3EUW0Ffr;o~&^zHP``Q(R88x zX<~p1;WxhEKc@FB9K!{*M6T=W<E1QKsR27__4*?Ksd*n_Bpefzo-hQnNP#1~lf4@Z zQW+mn(@C}uPU_wVcueV@WrH*EOl5s#lin7O^#Y}2?`+;TU+X-Dj^B%?pH|UWBEpM? z&tKx2NjxPV!e(l=H3O`VX+5Fmcc>$@@H5QZ|AA;L;n5=@Zndc;8R3CG3=*sE4pREp zK-4Vd@xDBhl*f8UY>P$*MH+~H?F&x^w;H7!69{KQd;;gurnE_!yl;_3ns0!`)P#vC z!IwQYEM*SKXyA~s4;d}NES~D}<s?g40|cTbf?UxgJ>VlC&BT5&v5|&$1NWT&pymi? zK??MNv%>cM{-Y6gYWJTW-HbMYpZ9lz;b|4vJ`4)njX)yVYv+SD1E!e%1@3iZpJ{+0 zz@0ou_FELP-?+q8NfiC{K}OL@MA2nX*FsUBf|{NE)KsuldUOjJ(wQnjMidyHv4sqa z`bX%K!Q%TZ>M+6X{}@}|=oN8S#(?-0PukGE`xiJ|4OIKhsJ$5~FekjxR&$!huK%jG z_~Spl_S$P~M49}@5@KlYExQ_zoG5ay$>lWk%HyE9!-!^}#nS}e8f&({dvr{nbRzTy z%$m^oXol}aH(<-l>dWfONE4ntf=}p%!W+H*<D+A)qR2EVH=UI`P4QyNP|CeGhRVH5 zIsq-N1O-xQuTXaEVx<g`4r@U!j3finYo9?n8TL|~h`AShW?<PTMY69#GI+-z24kw9 z*6W12S%|29Itt6V`&cL%p?eS-D%yTUM5%sK^Aq9On~+2((<2>vuw7%Lilz}6`mu%@ zu!mLJgxy!d`5(~y8nq$$IF{hZfc+>Y7MX&&|0tHm!W;W)j-v-OjI|6gff||h18lh+ zN<T1;3;2(Ymd?iP7ixcj5;0s2!uBlv06H<>g9)aMG+=WeG%<q9vi_V+Sz1lkgg$Y` z!fsm5)!C5XTN2|lMyKzsjBd!%Wbhu7>vzN<7ygcwe9u?_WavF(gzc-fQV3gQBT+lH zlXYUB&J*nvpWqGdXkoin(=NXm;io>rZ5)wm7!hcihOx^aov^z|*pWk#7e+0j746&% z<cejv6lNIA70IzIlH*zAkUj_f!kor0V>;@<bfhQxO=d*w(-yZ~L&Pt^c2WqseoSC! zFF#Mvm<<vJCNNqI_s>+&_2J|yY==669YSGyASMU_2c3`!IP%U49sdMu*n!w;U_@e% z#dc9FWElA<lQn^u^h3NE3ox0&Bnmujg=gPDJi65+<@1=o#P^HY1QJZylX8lQ!3!hZ zaOSm0TCAysYbU@gUJ7C4Wf^=~CMnC9DYjd%Kk7ErK%q5oavSBxHm6icE8GNcmceV1 zMnVzVtCdW!P4*;x7bReAMr$lX+o<htqYdx_Z9I7ZZ48z`s3XHb?8g+lo7(+16j28Q z{p<8b`+twO^rXS}EUn4Or|SD;Fo@jl?`FjQSTb8<x`4Qu8IfW-C0)?YW<06Kx5VUo zmaqZ3d@!q*<4nEM>~Ew6eQ2`Tm#qm)S(kM{O>8$!$Nr$_kU{|7YfHegC-HfBgIhf3 zr4n<{o?vE(B}$c`iAlZ@eEIVa(1^Z}mtLVzEnf0y=xU?3(y&1dhEO@;SU<|c*!Ls& zPH7W&*@g(*Nm4KXm8hv)>pu>6g*fm{^$s$?N(axhkj+)v3qN<#&S*-id5=U9dCQ(* zv+!>5UD|=fR|wx{NT>xfX;~Zg&cw`Pq>zgP30mku^tTZ|F2=A$i3vmal*Qkx#3!;@ z)opBMnV`II81H|j@gDOb7A-v^!Nqw*tH|ch*+x?ys!ojfT%8SSI2#auzyKt?<*8m5 z4{u-^i!PpGY`n4*{1$5~%w2G>1M$71X#SGA24*m7aWffW&KJUOg}25N5H-qxmT(9G zAW3W^7aI$3v3Rv0K6Vl(^46OHO55)tWimbD+C#X{-H*-0o(ah9ooN8NNm8bT6$r(S z6-X_T90|;`<UZ8<F_XO2G4GZ5qb8pO;dhXI2ea#0n&bn7LV2psxaY62Y{TQM<cCWN zGEzdG4NtFwuX&gJ$RiDR@ZP0)L7M~OoPdJ1IdG0(N_xTv-J#>qWNVHwGr&VuD@OJ? z`6i#)2WU>Wg!g9gaNU5m!h=J&+|227tk#X)IHNGX8S;+{y^7o^hf+?-KlY{mj`B#o zI)(w+!k8c)<3AB29@T(l<Jm@~CstR*2XlE1dPcL`4o%a#v7_#kCyk-zh)|i@aFlf( zuxFhIR!#`L@E+4162)DUh?#rp@Er+9RtPX31u$(j*|gY2Kqtppz_~4qv-h6a!8rTi zDJdv^dD$sF#d}k&1H8Q#i!|pcnzEvtBD_){1f;!ZXzGqa!kHSQwGBmi!8d!)G;==% z1rghfR=`ID0jT|4Xz5|#Hy4&S-+bOlW97^cdBu2r0a#fIT<h7%64EK*J0koxiX{<F z<R2JFafn49#KZm*hqYHss|BgBB*eLTh~*A;L2Z*uW(W8iI5@4I4@MDHgSm#{r@O=3 zOo%tJc&VHZ(pckI+(-r14i83D)v1O5=)(rsR1o6-J&X1VVKw>&t@F({Hrh`6=3_l` z#y39-JBMey5A)4_WFwN$0TNQxgT6|5MIq4PJddI2iGhd9@SZ;cif!W(acI*%M)~?0 zBxJVA#n8%8T*@9_rAg{U0cU*qBaldAGL%k<IZRDQ6++X2a~&G@t<AuUbDr_b2Jx5% zryN3|KeAQ4$KYMWL&^d_$}@t{`r$kkL-U|Uc#{wM;aR{Iv@$bd5r(}|aYi=Q*qnPz zs|o$ytf|H>+L>+f<RftlJ+LQ;P|7)>Db%wS$hE`+j2tPz#Pk?V4;@=C*smyFAN*Sc zgLzcPdB&fVf&`IBk1@Xdi?qp_K#NsBcHB&!F|r9R3}LJXAu{=}=WE$U_V+|28r>s> zrh~0imaI8>zX+G13-YayI|iYt-IuD_!BW7{C+jtt>0fz(B5;z2<)(it)GdPCrkTPr zq~*zIxe-1>D8WnKFNu&>M*qbq*fW5X2_+lFBljWM4FA>MD$GIVkG{dH0WrdVckMrM z&ToO!epkvqEU%e{Nm|wGU^3utd|Ige4+Q@yMW+xIumhWIodTWB3UZS50I2XiW0BYU zW7b*%nn;gHC+pksnoJociXk11=!sYNx^EDgI{WD|OS}NO^n8k<0F^hP7b;_w$rYy2 z^WwWCuxTG#`qnp(R|pnO1k2%a;Hv&@q+mFeqhMkC4Vc7@U@P|s*!3cGSIWmRoV$E5 z1VlG1*1#frGboogp<VK)AAAZ*Ym~z^DIfJsLVe<0{PGpD11@yv6**4q;5DB~ldNx2 zanp@f&vELdiMnVhIslAs#HOzV%@!Vy=?5yJ0$Ca^98Fyu)_9{Q(6Tvux^|sb(qf<1 zig;@}I7O)2e^n8l)1%!}sCQD@Qud*9Xj}J%_Wj-aj{?*b!@o<N7-N2yI+6949C1-k zCa!2VL|oLdQHwPIn+M5|Q%$Uqvgb{*g`t<Qd^5r`l3BrkPa-zj&|eX27gSxH?^lW} zJ}Gv`i+%C#smv1i7A74IyXc0qe?Y%P;2ZCT*CU)EEwoPBNf2lMfFokUbr3l<RBbi* z>dGUYT9~=wVH||U5WoW~1&GIQP_m`wJ+h~<&1Uj^I@5B6X*+O$VxNu4aDS>kX7a=X z7Xg+?OqDI1jYFN{F6+R!z<_wyJL>n)9mI=ce-h`qpL+7qw`tolr=-_Bp}l0U+4qw5 zQ-QOUw3+o3z;63!Ojlt&<&t)?sQ*bq0@^|Dwh5#S=Ns{rDA}1EyWJR}H7$?-j)a8( zTM9yw>XL-;LwH-zYf0Gmtu<jP0*n>$N#x@SxJgJ)R?uvw`ch8yoZ-ONFb;VQ-laT7 zZ5qr@8M-{f$fZoQ;mattnbQvo&+Y;w&ThO1e;$OUZ?t9z&(J}%s#uue(}YdWAdLDf zkYcIR?IzDnsCW{PNuG!$-pzBY8K~Tf8j|Ey(pS=@iKy#l)P*dmu(3!>jXB7WoQ}a$ zF|8^V87F~F4eO>*c{oW0xMTpNPJs9s4M7ujD}RVf18@eUJlkLaE)sAn`8GmtUycS8 z_p$c&kd;0s{UhPI7!Y3G@6~zpc?mN(G&NM5EIdQgQB`a@NF_Y;8)^_w^y77Q!^nJc zI!*v+B7s(nt%@SBiW_H1anyqodP??~nRlrD9hAKQ_>$!?S=z*U_Lq^KO+Z}YM5IAG zOpf$0xNv%<$un7l-hzIa^qmsF0wc-8y{w+}cZKK30SnU75_V5PH5TCY5Q?Rtodo<A zg2+qp9U)6Z(eGIVyMH7MMpDehv{f#>kC^~Av<`>sQR3RyJDIihZdgZXUty?SmsYzt z%S0RIu(y63(~jD1Wp2?oP|_`nUc1h6I~!$TYkTc$7=?=6mQG0~!8^GF<^IrFDY!VY z^7yuBthC3{*{NGJc-*9Eed{Qh-1mhJqu_Hu1`hMCCxEqVhW?Y_teJ5YzJ7~dbH};< zNNs5f(g+mblibQ}WV;_ck&aM-`=@xa+&d}*6E{Sc&sc}<=Jub!0Z+KSPS>X*zTyGb z9xA3B#WdfJ<Oi`sq}xg7wq!kg&J?#fYWf}QgqMY#@VXg3Gl;qo-j_`uV}*7%aAmpW z4@!ECzL(rs`*`m+z@q(t%-5T2nIJ`ZdY3z@A-;B>=QJcbB{^K5Q`O%Fpt~*gZlX-^ zc+$G9Rk6-I_(1?08NOP5I`?f(v8~!uDHnK0*?=^*d1INJZmtGQ$O|biFQ$`;p<^&Z zVReE7HD6QFzd_O1RGKC<jbgiqM|r3B8QR1bwl~n0y43DJ3ay*0^W(W*R5uKEM4^ce z;->5g?EpIg@p-^?0{A2;Fyx5gTu$3MFRb*`J)oVqs~iMxEnG&}h5m|quc`AvR0b>6 zGxSDR^gIfbTbC-pn;3BaHm5UKO+eI>JsE(K{K|5kY0S}ka7MKM6fR7kH%Rly?ro~i zH3V~GvmUVLIfJ>w^DV(#Q`S<4J(!zFFKMwkn43U_26HX+YFH6NGoj3D%~7`W&WgUI z{q-wiuq7Qija75<SAZI_QI-PRChds}^@lOdK{qFrgmm*cw8(v&h5!Ty=9^g8?F+Hf zcqgEm-GB+r05d|Hx3$<JIaoXHQ*!Xl)>{BGnqb<Y)svB#=b#@GFx2=Fu6ZaebY&Om zXb&_02U`B}gUes+-Q))|d4k{h4#?ReVdaR;uRk=p2bdQG;w8IP%1;W|Cusuq$>@RI z<Zy-MT))Tn<&!Y`IVJm)pgnmT3Jcg%zk*wPZ_u8`HG*z-8_!;I40r|XOZk9(nKocw z&ck8!k+6X0qhTRvcXa=mk{^O&S$PqPS*>XyDzwrT6NX6^_2&VQDg&f^p$%0cZ1zqz z!kdGRYv4ey{!Mz7d=}?>lK0sshOU4Ir2r^9!c{`F_^N|wv9jk4Km}|u_=9Oae6P=O z`_r+$nVS0C@luy;3fRU!?XySu`=aV|Z};Wi5#Uw^Y#K+vrd<%Q=~jwuvDmd<6|h}g z9<W^!1GdY<0=6smfbFW|Tt~0_Mw}?Wh;@AoR`u=4vQBLOalIof^8s6U5$)Rv*Cv_j zmugTlD%CXxY&=lX<1Z@8F1E$_@-C*!8-F?BtJRv;d~CqMicGuL5@~F39p9V*o4<IF zoqOCuRPZJ4K7f{iRy=FCk58yO2S4PesqNpkQ`=Yc&~oj5$dEjoPd*>a1uu4A4d#;d zjPtFS1il^{(4iMJhWdPMeZDTGZTct!$`*d!20IsA^RuRpqPi+R3FyEM8sip9t+#7~ zcAn$fuEHr0C2_tdjs0t$Y-P=(9a!_!T7L-$Y=qy*7HN4n_FyD+>s%mO8<?qy4b0SW z!I^N_CA%qk)QLewVC}FBr`FYfK&Kzv)<|w%@t=)ku3w^)mVmKl!X*&-U>h@e-kETI zwFdqanT}a@(C`9G>7e05M8g*u4G)E($C#VbP-AEhrFO6|C?vREB;qyuiFnK9y9dTa z&~DYdvZ*>~pTu!pXmv93630>*t$B`|h3JLnsi*_cLQ&BhtfIqV=pJT;AfyFjvHCab za|rlev~I?Wt^4FCTKPrgrho1^=Y5VPW5!N}0|*WYPJn8PQJkuaqh9bI(GA%~xE(_s zV<H)}jCQpEZ@CB>Y^v@a0!4e1Q}(b$qdX$z6glYg6LZ8X2G2K{=+^YFHl6@mrHbv^ zl6^^xo&4Q6BxR!YTw>_2u)ZTO3Dbj7YS%$WfnZ3KZ*YZ(Jil%u@?hf|eU?Xp9vGYl zmXm^+R$?q^FNQ+O9{E0`VfA6EpG|AoWUsD1OY6&u0sn*NHAupcgo7V=F0P;FuxZ#~ zK<^}DU7k6eHM*iDpw*z5B;RZ;TgszTlv9*}EG-wzN~9`-<S0llXzTPc(G4BJEV7Ss zzKSHwzhGBWWa$9_Sm{_c*!$_-lZz*MF4-%1SJJ9EP2-8dPCJguiu-9piU+X_n$Gxx zpo#@*j&%zUB4g3Yd=8&|9c4iM<ArBmK?spnMQyYQn|_7}Tmtc#CK&$_^ueBq(8;0x zTBUbmK5}OTqBMbAG;PH|(-b8FJ|Ag$^|@NiN`xO1%QSDX=1Gf9(mb;mNWuaxDS`;d zPpY<cf`9aWs!j}Y;zt^=p9P1gtxEe@yP2V~zuLtE)hhn-BG}1recfv?C6v;xr$Nd! zO7l$8ivGG$e;VS+(rE=@co2rpN~b|1P8EEwld6%|U)A+34CJEoaud-wGCe6TrSo#p zc@)VyFVad`k8)G9u$E4G>c3ZOsI{&63o;j?_T<owupA;ls|yUh=h)EuB#c31PC3;t zmTp%@A$OfvI$2+9C0nS|`#KX-Dd&_SQ$_<ukzD;CLeq;31S5Sjb2FBBD;R%FzH8Vb z42s$}nfi1OGJ4^>rp=PfRv9Pr6Vel{o)hRAxFx)pVJFEWUNXZLH=T0LL#`EaRIW4q zbj5QdI(&(5lD>dS?xISdN4TSX<^<`0Y<4ZA9Er%Wyr&j014GaE6zTeA{}C-Vs4~v} z9@6iVR&wFMBIpvlbDF8dYfR%oEjfI^Y)k$h!K@fX8_J5yw@9l^4YLh6a)-@otyyOi z`^=uRNgveTZ;-~2<H(|X*G59)g*Ql#GuG@P?Pp-!E1t}N!h;Q*L1Sd~TTGNBf>g1t z-ymzxzeDW+Lz3vEcPhQneRMn~S$~;y60j6>$TaAa$qp!#X%47~KDeTjX(*aTDlQZ7 zJ)988!MvWMNpJ>pAc@dsjBzfs`Xn^bR2}Lw1#=Rz%2v6caqyL#&vQ#4hsRbX^OQx2 znFN>^1wbJfrNHG9+={3`jvj|Ea-whs{1fIu3+R!6MrZJv4%xJ`3GHYhCt2w*ypS#h zatyja4t9SR#j>45NGN4I1#)5yfgBu^%o)k~=9*iHr9*q*x{pfvK#p1Cn>(s?6e3Z< zwt?tTfWILe$hk3$xf#c}X_!gv6G08|f9g6KW~oH1ei~uzYhh$!+d83D3{#=*u82(Y zRoxtj)?li=nH?x03J{?hHKF@hmF_rAATX2HFqaZJ3PC!*s*p)3@kRyC01cpir5?)7 zOg;7kTcc2l0&wmGBaQ+PMF3F*Ksyr(z(+#?q6r|H^TD5?hmlu-`3r;b7_n~?$ksEH z%(=kKgeVj=dZ3`^h88rM3K~r{-82ADG8Et@0=S6_L~*`c4d(Y~2wMcn^7Vg6QOv(w zC|>EB5|TCnPKU|M><nTSLx`zxQ0byDrA6b<fWH{T$Kr1o{*2n7ji!D?$KwyIU;`^S zC_k8i@W5=5I;zS*BjE<X`Lf82nv4SwB>3T@klgbz0t0=FPPgHb8pi4ySX+fU(!vQh zWHbag=$;yjm$y3g9GkYBQkFK5#bXZD>jGJraI&J6UJ+g)lbJNrAT2QlW}3Lb%y?44 z;Ms>Ku)`A=p$jrWWjIjGyopYO%uHm@TQL5E7ECbw&U#!_(?WfH_V*3ERcs@}3}2tc zDi_=DV8rg42>f7xCiW#0511Jj{CJI4Ws(;*-He6JmLysWkD7$1v_Gc9Z4lcyai2zx zj!bf7pAcR@YxbWu)BO;7+Sd~IaX6Gc+<#&?%C&xXNYG>wa`dnvw^->wXx|zvL(qW; zfi5=C#TJFF0sqlh$q|hdxL$%ZR;RQ+&gURdSo8b)3a6o{ugHx*(pM>`eD?5oLIx-p zd&plD6<PCka5nP!^XMT=jrQ-NMn#1FH^fj|ub>tW)JFMUphE(<<p)9t3}(X9U_)=% zV)2A!EMOZBB?{-XZ6+Yk*ou(GDHY%PQ9Ij7HYvR!o!}fd1#F3&*fxgs!vB#FK{;IL z76q-v=*r}Pb|myK0p9*dB5smGI3fWDFX<Eikyu~00bAAvC+S|MK-O@LFAEgI9S+|| zF|mzt_jhT*B;$YKECnQEiBhQ<m5#)Qc@0OrIHX$tF;tpBl_HH%D$D4Ewl>l!%^n`e z0#UL+l&lfxpOL@>NcZ=hS?N2HxDiZprb9gvo|^+*<-15(h!SQ6shLU#S<pdn4gv32 ze0e+*f!HvMXPaXf_0&t47krL5M(^+8dbmeIy`*u?hBWMxi=_*2zc~>4({bj8Pg`!D zW0c4enx7^leu^|uCRIV=X&`|`50H4;=b!+jL4OnVN)t&oN7xgboQ8!#GPp1mv-4P_ z445O1Heq%qk93o34^8Vk{{}6l=LLWSxs~~Iu@csg#n{k7xM4$Msezj4%NxeFGY9l= zsM{;E=gtabnO91^&WV`H(OWk_B}tTKCpe`i5(8PcSQ{S1zGuoFtx*e|!sI!h^mhG& ze8YpI$R)^E-b-n+UYi|j!nRYz`J|5e2S<Shi3?mZ;dMLkg1T|7TNp3xm)>KylZlt2 zNKN`34R*x^mz)i`>YAgM@rwDovcubltyy+PT{>|}q7Rt#Pn=nt@6s(s6&-)2Dija# zh&dF-P^rT&!^#!0h~7YezX2eo+kavabwVuOLPoz4Br0*2gYx2W*;P02Vw=b$ZD2JG zu&s~luf7_GDqtvm5FHUQlq$zCj9!ydyr^~K{+9M?q3!{&N)P#@U_ZPej!vDh1GZ_1 z5w`b8U6a`fTXHC3Cv58u?^jOP5~O%VBm8tYAf4XX)4W+YNC=l&Z&n7qdG8Z8r?=u> zr*{E6z!@bpu?v!L7{|9r2Q#2Adt@BoFzB;yqBe?GW9Y_|J~5P5pFMIE+COr%Q<^g} z4r>W5Vg$T#bHd1*o#_`mH#*bZR;?#;p9Izlyii+*Zt~^mum(lmgd6C(jD&;+cJV|4 z?wUw2z1%P-A(0Gm;A8`t;)sdPDp{bO&e0{pNx(ed=WY@^XKW?ghdk)}j<~s76DaN` zczY<8OH_zEd)VC#5BEet2t>l{(w`1o;_-K9P1>T@JnI^4T9`1(aLUAgBqn7atg0{w z>X<>WcAt9%ogSH=@A@(E#}j`+F?4U2NruVSev^;a)udS+r4G+XGPep%@3V7V81XN_ zZUdh@_#(vU!w}iy;YS(<_*QZyM-@7{m;pyWV9eew2O})tdYmd5g-X2l5S(;&>09Iw zFOPwD2A%lM#7v5c3^g63h|5vlF$C63Fg0Ot1`KD-^h)ojcvm{xQ$;*bGaZfmQG=Zt zc~_*7iq(_9DGQf$_0bvZ<$#18ZlIw*Yh)uvsRs)iL(d(6z!@-G<TNTBGdCk@;5cfQ z#Ez-LZu=ons^&1Z{Krh<+d63(AIvm7i<b2q11mVakKg2kF)NYziqm#3jL)>e4!?2Q zq3QWw2DHJnh3xXUmPuesaLh+Nd`Xwl_Zza0+qP1oGx!XBR6{Q8!MPx1r=knSt!BF9 z$q65c82=G)L(qq{f!%<6E4;;~E$lFDUv$+yRN6K|*2d1!qBI3_WEe&(-dw(!uy)p+ za$}V2)?xQ37f1dxqi}13`)0P2psPt|y&s27#~7z~!wsm^^J_?B!*td&!ZT0NO8HJ- z%}^eo;l;Se7|D-YLIKu8S0DB>DRD&2$q;Cfvacnd`nJhW%4V;`lL+U?Ed%8Dgq%>b zTTX(q*8`BfOx{-BGOhRf($;(A=8mJ3qIlzP1wV1kMGQ6)W22b4eM4ZfDJFAhOdiEt zWwl3g&7qj|FNfrEP|UKSxfW8)6f|z2_N5fF@63>xhbX4AeMrnB6!Z1*Au)v%Q;Kt5 z1Le3VX4%OhF+`=H{tG<mUo-d4V49?DCi^k%6Z3dus{F<oWOvLx1@(;WMA-hr+5E^b zg7^l<D+wZ?r=TvVCqED>m02I0XIg#@USTc+a2UW)5_ZO8r^l$k0St!?GixsV4nUsI z8{>~#j=#LkP~UZYTx0q1EsZ?hTD&#K$KiPiU*Y3hz9^6aV)tdSQ**qavGKSaXJ4|A zBMUBUxK-<mf>$l>iwFm$kEGt?1ry#M{aNv6pQeuBTIhj`y^cr$Uj|)FG|Ycy*bX}L z#jZ;^yOkW@cF>I>%D2Py60i!r^g6DzNM+U7j@$myP~UmHyz%zqk8ks$Qd}oc-$8Hq z*@$mzajfm}#^)%u(Z|vN`^DoAKL}UcA1UZHqq=^7e_Zvovw=1@dI<_JBj6w&x%Ep{ zT;{%LWLFl{cQii3%JVnYvUhvi30xVtuVh~=oMbiaCHpeyk^@BHphv8DM9_39kp~7M zrB5Q!%|wRtN3nu1`A?X(u0a<E^ySpiUyQ>=zQ@Nk|6wTSSSVo&C2VO94P~-6baLc4 zsg?i^1EApIAQx>V7uukn%$)QusDB>LyGn?5i|JqE-;~BQ{x7|UoI!R+V=>HW<Z<X< zq|~=J{)OIXp1&K1!uCQ3kLd)6iQ7s>$<;VCx&RiFlzpMk4x_gYu}uEPPa~N>qc=`) z9>v)hoTbOX0O<p1zyH$Mn&Xfl@I#3CT8g8En8X%ht2GPer?jyh#E=i=t=6u_MI0Cl z%{a^wMkVVhGRz|N6d4O)6k3JIfytO(trfPLXmRy{|H9b$3y^LfEJ;I|$d($Kf=Glp zoA3(G{B{#E&sjgE*JkShdcA1vP$Gj$Bpv(0N%Hsc;#yt<fBI?}M1yHsyk`vNW!{!4 zf309_qjBAKi7*a)9u9}^AzHcqMohiuzfdoYQsI>qE6)W?LhU$kK=o0JP@8~&cQS#t zfDbrfD$RpBM4sEF5o#}je}lEwE~L;u1V2<lbiSWraceBORi^K*&;_(n=pzl6H3JGM z=Q-(pkwJL>#`3f{w1B2N50keLYlwY9)mZq22dlfl9xU-!A0i|*9>6oq*ysCeZsuTv zU=>EALL0};oWVh9|4xNV|5=4B@jDd~Pqi#Vz9C57F@Pi`U|x@KbFi8arGE;tEU)W_ z@>0UT$XonFc`4yv<X!zkc`4yv<SqH3yp-@S@~-)zyp-@S@~-`%yp-@S@|ONkUP|~E zdCPt%FD3kNUK+REU=QwxvQxr9_U`N1gR)l(udu!H8PJ5Q*D*^fqM(ct@0{~n20hWl zwy?MlyZt!*gj(Tj^>+39h8A)emJSTz&A|c0k`#V!9vnc;QAVaY(P`Tu*#=pf5)_;X z@;f*yBBT1a76xP{+9{$3dPPLi)2A2u82qZo@OU<t_R@tM2IGmX6dBZ0B%-)2z1Wql zen+#F-a)-X*L{_HmP&bqLbVj)D3oK2giP27YCIg71$+(-+m%gk$FTrboy4je^qL&6 zY<|#qRQynDtzRHaI~)HX9F<S#M_Xy@kk$^<S$isDS-~upg~Dua(c#)nV)N&}XPRg; ztumneSdf(|KWG4E5Bd!17g7kWWkEf8KPVx(JD4uyM)N2HX&BTm9SG4CylnGMpE?kt z+juE%3(b|j_2H7B;xi{t^EwRPJR{iwbO|HNd2zi-;~6Jj<*E{uTZQ17qv6&G6l1Qr zB*0p<&Lqb^fNPBF!W-IU9?IIdX7nvJfV?eO0~(F^qWg5&7ksx8P>qitIr%G0kT~|R zH5+NZ=cx~+QF#bUqbP4=X4KGBwhCuS#0~+c6s0kAwel9q!tPYwN(Be?<#^J+puYEQ zfwMa1&TWqNqkFcV$7e&_IXsE&wa-&BTkL*=WiE>k>P?injWU~+VtSc@bZY{>W?*jn zX;o}cPapXAJf;bnJb^6dQ|3{4%h2&;q3H@v?I?y4<#0zI&TMSEOy?+J9zpOb9Nud# zY=Wg>GvJ-L&f6X9oMC!gr~^;Z%nKEWy`jm&spJtn8eTFjgZlt(eeCr2>BJ+^Omo<O z)UcT+V4R#`7MZ??ujkkO=bmv*d9HZ1(DPQqbF9?XE=;nx4z;1yN`-Ix;54l~p|Lnz zr-}JSy~3Ce?tGC(g=XV23g&ks-3AhTZ>t@cuVGun<yp9$N@zME$^K)s+l=kCI56?x zL4d1Z2{^0cSg9AjI<%y!#(K;QlM#^z0|j3eBvA~(DKUu-Sgde=0bGV1Sl;2jrl7-R zS^{hz+d|ly>0&4YT$)iH1#!Y?uM*VY6d#cXH)mTmRb$0wM<|gF#=B!F6#qEl?n0Rf zHE-L1%uaS<0qVk;7TVFo$@fm2C!p_bS1H)@YZTVfi!O&nAQXBRJ3=krpz*9T5b*{@ zlq0zn5)O{Ip+8ZCn;`JV$#)VWW)pa%j&5wh7DZyNdpKc2cQ7kIUI6FG+G<vODKhua zAp*)(!gBSY6v}m@dl<cLRhow^)z$LbDPh>eG5|+r@(eK?<<U1M6CM!g#2v$EAGcHC z5V|`cKp=>r`vERDla1ue4tmOoVz-74!X6TjeIv^JU>?{_&J2E?lCUbL+*0qh%V)$4 zE9ai$#U11arH{{lehwQgZsQgjQak7&-$Hi^g>~zUTWAFBpobj0g$CLVdidrfhsS*& z4Z~i3DCEY*kml~0*f!7L#c;GxHxXHtZUXy8+=vg58?ka|ia1JqPlukmNXADx9L4%H zgBXk=w_U-qu&ZvLd%V-X#%j}nKsH>bho6MF%IJX`4scytLrpmb*|y84iQtT1)>7Zl zWeuKHimmeiIP<SDJE_`w@Wp8qln`g5YH&P7(+FaJeTKzVD{+mu>RthQz8~l>3<wuA zBy=H)fQkRFVx%JMu=S6-eSgBZLj?NS!3olfmvPy^o7kjo&hwKzJM}(nPuVQ^6@m?M zAv_h)){PKE+c*ysZ4?jDhG_#d3<veeAU3&)yXMje8vha)6f6dYhOS`bLd(H)%WG!z zLwT@>W?_Soljpgdl;^A8!J4+&`V4X{gTZzg4E#&sk}~kq2Tv)dcRjcwqW^afeu-*a zZV=b?6Dna7N?7_Jrm=1&OG(4;MrllzMph^Xv32|YYal@&CHy80OSu46U2>Tti30nw zaz`2Ntm`qrRdNQLpE%FdlAzJY4sbf93T<=OF!;1x;E?2wtGQsp+hb}zZvX;Dh`E_! zSg0~#0~0RdMXaW}a~pme(Ek!FhP@#@o$<W|b}oHlf1tWQ@C*X?63Gr-8qS5@f)t`< z?G-F*pY5RuAYzWOqDie!VC0`1e;C2j+txR}cKT$>o{ZN#qfo8^rL5Nl^y~39vrcGz z0&?S8;C%p2#AR8&XGqh7VVE<l*9M+pd6?MoCB_O(hw@!75n&g<h}}LD%JUx^?!?wv z%mL?C`fR-bEE=_^Pp*78L+iO?+eI7zxDS4=p2TezaKSc^;Q-YKWH#a*%aFkVggvbn zP$}g@uE~SBZe_WKV8wHNK#JvMD?a3fudkuCCsHl4PuzB*zf#M#9#o1+2RE|Ol9vnV z0@dG>d9dz(npyju%!x4Zfh60AB=+A9kR+!1i?3pEw2D`VLI#C1Feq$4I;79KFc>gg zx=4ALwV)yHE`(@UEnlI1o?>k?s?n96uSsj5v}O}Vv2$xDG^i5hS7om8zXJ%xp^UV% z&`02QY4?!RWGwbAip6#&ES$z>6LMgnTRD%#wTH0w{RXL_(9QqOTyT;?BM?~HLkreC zh&F40XZ}oQgSwS-9V?|0_=1v?Kn&k-e=Kt{u_{g`u;r7JNo?b!!M*=r4(G7Xbp&#v z_+XBKTvUQN#(cYDk?$$f&cmp@1)YY27r`7Wc{T1N>3}28uV8YYBn950&l*sSGr32w zbJlOq65iaC$>R5a>3et*CjN!kbei9c?M3K+3Z~}+I<EeHps0-(FR%;Owf){{?J-^T zb{%Z-MyZlKi6@b{cz6(wkWuIgv<r<EJItC35x=$n?DqvxT)N;ui3?L_<!4&pj}m3E zG%!a?9Q>K+%QrL{$S=}B3g@|iR*UVDiS=37$JE9LvXCzeyw`Ts_k;mg*PoM@4eY!H zG&*dR%-1vc%&7YL(f$5TlN6PIs2k=NXeP}2BVbpL3S>rWaUSlf78k7d7(~AT%9jbZ z%|m8!^2-4YAIQ|;g4awmDUb;thfKJsX2QoI6K)%shCrr)oDAR+U?Tt<bArH|IYDS9 zg06nL*7e<Y-g!sroX`hF(6>;Fot;Iu`Z7(<2_dJH!#6yP>*TQM2NzVmcFrg+3qNZ@ zn}QUb!#fs1m73%_Ni25fuSj_^g?@VoGmEqjGYdGG6m~bw5D|kcg=tB(5$}YhWcJrr zBM2WeeLdb|m8j<sgtw`FGu{&r6=Z(>#72Y0Dr`<X2;PC^>`ldTwyjyQZI15+9QGe@ zCrnJ|Ryru4#N*&1)NS&$Czflb+jxN-ZM`w%8k6z$K6c({1NWODx5QSBvnjt3v3HK| zX9V8=8xe}{5PZ5Zr?JcHP%Q2neuggF+e#6E8Uoj2ZyWc+2D7r+gqf8`ug2$<RUwW( z_PR$fgJ+jAZ?=W*rjblO$!>u~F$owNgIL&=V`*l13p2x#Gee|I8j&W2&KI@NwaM%{ zkMl<~f%v~m_gFwgX@(Wgq007)im8sK#pbO{awMmOdmaX9geGi4(|Pi5Yu;sZW90TG zw#=A8D)6m<62m&-*>nVO?3~mhsBIDD2_CFh{s-a<awXX*C0=<QVJSpPAt_CC*3)Bb z?nP(5Ns6zW6gjsZS!wJ&CG8gfaT$>q?)_Jh(<yeG^qq8tU4Jj}SLpite6U`sW6=^< zGB_mk`U_AZ%nYE}dJ?nf21q<#nMT}|aIS;*7<ZPV#<xh9mM5d|gn`2Q&&jjX#5M0F zA_4j*lu%$25RYGG)hu4JNU0_V)i|Y$Qwk!frw9?BnSCnNYN^_%s9K1g<N@t#Aru5i z=VS=wWN2T%g6<m7uOo3mv&LJPHNHJIq(2W3p8C+DU*c5v4EkLd`tzI#y?hK~EOKgf zvLZU*eEq%F0;l)}vmS6lZ6#P8{rsOO4L|kpt?LmY*n-U%p}VjV68b6PAD*#^Sg0;f z0o~XS`Xqtg0Z>{B(BQ?Jn2mcA7;-CpFIr#58zP$T`6FV`<}_zy^Lq-8yv)W0Ak>sw zupO>*$J6!17cD{^9argDiATzzo{{V&=S!z|96<SC!v8^u^rI;^<Iar+HY78mtA?{} zf;qlM8d6XP&iVL>4%g2Jz4~8(wz!b**U$-HqKGO)*s=L0Y}eB-tE6{qZ0z|8h2k>Z z%UaJZi(Oj?YCfR6y3l73TdqG+gbfk$B=7z7BNR_7XMErZ#Yax~^aijnM}lLq>s5jt z0cg}QGgs^|vVF+(;KrAF8m_@zxw!TRaBrki-uXGheJLTqaNmK52<~*jHsLO(VKJPB z-#7Z_cr8-!dIAM7i2>v=1XHEj7heWaIHZqWO2rZ=jSeTKDo3S+=VpTwn`u8ORF7W9 zD$PBkuI(qM(nC-8<fZKM{mn|5Wqtw{D&E9jrXTRl);#@n$v$HqPX4T04~q#2SV-F# zzZ6G7g_Pg^4F0l^)dbNHM^d$c{n$<YC<@ot(^F`g@eGou&!A1*r{bV$>p#SIsO9r; zcqfH$o<m5#<c>z){sD1zF<_iNhJZKrDCQVoMiU5`VrcC2|Dx1tZ7W%!CbXyQVVf8~ z!C@q3*zt}bE6{|Fnq&0aO4xweGd~|jpcP2ZcfGk3bvuFgmZboKALl4CfZ^UGel~hO zk51r+?;*pM>r;Zv03<v8nL?+rlDtvg#XN20>E;<mt}uqzndav^7A$dnL$D^m&J+V? zaaZE>8C1kZTn`!o&debfC+kx7VTy`7ez39a_{Ru+s4Q*F%aHfO=W(iP@D{%(|A-&Z zS%y&@=bB8(|BK{h@+2IJrcHB0+|mKL25I}M$ukVg>-2a`IQ!&ic&bF>EJA4Q5nLD) zhmD`e`VO>%8cM4rMGd8t(4XKm@J|l=wJz>c4vHDkHu%1DK;N@i(4^!~hjZibHv)e; z{C#t1IQI|yeT=`NQg=~>WqjqdSk7XZw`k5BdRq!+j89HmZ?QZYd9RAR3zc_aCEls) zEk%)crShh%mBkT|$otW9<-0QSUKPnwOy4NN;$-hwZdJjWH7P%`R292jmg3TN1#5~6 zEtT$qRVA_9Lxjv-mYmW;i`!LER8Sbp6+K#5U|CzXuBg!BtSDP+8Nc4*F2ggHyNiGy zvgEr9D%=C$g%!o?iY((-aRu&z@r9Ge7fwTyEtv~55wzqLR1{9mF0L%$EJ@=%mbt}Q z8{9>e6O^x+{a@Kd>xx$uarW%V3(D5smA#m~zf+!L7L_=@lEeQ+r6r|hRi#{30gzl% zR$jir;@(gWG=TrC>>P``cx{oT%;S#b%FC*XDm>*DiUnkWySVhRYhwpt(Snr~MU_Qv zOXZpZG-@zq&7%d}nu3bQin!9U(xM@#IqZ4)Gsb)F8efS27I#HKDYCkY%SvZ}2y<8> zrQm-o4kk}7TIH(bh|HE%1?2^+irpJ5&Vu4KMMzbMV5ul7FRO4@TIS|t&ssFsGVg(f z7RQ2|{G53UW4R>-#e}}aSyo{wWHh6mDJ*gqt#Vt|78MqI)=rr+#RBS7ddjI7bYUgZ z0A5-A1gPVQ<;EAz&5FQAa#H1Jd3o{5;z~5Xpl}0_aC<6Bk(<!AXD278XmaLQ7Cx|G z*1`uY`Hmd>tlU}l%!RWan8y{TC8thhlmfXeWu=xXAZe+pD0Uac{y?I_W;4s&mh#G} zmePU}OA@%z?E(9)pD^9Bs;m^P^ss&c>#PC`QKJdA5O@+l4uMBsR!#-ltJXaV*6K&( zd#ZM>@l?9{<135SI4$5rcZB?wq{n~`N-o7KdHp^2Oz4L!DcbO88Bq8q(8<Yw9)SB7 zMHdtd1uiZ{k77JNL7lLuwBXS-XhNA~P1&jvOGUw2%Vf)=6~%>*6*0V=Wu8)i%__Cr zJ@ru#8LaAA3o6g{tSzTp%C}{m(&I@WW-K@F`e<<XxL9r>#>bHUTKTxkGQQlB<c1I` zw@^P=AePqO#frEdme`^kLZz(KS^U^aPvxT+@a2qCP}u+(ic8%U5H|NID4;3Cv}LYU z#fU7%xExX{i>)kkx~mE*il`MuNGHT2xjcip5WBVvKx>Qe!q`EX1%-v6VOeRx8cXHc zM~llUEp8%XB`abG+|WdZ?E~wIDj*T6(4L~SsmYc##g#;wtg<p?kTKZ@IXaDmsS+RI zmTBNo&zeHkDQqyiT}75hk<U^HQ5Sn1EU{DpOJ?000YOVBhZ4oc@|5fAuEb!zt}Oet z^)mTv&tCArTuaibvO<h-pvrpPZ7C`(^E~FdhEl7_i!BwEg<uw{7Hype)V>SnEGQ&G z0K-bis3Jz?%F0OG_hneypW*uwUFD49zP~C)y;9HG0%d5k_AH+JgP2uT6ky`H7Wu(8 zmN_j&>p^R3rb1Z6D1xsLMJ@#I6qIftn4$_|m+K1p0cs6ah!eoGluVV=EI6s;pus{1 zn(+Q-+y+)mPPq&JrzR)=n9H6ucdjM*I_fHn3xxqp-H%rO+^ks-<Xg(!6;uz4WffHv zJqC6M3r~Zjq8T}sTi_`zB^g;(P9woWoC`t`Genp-mqf?VWTp!|O7oDbXjKX1$TSi< zRMDCu%w3o_JZm8VV!8ZP1*OW^9Vi>^nN##w!Kw{I3gqVJ%w5EhRy5c31SZ5-?*7Gd zmH*rVjN^QWI9SCMbQNq+$*OWsQso46%X-w;KVuEV$8wHYvzFd{7d=y%*qCN1TC)n| zNS?YLt(yw;9QIk$ERWLEQAkswvy@dbb^SDm!P3IAij~EMEC%Y3GGh)#3~AfqnVCb{ z0#?E7$LLvVS@&20%}AAHYanTv=0gejMFp&Lk|0AWS#MNMz_=f1*qU-oZZwY%iK{HC zfT-_}Cizx|ej*Vz*Re1&YfcV$G<ix2R7B+;H`k%`I*B;O19Khr>tcwz(R9?plpv1u zEeq4P6lIEo9>ylrin29pNEt0;j6ss!k_3X#lviF+_Sni|CxVb14v61MOK!?kh8UA+ zYl})fQ_#5lqBW#vC~}TTtZ9fHUpU30RBl<$J*<3VHA2zj(Rz9-s33X4pju&}*}Bq# z0s0^ms=VUIFf}tNytbg+;wq>lOrb)oRg`C@RD#oqeK04|iv?!@EYd3$Ci<`Gk0BGP zr}UprsrV76g3`h@MJrR%q0{$=Y2hCmJ8W2aMbYHsDXCNLo{RyUo{}>4?v*K1Q`7JH z(d5d<J;fCjMQf&z@LgM0irH^URVA`<w5UqOAK9vDYn^uDCtywR=I6tiaf4v8Av);x z1kFOa;sJiKODTqJ<8ZU)Eu3?kCdOh)e280Kot-svrDj-mV=TYCW*B|w@R(yU&Hi|0 ze%8w6&)ok3#zC@SW!|i8V`f*Z&ag5wdjV%yxoB3l#<0?{VB!DQ-n)QDRb*?!wYxi= zCN$|z=s*GqG}zn}F$uSzt#$|rcL;==f)WL*qehI-P2z~y(21rK$T-eTXPk5Ja%Ma; zo--L|ekC}AfoMQ38f8=j2ZK7;+h#B$Dj{I<y{q=_?!7~pIiBbH|L;8CZ+O^UReRN{ zT2-s6R@Gj$R_fdhfz<w{{`gKhZ^7IdObJT}=d)BRr6(B>nI4T85h-A)158$YNo14< zaB7Tl0Wev4C-MO_8l{}TFJN)FqQI&#${7VUFp(3WA}6AhGg=BZ=nAaJX=Ic$3Tjkx z0#xKglyag*0v2aX3alDaX%wI)C1<qqh-&GC9vpH;YXDz<3RaObLCG1dJfd1UanP=* zfm!5?f|~VoBC4e`QAcN@j?P3qorr4b#8IV&PK(GHZ4!%~PDHhI;tWhfXFnaC{q%Gq zs-+WK7!93CIy#f|bRw#y6PJ&W6Kx`TrN55O{(3qQ)zXRYk{UX#Iy$X-IuX^<3H=BS zoda}q4$#wysFqHgF>2^c*3p@)rxQ^voj94%(21jWrS5`<Y<fBo)zXPiSPHCYA-j%F zyPi%&wREQF=uFYknWCo?Q7xUgQmLUcRYzy4o=!xybmH=whR%UHItS|ML{v*Bj=42- zI&^e8^mHPsr87-OXPS=AG(DY&YU#vvQ4O7gbaW2V(}}2-&cQl52kYn@tfv!EEuA=V z*U*`+qcdGkC!$(9Gjw!j=;+MQ(}}2-PFy$E&^bg$=MX)eh-&E^s-ttLj?STaIuX^< zi4O=GIx}^2X6orgR7+=;j?OF{omqN15!KR(HB&?9Fdd!4^mHPsrE|EB&fz*bhwJG? zRH1Waptzu9iPWF{XOd;*7CS`>u-q<n;xWUyGEh=D2aB`iKgHrqk%H;jg>#%Mw~i{w zS-n~;#hAn-=CG|UoRck8BpK-avsj)>mM)N1ZXI2c8wWGQ!Au&kBm==sjKdk@a273` zk>Do9;Y@KjyB5wwaFgS332`{57A}F{ro`dQaX60_&P;Gq<8X;_xPTTeapl%AC3$f; z3v<|&X2GJM1+)<0v^Zct4WPCGlll>0PIj!JlQe+3CQK55IWfTg8bDne_7{M;F+i&Z zP}hi70XQ)RI6woaYsCQqa8e8~Sp%qR#$*9FIR<Fc0P5P&wsPyZlAI|qKs$4!D(xtE zP1}-o0Xj7XnxX|YFfC|`0L_bmrfNY=I?z-BIxPk|Pz!3&fes|l+;|T;w4in!s6&9p z`zTEd>ePXz3D9^i4bp;obfAL-XuO{WYe54#(7^&U-c#vXP(6pH3($C9W#~Y4Jenau z<GnRR2dd-JAp$hsTSIlAIzAmLK;ylYsRPw<YNh~<_g0n;)T!lxECQVv@2z1vP>&XL zm;jCU)^HtYKnptDvbtb#Ny_xZq;<6em;p?RKPYWtVw@>;T05;U^#u{l3c(+DukgCl z8jIuG4HC~jg2h;QPoKMbddScT{TY~egKdiVYwziKg)YV5uX))0Y~|KM6IsHFZjK~u zj<79aj()34mgKW%lWa=Oh9_kbngJ@Bw(cHdn}P;Aiu;*;{#6rbuSNT;m0PdGfkBM( zF=b;a&zZrV6@lDnU?K%pZk>Jwlxt$Z5_WUNld=m8Nu^jXwqCt>Ndev|`?mgA5~z{V zlhS5N70^Yu8%9#|tY_<)!AzvgFwLDlBL;6Y#))u@qpZxb1o})0f>Kt>B;;Pp*5Y@h z0Yp4YZ&z-eIDg^N7!un+4U!BE5=&CTNM?^^nrSMUQ4rf=VtS9YpJTj|Yx>fn?3AHN z=`*D-j9(a;X{L0}cn({)ksfxXiApB`>{S!y6)%YukM(J+=!lA2Z@qOw@rs;@GZvTR zmp)KR91<wqVg6w$TJb3p`pGduQ;t1pz)Y#iSY@<WMh4=@^UVbd=jTKlGy$7m+5-1c zM1fj_<)0MMY3wvI%Sd~?i0M>BZm%Me4F8~ve?~^9p%WgfM_S@#coL{36wv`KNIa7> z5j?Xh$+dFJL<$?JnVfh`r$+%j3h7ZqkD2tCMUUC^nB%n1%@qd)TU^%|iGztFi3_FT z#f!2nc;wI{mmU+b@XqfK@hU$`q7@?~dXP|(GAL<aD4F#$Vz-P@2(4)Rzn?jVD4m$p zzjVid2a*DW_qK|pex=WrI#O28m|emiq$K5qqtK-EWbxv~*(u3M{X=HfPojZ$KdYm( zqy%Er3d&KsqyLXflL8f`l=4(!1*6|*3CJ;cb;;rqsjf_grWcfB<<<pM{pr1`pJbqe zkZ)1{oJ;GUBkG^?E$W~1t?Qqo*1w>4{V{KStNQ0&TK`;8|J-j;|J-j~|6H~HGkVwG z^eyW@@zVNF6!o9@E$Tn<Th||>4sv#?*+dM9@FWU@H7Ptf8n(~=<?5Nmg@VKZ^jRP~ zJ9`Sv{`0c4*|U;k-jfLBupOfwSapptx@^#%A<4iV)+EseLE1687u1YCppuMzAT#Na zVH?pGvP+@*L}t+=!(O8=WS2tqiOjA?h7Czy$S#HI6PZ(w47--TkX;JZCo+#78MZck zA-fc+Ph<f-GVFi)LUt(>koE5LrP%-Iv0;}a?HJRWH~IqW8(l9}!(OUSbeDqljjk6P zVaL@cx=X?OM%Rmxa&r1ccPUuk=z6hIPHx}mE(Plwom1ZxITQOvcPUuk=sdm9P3jxn zrC@!d3-m%axo>orf&tywUJSKV>=%0>oC1X7dI8Sp8}KqHarCdB=%!u<Wgmc-L5W#d zk23EvDEk1s3`!iL>rqa-49Y$LFM|^2xH^>B_x9bEeE?ntrL#9m8Y_KuPalAnLFws@ zlEzD4DEk1s49Y-nlr(1gLfHr4Wl;8>5p!wW^o6nyz{{cRHQnXX*y$7HrGS@1*=x$n zz1-+wmjYf6Wv^*3_j02Lmz?$7Hg)yoQ1+VoaxXV}V6a1vGVih|oxLD0H+tBmfS0SK zM~@Qc5SQtmO93y3GSCa<<wg&?6fnsMVUDD_T$1W2FfkgK6b(#{2Bt&<Q=@^rXkc12 zfCC2w&-7@ZAR54Ff%2*_8Yn`5efRhOs}|tPcnROVb00Lln+#aUCV1<HRUh{y)gI+= z@xzNEXZS8khc9prqe>l(FvfJsiQxIe2L2?!x$7cd$#3N?e7V2`H)gOEm-9N$`MRNX zG>nKjwm%0wY9$Qom@u|xRU!roC-Hn9JfGk{5^-_d_8rdQ(P0R(H|(Lj1b@_@BqH#Z z99e{78=C3OfC{KLpp3{gp7XYXFW;m9@5TGj{icXZO}1*2t&ssr@@zYYfwsM(?yKXq z-^X_;n2%E>TBxX87+~|wQNm_Et<yhMsa%nr3Nk2>Tdm6PGTiR!<l)bu^v`i29%dlJ zA5$1c?D~88_GR|SuQ)Dc$BL!K51zL2P@A`PhO0jV%sf{Tf0+(CKp8)G78VY(y|pPY zqvr3=LvJXZ6tVKzkq@I?BznyMca94QN?!;p7StVv;`q+8w}31BlL|ar_)@i>pcIeV z&v04sgtc-!;Uk0R99QU^T#n{df&(ZBgo{q|;71)I?J2V4z;RD4jZZsJX%}gsG=k%y zw<1QgoIvNm6W)lZoo`ZFXL2c_6<wP}L7**B&{En{bRR%PdkknPEtE!ZXdXh_j5ur! zpebzCRR#sSm*d8_l@woWHOr+qf4BvD7)f;Vb0@&bUVard#)vNz{>jP{WgT0e2oh`$ zXGwgg2Te{dpAr{-;F6B-`KyT%cHjl$xE{kp`}m$ulTh#`S2~wI7XcTa_Mu;CKUc&i z+T0Z@jN{@Z?tudk*6#V8%@pBM8{#lae0@)kh1ni{ifPKmXKobrQZwJvp2VlUW~&LJ zk?J#D92No_Ftkvqun8%+j1KPSp>x}gH5@(rY{M}x@0sL6@0K0kOTFFo4GIE302C$d z2`BMg9-wZ(;CP10pg<@~P)dCcFkEJ(_P(APP9(sx0}`GQ4MhVIFmOVJr26$1r4Mhm zfX5YDz5E=UR(bgqOI&UNicTTWnHZFN*QfGn$0`RX9lG3tf$lFS=8kfk^~Yk05Th+0 zO*svnyxyj;pQJ{U_;g%tO7I_!JOqaFeb38r)62np_tE&LAzx29uR~7%tqpq-o#7JW zGas{ts1WSU11dC7sl^79T1yKhJ^+H^SqhY~{1i<D^tM1{#Vkr7K71Seh{heOj^bPR zUK7JO#?*&FYUgE%Ez|{-)YmH__it+x9a`+gPl17pUnBkWY`_TV*^o{TJ3TUanN4JM zQ`X?CPLai>WGQf}za!~)d%<W01$r1h-sxfCWphOCZusAz+^AklY)*a`47``a;ztL# z!GgddUREQ(-&DZuJam+YC*vjyV7#>jS>E7Wm!!-m3UP}m&rd|2pDTGVZy}F_JW=45 zC}`O;0&qP6uHZKl;7a-ZZsql^4`{gww^3p7afkg0^M(pCsos6fV1K@wv92#8-^Avy z&>QHqau-^$eik}^`^~8On|#mbcC>U0m-d5FJKqKEBg`uMY&B0YZ{UVgaN-A0$B&DU z+-N?Pgel{c73TX)9EJ(RuSht0Dgll%VY)8?_k}R=cAnZomqTd;!Z3xH*fYF9yemNH z(eE?(F0w3gnvZIx6ya->Ur%BGIG)qPU;YYjxo~NOQFGc`Yr270v3BNkK9j>{hF?}0 zi&oRsTwy9@O%)47>jaSLG1cznuXup8VIL-@8xTNsj?v^)`#u-`VeIs#F8C;3J!dBa zHQrW}E76Pl)e;Z2V=bpV;afPKF+_D~0+YDaMtItJKMbi_k=n2iErdw$N5}}_V3`%A zz0F^?9}>|SN6b{<)AiyluP-tIX33F6WJ9Hp?@_7=P|$3o4jAn!g!OVC54{80Fb=kF zz;Lf$VV&TuU+G3C9;bE|t00D<$%SPQuV>P0Paa+$MGUi>vP_0(5`%3HZ>`;1dkf<? zsfFnq5?tQut(%n^IB&F7UnNxzsD9lyByiqftGU(~nG!e;6TE{Af%6Hrnk$X+Jy>Jv zJt&SEp2&$$qP4Zu9GJo6WTOD$;e}$&r#S$bkrNAfGM-CZ1Mq|wa%J#^$*Ko(6h+a7 z_R-2OokFX*uzYM+ESB<qonCn7G<b2NeE@}w)Pp99CQ~$lGMTA<%P@7oUri6CCQ_<p zC_Ve35Y#~8dp_z%s}Q~{^1I+^9s<c9X?78l75t@1UigcXnqiC>?s;j7P}d2n&H%ZG z@t2(-RKAHi#$)B-J85B2GtWR`j7q9I>Z(#X1dY)Lm9Gi3fV`AS+y7=N-=&#Ht?190 zLZvSgGb+py8F;WA|2rj~ahwM~&f>uqW2CZ=7O)WmQ%}R9ui5}*vDWh!UY7i!Xr&nW zuuM)PMxE%W3khxYK!Nv7=G{k*UgTC<=&6MhV+Gi1e#g9ZgJOulgetepN4FYyzb;}5 z19i7iWd*?`h$oZ_2KidlkeI*#Cb)>N+WaoFV1k#rqRr!<PgRm?_XJKh|HB3vMWQWD zez7ULwvK3sSQQeuaGXIiJ**U5GSow_(KwoX=mc&<=J3!S9y-Ebp}X`{opYaJT++rt zdV{BYh)T~-gv@rjy1B}X5}PBr$TF^jXLLaZV4E@@GNbd@Mh7qZPqE5azXCBUNwAJs zE<Aen(XNY;=GgF$?o7lix{oT6rBp(hQ%E#3@jH({ik&atO@>~H0-94GUbR5T@^WJ) zB)Wk<mnmX6`zY1qD9`vp)TBeL2^NKy_Qhv7+0qkVq~4<<F>$xF(bCb3$!pSU&!H8N z<qRz+;rD6cz^qaG7xeb>1Tdr&xB%9~l-b^awph^!$$KI1cLd>O=F_!%V0nn=9EA5( zAEq-P7)t9XA$Sr97Mj1_WAfz?EQ!Nsymd1ZDPo`yt&+=(6zWGI6NMnpZeNywkN}e? ziN>{(f#xwK1Ex7O1EdX+0nbEOCKFYl`}U|p)lhPS&Ub=^dm=E--fmGw8If{9(<AX+ z2u$Q-;*M`YsIAngG1guV(OzBv+0lBA*M5!Gqgbktk1+o!`<VK>E!Z7_A%O$e%J~!g z+<7$ee!PbvEiX**xS%5`UPF-ObCB*p$3l*@FyBZb1G04kr2I2Hc#0%>kqbgE1j)1a zMuux3KIg$tbr9aO_jm!Birt#|G*t`YClB|~P{v(i62noXcU*}*QVLmZ9&Njjf+cU7 z!{xh%PZv#)&PRn%KQx)ekNz>j;gozU%_Fo;8&_cGJ27Z`aMyp-zY8)%&HW~{?T0AE zXXZQ46DQynbl*)a8VbD^BC^rUB5qOGQ`6Yd=1mqQ1HL{R|Emzd1V0o{w1~GA^_<10 zwfVoQJ?O2S=Nb$UTA+CSU3PLySUD7p@EVOHse`A8aa(DjEl-ba<2<w^gixCB;TEAo z%)8IGrSm<XVfBXBZ_G3FJA@=v3Jm4JgC=k7Di;>1zw<4)U5#}q2g1P{JoF*Wb8y!Z z3KL{14}C#%;y?~d&K8J**r7m}rA=czK|rKw5<1X=VAlN}f*j<<rG9u2Z80}O+B<ee z&`WX$nfZsOW;8G+F9>{tVdE3YqAiKt!lT8~xTleJMHm(PFWV6y`Zdv*ke@$}w&YR& zS44_57C4t;T*IHJARdn;E^tGAA&A^dOF7h-=zzuc`~ftXj3!&+g7<Fa6*Y`_WydQB zLNvE2uW0U9UZGuNfi;2XH3Rj0G2#}P+CHO|3S%tu9h#wNu)QO=0ToMzAc^%|Jh5{} z*e;$a77C||@W34)>w9LtTO41Ao>kg!05wNAEY=*+c>ZnJki7IY-*ZY~E1Gd8WfL<f zV-N%IcUY*7(Z~aToCa_U5C0bYt+amCBuq45(CsDCY2Jj%rzbKpaMI$(41iwfiKKDi zeT(>yX2^OW42Z7jQoAO-&oP455(ijlvtWB-_kKS%fbe^Z;%Q56;REnZD!_#)6<84M zrWFd~uLV<Q{ZuY|YVc`iH(_}?*b{lk3xf~_WIf3DoCH(s=fZ$uG&hI$4L&Q_`OQY# z*DZ;D<Y}=)_V9wpp9E;Hf>51@FyJ7wRF2_WUdKcRi!cNzEHUy?q}s-Dg#^!O9h=dp zp+s88ZtaswhqtacHPDq%nH=ac*@77cn22`BCPM&@3ab0#2OEd4CAnFVd9>361d!NF zF<wl|U=ov<k>PIF?8Qu++L$b+!ZTcWN8#Zix6$dLk~RSib?NepHZ~2tbhR}rYq@U4 zJ*}>|pP*f_YrrZ%hi6>4qQj`P)xsK6@KecG*>_2Nw<2;J<>yX`u6|duyrUWqnj0Iz zZ{S**ba}WL&gTT$Ut{!jopv|+M(e8cmRg<HdD$N!ibU1}$5M0S4nlxqwF%xj15Bx{ z`|nj|KDzM0>E}HD3A!@V)iQC?pol*MU;>ce5)*w6G+LC#j^v{jmsw4*P$kCps=roN z9glxtB-y*q196lKQ+1ld4u^)3#IE#{wP48+V8{`^6khhOki)7YsK^TWr|gr`+Lox8 zh|TY4Z+&Glox9d894&s9kEwq9{`(pr@?n;2PlPzUVl4MS%)xP7+k>>D$(IQ5>CvcJ zWR}RYdaQzBoPyy><fe_O0HGx83`b)6I*$LC0bhLk0xvFEwD>OO?SY30lFhm<s%O{A z4m-XJr6K<g9UX|hkFrN^*ekHtR}7)krFu{1v{wH>c(=e&AI?QQa*$p45@P1t4ST?d zM431ws`E&Jt`5Jsy4jDD=0I0FCL}ny5NAfT2cRjWUz<4O0IEc9aE<E~9AT>hHD)Um zRTluwbnaNcbt^(>i)99!p<#+Y5Cz29UD^=5)AUJPqDsdRfjDMB)u@5$Rt)ymX1eIG zp>73Mi&ZXh23Gg@PY6TkFKDZ?H1WcQC`my$*}_Z{?98%NKVsy;zjgynD2#R{aM@=J zbp66sogh_u0$o#V)q7cGTA&NCZ?ZtwmA2|98Kx4i+=OPh)>l!P6zIyc)%-@1JMp^E zR-K3RB3sSRBzZnUyL`7-4i0p^Xsdo0uXoz2zsAq6Z8Z-_k<vg{tF78C5eA%s-YLl` z$k1-9o`#>3wwe`^Tp;nXF9q9SpW4H3l8<7yjFZyfS&z4F9z=lP>mK<Dq>1p!SLAb$ zj_LhDgZ!Wh`tdjNdNp`ZlD*N?Zh2KS6|?&(1FZdqKI6dyCiy6ED7Yp0`Y8AX4a`Ru z<Ud4VPIk)~Q9R(lI3A1qXcXpkgZ!1G)a&DO0tTCOl=acM$UV`je<QyQ5T#hBN~2TW z9Zfs=VI(X1+OEE~%l{gC{W+z{-^aXo7+))Zoi??iH-9PB9s^mTe1SnOm#W{k)!vLo zF7c1@*5Py|*lq<kSpAb5J&=ue!c7Fj8S;AKop2jY<N{qQHfDf_=y0(t`Bh4O5T3&5 z&=1~Z#S3_!02kMm;=~A|@rx$ca~5AB){T5~Wc70<C1{E)5!7dbK{kRZN-9$Ufg`Kd zJ!dTZ73f&^M6P?z=u5|xij&@Ilgno&fJhc0GDHT&(*<fn1P4)+f1ip1l4IzC<$ZrL zFDn$ad=IX~P|Hilo)_DNL1F;b(Et>on}^V1?hxU{I7Qfgvtio7^$8>^4)R`yH@-13 zOtzOGbeu;cC(&l&?+DD1C}SuKSC`Q5*iDMg6y5wyG#kLOpbjpIt0nVkN+?Z?Qdm3F zjCJfH1BVu#Kb(f|Z#Q*a44jmFiD=hmx$^=}eCZ(CTVL#eL9mU<5QAPvm+V>$e322+ zvM^=Qq-G+!eCbh;<p3d(A)E|vikLZ2pk|6}#qs8T>fE7t>#Zxwa>MV#BW%6RZLn2` zncIk?MoGq&6EjJ;3cZC|U^%W1NocIQF?oH44?X(>*j+BjL|xDGbNkv+px@RAp<YPY zB~qg)lHM#Q@SV(zl8!*UId+DmV3P8%C;JpTFr<BkwRL+*0!~nivM6MxQz|OeAWGds zr4EdJ&!L9rPn8SWT9gw{WLlJP8ZtPEhQanyuy?6H2{d6Zdf-fC4V`ByS*EpMQx$5N z>szm$D!eKRdV)5)AyE*-0+oUOc|j5uO04IoHwp?<^&@jdS@oXsSV__Iix!O50EqS0 zF3ZBVQKD~Tv{>I{g#@()7GcK;oZcXJbw`HqCadW27X`^3QMQq<4M&4I9x)J)d_X<B zs}ngQBct@FJOcBz3X>=>-w3Q=5}C$$FD40|hWLyxsBMB#z5oQy5(J|>&(`+?qtsX= zxV55Q4Bsz03vPXF)wVu5iv&qboiou=qQCtH?CefMsDOi?m|(eQ8LGYI<8IW6K81d9 zMp^gJI7_9|wR<5rL8$&>R%D#`<|CNEi*HK?pJkT7?~69}VFD8qVeRs)$StCRM@4Is z-{A@%jFpc8GU@^fj8(!-mB9W~sevdvf^8^B{0T51I~~OoW0w-_n1$1Rd{*(In=*M* zSTuS8N$h}L8SNeU2d6MAMLz<>Mqpzd*|UT@phX&4Qp|4e@ZCnWSE4d4moD&>Gm2Lt zkttIrK!#NTvK_72Lo%NBu&ku9UYPsbtGFx*d{k<yeulm>w0*tT>9Yd({NXw3#PgAd z<^cY(2jw^5tPJ8y-PRq5RHM}z#P__dPa?{%Z$lL;=POB%Jx)oXw`hk7E`tb#Y_u|A ze!whfAWRswPZOe;KczinW0b_jQLiBR)O`^<zxpj86)2yfLSn*QiyBg=LPZ3w!xZIP zQfYNdzCpx^|H2}J+&Jxjp1E<@|0s);(%iRF{`05ax`I@<!Dn_G{WBu{d6N^kK^i`} zH)T^$NXBBK+;IkrQigyx`tEcm`0jwLkF7h+p&b|====qd84BLO7v8`FsrJe-SOIs> zP37WS3w>$%_a9)><{$msSpOKTh1e!iEix8(_Z5&BF2EuKx$w<^+CYy0$2_9HwbOI( zv_tG>-r3ehYfd|Fa!^%6`11WJz7YR~z7X^9X)t61P9Cr`!I4&|#15%gE7y}U0?ESf zdIMDsR)tD>fQ2Tu+O&Lx(B_&HA5tLfVQc?|s5HM-eiWw}1zC*5+HS$Z)CD=mKUw>n z!Jj~NAIEp*A{!5zOYkh<TQ1ngU=cXM%NoR*T<{^9Z3VF<vd4HI8WNaT=$O!fnGoOL zdmv4HYNI3LJ>8H_PT6=E#v(B%zeWc$_u;GES`-^e=iyD1j5M6O(Me66X~?Nkl#4z3 z$D}=yuhdTRUlpy`Jy<E@75kW%{YF&m*C&AICNW;pK2ed?nsPZDmUnO3MGMKznlT&w zY=>H7i}Pmf5n_cA;-ChT0Ug)u{4@1#c!;R=UaDapW{vP+G3ki-SWp3;JRjvZEC9cs zjXXG+z<8~B+x9Qb{M=DKVlRp8(ZaP&21bPJgZ*vDidJjmdpgl-?Kri>)QXC|!}olH zw)?9s+Na9yV|p_6cim$nXkLO-K)784)%J*4{5t8xDA^lW>q@>z<j_Z-B{(hHSt`hx zE2^)20vjs9wF5bh@!yBJ4jjvO;fMnD$IN(K1NS~Yitd0F0~9aby)lb`1diH2L0+t< z?|u+c)>38_=GOvdFF%JJRo8H|feKcP6Yt|PW+W_^^r4~&Q>;?rohVUIZXvY^^v3AO zN+lBj9oZVl8)J3z-$>niW)swzzK)FIO<z)zs5KZHt7TP&T6ktQFM<XFJ`-%hNj(HZ z5?s(k(Z-oT$Ac&tvJl3Y_9MwHV0DZ=tZu#SRHAZc@v7|9YbZKA>I1=qD*_j+zS7E! zz=Z_g<VrJ?wZ=tO2QDP}CIl|@_b-i14qWK=4+57owDCVexsvg+SGtp#{L!tEJRZ(0 zjZKxxU_RP2!Ak~Y)tK#t(O&ju1bym3<24)=@q<)}Z$u?-hbT_91#5fj(=mUykl;U( z&V$3%$MKH7_U|OYIe4Mek7HrmOGO56Ly-xLj0VKKV<!eybjE1DxxR;OoC-0|ebPUg z?>vc&Je)xvbb=oTu&4(2XQ36Ec{o9&9W0C_De<qq1Pm<LV!Ay2W$bfH@N_9HkOP*q z15eHCw(6s3@BMVDD7xQCyJ%Q`Mr4VL<oHEj;*o!m`UEOANQR5**f0?X5jbCpzr!X) z9YV#F58`P2-MrYlSz^4YMb3zo=b<c^;rHUCn~H+2Oe{+ty~D8FgH@5<&2vqPz03AC zKp98yR3@Es7(otJPBaRfj$z*u_|b=qksSU8BS<Sia5_tn^i910SmPx+8t7zGnFZ1b z1n14$3!;@$UQ)81pF?*CpjGu#`UbSYuB<HLd=}MDL)sjS@RQ`KlV)JVH@Q|swULOw z)q~uR@v#$Cri#Ju%U{vGCcfn`p++*)nD90<PE;H9>Ok5mQT32fepsU9B}jr-4MJj} z_&fxbxMop&2*qcJ_a2G^Bj&cTlnPZOK;=>DwX`gZJB;ZL?Fv6R^j!!`#k-=9+9}P1 zJqj|8hoYdZ`Z-amrnUQ{M>5oJn@2uIvmd7dCW&IR<HcII?YC#S)T*@87qKp;0|d2o zPzuf;Lho-o+HedjGN~`1x=KTd`i>=5!S;vQJAgO@nfEBL(uzF~M_AGxHAApD+NH7n z3SqJl$b!xKz7%-J6E-lj3IUE53=w68?ej8lM8|<cZO>J%@c^FZqE-!MU{1v-#%J>t zQ5}<k*jiT)eY6c-PY2`SN%U2ufCn#F{5X@{zRGoT1Z%C)y@tL5iBF!@YzLqr7OI2S zAaVe9hN~2Mp#HZmEhH^gh&7-TbC^!?m12&_pIwCXQmR>WX--lFg*s2B+YD#QQsr<+ za%Ir+X!aF$@3+-_Pm(Jn68r9wY>)hmMecU@w^d&!RStB+9nmt$wzZzQlWa95l5CRP zHd}Rp<c1f-T*;kmtGPjvvm}yl=#h!9?gc5uc-ZGdR7*E9c`&vyoAzLX4}~!#WwH)D zEge1dnsuN-lr%U!u>Xm`L^8fg5{!Uyh#aPl9{CUs7v+7BqaLus8vJhNtuIK2^AF$E z!A_%Z_AH#J;ZyZ#nsS?1s0Z_RotYM9BROS!6bqiv+m-q5FZ%-V;e(0*h;;GY7qt+* z^nRggMMM(0P%mjM$Ozz(PV_jin4;d02(Lg=RzPTfMW#?#X&flKB9lU+A`U_rYbrj7 z8t>XoGdxMT)OYeT@2k5Vt>}VT8k!=WEcYX}>LrHC9CwMW`d9E==3Z#4{wZ@WwpFJj zx?Q#!rzKM04%(`J$=nays_P~9YFmxfBG)oE8e)MF-CAp_&NSl7L<Np39{GEsY_z!d z+NxI>ZCj@s-C<kJiA4D?W^Y|#CiVp>>yyAOcF6ssB11lTOg?77<4rvHTVc#ilDD=n zQ-0j+-B)NwcYoi^o1PRq?T4?&!RS*s%$@I&<fju!7!0q&VlV$BkvDBqKyb1nZ%(9w zz>58d756YY1g!Vlz4c2C-ul9H+LD^Q^$$9t`za`R?GSB+ozY3jzoen1Q5x;7-69g< z1{#B+6{pE!2Nc>un<`ar6RK?O^!7cxr4hV^wnx2oQaBu~-4A)7DP5^xe*;5H#AQJU zf&X{|CO4n~#wwYI8qlMly5T)AM)&+o`AIW<6dX?Ur4vcppfKhU73@XSO<JPFbTAys zDpdLA-lUOG_g|z7+rxppDNj@`cu``q(M+fH-oPf*$@isvB;k|C#DIZxVL0^|$tX)P zfnq^+c<XP8ezFq^w{4_H2%*pR>|VPl9xF7Rk-vUT;Lr~-N%~wut#pCVBQ3IG@4AzW zNAO*?pOdh|Lq$${E^}>r3#CA%Tu3ABP_@1U=a$zgC(u%c1!G0#@!tCR>7#AZ63Yae zH0-&9HfJ;HEZIgjfA))icfy$sB($CB*rVlqozrvn-^A<oZhHO4e`g((XU9RTNJl|0 z^t_DN))L7PEK2Zx^q73W2w@36^H5<hF*9xK2ky>f7v<lX_|@b|7mHJpHw3=lVZs{& z>)<=TIz@9_p<UjNZH(wt@QP5HMyf%sgpwMDlhIavi&SZ+Q^G+w$SF**J#v9XGO*dM z-beGSL=&{d;D)cT`9`_ffMH>wVX==zmPXNL195$Eas$pP>jGj!65Q{knp4WtA^~5t zcYTGLtNZEj#V@c#(4kU?0RsCz>If5doHD$wsCC6ha9~}eV9g&>-CSkkO(tv<_^yN- z0D06X%G;up2h9q!m%h9&HRWxKmKQ*I3Kr9BV0p}lEx14`EkZPCbelJ#oJk_dfUUD! zVN{mJy1)uL7svEH9Q;4eHJtA{OESB1KoGtvTEK7=pkz0F57~2!)TnMFVV$914Iz05 z^aM4S!Wv8`|E@O8J5n@@>HEm?Dam*9Tv>eA7uc;u%l*9q?F0HH0=)_REWeDdoZ-sC zOqe1!NZ!DMDMo@=D<F)&0>l%BXhWlw(@4P_Qbz1M9o1Ph<``;2nlh>ikO_*GM2zHH zvfe_6Gf%UKUsP%c7apmil^PbWluxNt6LOChl^TLd;p+!!sMKOIMIaLahx{q_Y+w>F zZH%_}l*1WY^+7D4)e0g!<-cJ22+&V8pwCA^cL4N93g{7lzJNA-Rz#)ah&}@e5_5=w z<}M1&kDZhV9<ES6ey$ip9~t|-=fAG{`2E*mfAf&|l=+B`wec;nR!Qm2+fLMlM()7? zWvk7iHWVK|L)VW)(A!#=#qgnxH~m4Wm=P0S629$-#m(Y&+G;*xk@>m-FKrxzVV%z0 zG};;T1jBX=Vn@WG8~y2kai9RPNEK${*C8f=ZO{<G=lo}(DuQbm4?2qT=a={gik7fL z<NrZSslf-+2Ug;Q`FUlbK$Rj@+x8R4gC=i7p@HB11$G6k<lS01vx@E@6f9tZf*#x; z@Z<6fmR-~lUR$6*g`P${lM19jI%)?o;|?6GUcsCGsFXDbW#P>3kP;g$Df|{`!zfUc z;}tdQsCpo6%CRSSlM6NX(PFRrheHAw@-mL}hEPtp?V&T7*pU}sE$=(6*?eM48Nz{u zvXo#69KxXJvde?&(J-Ky=cZ&31=RpF0aOdI<Up2h1Hx_i0{v;j@rEP(kEL{45+07P z`VD_+K=Q@Fp`Y-kPl%9^a?}BBWBTTQIZdze;@s&7q{9QqvkTHD@Ih#Uq{yFQe?|-< z_t@w_#ZrWN(ZNpxO}KTFB-EBdyYdi<BtZ_Jn}^2(ZfJjJ;yXzi%`t;%`kJ<XgB53h zAm+ulr*+X>q?9P3T=^HYAA|2R5(TbAuhAA_u#od1>0oCHeY{N6OsMjWrT#9$_@ND% z?WJXQ<(3S#y$~H@t4#geWcoM<y+7<5=<MNbr3LZC#tPSt>dRfJ+m28}Qp2eY`7XX# ziH4<yd`GP!c0iCP!WPn42);UAvyX^>Ngu0-p$_+lm7uImwB-x?F{*wf&coyN6009I zS>5!zu#kb@72w~!2_7sHwZ*wFCRv(lp@<*V`GWSGkdqdBx6O08_|Ch!s5NG|Mv{;a z{uO4=sL%qn1FYYpq4N~O{TGG5m6BMy%HLDz<DK?yN-w#3A94AgJZSa?Xy@UU8*2S@ z1N8!Zs&Uw=KQdI_OsjOdR5_Z?6#mL8ZM3g=lF{;fI7$9D`q)?fF2gpeW_OZ|Z+})> zb*Z7!Mti6)nY*8@=2uB_zJYd5euF#3R=vgG9$>3^EJ<EraL>RO10yi!+p1?6ktfYo zz1iR%WUJYb1XX(XbZo<n?gCrQ+9Vl)nUMEQfGV_A-)wY4b6|dw>@&G%+p1saXWRNy zlY0Ra_mkxJ@XfqaJF4ZoA?!VbGwgm1uc228@*{~#z(=28NY?NM7eZRkOcI}CWJi*s zIf}z|;Y?2qa6QHqg;?OxPLYp$msN9-aMu@rH*xq9A7Xp`SBhjYmVP)TI;!evd=VSt z^Dy53Mhr3s#@FI&@hHk8EHviU;S6K@9QuUjfRHj9o4l;USbF04Tm5OYVaGkI9XUWr z<B`AB9_a_jBD$o}><!JtPIRV_+87BLp_!)0mEh*Van`NN@>A!dq;4qeHdzIeOAx8# zGvYV^AAH1DootkVc5|sE)@{utD(aRycut!;5IBNQ0ab~C3x<t`-(zb$GZPZc!i+t# zp>{t6wq|_A!_mf#r2A4k6FUM>$mwes)bx}RnT7ZlN5hr$)v$K8L*4>azI0I=J4&LN z+$CaziPT=beO(v6&4{<d2)4cV`zLaE(=73xY7O1+rX?aq?$shM@TO7`V;;2*XQ3HD z&5nIzz`c4S6dY$}Npc7D3Zk=TtAC8z=Sm;yJ6EIyMZempBdK2(&<t8cms;BJA4)^N zrQg?}(nldWo~NZ3Z4+AVpz@4zAW^XJ{pgi)Q9o$~rk)kpQz}vON<?QTqJ!;Ae~o8) zB9_o9g_5-@CF6(^V9S<skq_b>gW`?C;_?gxh@s`{AR{by1iHj5_ag<ti@^OiY>a2p z#`tdK<LzlCH$jH-AdjGM07-W=t<QvV_4Y@dSYO1aysdN4tnMB^(UFNlb_kSzco-;u zX67D(sTDA~_pBc8zh@TBT9O<?TPx7g4qywRg<_RJ3sRpKXd8cuYz1aMi^R%W6~=4( zF}@tD5bPI#7(w?4G%JaI##Z5XDzyI!@PAL>O|Ocm^dE?Rl+c@{-aF5m5<!0-GsWXq zc^jY*YI|uWHih-*RVaD~yE14E`9MMW1yFuJ0pk>Rd7wH?oZ+EiPqV<f8}L{*UDa>j zUNi$-hm%inKbL~VSRnBo3_uGEG>h2P!j?nreh4ar19k&#bO#&p(MzevatqWJy`kwi zhF9x_Z{6a=56GfPwB0PmkdM_IQL7qVh%ZO@Bo{&x^H9E>o{JnZuC9PcQhFywKKBv7 z^H|S~XptuIJa-aI;ea#<4fplAm7oBh-c1|Fswh!iT6*G@qWV)tLOvbSR2*(6@vR<| z3Py7&uyIJ#LnKAXSdLN&Fjb^Rsi9jCI2<-nVlkbHTE)%RSq>GE`W|G4iqpMNvQN+2 zIDj@3gLyD)a7!fSC>_Z%aB9-3*#_5(E48r-H4X!gc&j6_A~W`q@4OZaO>_;Rel0T9 zigO;~h@ov^F@MvkbSB?Py4a%1ndo(ER5iQ2%>WKs(q<MP;`pvow36s}gMTzF0aGw@ zW5&i7%7O;OFveX-3t(`*Wk$%1QH(G2p#fA2bXB35qR+S~2KK?{JLLijXcjlTpS}Ta za9VQ^^1_WGNLoyElW73vO?rdFsi*TrP?0L8i!c%kl*HfxYSOeBagb+<M7S{pK(o|j zY`~OusWafjn@{Ikx@O~*{|rC(K2A?^{zfHIis+gA_^4tf=!|L6)+ToP%kCa<d1(5u zSerMZr)#G>V;v0%2nj1j!~j&L92rY!ET$Y-_QbfrNGhQCsCaxf#Yd}g8u7I&#>6_y z^v?6tcS`0;aWYRjuHuC2#Y4Q`fjwcIPPXIBixfk}@LHBle7SB?4CC+efpb=T+%zts z67k6-Hd1S6MMsNLzIOhpT`^t@x#DVFY=SO!jT#ff2EzJKF>L4~O6V>KBQ&7_f=;fm zH4TAV>ShcXrgT!U>k9wpF=Xf}s&js9ocPf-{{p^x$RQS)urkqZMrtkQ3njV*Tq;C> zh8AVfGDkLx1;_~RUS_D`&xj<sO}>$Cv;W%2l{no|kc12jIu=b#oGr8OBQ^y>g%bNQ zVq+mjD6yX-2K6YHh)GW&2BG4p*d9uMpc72J!1wtHtwgCRP1UwR&bcYjWwSl<G)Y{0 zG1A~c6Qe58_6UyNNd~*Sc^-XW*|N7Bh8KLBp!bnAsFFT}?w*^ao@9{T$Bj}c^DooZ zAhHUJ@Ww$9JDhG?WdR{0^q&JgcH|_C*eb7%rhX_2tyDgaqDWeTsX#KL0Y)P&64RFu zixg@H8bP1XEIGkdLmjQS1mN%ns<P(VY8J*+u*8U{e<0c0V5S~lW@#LVt~8LITHOyx z%v4_#5vLbRO1h8*l?+O{famo=a%8J6TFUDM&?jgMBWpgs2#OMlu(o`JsRN6Tq73&# zY}K`;V3Ib`oBAJKsechFPEyjz+i46NVX`Xe6MCm7E9oSyY2a&%#hvN;ACknTOHWbY zg}@%IEs>q-4Q$S2eiWn3bR-<}rhs52_B?uPR#Z$<nsaWl5R8JV5WP@|QLE+c^-rP( zN~2vlux1U~hz})Nrc^cf<kAml!z%Q`<g30QX$>nViQdPE>!3RkeYq^AQrd{wPwefY z3Q@&7omc=Gj$)_Z*3jM%=AWH^C7l)T%+{qM(Z<Fy%~`UgIeL~1r2^zb{-aPXSiwoJ zgUO*AZ~{`CTy}f2x2FP!A3YULkVF^8>MLliEu$~eD`=$!!{M%ey0^iDc{+UxBA(1Q zpCn5L*b<l#56wdAw)AapHN4MnqG;w#-q0+UcN;SB5TOha$`GLp5z0`p1NDFg1yy$x zM9_c5;Wup3?8MO~BSkhh^AA*2Au7;IWqaq@nEc-Ln7^Vh=)+U@L9A^!3aRjV&%bUq z?)3btAW%6#2pyGIpWsU{8b0Aq0yWuASZp3fb;O{f6*@e5IC_tEe~K6nL1%a()F5s` z)qcTO9pp=}vHXV!NWVxR(B(tRM9ag+&81MgSdMaWoR52BqB_v@3LD|Fn1?<<#?`p) za|>8R6dZij^oxVg(}TYAn-DCZ_GsZf<6W1-2SmF*>gnl?#k<esO5W=YmLt0t*@2b+ z;$YWBo0Nr*5zHo~h4F*W5Gq>{bF}>tmZaHd)X)|jV8mNXX#(^$Nv$N?*m=)ed{va> zHx*b7rNjjar6N<N$OM(pcFK1t$#3$qxBdive6dH{;SGb);is<CCf!C!N3OfP-_eSD z?s2ZUt-Ra`51cu|E7|{9f2tfVJK^2x+EHuC$s*jl#uE_HxP8^TBE7tO(R=RoZ@9yG z=lc8L%FGA1f^c$33FPh)9sptU`&zg^^JPzSDz2&4U+c`DcYU_@P1$Po)!1>@I{k`w zR406At`lwn$<3bPEiShTUd9B%*vrw*+cvDZ^G*Rs4j8|8$NGEWwlVI>F<z}$np(5} zsm?z)`24pk9fbb4q>}&hJ%Pf-r|Qfz=IL}ToU<)mcjrA7<#)g#oAB&f=J&0I6I^oT z3+Jiu!YMrBRjjM%HCQyRHY?$r_5UkppL(~QQD>gt!UZV2?X6pT`~9rMzo7!o{8))f zFvD1YMb<L-x+7<r*E+d>-5TNekXm58v*I=s2B*02H%cyPIUI?u^OC#E|7t$?rPE|Y zyH0|`yy)Yf;hEr^Hyz#tH3*V09jiX&rcREBVN@`do~=pG$%&`u5R8}%R_9D!1NU>V zFRhOQSo?m(3SFE~Y2On%ZG2*{_@rKOs+JahO0V*#z{<7$Jxb8jXNtZ)6pPWELod~K z$(f3D?;XB*6~25pJB-6j)xc2Y08?=9J$jf)8kos>6RC<ZyoifJqvcG_n-Y6>8+ss` zep~h=O?a{<tbqrnHSqK2U!5~?((RfuCUbomxl|*~dva{3kL%wfMvM%!B3%s&I&Qyh z!<}nZ-?nDW9UC?PMHEi(OB60olRixoUZV-GjfZonE^1!EYtb;ZZ!}CD9}Q25hbIw3 zkptCrYwuVat(FQmNt0*NWYj*E4kn3*bK~JS-IKIsXy}=wp=Z(^8a#Kv5@!_W9q7Aw zcuG7B{A&M}3xB1n2`bhvlXQJDS<ff8-JYWzpE(q#!4l&a#P86@Mc?(12rmAdA3%*d z_9tAJ{QONOet)R^l1_>eSAT#0eKr1lHkCC(l2iU9JN<Tu$Zrj!45>qV%D=W*7BV_7 zR{spxBJ^Wylz|n)y}j~__+W~ss=qFF=sgK=ICdICzj!}}@=-j=G1gs7iUYB~p%VSW zZ3vcQ7=gn8R>fGZ(PLyrc0XeiO;=Fq-(zf2f-3=`2N;`d9))8pwu!MRiMJ*WOJol+ zHq|nkPPsN?Z`JQg6v!T8Y+BM-ni2zyW%nP~AE7ObU2R=$9d2b?8M}VKRdg{w2#fp4 zmgI-%RGamKY)ik4-Dh89Pq8z*hgGI5PZ^xTQatRA)WXz+RF>*t>jy3#m^zRR^e~@e ziNgU$Lmqa2+D&O0X)Mjd{DYPbN*lxmdDxwUXAkZ-m<{%@d(#)D+tOLOhgD=0XV^1X zhKH>j^1zUxba=~d8T#PRtf3SdkU1bTNqirrnDTequ>4`tFgDD?HViKrK5#f2?qTr0 z>NGi-)5G|Pq7mj1Y=nn-N6s9XIFgO@u(B&=U17O`UEyJOx#qZ%T+HQRcaNGos{bf9 z%EQV>&l_zW%|?6Jbz`n2bprg289Q>U5-J_Hd7Ki8KUZC~>8i}DDE__iH;*4Oo{jgg zs;gIAoqjdD+QZgND41ZJz$SRu#%q>cGw2$2jfdTyJw4ly&9XggUCx4><Q$gcVfW<D z&mEA<ay@MPL^m-x{w7SiL97LgT{HPcu?i^Z%Ja&pSJH&7`*TiH{^=60V@uertPE*x zwv?@AcOrB>TgFP+T?pO4mb2R!MkKqDtzfsaa)dnWCbov%gHS%Z8Ln&AAvB$>WOuN8 z5h`G-7^nRVo55~jUUnZsef`axI+Im0=45PE-Yfz@X!f+(teQes&$)UIrQvVxq`7Q^ zcsp<MJW6mfHh;=|=A+P63$9u~Y4}^1vyl14+v40}N^ml^XyPKaQG^y}FILk^CX}cl z`swwzYT2e`YElh*goRi=Vh^)gR>!tQL0!e`itQt!F?H0dyx##^P4PFHkQBgR0jj_R z4E0`rmeS4>w{@Plz4OGHP8@zRdn|$%5@YGg8wCo(+zGH)7EESiV-dW-kk8iUPheT> zN|wh~wr90ZVR`MV+M}fpW7%v1S}B!{U?bTTY%p`NQEW8JWjQRJWk8p0AcMOoHi%ur zQrOijjg5yRCwL8F3CzqAK@NP6!nq6_3bJI7J&jq}05*gTWyJ1dFl&ut6WJs-nO)1S z19M#uX1Wo~lMiMo0COw{LrrZjVp%5_x6f>!-CokZuzgYc{Pwx+#qG1&3)$rMsca5g zz%ttxVuoDA=CXNgKAXvAvDs`f6P*|(<-6bSTHw1D_^t)MYk}`t;JX(1t_8kpf$v)2 zyB7Ga1-@&6?^@vhrWTOrv}>+T;2s3*R%PS6b}LyF_-Ze{)`xR{j*r_n@zud@TqJu* zS`Wjl2YQ0txFa;cAb*WpH}!L&7*JmTRT6RU0xlMkp0mKn*DGtu!N=|u<g&raU-5_- zxd|bo05vl1thYn+3U_LA@HF~v<FjlvizQObfJt@LzXfa-jDsFeH=*)nBOtI{p#Uvc zf#BhSfO-T_e*_4~R<llmfoP}g;ck@lnNwb^qP|swx+RJl2HFK`Ka9{`a8|-n%5l2q z6LCT_fi!J-Jqi=Qy26l66h_&)M7Fmn+h<PPy|D%V28Ewvbo(iUtM7j`!F1u~4KOeR z%ea3$9KX#TykM&|!<awVD%K)XM2k51EdO*e^B|*qaZ9BGT35O_5C6v#q<bLjm2B3% zgC_S6@Gi0t+G3G4z%bW9dSk)!J-($es?t<fJCPCM4y$nYv)@l9h7@WI5yiJm{bD$g zdE0*sFHl&7bVv#eJUr`h6b_`g?)PJz6%?|kQI`5BGywu19v+BGUS-x!L^gb=;WpUI zY4tV;4c0O!lx#1AJ`=AO1_M@*mWdmBEV#S^v%})P33Pa27GkeZ#)Wb|ub&RbCN1kH zptGjExgH9Cwik=Ch;4C!5p4SaRgDZ`G*ur!e3yj7YB@y8MO4aCapi|>IN-Vq_#HNq z+k|QZ)a%Tobwx^4^&Y7ALPa8e|0Q~Vi1Z(j>5>aWXI_e37*g>pP&8dh?Q)SJaOh#R zI_NOE`(njSRj9aWEdZ76`5YCU1A9Ebe+7a36Y_892v7H?>W>9aL(8lcBMUE8J*c|k z!Ofq613wb(CK5?`s_yZh;(aa5c(f<x?e$%amY(NI<h%X`j-&1j&uu~_VEzW?8b9vz zCarRbY_%dAlvuNH9lttJxyQe{(h7ane7c76Qz>#I>@BUP%O>@be1f@CZPimH+!Vp3 zlfe=$oz(c~y1x4{y4LT0+E!gBx$m{rtd`^jbjeRXFKz{bd8i@I{sxz|?~JLy;XcJ+ zR9fDG`wd0HA~o(>F32EGh+S?3-=T|s79ip=GV9}(0>3vzBnTsc(+#*FWh7OjoaSj4 zd{@V`!szA_v}cV_Cc`Zd3K|g9nh9*g{Lz6c=S7*MXWd$qnN0=(sPz)mi<;DW1E>pO zQwG;|g%g2iiJ@Oy;xa?U6n#%Ot`g|dMX1OwG%a!bO58})nR<AW2y}Mympw!WYKaSK zb@?zCT9ip6vTjkj_}TIk$|ej!esosc;ehG7Yf-7JKx87R!dd*|DQ19`oHBgq!GL>p zKRuOObnAXB_zbt`(AIyZkwIE)LX!;xHGbWS)O&Py=j{LOyK^7^AvP3XbonaWhG=rr zK#X0Vv;RM$PFh3hWuHHRW?68Y$<4<t>>`tV)G9QqweVeGF|3EvbO%i_rPH4ph(Od~ z4T8P?U@+&$KsfHWhC~b*SRE7|0WP(IObVLkPEv7XwaExGk;3T!4DH%p-2e3+$+r?_ zbuo0wnhm@Jv`c(i*nbV#m!-=Mdn5ipSC{XuKv%ba2zlz+_bO^1{yPj~K`9J&F1t}b zcu-qJuryPh7VqDp_rX`KIs<VU2MhMs2+MB>YBgN~h}aZUh_V+g(FK&6&J^=*$|oRt z(y<uPp?$D5MXczN$b8?&+F^DB<%hXhs40qI(-%1Zhjoh6m|5a35J(>uw_dHhUkiCY z*yTa4hP{oWkc)zPzdO*9^}}b{DU*LnFShnz@))VG^$k$s6&3*^Cox++6z|g7MK{p( zPMC-i?s{Oxq7D`<Va>gW=M(#eKFe!cAL#?}=zoqlyE&4Lp$iJhj$!D17|*$Y>XQeB zAej$5^TL-=gUl)sF+XvlVJp#r@^6pE8WtYhh?`V)R3@b9;trZH;l=B>lJ>1wSDd&6 zoJyBAp{EY}U9<*mB`sSrH$=u=U|U{UmTb?r;ST0!Li0Z52=WRS2v`SkT@&}4No$Xc z|BI`*-meRp(N+z=CAi4xl4$0^Rf}Y?rX|o7R#7wtHB=-WJbZ5>SO`mXO$|wHew5vT zt~dVPG`0oI0po7)-DTgL;H`uGA0!;~@^MfTgynSDzDG5%Cf7fR;nNA`H#Ib?xoP=_ zWrltz6kyvMsaP@%hb&eX8Np80*xC_Dr1^ANwZ$vZ6=G;bI#8P+F6f}PxanaxZoU@< zk!IqaPO<)C5Y`ux#wqkXqoh3hTPSOS+9kNN3C}8CX({9rQ1%-v7?d^Gei7K#0vn3L z&90A7H)*M*ISk7Z&=1eStyKvndwB{9#?qh^&3xtmwU!)(;%Ujeo}B4`3SGO{UOYf; zChX(w7QFz2O4JI+$>I>oe_K=+i--P_Xo-FpUEd7W^yR(qRij12mm(F82AhO0tCz{& zl`>k7MLAc=_gR!Hv4$wFrGf_nSl~n$%E(Sk8W7Qn@O@G4_pXMc(aTr@=oWV9U8ugB z>Edat!9B`W^9P9e+aXlvz&%0TEv%MQZwuPo{VG%W-EYIF&~9+h_9cckUKlwMxKQp- z<b?p7&jRNwY}G;b(1^hKHMVNA;UQb#{3zd;!1)Qbnp+L>062SEYpYpeh-3uL`+YYA z&R6-$0_Qi_YVr;8a6{uLc^|Q>4ZDW>t&LYJt}y8;3J>ms6n6mcP~Y&R21pRk0&@Fm zVpMX5LCIN2CU+vC59JF|BSyag-!soNR$&su*Hf?@A%5FGnQu8yY8jP@nA~5GBEnk& ziHEyL&jC&|@Z1PB`MnsM@ZA>d1dAQRtPR`!FpKjLM5iu;t@<Rheg9>~=lD~|2tcsQ z?3=Zz48MuKVal43iJbi)?FXB)X`j%%JW7pNQPRP-*hu^X2wXw<ClJK?{}_j`t@aN~ z0e$}j2kQP0A^Lhty`{81`XhodzI`Ee6eLjtb&2StHzUizGB6MpI^*8ppG&<H=?~FW z1<Ci;WmF%>JtW{le!mnMOCZQX$!OMnrpVJ8@W@{qM@91%$=Tmv4OV0x%;xCTvQrUo z|A%kK#A&e8KH6F6T_o9ldyc;%%qL>L#B6u&97)~qCnr25MI92wTqDID60MF(SYo`j zXw-OMt?zLZ{pj0}ZK9Sn>25j<G#XH`og@|V@C*MTW*OgL+?XL@ZkLJUNrn)f`#v^y zumeCAdTU|p3IQVmDP;ahG4_NVyBOfV{~5};_!eVts$$fPgM|7h5RgPrf=w9RNqP1V zFIxmAm%n*yC+om0wY%*E;Od7x`XTv)#oAM!jQ>T{W6LbIY#wa2^0~N(-O*#V{26Ad zP~rbq{xmZaNp8X<6~^4XQe_(M)2&@UmM+LQ2;<kyX1R@#O`BYUZR?W~t^-y7-r)Wn z?!ud8ILdAEpn?sw+S1}%QXaeUOLm`@I>d#Lf(jTc$s{1`D4woB26>*?4i>`COFJfd ztiTS4-%$w&n4Td8mIl?pipY^>=HdOnQo0WJ6lc6nT?ds0CSPf84A6xL6q44sRSl&# zRx8$ik(!}c{>A7bQ&$c-3481ZRa6tm{&3^yQ}^{YBXtt{l-F^~`_z4n+Xz$RcJV|> z7)ohKMM(&yBZQI=$~bl3@9F^$*xJ3A$}y`zCWKLbNMfaMaz(FT`t&|w&IF$PGUb^G zBFw`bzl_mUEa;;9Nb=%@#t>mcozoj@)lgdFBWlRe_<|b34i1Kl&YNIaK}B@^x1)+T ztrEqSP_f5NRIExGidD%)u?RUpE{avijW-$Wcs)dRjH$U)`d}=}Yf>7%wgrL}G`^m5 zl1-g5QIwyGsz8;${5OU6Z`%=DVl@kj5OqXNv}RN;njeDwK_|7j{DCpvH`Ecr)K&ZH zSZ$YP%1vZ=C=(m+>Nc@0w^eUvmBMt>FO8AOWE$c;gC&TX$Bpvc5}Af5C({tv#s5`; zvAvotMtLxqgQ$MOKt}b}8|8yo*&#uih)FT8;>-mSH^x9D0UkjR3g1Fo#+v5)JJ4jA z5(%GnWPy-o;<Ly+Jem7}5g12t!EC3TW~6ZftM+?Ni4jwX5z|UZWR0fJVkY1vtZw20 zCTRf%qV9QKxXAwoS2_?RU<G$0Ux=#Z(_R2ZdVh-gKypTvUgb@tG^Oo&7}{y_?@%q2 zje_bQRP38vO4N1n(jWrpOQXdd{-q&Ie(f{y1(8H=Xue%8AjwB9dU3qymv~c!QuJID zJq0G@=A+>b!XElXkioa$9Scx>3h9^$w@X|2?oKP-V9JI0n$N+DXsYc$xQH~^k1tG@ zk4gUx98@`h<8LqtlrH}SG7!uk!NliDr5fO3eKq#*mz8Slr^XcCiy-tN>&kCkJQxvD zOPq`|u)+9kNg$&}z!4+kbNL9k@LQ39?k-FRyL>J`j?0cu?WeU1_UjZ;7IHcUb3pXe zmTL6WHi7;YVf_dPN4Ox5`{%gVosX%0`>b{{iiG33{?iU@fT<THU+9O}xi3}T)IWfm za|BXfVA^&78zC5#0}A+l4z@ZG>CtR>gq48lWWNpm+F%??v5+*LH$AFU=Q-jA*x-8a z5iIC1#o-fE&c9$Biez&w_?(O+#l#k2_jmWJbQbbYeZ^Czmcw>BeeF2~x<?#1`{+Sl zwjh9T+JVCv2;ccjg!>)Ptg_=F1EJlpv7*zqE71`zRzTA5VCtp~Q{C!x+BgSK-iV9A z!U|CuHiF&zt4#1QE)HR5ibL20aa!~BR#E?3cvFWUOju&OU)pl22d6eZ*H{Q!sxhR! z5W#!xqs1ZK3*x3IU<WDDm}R723*#PSuHmk0y`gd!ypPncCkr2RPkOuK7hrk@Pi-_8 z;Rp^>&|V6ya;15%TjCnD!7}aa2GcZo<1}>G9$t(m8BvB)4!Q{mdm4g>>je=xL_`pW zv{52%MVtMB7z|F1@TG)Kk8Qu*i{B$SMaIuN6h$TGNjMzG-X42rWiG<XLK7@*amUOo zEx(MJCB>9YDzN-xGfStmW|r=KDr#owOEBaT*x{{Ro*6h)uGX9mo$*!Rr+@-IT7yev z?NINQ-`RIKjpi)nZ}XOa+w!L;wrt+qbG)bJ)1J-c-QC@r@}P#Dw@LiwZOWsBO?D+= z6VyuG?sU>>|Fi}0J+NpteL8ouo|Y&6^rt6UdTfcd2M--ORORNJyVEzP-#GEc?Cgq; z_J`Iyv}TR>RPz%zyFdNZee)B6_Rj9k_5d>^-_U(SvH@5(r>Adrrz0EZPy~MH`0)pZ z4jsyFSd&*?o_DB<YP)&!W&sDV9s!>Y^=|wjj%r!Et@vTtrQN031l`=+jDsBJ;yv7j zUt|y(`8_=XoFM2gyQ&KJ8M0Y<IZ1d7zuov(&ayW(S6MrOsP#~KHg9El<#`)FIJA+K zmNpBx^z72o((H7G|LF*0pt^h95ZqaI_C;~MgP^kM1x`4le|TZG0=hZCHnqNS;_FkJ zSat>7{JF@g4q5X`4=KM^kelf)Kh$j<#x6E@S}C4a+T4j|Wfu<t0q|5ILUBAcS<@kr zQlatxrBn*lPZW<DAWS7wIq5|2rq&ZDPBd46{zHc@9y-J>a=wZ4i|9_Y8~U@e9Q{z< z$+~YZt17#_Tlp>R5bxjMH!$=uvK?Y*J^WR%VOCTV^*P1MtIGK))`8}^op-a=Gu_?q zwzjg?Q(vEW1HXCYt*x!)d7`{h;6w3;KB$5vOq5Ugst&bRWD=c!Q1Ie4{w`8^K%dQ! z``zv{zy~D2Md_$Q73*%@mY$39s!(oeX%!>lt!4wOA_hsX0zU&d{@0T&+J+LUteeoU z?WLul{{xC2YDW2)RwN^x;uq0QdF7=bsRQwi)Z(4(rR5tr>YL3f1pQW~GyuHZpaD*a zRH_$aho}MY+es7%eAG^ieE^CHp};o`@r_*I7mUa3*_*PnCsF@VHmV1HKtCAr-R^GU zRWyJg3F)X0`uXwfwHH}tc6NJqb|#Gr@t-0{VjGDx`lE(u#mCaJizr+EvIVE!<X&zT ztd^AB^(y!{Jmx{n94jK$Pf9UGHuLaTKk4aF_O^Iib_?wve}HKemxyC`zdw1*3iGat z<y1Te;jS`ni7WO~`Dd_`3a#(>-DPnleg*dCy1%h&#yN2fF4s99cLUeocK016_i~@J zWJ3M~=koP;`fxGHdHem&xp!>5bDeYEZI!-z*EvT!ePwqzr{BA#Y=hHx$8GmafPmPB z*<3yuIGlcvx8R;~Ayqe-++*zWpg1yKw1WaTqs~%n89l8;@hMw5Gv=e-#QQV7c9I3< zn55zMU`y9;q2<0&@$6Pm!9D5@l8y}2l?~g)P#X0R55KVkO-YViGI2rtX5kl49LXIX 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 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: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: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: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: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-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-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 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: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: 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: 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: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 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-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: [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-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: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: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 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
* 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-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 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 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 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: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: 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: 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 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 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: [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: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: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
* 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: [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: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: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 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 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@redhat.com, qemu-devel@nongnu.org, 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: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@nongnu.org, 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: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@nongnu.org, 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 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@nongnu.org, glommer@redhat.com, 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: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@nongnu.org, glommer@redhat.com, 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@nongnu.org, glommer@redhat.com, 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
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 a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).