Subject: Re: envsys(4), envstat(8) and detachable sensors.
To: Tim Rightnour <root@garbled.net>
From: Jeff Rizzo <riz@tastylime.net>
List: tech-kern
Date: 05/05/2006 16:09:24
Mmm, slow-motion API discussions. My comments inline, below.
Tim Rightnour wrote:
>> I looked into this, and it looks to me like what envstat(8) does is to
>> look sequentially for sensors beginning with 0, and incrementing until
>> it finds the first sensor number that returns "invalid". This is
>> somewhat problematic, because what sysmon_envsys_unregister() does is to
>> simply remove the detached sensor from the list (sysmon_envsys_list),
>> and leave the abandoned sensor number unused. (New sensors get
>> ever-increasing numbers).
>>
>
> Ok.. I've been thinking about this problem.. and here is what I propose:
>
> 1) We add a new ioctl.. maybe ENVSYS_GMAXSENS which would return an int
> containing the maximum number of sensors in the machine currently.
>
> 2) When a driver registers a new sensor, it should bump this number which would
> be a global in the kernel. (most of the time, see below)
>
>
OK, so this would effectively be a "high water mark"? IE, the maximum
number that have ever been in the machine, but not necessarily the
number in there now? I think this could work OK.
> 3) When we add a new sensor, we would walk the list of current sensors, and
> look for the first one that is not marked as being valid. If we hit one before
> we hit the max sensors value, we use that one and don't increment. If we hit
> the end, then we bump.
>
> 4) Removing a sensor would consist of just marking it invalid.
>
> 5) envstat should ask for the max sensors number from the kernel, and just skip
> the invalid ones, that way it could handle a sparse list of sensors.
>
This all makes sense.
> 6) We extend struct envsys_basic_info to include an ID for each sensor. Some
> sensors may not have this, but things like your one-wire which have a unique
> serial number, would fill this in at attach time. This could be used by
> envstat to find a particular sensor. For example, if I put a one-wire in a
> fish tank, I could write a script that would look for that sensor's serial
> number and monitor it, even as it moved position in the sensors array over
> different boots.
>
So, don't do anything in particular with this information in the kernel,
but allow userland to access it via envsys_basic_info? I like this -
keeps the kernel changes to a minimum.
> 7) Given these two changes.. I think we would need to bump the envsys API
> version.
>
I agree.
I like the thinking you've done about this; unless someone else wants
to chime in, I'll take a stab at implementing your suggestions when I
get a chance, and send diffs to the list. (unless you'd like to do it;
the changes seem straightforward, but I'm unlikely to have time to get
to it real soon - I'm interested in this, but it's not real high on my
personal priority list right now)
+j