On Fri, Sep 07, 2012 at 09:10:25AM +0930, Rusty Russell wrote: > Kent Overstreet <koverstreet@xxxxxxxxxx> writes: > > > 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: > >> > Do you not understand the difference between depends an selects? > >> > Or did you not read my original mail? > > Now you're getting insulting. Yes, but at least I'm not being intentionally obtuse. > It's normal for options to depend on other options. Sometimes they're > directly nested (eg. E1000 depends on NETDEVICES, and it's nested under > that option), sometimes they're not (eg. E1000 depends on PCI, which is > selected elsewhere). > > The fact that you are only just realizing this is not Michael's problem. Like I said, I'm well aware of that. The issue here isn't the dependency, it's that it depends on something that isn't exposed anywhere! Think about it from the user's pov. They check what VIRTIO_BLK depends on - just VIRTIO. So they try to figure out how to flip on VIRTIO, or what VIRTIO even is. See how that last step might be problematic? CONFIG_VIRTIO is not exposed! It doesn't even seem to control anything! Go back to your example. Checking the dependencies for E1000 would tell you the user needs to flip on CONFIG_PCI. Done. Easy. User checks the dependencies here and... what do _you_ expect people to do? Look, depending on a kconfig option that's supposed to be user controllable but isn't exposed anywhere is flat out broken. The fact that it's in a different submenu just makes it worse. The problem is that VIRTIO_BLK's dependencies are not actually specified in the kconfig. If it depends on VIRTIO_PCI, that's what the kconfig should say. If it depends on having any of multiple virtio backends enabled, then specify that! depends VIRTIO_PCI || VIRTIO_WHATEVER Or if you really want to have a fake config option that's enabled if you have any virtio backend enabled, fix the damn comments and naming! How is anyone supposed to know that CONFIG_VIRTIO really means "any virtio backend?" Call it VIRTIO_ANY_BACKEND if that's what it really is. And, if that is what you're doing with CONFIG_VIRTIO (I'm still not sure) the comment at the top of drivers/virtio/Kconfig is _wrong_: # Virtio always gets selected by whoever wants it. VIRTIO tristate How is _anyone_ supposed to know that really means "VIRTIO gets selected by things that provide a virtio backend?" C'mon, you've had to debug other people's code before. What would _you_ think if you were tripped up by something like that? > >> > 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 get annoyed that menuconfig doesn't show options whose dependencies > aren't possible, too. (I got bitten the other way: it doesn't show > dependencies which can't be disabled, and I was trying to turn KALLSYMS > off). > > But as I found out just last week, the '/' key allows you to find any > option, and shows what dependencies it has, and their values. Yep, use it all the time. _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization