[PATCH linux dev-4.10] Revert "drivers/hwmon/occ: Add temperature fault attribute and VRM temp alarm"

Eddie James eajames at linux.vnet.ibm.com
Thu Oct 5 02:04:12 AEDT 2017



On 10/03/2017 11:38 PM, Joel Stanley wrote:
> On Wed, Oct 4, 2017 at 4:44 AM, Eddie James <eajames at linux.vnet.ibm.com> wrote:
>> From: "Edward A. James" <eajames at us.ibm.com>
>>
>> This reverts commit e55423ee10a5057338d24383c00e813436a126ea.
>>
>> Apologies for pushing this up so early... Userspace applications aren't
>> ready for this change. The hwmon polling application cannot accept EGAIN
>> yet, and we can't be returning apparent errors if the sensor is
>> temporarily unavailable.
> Can you go into some more detail here please.
>
> It looks like these changes are within the hwmon ABI, so userspace
> that supports hwmon devices shouldn't break.

Sure. With this change, the driver returns -EAGAIN when reading 
temperature sensors that show 0 temperature. Temperature 0 is how the 
OCC indicates that the sensor is not available at the moment. So, we 
should retry in a bit. But the hwmon application currently sees any 
negative errno as an error, and will not retry on -EAGAIN. So now we get 
errors when we don't want them (for now), basically.

Thanks,
Eddie

>
> Cheers,
>
> Joel
>
>> Signed-off-by: Eddie James <eajames at us.ibm.com>
>> ---
>>   drivers/hwmon/occ/common.c | 38 +++-----------------------------------
>>   1 file changed, 3 insertions(+), 35 deletions(-)
>>
>> diff --git a/drivers/hwmon/occ/common.c b/drivers/hwmon/occ/common.c
>> index 8ffb556..34002fb 100644
>> --- a/drivers/hwmon/occ/common.c
>> +++ b/drivers/hwmon/occ/common.c
>> @@ -19,10 +19,6 @@
>>   #define OCC_EXT_STAT_MEM_THROTTLE      0x20
>>   #define OCC_EXT_STAT_QUICK_DROP                0x10
>>
>> -#define OCC_TEMP_SENSOR_FAULT          0xFF
>> -
>> -#define OCC_FRU_TYPE_VRM               3
>> -
>>   atomic_t occ_num_occs = ATOMIC_INIT(0);
>>
>>   struct temp_sensor_1 {
>> @@ -381,23 +377,11 @@ static ssize_t occ_show_temp_2(struct device *dev,
>>                  val = get_unaligned_be32(&temp->sensor_id);
>>                  break;
>>          case 1:
>> -               val = temp->value;
>> -               if (val == OCC_TEMP_SENSOR_FAULT)
>> -                       return -EREMOTEIO;
>> -
>> -               if (temp->fru_type != OCC_FRU_TYPE_VRM) {
>> -                       if (val == 0)
>> -                               return -EAGAIN;
>> -
>> -                       val *= 1000;
>> -               }
>> +               val = temp->value * 1000;
>>                  break;
>>          case 2:
>>                  val = temp->fru_type;
>>                  break;
>> -       case 3:
>> -               val = temp->value == OCC_TEMP_SENSOR_FAULT;
>> -               break;
>>          }
>>
>>          return snprintf(buf, PAGE_SIZE - 1, "%u\n", val);
>> @@ -796,7 +780,6 @@ static ssize_t occ_show_extended(struct device *dev,
>>   int occ_setup_sensor_attrs(struct occ *occ)
>>   {
>>          unsigned int i, s;
>> -       struct temp_sensor_2 *temp;
>>          struct device *dev = occ->bus_dev;
>>          struct occ_sensors *sensors = &occ->sensors;
>>          struct occ_attribute *attr;
>> @@ -816,7 +799,7 @@ int occ_setup_sensor_attrs(struct occ *occ)
>>                  occ->num_attrs += (sensors->temp.num_sensors * 2);
>>                  break;
>>          case 2:
>> -               occ->num_attrs += (sensors->temp.num_sensors * 4);
>> +               occ->num_attrs += (sensors->temp.num_sensors * 3);
>>                  show_temp = occ_show_temp_2;
>>                  break;
>>          default:
>> @@ -888,22 +871,13 @@ int occ_setup_sensor_attrs(struct occ *occ)
>>
>>          for (i = 0; i < sensors->temp.num_sensors; ++i) {
>>                  s = i + 1;
>> -               temp = ((struct temp_sensor_2 *)sensors->temp.data) + i;
>>
>>                  snprintf(attr->name, sizeof(attr->name), "temp%d_label", s);
>>                  attr->sensor = OCC_INIT_ATTR(attr->name, 0444, show_temp, NULL,
>>                                               0, i);
>>                  attr++;
>>
>> -               if (sensors->temp.version > 1 &&
>> -                   temp->fru_type == OCC_FRU_TYPE_VRM) {
>> -                       snprintf(attr->name, sizeof(attr->name), "temp%d_alarm",
>> -                                s);
>> -               } else {
>> -                       snprintf(attr->name, sizeof(attr->name), "temp%d_input",
>> -                                s);
>> -               }
>> -
>> +               snprintf(attr->name, sizeof(attr->name), "temp%d_input", s);
>>                  attr->sensor = OCC_INIT_ATTR(attr->name, 0444, show_temp, NULL,
>>                                               1, i);
>>                  attr++;
>> @@ -914,12 +888,6 @@ int occ_setup_sensor_attrs(struct occ *occ)
>>                          attr->sensor = OCC_INIT_ATTR(attr->name, 0444,
>>                                                       show_temp, NULL, 2, i);
>>                          attr++;
>> -
>> -                       snprintf(attr->name, sizeof(attr->name), "temp%d_fault",
>> -                                s);
>> -                       attr->sensor = OCC_INIT_ATTR(attr->name, 0444,
>> -                                                    show_temp, NULL, 3, i);
>> -                       attr++;
>>                  }
>>          }
>>
>> --
>> 1.8.3.1
>>



More information about the openbmc mailing list