All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] Virtio refactoring.
@ 2012-11-13 14:27 KONRAD Frédéric
  2012-11-13 15:32 ` Cornelia Huck
  0 siblings, 1 reply; 7+ messages in thread
From: KONRAD Frédéric @ 2012-11-13 14:27 UTC (permalink / raw)
  To: qemu-devel, aliguori, Peter Maydell, Mark Burton,
	Evgeny Voevodin, agraf, cornelia.huck

Hi,

Just to be sure that we are all understanding the same thing about the 
virtio
refactoring.

The old patch-set ( git://git.greensocs.com/qemu_virtio.git virtio ) I 
sent was
not good because :

* It use a custom transport property ( e.g : transport=virtio-mmio.0 ) for
   selecting a transport device between refactored virtio-pci and 
virtio-mmio
   which isn't QOM compliant.
* It wasn't easily reviewable, because the virtio-pci-new.c file is 
created at
   the beginning of the patch-set in order to keep virtio-pci.c ( and not
   breaking the virtio-*-pci devices ).

To fix this, an idea is to use a new qbus named VirtioBus to link virtio-pci
or virtio-mmio with all the virtio backend ( VirtioDevice ). So 
"virtio-pci" and
"virtio-mmio" will have a VirtioBus.

To do that we will do the following things in the right order :
     * Introduce a new VirtioBus ( same way as scsi-bus.c ), with 
VirtIODevice
       interface :
          -> callback to completely abstract the VirtioDevice from 
VirtioPCI.
          -> for the queue, load/save the queue/config, features, ..., 
other ?
     * Add a VirtioBus to the VirtioPCIProxy. ( virtio-pci.c ) :
          -> moving all to the newer callback.
     * For each of the virtio-device : ( virtio-x.c )
          -> making a separate class for virtio-x which is a VirtioDevice.
          -> making a virtio-x-pci which has a virtio-x.
     * Create virtio-mmio ( virtio-mmio.c ).

Is it the right approach ? Do I miss something ?

When it will work, we must be sure of :

-> migration compatibility.
-> not breaking the s390 transport.
-> compatibility with s390 ccw.

Fred

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

* Re: [Qemu-devel] Virtio refactoring.
  2012-11-13 14:27 [Qemu-devel] Virtio refactoring KONRAD Frédéric
@ 2012-11-13 15:32 ` Cornelia Huck
  2012-11-13 16:31   ` KONRAD Frédéric
  2012-11-13 23:00   ` Andreas Färber
  0 siblings, 2 replies; 7+ messages in thread
From: Cornelia Huck @ 2012-11-13 15:32 UTC (permalink / raw)
  To: KONRAD Frédéric
  Cc: Peter Maydell, aliguori, Evgeny Voevodin, Mark Burton, qemu-devel, agraf

On Tue, 13 Nov 2012 15:27:57 +0100
KONRAD Frédéric <fred.konrad@greensocs.com> wrote:

> To fix this, an idea is to use a new qbus named VirtioBus to link virtio-pci
> or virtio-mmio with all the virtio backend ( VirtioDevice ). So 
> "virtio-pci" and
> "virtio-mmio" will have a VirtioBus.

Just to spell this out:

We'd go from

system bus
-> virtio transport bridge dev (virtio-xxx-bridge)
   -> virtio transport bus (virtio-xxx-bus)
      -> virtio transport dev (virtio-<type>-xxx)

to

system bus
-> virtio transport bridge dev (virtio-bridge-xxx)
   -> virtio bus (virtio-bus-xxx)
      -> virtio dev (virtio-<type>-xxx)

?

Would this also mean we could have several virtio-busses with different
transports?

> 
> To do that we will do the following things in the right order :
>      * Introduce a new VirtioBus ( same way as scsi-bus.c ), with 
> VirtIODevice
>        interface :
>           -> callback to completely abstract the VirtioDevice from 
> VirtioPCI.
>           -> for the queue, load/save the queue/config, features, ..., 
> other ?
>      * Add a VirtioBus to the VirtioPCIProxy. ( virtio-pci.c ) :
>           -> moving all to the newer callback.
>      * For each of the virtio-device : ( virtio-x.c )
>           -> making a separate class for virtio-x which is a VirtioDevice.
>           -> making a virtio-x-pci which has a virtio-x.
>      * Create virtio-mmio ( virtio-mmio.c ).
> 
> Is it the right approach ? Do I miss something ?

What of the alias handling? Can this be killed once everything has been
converted?

> 
> When it will work, we must be sure of :
> 
> -> migration compatibility.
> -> not breaking the s390 transport.
> -> compatibility with s390 ccw.

There shouldn't be major problems rebasing the virtio-ccw code on top
of this rework (though I'd probably try to keep the basic channel I/O
support separate from this patchset).

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

* Re: [Qemu-devel] Virtio refactoring.
  2012-11-13 15:32 ` Cornelia Huck
@ 2012-11-13 16:31   ` KONRAD Frédéric
  2012-11-13 18:09     ` Cornelia Huck
  2012-11-13 23:00   ` Andreas Färber
  1 sibling, 1 reply; 7+ messages in thread
From: KONRAD Frédéric @ 2012-11-13 16:31 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: Peter Maydell, aliguori, Evgeny Voevodin, Mark Burton, qemu-devel, agraf

On 13/11/2012 16:32, Cornelia Huck wrote:
> On Tue, 13 Nov 2012 15:27:57 +0100
> KONRAD Frédéric <fred.konrad@greensocs.com> wrote:
>
>> To fix this, an idea is to use a new qbus named VirtioBus to link virtio-pci
>> or virtio-mmio with all the virtio backend ( VirtioDevice ). So
>> "virtio-pci" and
>> "virtio-mmio" will have a VirtioBus.
> Just to spell this out:
>
> We'd go from
>
> system bus
> -> virtio transport bridge dev (virtio-xxx-bridge)
>     -> virtio transport bus (virtio-xxx-bus)
>        -> virtio transport dev (virtio-<type>-xxx)
>
> to
>
> system bus
> -> virtio transport bridge dev (virtio-bridge-xxx)
>     -> virtio bus (virtio-bus-xxx)
>        -> virtio dev (virtio-<type>-xxx)
>
> ?
I'm not sure of what you mean,.. do you mean for s390 ?

for the moment we have e.g : virtio-blk-pci ( in virtio-pci.c )

and we want virtio-pci -> virtio-bus -> virtio-blk.

( or virtio-mmio -> virtio-bus -> virtio-blk. for pci-less system. )

>
> Would this also mean we could have several virtio-busses with different
> transports?
I think so.
>
>> To do that we will do the following things in the right order :
>>       * Introduce a new VirtioBus ( same way as scsi-bus.c ), with
>> VirtIODevice
>>         interface :
>>            -> callback to completely abstract the VirtioDevice from
>> VirtioPCI.
>>            -> for the queue, load/save the queue/config, features, ...,
>> other ?
>>       * Add a VirtioBus to the VirtioPCIProxy. ( virtio-pci.c ) :
>>            -> moving all to the newer callback.
>>       * For each of the virtio-device : ( virtio-x.c )
>>            -> making a separate class for virtio-x which is a VirtioDevice.
>>            -> making a virtio-x-pci which has a virtio-x.
>>       * Create virtio-mmio ( virtio-mmio.c ).
>>
>> Is it the right approach ? Do I miss something ?
> What of the alias handling? Can this be killed once everything has been
> converted?
Which alias ?
>
>> When it will work, we must be sure of :
>>
>> -> migration compatibility.
>> -> not breaking the s390 transport.
>> -> compatibility with s390 ccw.
> There shouldn't be major problems rebasing the virtio-ccw code on top
> of this rework (though I'd probably try to keep the basic channel I/O
> support separate from this patchset).
>

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

* Re: [Qemu-devel] Virtio refactoring.
  2012-11-13 16:31   ` KONRAD Frédéric
@ 2012-11-13 18:09     ` Cornelia Huck
  2012-11-15 10:32       ` KONRAD Frédéric
  0 siblings, 1 reply; 7+ messages in thread
From: Cornelia Huck @ 2012-11-13 18:09 UTC (permalink / raw)
  To: KONRAD Frédéric
  Cc: Peter Maydell, aliguori, Evgeny Voevodin, Mark Burton, qemu-devel, agraf

On Tue, 13 Nov 2012 17:31:40 +0100
KONRAD Frédéric <fred.konrad@greensocs.com> wrote:

> On 13/11/2012 16:32, Cornelia Huck wrote:
> > On Tue, 13 Nov 2012 15:27:57 +0100
> > KONRAD Frédéric <fred.konrad@greensocs.com> wrote:
> >
> >> To fix this, an idea is to use a new qbus named VirtioBus to link virtio-pci
> >> or virtio-mmio with all the virtio backend ( VirtioDevice ). So
> >> "virtio-pci" and
> >> "virtio-mmio" will have a VirtioBus.
> > Just to spell this out:
> >
> > We'd go from
> >
> > system bus
> > -> virtio transport bridge dev (virtio-xxx-bridge)
> >     -> virtio transport bus (virtio-xxx-bus)
> >        -> virtio transport dev (virtio-<type>-xxx)
> >
> > to
> >
> > system bus
> > -> virtio transport bridge dev (virtio-bridge-xxx)
> >     -> virtio bus (virtio-bus-xxx)
> >        -> virtio dev (virtio-<type>-xxx)
> >
> > ?
> I'm not sure of what you mean,.. do you mean for s390 ?
> 
> for the moment we have e.g : virtio-blk-pci ( in virtio-pci.c )
> 
> and we want virtio-pci -> virtio-bus -> virtio-blk.
> 
> ( or virtio-mmio -> virtio-bus -> virtio-blk. for pci-less system. )

I meant the structure you see in 'info qtree'. We might be talking
about the same thing :)

> >> Is it the right approach ? Do I miss something ?
> > What of the alias handling? Can this be killed once everything has been
> > converted?
> Which alias ?

The alias stuff in hw/qdev-monitor.c that lets you specify either
virtio-<type>-<transport> or virtio-<type>.

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

* Re: [Qemu-devel] Virtio refactoring.
  2012-11-13 15:32 ` Cornelia Huck
  2012-11-13 16:31   ` KONRAD Frédéric
@ 2012-11-13 23:00   ` Andreas Färber
  1 sibling, 0 replies; 7+ messages in thread
From: Andreas Färber @ 2012-11-13 23:00 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: Peter Maydell, aliguori, Evgeny Voevodin, Mark Burton,
	qemu-devel, agraf, KONRAD Frédéric

Am 13.11.2012 16:32, schrieb Cornelia Huck:
> On Tue, 13 Nov 2012 15:27:57 +0100
> KONRAD Frédéric <fred.konrad@greensocs.com> wrote:
>>      * Introduce a new VirtioBus ( same way as scsi-bus.c ), with 
>> VirtIODevice
>>        interface :
>>           -> callback to completely abstract the VirtioDevice from 
>> VirtioPCI.
>>           -> for the queue, load/save the queue/config, features, ..., 
>> other ?
>>      * Add a VirtioBus to the VirtioPCIProxy. ( virtio-pci.c ) :
>>           -> moving all to the newer callback.
>>      * For each of the virtio-device : ( virtio-x.c )
>>           -> making a separate class for virtio-x which is a VirtioDevice.
>>           -> making a virtio-x-pci which has a virtio-x.
>>      * Create virtio-mmio ( virtio-mmio.c ).
>>
>> Is it the right approach ? Do I miss something ?
> 
> What of the alias handling? Can this be killed once everything has been
> converted?

AFAIU yes, but we may need to add new aliases for the long versions
(virtio-blk-pci) instead. ;)

Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

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

* Re: [Qemu-devel] Virtio refactoring.
  2012-11-13 18:09     ` Cornelia Huck
@ 2012-11-15 10:32       ` KONRAD Frédéric
  2012-11-15 12:05         ` Cornelia Huck
  0 siblings, 1 reply; 7+ messages in thread
From: KONRAD Frédéric @ 2012-11-15 10:32 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: Peter Maydell, aliguori, Evgeny Voevodin, Mark Burton, qemu-devel, agraf

Hi,

On 13/11/2012 19:09, Cornelia Huck wrote:
> On Tue, 13 Nov 2012 17:31:40 +0100
> KONRAD Frédéric <fred.konrad@greensocs.com> wrote:
>>
>> We'd go from
>>
>> system bus
>> -> virtio transport bridge dev (virtio-xxx-bridge)
>>      -> virtio transport bus (virtio-xxx-bus)
>>         -> virtio transport dev (virtio-<type>-xxx)
>>
>> to
>>
>> system bus
>> -> virtio transport bridge dev (virtio-bridge-xxx)
>>      -> virtio bus (virtio-bus-xxx)
>>         -> virtio dev (virtio-<type>-xxx)
>>
>> ?
>> I'm not sure of what you mean,.. do you mean for s390 ?
>>
>> for the moment we have e.g : virtio-blk-pci ( in virtio-pci.c )
>>
>> and we want virtio-pci -> virtio-bus -> virtio-blk.
>>
>> ( or virtio-mmio -> virtio-bus -> virtio-blk. for pci-less system. )
> I meant the structure you see in 'info qtree'. We might be talking
> about the same thing :)
For the qtree structure we have eg for virtio block :

bus: main-system-bus
   type System
   dev: pcihost, id ""
     bus: pci.0
       type PCI
       dev: virtio-blk-pci, id ""
         ...

And it would become :

bus: main-system-bus
   type System
   dev: pcihost, id ""
     bus: pci.0
       type PCI
       dev: virtio-pci, id ""
         bus: virtio.0
           type VIRTIO
           dev: virtio-blk, id ""
             ...

>
>>>> Is it the right approach ? Do I miss something ?
>>> What of the alias handling? Can this be killed once everything has been
>>> converted?
>> Which alias ?
> The alias stuff in hw/qdev-monitor.c that lets you specify either
> virtio-<type>-<transport> or virtio-<type>.
>
So it would break the alias, we must find a solution for that.

Fred

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

* Re: [Qemu-devel] Virtio refactoring.
  2012-11-15 10:32       ` KONRAD Frédéric
@ 2012-11-15 12:05         ` Cornelia Huck
  0 siblings, 0 replies; 7+ messages in thread
From: Cornelia Huck @ 2012-11-15 12:05 UTC (permalink / raw)
  To: KONRAD Frédéric
  Cc: Peter Maydell, aliguori, Evgeny Voevodin, Mark Burton, qemu-devel, agraf

On Thu, 15 Nov 2012 11:32:13 +0100
KONRAD Frédéric <fred.konrad@greensocs.com> wrote:


> For the qtree structure we have eg for virtio block :
> 
> bus: main-system-bus
>    type System
>    dev: pcihost, id ""
>      bus: pci.0
>        type PCI
>        dev: virtio-blk-pci, id ""
>          ...
> 

My current virtio-ccw layout is:

bus: main-system-bus
  type System
  dev: virtio-ccw-bridge, id ""
    bus: virtio-ccw
      type virtio-ccw-bus
      dev: virtio-blk-ccw, id ""
        ...

> And it would become :
> 
> bus: main-system-bus
>    type System
>    dev: pcihost, id ""
>      bus: pci.0
>        type PCI
>        dev: virtio-pci, id ""
>          bus: virtio.0
>            type VIRTIO
>            dev: virtio-blk, id ""
>              ...
> 

I guess we could have the following for virtio-ccw:

bus: main-system-bus
  type System
  dev: css, id ""
    bus: css.fe
      type ccw
      dev: virtio-ccw, id ""
        bus: virtio.0
          type virtio
          dev: virtio-blk, id ""
          ...

IOW, we introduce a channel subsystem (css) analogous to pcihost, have
a ccw bus which can hold all kinds of channel devices, introduce a bus
per channel subsystem image (here: the virtual css fe) and stick the
virtio bus under it. If we want to support passthrough of real channel
devices some day, they get their own bus for their channel subsystem
(css.0, css.1, ...) and have the devices show up under it.

(Just thinking aloud. I'll probably need to play with that idea a bit.)

> >
> >>>> Is it the right approach ? Do I miss something ?
> >>> What of the alias handling? Can this be killed once everything has been
> >>> converted?
> >> Which alias ?
> > The alias stuff in hw/qdev-monitor.c that lets you specify either
> > virtio-<type>-<transport> or virtio-<type>.
> >
> So it would break the alias, we must find a solution for that.

I think only virtio-xxx-pci and s390-virtio-xxx need to get backward
compatibility; virtio-mmio and virtio-ccw should not need to deal with
old interfaces.

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

end of thread, other threads:[~2012-11-15 12:05 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-13 14:27 [Qemu-devel] Virtio refactoring KONRAD Frédéric
2012-11-13 15:32 ` Cornelia Huck
2012-11-13 16:31   ` KONRAD Frédéric
2012-11-13 18:09     ` Cornelia Huck
2012-11-15 10:32       ` KONRAD Frédéric
2012-11-15 12:05         ` Cornelia Huck
2012-11-13 23:00   ` Andreas Färber

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.