Re: [PATCH] virtio-blk: Fix kconfig option

From: Michael S. Tsirkin
Date: Thu Sep 06 2012 - 07:08:37 EST


On Thu, Sep 06, 2012 at 03:31:44AM -0700, Kent Overstreet wrote:
> On Thu, Sep 06, 2012 at 01:18:43PM +0300, Michael S. Tsirkin wrote:
> > On Thu, Sep 06, 2012 at 03:02:48AM -0700, Kent Overstreet wrote:
> > > On Thu, Sep 06, 2012 at 12:49:56PM +0300, Michael S. Tsirkin wrote:
> > > > On Thu, Sep 06, 2012 at 02:25:12AM -0700, Kent Overstreet wrote:
> > > > > On Thu, Sep 06, 2012 at 11:44:03AM +0300, Michael S. Tsirkin wrote:
> > > > > > On Thu, Sep 06, 2012 at 12:41:13AM -0700, Kent Overstreet wrote:
> > > > > > > On Tue, Sep 04, 2012 at 03:53:53PM +0930, Rusty Russell wrote:
> > > > > > > > Kent Overstreet <koverstreet@xxxxxxxxxx> writes:
> > > > > > > >
> > > > > > > > > CONFIG_VIRTIO isn't exposed, everything else is supposed to select it
> > > > > > > > > instead.
> > > > > > > >
> > > > > > > > This is a slight mis-understanding. It's supposed to be selected by
> > > > > > > > the particular driver, probably virtio_pci in your case.
> > > > > > >
> > > > > > > So are you saying virtio-blk depends on virtio-pci? If so, the kconfig
> > > > > > > should have that.
> > > > > > >
> > > > > > > As is, VIRTIO_BLK just has:
> > > > > > > depends on EXPERIMENTAL && VIRTIO
> > > > > > >
> > > > > > > which is flat out broken.
> > > > > >
> > > > > > I don't think anything is broken.
> > > > > > Can you show an example of a broken configuration?
> > > > >
> > > > > Do you not understand the difference between depends an selects?
> > > > > Or did you not read my original mail?
> > > > > Flip off everything in drivers -> virtio
> > > > >
> > > > > Now go to drivers -> block and try to turn on virtio-blk.
> > > > >
> > > > > It's not listed!
> > > >
> > > > Yes. Because you disabled all virtio backends.
> > > > It does not make sense to have any frontends.
> > >
> > > How's a user - or even another kernel developer who isn't familiar with
> > > virtio - supposed to know that?
> > >
> > > I still don't know what exactly a virtio backend is - the term isn't
> > > even mentioned anywhere that I've seen.
> > >
> > > Whatever it is though virtio-blk should be depending on _that_, not a
> > > config option that _isn't exposed in the menu_!
> > >
> > > > > Now go back to drivers -> virtio and turn on (randomly) balloon.
> > > > >
> > > > > Go back to drivers -> block, and now you can turn on virtio-blk!
> > > > >
> > > > > Do you see what's wrong with this picture?
> > > >
> > > > Yes. You got unlucky with your random guess.
> > > > It's a bug in balloon kconfig: it should not
> > > > select virtio.
> > > > I sent a patch to fix that yesterday.
> > >
> > > Then it's also a bug in the comments at the top of
> > > drivers/virtio/Kconfig.
> > >
> > > And besides that, how the _hell_ is a user supposed to know to turn on
> > > VIRTIO_PCI before VIRTIO_BLK? It's not documented anywhere (if that is
> > > what's supposed to happen! I still don't know)
> >
> > Well, what kind of device do you have? Tell us :)
> > If it's a virtio pci device,
> > you need to enable virtio-pci and virtio-blk.
>
> I run qemu with -drive if=virtio. You tell me!

-drive if= is a compatibility option. qemu makes
an effort to guess what it is you want to do.
Result is usually correct but it means people building
their own kernels get confused.

For x86 kvm the modern equivalent is:

-device virtio-blk-pci,drive=foobar -drive if=no,...

If you use this you get what you asked for :).

Yes this usage is not documented anywhere, but this is
not guest driver's problem.

> Better yet, tell me how the user is supposed to figure it out!

As usual when you do not know which driver to select.
Boot a distro kernel and look around.
Where is your virtio device? On a pci bus?
There you are.

> >
> > > and even if it was
> > > documented, having one kconfig option depend on something that's exposed
> > > in a _completely different menu_ is just made of fail.
> >
> > Fine, but why pick on virtio?
> > This is extremely common in kconfig.
> > For example, a ton of network drivers depend
> > on PCI, it's exactly the same thing.
>
> Never noticed where CONFIG_PCI is exposed in bus options?

I see it:

CONFIG_PCI:
â Find out whether you have a PCI motherboard. PCI is the name of a â
â bus system, i.e. the way the CPU talks to the other stuff inside â
â your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or â
â VESA. If you have PCI, say Y, otherwise N. â

> Nope, not the same thing.

You just happen to know what PCI is but not what VIRTIO PCI is.
This is fair enough, but not sure how to help in this case.
Your patch won't help though.

--
MST
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/