Date: Wed, 12 May 1999 09:35:36 -0400 From: "Rick Whitesel" <rwhitesel@nbase-xyplex.com> To: "Noriyuki Soda" <soda@sra.co.jp>, <current@FreeBSD.ORG> Cc: <soda@sra.co.jp> Subject: Re: cvs commit: src/sys/pci pcisupport.c Message-ID: <008501be9c7c$51a38020$d3e4b38c@xyplex.com> References: <199905120901.SAA04493@srapc288.sra.co.jp>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi: While I confess to not having the whole picture here, I do, of course, have an opinion. In general I believe that dynamic configuration of the system is extremely useful to both the development community and the user community. The development community has a much easier time if they can load / unload drivers. As for the users, my rule of thumb is that a computer should never ask a human the answer to a question that it can find out for itself. I think this is especially true for configuration information. In addition, the need for dynamic system (re)configuration will only increase as features like PCI hot swap become the standard. Rick Whitesel Scientist NBase-Xyplex Eml: rwhitesel@nbase-xyplex.com "They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety." -- Benjamin Franklin, 1759 ----- Original Message ----- From: Noriyuki Soda <soda@sra.co.jp> To: <current@FreeBSD.ORG> Cc: <soda@sra.co.jp> Sent: Wednesday, May 12, 1999 5:01 AM Subject: Re: cvs commit: src/sys/pci pcisupport.c NOTE: Please Cc: soda@sra.co.jp, I am not subscribing this mailing list, because I am a NetBSD user. :-) > > It depends on old-config, so poor mechanism. newconfig already > > implimented best match probe/attach. > > And a very useful mechanism it is. Which is why I implemented priority > ordered probes in -current. Hmm, I thought this cannot be done correctly on new-bus, because the new-bus kicks match/attach routine from SYSINIT(). It is apparent that this fails in dynamic configuration case, because a potencial candidate of drivers which is dynamically loaded first always matches. This behaviour can not be called as "best match", but "first match". :-) Of course, dynamic configuration of newconfig solves this problem. Was this behaviour of the new-bus changed in -current ? BTW, there are many fundamental design flaws in new-bus, so I don't think new-bus is comparable with newconfig, yet, even if priority probe is implemented. For example: - newconfig can cope with both static configuration and dynamic configuration. new-bus can handle dynamic configuration only. This is because critical information for configuration is represented in C source internally. e.g. The bus/device hierarchy information is embedded in DRIVER_MODULE() on new-bus. On newconfig, such information is represented externally in "files" file. Thus the information can be used in both static and dynamic configuration case. As a result, newconfig can support same configuration syntax in both static and dynamic configuration, the new-bus never can do it. - new-bus cannot support on-demand device driver loading, dynamic configuration for newconfig can do it, though. This is because new-bus doesn't have the way to represent meta information like a mapping from device name to driver filename. If new-bus have this, there is no need to specifiy "kldload if_fxp", but just say "I need fxp0", then configuration framework can automatically load fxp driver, if it is not loaded yet. This is how configuration works in both newconfig and even oldconfig (look at static kernel configuration file for oldconfig, there is the line "device fxp0" which demands fxp driver to be loaded). The way to specify a driver to be linked on new-bus is retrogression to the age before 4.0BSD (4.0BSD introduced oldconfig and it was released on 1980 :-)). Why does a user have to specify file name instead of device name? Mmmm, perhaps do new-bus people believe MS-DOSism or Linuxism? :-) The way on new-bus will cause compatibility problem when OS is upgraded, because the implementation (filename) may be changed between versions and versions. - new-bus heavily depends on oldconfig which is known to be obsolete and machine dependent (look at usr.sbin/config/config.y, there are many definitions which depends on ISA bus, e.g. PORT, IOMEM, IOSIZE, ... newconfig can defines such attributes dynamically on demand.), and lacks many features which newconfig already has. e.g. - configruration hint which can be accessed from static configuration - bus/device hierarchy information which can be accessed from static configuration - inter module dependency information based on module attributes. new-bus completely lacks this feature, and depends on oldconfig about this. - mapping information from device name to object file name. new-bus completely lacks this feature, and depends on old config about this. Therefore, FreeBSD eventually will have to choose one of the following candidates: [a] gives up static configuration. But this doesn't solve the following problems: - at least console driver should be linked statically, unless you statically link this, you cannot get the error about dynamic loading critical drivers. :-) - in some applications, static configuration is good enough and dynamic configuration is merely overkill. FreeBSD will not cope with these applications better. Furthermore, this doesn't solves the problems about inter module dependency and mapping information from device name to object filename. [b] uses ugly kluge like hardcoding to solve the problems which already solved by the newconfig cleanly. [c] reinvents features which already implemented on the newconfig. This is exactly NIH problem, and means FreeBSD loses compatibility with *BSDs (FreeBSD becomes non-BSD). Note that newconfig is genuine feature of 4.4BSD, and 4.4BSD red daemon books already said that after the system is completely booted, 4.4BSD (i.e. newconfig) cannot load device drivers.... These problems are all well understood and EASY TO FIX. in page 502. As this shows, it is apparent that newconfig can cope with dynamic configuration, why do new-bus people thought that newconfig cannot deal with dynamic configuration, and reinvent configuration framework? It is obvious that they do not know about newconfig enough, (their terminology like "ivar" shows this fact). [d] shifts the all the problems to users (e.g. see compatibility problem mentioned above) All of above facts are already told to one of the FreeBSD core members, just before core members officialy decided to choose new-bus. I do not know why core members decide new-bus, though. P.S. It seems FreeBSD already start to choose [b]. Please look at changes in revision 1.67 of sys/i386/isa/npx.c. It hardcodes magic number 13, instead of the value gotton from configuration framework. It is interesting that even this doesn't use #define NPXIRQ 13. :-) This reminds me another ugly kluge in sys/pccard/i82365.h: #define PCIC_INDEX_0 0x3E0 #define PCIC_INDEX_1 (PCIC_INDEX_0 + 2) This is the way what some clever FreeBSD people saids "right" to Nakagawa-san, though Nakagawa-san never agreed that it is right, and rather likes the newconfig way like below: pcic0 at isa? port 0x3e0 pcic1 at isa? port 0x3e2 pcic* at pci? pcic* at isapnp? It is apparent which is better and cleaner for me. But perhaps you do not agree with me. :-) -- soda@sra.co.jp Software Research Associates, Inc., Japan (Noriyuki Soda) Advanced Technology Group. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?008501be9c7c$51a38020$d3e4b38c>