Date: Wed, 26 Sep 2007 13:25:55 -0400 From: John Baldwin <jhb@freebsd.org> To: "Constantine A. Murenin" <cnst@freebsd.org> Cc: Perforce Change Reviews <perforce@freebsd.org> Subject: Re: PERFORCE change 126230 for review Message-ID: <200709261325.55901.jhb@freebsd.org> In-Reply-To: <46FA8845.9080208@FreeBSD.org> References: <200709091800.l89I0aM5060616@repoman.freebsd.org> <200709261121.58419.jhb@freebsd.org> <46FA8845.9080208@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 26 September 2007 12:26:45 pm Constantine A. Murenin wrote: > On 26/09/2007 11:21, John Baldwin wrote: > > On Sunday 09 September 2007 02:00:36 pm Constantine A. Murenin wrote: > > > >>http://perforce.freebsd.org/chv.cgi?CH=126230 > >> > >>Change 126230 by cnst@dale on 2007/09/09 18:00:16 > >> > >> put in a hack for supporting "Sysctl internal magic", > >> and now hw.sensors tree magically works in sysctl(8)! > >> > >> dale# sysctl hw.sensors.{lm0.volt{0,1,2,3},cpu{0,1}} > >> hw.sensors.lm0.volt0: 1.23 VDC (VCore) > >> hw.sensors.lm0.volt1: 12.30 VDC (+12V) > >> hw.sensors.lm0.volt2: 3.33 VDC (+3.3V) > >> hw.sensors.lm0.volt3: 3.31 VDC (+3.3V) > >> hw.sensors.cpu0.temp0: 28.00 degC > >> hw.sensors.cpu1.temp0: 28.00 degC > >> dale# > >> > >> (All other utilities continue working using a cross-platform > >> sysctl(3) interface, compatible with OpenBSD.) > >> > >>+#endif /* !NOSYSCTL8HACK */ > >>+ > >>+ > >>+#ifndef NOSYSCTL8HACK > >>+ > >>+/* > >>+ * XXX: > >>+ * FreeBSD's sysctl(9) .oid_handler functionality is not accustomed > >>+ * for the CTLTYPE_NODE handler to handle the undocumented sysctl > >>+ * magic calls. As soon as such functionality is developed, > >>+ * sysctl_sensors_handler() should be converted to handle all such > >>+ * calls, and these sysctl_add_oid(9) calls should be removed > >>+ * "with a big axe". This whole sysctl_add_oid(9) business is solely > >>+ * to please sysctl(8). > > > > > > Actually, sysctl_add_oid(9) is how you should add a tree of sysctl's on the > > fly to FreeBSD. It frees you from having to manually simulate a sysctl > > tree yourself and instead focus on just handling the functionality for the > > leaf nodes. If you just gave each sensor its own sysctl ctx and tree most > > of your in-kernel code for dealing with 'hw.sensors' would go away as it > > would just be a normal node ala 'dev'. > > If you take a closer look, the code for manually keeping track of > sensors is very straightforward -- mostly a linked list. sysctl(9) > interface is much more complicated than that. > > This manual accounting of the sensors is a requirement for the sensors > framework -- it is the basis for the concept of sensor device, which > stores information about individual sensors each device has (similarly > to a sysctl_ctx). It is also required to generate and keep track of the > numt of each sensor. > > Using FreeBSD's internal magic does not make the userland applications > portable, because there is no documented userland interface for listing > all leaves of a given sysctl tree. (If you believe otherwise, a link to > the manual page is welcome. :) See device_t's. Each one has an associated sysctl ctx (and tree) while still having its own internal hierarchy of devices that is used to provide enumeration APIs to userland. It's fine to use a separate interface other than sysctl to tell userland which sensors exist (or you could have a sysctl whose value was a list of the sensor names, etc.), but sysctl_add_oid(9) means you don't need an actual 'hw.sensors' sysctl proc routine to manage the sysctl namespace for you. -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200709261325.55901.jhb>