Re: [RFC PATCH 2/3] hwmon: sht15: add support for reading the status register

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Vivien, Jonathan,

On Tue, 22 Mar 2011 10:28:40 +0000, Jonathan Cameron wrote:
> On 03/22/11 00:00, Vivien Didelot wrote:
> > Hi Jonathan.
> > On Mon, Mar 21, 2011 at 07:43:59PM +0000, Jonathan Cameron wrote:
> >> On 03/16/11 18:44, Vivien Didelot wrote:
> >>>  /**
> >>> @@ -378,6 +460,9 @@ static int sht15_update_vals(struct sht15_data *data)
> >>>  	mutex_lock(&data->read_lock);
> >>>  	if (time_after(jiffies, data->last_updat + timeout)
> >>>  	    || !data->valid) {
> >> As with the previous version, I'd make this optional controlled
> >> by platform data.  Not everyone cares and it just made their gpio's
> >> jump up and down a fair bit more.  Obviously if it's turned off, you
> >> will also want to change what attributes are registered.

I don't think it makes sense to let the platform data decide of this.
On the same system, different users may have different usage patterns
for the sysfs attributes.

> >>> +		ret = sht15_update_status(data);
> >>> +		if (ret)
> >>> +			goto error_ret;
> > I put the sht15_update_status() call here so it could have benefit of the
> > jiffies calculation. I also thought that it could be useful to update the
> > device state before each measurement, in order to notice an eventual low
> > power notice. Maybe I'm wrong and this test should be done separately?
> The question is not whether it is worth doing in some cases, but rather
> whether this is a change that will effect anyone in a negative fashion.
> Its a balance between providing more error checking vs extra transactions
> on what may be an extremely slow bus.
> 
> Lets go with butting this in.
> > 
> >>> +	/* Technically no need to read temperature and humidity as well */
> >> Given we do a fresh read here, why bother having the cache at all?  Just
> >> read it explicitly when we care.
> >>> +	ret = sht15_update_vals(data);
> > According to the previous comment, what about adding a mask as an argument
> > to the sht15_update_vals() function to know which measurement to do (only
> > status, temperature + humidity, etc.)?  Because the discussion could also
> > be pointed on the temperature measurement, which update unnecessarily the
> > humidity as well.
> Good idea.
> ...

It boils down to coming up with a caching strategy which is optimal for
the use case. Historically, hwmon drivers have grouped register access
and have cached register values for three reasons.

The first reason is that some (old) sensor chips would stop sampling
when I2C was accessed, so letting any user read values continuously
from registers would let them DoS the monitoring, possibly with very
nasty effects (system overheating going unnoticed.) I don't think this
applies to the SHT1x, as sampling isn't done in the background to start
with.

The second reason is the slow access to registers. This holds for both
I2C and SPI devices, and definitely applies here. That being said, it
also depends on the number and size of registers. While we have I2C
hwmon devices with ~50 registers, The SHT1x only has 40 bits worth of
register values, this is really a small amount, so even with slow
register access, performance shouldn't suffer much. So I'm not entirely
sure if the ongoing discussing is really warranted.

The third reason is that sometimes different sysfs attributes map to
the same common register, so caching avoids duplicate register reads
(which is even more important for self-clearing registers.) For the
SHT1x, this would apply to temp1_fault and humidity1_fault, if we go
with these attributes as discussed elsewhere in this thread.

Anyway, the important thing to remember is that there is no universal
caching strategy. Different drivers have different implementations.
Some cache the values, some don't. Some have a single cache for all
register values (and thus a unique cache lifetime) while some partition
the registers in groups, and each group has its own cache lifetime. So
for the sht15 driver, depending on the most frequent usage pattern,
the current caching strategy (single cache for all registers and 1
second lifetime) may or may not be the most appropriate one.

One thing worth keeping in mind when deciding this is that "sensors"
will always read from all available attributes. So if it is the main
target, having a common cache for all register values needed by the
standard hwmon attributes makes sense. However, if there are other
targets (other monitoring tools with different access patterns, or
scripts accessing a single attribute repeatedly) then a different
approach may make more sense.

HTH,
-- 
Jean Delvare

_______________________________________________
lm-sensors mailing list
lm-sensors@xxxxxxxxxxxxxx
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors


[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux