Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Sep 2007 15:23:16 -0400
From:      "Constantine A. Murenin" <cnst@FreeBSD.org>
To:        John Baldwin <jhb@FreeBSD.org>
Cc:        Perforce Change Reviews <perforce@FreeBSD.org>, "Constantine A. Murenin" <cnst@FreeBSD.org>
Subject:   Re: PERFORCE change 126230 for review
Message-ID:  <46FAB1A4.3030001@FreeBSD.org>
In-Reply-To: <200709261325.55901.jhb@freebsd.org>
References:  <200709091800.l89I0aM5060616@repoman.freebsd.org> <200709261121.58419.jhb@freebsd.org> <46FA8845.9080208@FreeBSD.org> <200709261325.55901.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 26/09/2007 13:25, John Baldwin wrote:
> 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.

But I why would I have a separate interface for showing sensor hierarchy 
if the sysctl interface can accomplish this purpose with FreeBSD's 
sysctl(9) .oid_handler and the sensordev structure, making the userland 
part of the framework entirely source-code compatible between OpenBSD 
and FreeBSD at the same time?

Also, what is wrong with having a sysctl .oid_handler for managing the 
sysctl namespace?  The .oid_handler functionality has been in the 
FreeBSD tree for ages -- why is it there if not for me to use it as it 
was designed for? :-)

C.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?46FAB1A4.3030001>