All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <55252E0F.8080200@fr.ibm.com>

diff --git a/a/1.txt b/N1/1.txt
index 585fea1..d239380 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,69 +1,117 @@
-T24gMDQvMDgvMjAxNSAwMzoyNiBQTSwgR3VlbnRlciBSb2VjayB3cm90ZToKPiBPbiAwNC8wOC8y
-MDE1IDEyOjAwIEFNLCBDw6lkcmljIExlIEdvYXRlciB3cm90ZToKPj4gVGhlIG5ldyBPUEFMIGRl
-dmljZSB0cmVlIGFkZHMgYSBmZXcgcHJvcGVydGllcyB3aGljaCBjYW4gYmUgdXNlZCB0byBhZGQK
-Pj4gZXh0cmEgaW5mb3JtYXRpb24gb24gdGhlIHNlbnNvciBsYWJlbC4KPj4KPj4gSW4gdGhlIGNh
-c2Ugb2YgYSBjcHUgY29yZSBzZW5zb3IsIHRoZSBmaXJtd2FyZSBleHBvc2VzIHRoZSBwaHlzaWNh
-bAo+PiBpZGVudGlmaWVyIG9mIHRoZSBjb3JlIGluIHRoZSAiaWJtLHBpciIgcHJvcGVydHkuIFRo
-ZSBkcml2ZXIKPj4gdHJhbnNsYXRlcyB0aGlzIGlkZW50aWZpZXIgaW4gYSBsaW51eCBjcHUgbnVt
-YmVyIGFuZCBwcmludHMgb3V0IGEKPj4gcmFuZ2UgY29ycmVzcG9uZGluZyB0byB0aGUgaGFyZHdh
-cmUgdGhyZWFkcyBvZiB0aGUgY29yZSAoYXMgdGhleQo+PiBzaGFyZSB0aGUgc2FtZSBzZW5zb3Ip
-Lgo+Pgo+PiBUaGUgbnVtYmVyaW5nIGdpdmVzIGEgaGludCBvbiB0aGUgbG9jYWxpemF0aW9uIG9m
-IHRoZSBjb3JlIGluIHRoZQo+PiBzeXN0ZW0gKHdoaWNoIHNvY2tldCwgd2hpY2ggY2hpcCkuCj4+
-Cj4+IFNpZ25lZC1vZmYtYnk6IEPDqWRyaWMgTGUgR29hdGVyIDxjbGdAZnIuaWJtLmNvbT4KPj4g
-LS0tCj4+Cj4+ICAgQ2hhbmdlcyBzaW5jZSB2MjoKPj4KPj4gICAtIGZpeCBib2d1cyBsb2dpY2Fs
-IGNwdSByZXRyaWV2YWwKPj4gICAtIHVzZSAndGhyZWFkc19wZXJfY29yZScgdG8gcHJpbnQgb3V0
-IGNwdSByYW5nZQo+Pgo+PiAgIENoYW5nZXMgc2luY2UgdjE6Cj4+Cj4+ICAgLSBjaGVjayBjcHUg
-dmFsaWRpdHkgYmVmb3JlIHByaW50aW5nIG91dCB0aGUgYXR0cmlidXRlIGxhYmVsLgo+PiAgICAg
-aWYgaW52YWxpZCwgdXNlIGEgInBoeSIgcHJlZml4IHRvIGRpc3Rpbmd1aXNoIGEgbGludXggY3B1
-Cj4+ICAgICBudW1iZXIgZnJvbSBhIHBoeXNpY2FsIGNwdSBudW1iZXIuCj4+Cj4+ICAgZHJpdmVy
-cy9od21vbi9pYm1wb3dlcm52LmMgfCAgIDQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr
-KysrKysrKysrKysrKysKPj4gICAxIGZpbGUgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKQo+Pgo+
-PiBJbmRleDogbGludXguZ2l0L2RyaXZlcnMvaHdtb24vaWJtcG93ZXJudi5jCj4+ID09PT09PT09
-PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
-PT0KPj4gLS0tIGxpbnV4LmdpdC5vcmlnL2RyaXZlcnMvaHdtb24vaWJtcG93ZXJudi5jCj4+ICsr
-KyBsaW51eC5naXQvZHJpdmVycy9od21vbi9pYm1wb3dlcm52LmMKPj4gQEAgLTMwLDYgKzMwLDcg
-QEAKPj4gICAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ICAgI2luY2x1ZGUg
-PGFzbS9vcGFsLmg+Cj4+ICAgI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+PiArI2luY2x1ZGUgPGFz
-bS9jcHV0aHJlYWRzLmg+Cj4+Cj4+ICAgI2RlZmluZSBNQVhfQVRUUl9MRU4gICAgMzIKPj4gICAj
-ZGVmaW5lIE1BWF9MQUJFTF9MRU4gICAgNjQKPj4gQEAgLTExMCwxMiArMTExLDU0IEBAIHN0YXRp
-YyBzc2l6ZV90IHNob3dfbGFiZWwoc3RydWN0IGRldmljZQo+PiAgICAgICByZXR1cm4gc3ByaW50
-ZihidWYsICIlc1xuIiwgc2RhdGEtPmxhYmVsKTsKPj4gICB9Cj4+Cj4+ICtzdGF0aWMgaW50IF9f
-aW5pdCBnZXRfbG9naWNhbF9jcHUodW5zaWduZWQgaW50IGh3Y3B1KQo+PiArewo+PiArICAgIGlu
-dCBjcHU7Cj4+ICsKPj4gKyAgICBmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQo+PiArICAgICAg
-ICBpZiAoZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpID09IGh3Y3B1KQo+PiArICAgICAg
-ICAgICAgcmV0dXJuIGNwdTsKPj4gKwo+PiArICAgIHByX2VycigiJXM6IGNvdWxkIG5vdCBmaW5k
-IGEgY3B1IHdpdGggcGh5c2ljYWwgaWQgMHgleFxuIiwKPj4gKyAgICAgICAgICAgX19mdW5jX18s
-IGh3Y3B1KTsKPiAKPiBJIGxpa2UgbW92aW5nIHRoaXMgaW50byBhIGZ1bmN0aW9uLCBidXQgSSBy
-ZWFsbHkgZGlzbGlrZSB0aGlzIGVycm9yCj4gbWVzc2FnZS4gSWYgdGhlIGRldmljZXRyZWUgZGF0
-YSBpcyB3cm9uZy9iYWQsIHRoZSBsb2cgYW5kIHRoZSBjb25zb2xlCj4gd2lsbCBiZSBjbG9nZ2Vk
-IHdpdGggdGhhdCBtZXNzYWdlLiBBbmQgdGhlIHVzZXIgd2lsbCBub3QgYmUgYWJsZQo+IHRvIGRv
-IGFueXRoaW5nIGFib3V0IGl0LgoKeWVzLiBJdCBpcyBub3Qgc3VwZXIgdXNlZnVsIGFueXdheSBh
-bmQgaXQgaXMgcmVkdW5kYW50IHdpdGggdGhlICJwaHkiIApwcmVmaXggYmVsb3cuIERvIHlvdSB3
-YW50IG1lIHRvIGtpbGwgaXQgaW4gYSB2NCA/IAoKVGhhbmtzLAoKQy4gCgo+IAo+IEd1ZW50ZXIK
-PiAKPj4gKyAgICByZXR1cm4gLUVOT0VOVDsKPj4gK30KPj4gKwo+PiAgIHN0YXRpYyB2b2lkIF9f
-aW5pdCBtYWtlX3NlbnNvcl9sYWJlbChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAo+PiAgICAgICAg
-ICAgICAgIHN0cnVjdCBzZW5zb3JfZGF0YSAqc2RhdGEsIGNvbnN0IGNoYXIgKmxhYmVsKQo+PiAg
-IHsKPj4gKyAgICB1MzIgaWQ7Cj4+ICAgICAgIHNpemVfdCBuOwo+Pgo+PiAgICAgICBuID0gc25w
-cmludGYoc2RhdGEtPmxhYmVsLCBzaXplb2Yoc2RhdGEtPmxhYmVsKSwgIiVzIiwgbGFiZWwpOwo+
-PiArCj4+ICsgICAgLyoKPj4gKyAgICAgKiBDb3JlIHRlbXAgcHJldHR5IHByaW50Cj4+ICsgICAg
-ICovCj4+ICsgICAgaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImlibSxwaXIiLCAmaWQp
-KSB7Cj4+ICsgICAgICAgIGludCBjcHVpZCA9IGdldF9sb2dpY2FsX2NwdShpZCk7Cj4+ICsKPj4g
-KyAgICAgICAgaWYgKGNwdWlkID49IDApCj4+ICsgICAgICAgICAgICAvKgo+PiArICAgICAgICAg
-ICAgICogVGhlIGRpZ2l0YWwgdGhlcm1hbCBzZW5zb3JzIGFyZSBhc3NvY2lhdGVkCj4+ICsgICAg
-ICAgICAgICAgKiB3aXRoIGEgY29yZS4gTGV0J3MgcHJpbnQgb3V0IHRoZSByYW5nZSBvZgo+PiAr
-ICAgICAgICAgICAgICogY3B1IGlkcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBoYXJkd2FyZQo+PiAr
-ICAgICAgICAgICAgICogdGhyZWFkcyBvZiB0aGUgY29yZS4KPj4gKyAgICAgICAgICAgICAqLwo+
-PiArICAgICAgICAgICAgbiArPSBzbnByaW50ZihzZGF0YS0+bGFiZWwgKyBuLAo+PiArICAgICAg
-ICAgICAgICAgICAgICAgIHNpemVvZihzZGF0YS0+bGFiZWwpIC0gbiwgIiAlZC0lZCIsCj4+ICsg
-ICAgICAgICAgICAgICAgICAgICAgY3B1aWQsIGNwdWlkICsgdGhyZWFkc19wZXJfY29yZSAtIDEp
-Owo+PiArICAgICAgICBlbHNlCj4+ICsgICAgICAgICAgICBuICs9IHNucHJpbnRmKHNkYXRhLT5s
-YWJlbCArIG4sCj4+ICsgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNkYXRhLT5sYWJlbCkg
-LSBuLCAiIHBoeSVkIiwgaWQpOwo+PiArICAgIH0KPj4gKwo+PiArICAgIC8qCj4+ICsgICAgICog
-TWVtYnVmZmVyIHByZXR0eSBwcmludAo+PiArICAgICAqLwo+PiArICAgIGlmICghb2ZfcHJvcGVy
-dHlfcmVhZF91MzIobnAsICJpYm0sY2hpcC1pZCIsICZpZCkpCj4+ICsgICAgICAgIG4gKz0gc25w
-cmludGYoc2RhdGEtPmxhYmVsICsgbiwgc2l6ZW9mKHNkYXRhLT5sYWJlbCkgLSBuLAo+PiArICAg
-ICAgICAgICAgICAgICAgIiAlZCIsIGlkICYgMHhmZmZmKTsKPj4gICB9Cj4+Cj4+ICAgc3RhdGlj
-IGludCBnZXRfc2Vuc29yX2luZGV4X2F0dHIoY29uc3QgY2hhciAqbmFtZSwgdTMyICppbmRleCwK
-Pj4KPj4KPiAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
-XwpsbS1zZW5zb3JzIG1haWxpbmcgbGlzdApsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCmh0dHA6
-Ly9saXN0cy5sbS1zZW5zb3JzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xtLXNlbnNvcnM
+On 04/08/2015 03:26 PM, Guenter Roeck wrote:
+> On 04/08/2015 12:00 AM, Cédric Le Goater wrote:
+>> The new OPAL device tree adds a few properties which can be used to add
+>> extra information on the sensor label.
+>>
+>> In the case of a cpu core sensor, the firmware exposes the physical
+>> identifier of the core in the "ibm,pir" property. The driver
+>> translates this identifier in a linux cpu number and prints out a
+>> range corresponding to the hardware threads of the core (as they
+>> share the same sensor).
+>>
+>> The numbering gives a hint on the localization of the core in the
+>> system (which socket, which chip).
+>>
+>> Signed-off-by: Cédric Le Goater <clg@fr.ibm.com>
+>> ---
+>>
+>>   Changes since v2:
+>>
+>>   - fix bogus logical cpu retrieval
+>>   - use 'threads_per_core' to print out cpu range
+>>
+>>   Changes since v1:
+>>
+>>   - check cpu validity before printing out the attribute label.
+>>     if invalid, use a "phy" prefix to distinguish a linux cpu
+>>     number from a physical cpu number.
+>>
+>>   drivers/hwmon/ibmpowernv.c |   43 +++++++++++++++++++++++++++++++++++++++++++
+>>   1 file changed, 43 insertions(+)
+>>
+>> Index: linux.git/drivers/hwmon/ibmpowernv.c
+>> ===================================================================
+>> --- linux.git.orig/drivers/hwmon/ibmpowernv.c
+>> +++ linux.git/drivers/hwmon/ibmpowernv.c
+>> @@ -30,6 +30,7 @@
+>>   #include <linux/platform_device.h>
+>>   #include <asm/opal.h>
+>>   #include <linux/err.h>
+>> +#include <asm/cputhreads.h>
+>>
+>>   #define MAX_ATTR_LEN    32
+>>   #define MAX_LABEL_LEN    64
+>> @@ -110,12 +111,54 @@ static ssize_t show_label(struct device
+>>       return sprintf(buf, "%s\n", sdata->label);
+>>   }
+>>
+>> +static int __init get_logical_cpu(unsigned int hwcpu)
+>> +{
+>> +    int cpu;
+>> +
+>> +    for_each_possible_cpu(cpu)
+>> +        if (get_hard_smp_processor_id(cpu) == hwcpu)
+>> +            return cpu;
+>> +
+>> +    pr_err("%s: could not find a cpu with physical id 0x%x\n",
+>> +           __func__, hwcpu);
+> 
+> I like moving this into a function, but I really dislike this error
+> message. If the devicetree data is wrong/bad, the log and the console
+> will be clogged with that message. And the user will not be able
+> to do anything about it.
+
+yes. It is not super useful anyway and it is redundant with the "phy" 
+prefix below. Do you want me to kill it in a v4 ? 
+
+Thanks,
+
+C. 
+
+> 
+> Guenter
+> 
+>> +    return -ENOENT;
+>> +}
+>> +
+>>   static void __init make_sensor_label(struct device_node *np,
+>>               struct sensor_data *sdata, const char *label)
+>>   {
+>> +    u32 id;
+>>       size_t n;
+>>
+>>       n = snprintf(sdata->label, sizeof(sdata->label), "%s", label);
+>> +
+>> +    /*
+>> +     * Core temp pretty print
+>> +     */
+>> +    if (!of_property_read_u32(np, "ibm,pir", &id)) {
+>> +        int cpuid = get_logical_cpu(id);
+>> +
+>> +        if (cpuid >= 0)
+>> +            /*
+>> +             * The digital thermal sensors are associated
+>> +             * with a core. Let's print out the range of
+>> +             * cpu ids corresponding to the hardware
+>> +             * threads of the core.
+>> +             */
+>> +            n += snprintf(sdata->label + n,
+>> +                      sizeof(sdata->label) - n, " %d-%d",
+>> +                      cpuid, cpuid + threads_per_core - 1);
+>> +        else
+>> +            n += snprintf(sdata->label + n,
+>> +                      sizeof(sdata->label) - n, " phy%d", id);
+>> +    }
+>> +
+>> +    /*
+>> +     * Membuffer pretty print
+>> +     */
+>> +    if (!of_property_read_u32(np, "ibm,chip-id", &id))
+>> +        n += snprintf(sdata->label + n, sizeof(sdata->label) - n,
+>> +                  " %d", id & 0xffff);
+>>   }
+>>
+>>   static int get_sensor_index_attr(const char *name, u32 *index,
+>>
+>>
+>
diff --git a/a/content_digest b/N1/content_digest
index e0e7e48..dcc5bf5 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,8 +1,8 @@
  "ref\01428476427-23311-1-git-send-email-clg@fr.ibm.com\0"
  "ref\055252C9A.4050505@roeck-us.net\0"
  "From\0Cedric Le Goater <clg@fr.ibm.com>\0"
- "Subject\0Re: [lm-sensors] [PATCH v3] hwmon: (ibmpowernv) pretty print labels\0"
- "Date\0Wed, 08 Apr 2015 13:33:03 +0000\0"
+ "Subject\0Re: [PATCH v3] hwmon: (ibmpowernv) pretty print labels\0"
+ "Date\0Wed, 08 Apr 2015 15:33:03 +0200\0"
  "To\0Guenter Roeck <linux@roeck-us.net>"
  " lm-sensors@lm-sensors.org\0"
  "Cc\0Stewart Smith <stewart@linux.vnet.ibm.com>"
@@ -12,74 +12,122 @@
  " Jean Delvare <jdelvare@suse.de>\0"
  "\00:1\0"
  "b\0"
- "T24gMDQvMDgvMjAxNSAwMzoyNiBQTSwgR3VlbnRlciBSb2VjayB3cm90ZToKPiBPbiAwNC8wOC8y\n"
- "MDE1IDEyOjAwIEFNLCBDw6lkcmljIExlIEdvYXRlciB3cm90ZToKPj4gVGhlIG5ldyBPUEFMIGRl\n"
- "dmljZSB0cmVlIGFkZHMgYSBmZXcgcHJvcGVydGllcyB3aGljaCBjYW4gYmUgdXNlZCB0byBhZGQK\n"
- "Pj4gZXh0cmEgaW5mb3JtYXRpb24gb24gdGhlIHNlbnNvciBsYWJlbC4KPj4KPj4gSW4gdGhlIGNh\n"
- "c2Ugb2YgYSBjcHUgY29yZSBzZW5zb3IsIHRoZSBmaXJtd2FyZSBleHBvc2VzIHRoZSBwaHlzaWNh\n"
- "bAo+PiBpZGVudGlmaWVyIG9mIHRoZSBjb3JlIGluIHRoZSAiaWJtLHBpciIgcHJvcGVydHkuIFRo\n"
- "ZSBkcml2ZXIKPj4gdHJhbnNsYXRlcyB0aGlzIGlkZW50aWZpZXIgaW4gYSBsaW51eCBjcHUgbnVt\n"
- "YmVyIGFuZCBwcmludHMgb3V0IGEKPj4gcmFuZ2UgY29ycmVzcG9uZGluZyB0byB0aGUgaGFyZHdh\n"
- "cmUgdGhyZWFkcyBvZiB0aGUgY29yZSAoYXMgdGhleQo+PiBzaGFyZSB0aGUgc2FtZSBzZW5zb3Ip\n"
- "Lgo+Pgo+PiBUaGUgbnVtYmVyaW5nIGdpdmVzIGEgaGludCBvbiB0aGUgbG9jYWxpemF0aW9uIG9m\n"
- "IHRoZSBjb3JlIGluIHRoZQo+PiBzeXN0ZW0gKHdoaWNoIHNvY2tldCwgd2hpY2ggY2hpcCkuCj4+\n"
- "Cj4+IFNpZ25lZC1vZmYtYnk6IEPDqWRyaWMgTGUgR29hdGVyIDxjbGdAZnIuaWJtLmNvbT4KPj4g\n"
- "LS0tCj4+Cj4+ICAgQ2hhbmdlcyBzaW5jZSB2MjoKPj4KPj4gICAtIGZpeCBib2d1cyBsb2dpY2Fs\n"
- "IGNwdSByZXRyaWV2YWwKPj4gICAtIHVzZSAndGhyZWFkc19wZXJfY29yZScgdG8gcHJpbnQgb3V0\n"
- "IGNwdSByYW5nZQo+Pgo+PiAgIENoYW5nZXMgc2luY2UgdjE6Cj4+Cj4+ICAgLSBjaGVjayBjcHUg\n"
- "dmFsaWRpdHkgYmVmb3JlIHByaW50aW5nIG91dCB0aGUgYXR0cmlidXRlIGxhYmVsLgo+PiAgICAg\n"
- "aWYgaW52YWxpZCwgdXNlIGEgInBoeSIgcHJlZml4IHRvIGRpc3Rpbmd1aXNoIGEgbGludXggY3B1\n"
- "Cj4+ICAgICBudW1iZXIgZnJvbSBhIHBoeXNpY2FsIGNwdSBudW1iZXIuCj4+Cj4+ICAgZHJpdmVy\n"
- "cy9od21vbi9pYm1wb3dlcm52LmMgfCAgIDQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr\n"
- "KysrKysrKysrKysrKysKPj4gICAxIGZpbGUgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKQo+Pgo+\n"
- "PiBJbmRleDogbGludXguZ2l0L2RyaXZlcnMvaHdtb24vaWJtcG93ZXJudi5jCj4+ID09PT09PT09\n"
- "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09\n"
- "PT0KPj4gLS0tIGxpbnV4LmdpdC5vcmlnL2RyaXZlcnMvaHdtb24vaWJtcG93ZXJudi5jCj4+ICsr\n"
- "KyBsaW51eC5naXQvZHJpdmVycy9od21vbi9pYm1wb3dlcm52LmMKPj4gQEAgLTMwLDYgKzMwLDcg\n"
- "QEAKPj4gICAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ICAgI2luY2x1ZGUg\n"
- "PGFzbS9vcGFsLmg+Cj4+ICAgI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+PiArI2luY2x1ZGUgPGFz\n"
- "bS9jcHV0aHJlYWRzLmg+Cj4+Cj4+ICAgI2RlZmluZSBNQVhfQVRUUl9MRU4gICAgMzIKPj4gICAj\n"
- "ZGVmaW5lIE1BWF9MQUJFTF9MRU4gICAgNjQKPj4gQEAgLTExMCwxMiArMTExLDU0IEBAIHN0YXRp\n"
- "YyBzc2l6ZV90IHNob3dfbGFiZWwoc3RydWN0IGRldmljZQo+PiAgICAgICByZXR1cm4gc3ByaW50\n"
- "ZihidWYsICIlc1xuIiwgc2RhdGEtPmxhYmVsKTsKPj4gICB9Cj4+Cj4+ICtzdGF0aWMgaW50IF9f\n"
- "aW5pdCBnZXRfbG9naWNhbF9jcHUodW5zaWduZWQgaW50IGh3Y3B1KQo+PiArewo+PiArICAgIGlu\n"
- "dCBjcHU7Cj4+ICsKPj4gKyAgICBmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQo+PiArICAgICAg\n"
- "ICBpZiAoZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpID09IGh3Y3B1KQo+PiArICAgICAg\n"
- "ICAgICAgcmV0dXJuIGNwdTsKPj4gKwo+PiArICAgIHByX2VycigiJXM6IGNvdWxkIG5vdCBmaW5k\n"
- "IGEgY3B1IHdpdGggcGh5c2ljYWwgaWQgMHgleFxuIiwKPj4gKyAgICAgICAgICAgX19mdW5jX18s\n"
- "IGh3Y3B1KTsKPiAKPiBJIGxpa2UgbW92aW5nIHRoaXMgaW50byBhIGZ1bmN0aW9uLCBidXQgSSBy\n"
- "ZWFsbHkgZGlzbGlrZSB0aGlzIGVycm9yCj4gbWVzc2FnZS4gSWYgdGhlIGRldmljZXRyZWUgZGF0\n"
- "YSBpcyB3cm9uZy9iYWQsIHRoZSBsb2cgYW5kIHRoZSBjb25zb2xlCj4gd2lsbCBiZSBjbG9nZ2Vk\n"
- "IHdpdGggdGhhdCBtZXNzYWdlLiBBbmQgdGhlIHVzZXIgd2lsbCBub3QgYmUgYWJsZQo+IHRvIGRv\n"
- "IGFueXRoaW5nIGFib3V0IGl0LgoKeWVzLiBJdCBpcyBub3Qgc3VwZXIgdXNlZnVsIGFueXdheSBh\n"
- "bmQgaXQgaXMgcmVkdW5kYW50IHdpdGggdGhlICJwaHkiIApwcmVmaXggYmVsb3cuIERvIHlvdSB3\n"
- "YW50IG1lIHRvIGtpbGwgaXQgaW4gYSB2NCA/IAoKVGhhbmtzLAoKQy4gCgo+IAo+IEd1ZW50ZXIK\n"
- "PiAKPj4gKyAgICByZXR1cm4gLUVOT0VOVDsKPj4gK30KPj4gKwo+PiAgIHN0YXRpYyB2b2lkIF9f\n"
- "aW5pdCBtYWtlX3NlbnNvcl9sYWJlbChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAo+PiAgICAgICAg\n"
- "ICAgICAgIHN0cnVjdCBzZW5zb3JfZGF0YSAqc2RhdGEsIGNvbnN0IGNoYXIgKmxhYmVsKQo+PiAg\n"
- "IHsKPj4gKyAgICB1MzIgaWQ7Cj4+ICAgICAgIHNpemVfdCBuOwo+Pgo+PiAgICAgICBuID0gc25w\n"
- "cmludGYoc2RhdGEtPmxhYmVsLCBzaXplb2Yoc2RhdGEtPmxhYmVsKSwgIiVzIiwgbGFiZWwpOwo+\n"
- "PiArCj4+ICsgICAgLyoKPj4gKyAgICAgKiBDb3JlIHRlbXAgcHJldHR5IHByaW50Cj4+ICsgICAg\n"
- "ICovCj4+ICsgICAgaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImlibSxwaXIiLCAmaWQp\n"
- "KSB7Cj4+ICsgICAgICAgIGludCBjcHVpZCA9IGdldF9sb2dpY2FsX2NwdShpZCk7Cj4+ICsKPj4g\n"
- "KyAgICAgICAgaWYgKGNwdWlkID49IDApCj4+ICsgICAgICAgICAgICAvKgo+PiArICAgICAgICAg\n"
- "ICAgICogVGhlIGRpZ2l0YWwgdGhlcm1hbCBzZW5zb3JzIGFyZSBhc3NvY2lhdGVkCj4+ICsgICAg\n"
- "ICAgICAgICAgKiB3aXRoIGEgY29yZS4gTGV0J3MgcHJpbnQgb3V0IHRoZSByYW5nZSBvZgo+PiAr\n"
- "ICAgICAgICAgICAgICogY3B1IGlkcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBoYXJkd2FyZQo+PiAr\n"
- "ICAgICAgICAgICAgICogdGhyZWFkcyBvZiB0aGUgY29yZS4KPj4gKyAgICAgICAgICAgICAqLwo+\n"
- "PiArICAgICAgICAgICAgbiArPSBzbnByaW50ZihzZGF0YS0+bGFiZWwgKyBuLAo+PiArICAgICAg\n"
- "ICAgICAgICAgICAgICAgIHNpemVvZihzZGF0YS0+bGFiZWwpIC0gbiwgIiAlZC0lZCIsCj4+ICsg\n"
- "ICAgICAgICAgICAgICAgICAgICAgY3B1aWQsIGNwdWlkICsgdGhyZWFkc19wZXJfY29yZSAtIDEp\n"
- "Owo+PiArICAgICAgICBlbHNlCj4+ICsgICAgICAgICAgICBuICs9IHNucHJpbnRmKHNkYXRhLT5s\n"
- "YWJlbCArIG4sCj4+ICsgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNkYXRhLT5sYWJlbCkg\n"
- "LSBuLCAiIHBoeSVkIiwgaWQpOwo+PiArICAgIH0KPj4gKwo+PiArICAgIC8qCj4+ICsgICAgICog\n"
- "TWVtYnVmZmVyIHByZXR0eSBwcmludAo+PiArICAgICAqLwo+PiArICAgIGlmICghb2ZfcHJvcGVy\n"
- "dHlfcmVhZF91MzIobnAsICJpYm0sY2hpcC1pZCIsICZpZCkpCj4+ICsgICAgICAgIG4gKz0gc25w\n"
- "cmludGYoc2RhdGEtPmxhYmVsICsgbiwgc2l6ZW9mKHNkYXRhLT5sYWJlbCkgLSBuLAo+PiArICAg\n"
- "ICAgICAgICAgICAgICAgIiAlZCIsIGlkICYgMHhmZmZmKTsKPj4gICB9Cj4+Cj4+ICAgc3RhdGlj\n"
- "IGludCBnZXRfc2Vuc29yX2luZGV4X2F0dHIoY29uc3QgY2hhciAqbmFtZSwgdTMyICppbmRleCwK\n"
- "Pj4KPj4KPiAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f\n"
- "XwpsbS1zZW5zb3JzIG1haWxpbmcgbGlzdApsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCmh0dHA6\n"
- Ly9saXN0cy5sbS1zZW5zb3JzLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xtLXNlbnNvcnM
+ "On 04/08/2015 03:26 PM, Guenter Roeck wrote:\n"
+ "> On 04/08/2015 12:00 AM, C\303\251dric Le Goater wrote:\n"
+ ">> The new OPAL device tree adds a few properties which can be used to add\n"
+ ">> extra information on the sensor label.\n"
+ ">>\n"
+ ">> In the case of a cpu core sensor, the firmware exposes the physical\n"
+ ">> identifier of the core in the \"ibm,pir\" property. The driver\n"
+ ">> translates this identifier in a linux cpu number and prints out a\n"
+ ">> range corresponding to the hardware threads of the core (as they\n"
+ ">> share the same sensor).\n"
+ ">>\n"
+ ">> The numbering gives a hint on the localization of the core in the\n"
+ ">> system (which socket, which chip).\n"
+ ">>\n"
+ ">> Signed-off-by: C\303\251dric Le Goater <clg@fr.ibm.com>\n"
+ ">> ---\n"
+ ">>\n"
+ ">>   Changes since v2:\n"
+ ">>\n"
+ ">>   - fix bogus logical cpu retrieval\n"
+ ">>   - use 'threads_per_core' to print out cpu range\n"
+ ">>\n"
+ ">>   Changes since v1:\n"
+ ">>\n"
+ ">>   - check cpu validity before printing out the attribute label.\n"
+ ">>     if invalid, use a \"phy\" prefix to distinguish a linux cpu\n"
+ ">>     number from a physical cpu number.\n"
+ ">>\n"
+ ">>   drivers/hwmon/ibmpowernv.c |   43 +++++++++++++++++++++++++++++++++++++++++++\n"
+ ">>   1 file changed, 43 insertions(+)\n"
+ ">>\n"
+ ">> Index: linux.git/drivers/hwmon/ibmpowernv.c\n"
+ ">> ===================================================================\n"
+ ">> --- linux.git.orig/drivers/hwmon/ibmpowernv.c\n"
+ ">> +++ linux.git/drivers/hwmon/ibmpowernv.c\n"
+ ">> @@ -30,6 +30,7 @@\n"
+ ">>   #include <linux/platform_device.h>\n"
+ ">>   #include <asm/opal.h>\n"
+ ">>   #include <linux/err.h>\n"
+ ">> +#include <asm/cputhreads.h>\n"
+ ">>\n"
+ ">>   #define MAX_ATTR_LEN    32\n"
+ ">>   #define MAX_LABEL_LEN    64\n"
+ ">> @@ -110,12 +111,54 @@ static ssize_t show_label(struct device\n"
+ ">>       return sprintf(buf, \"%s\\n\", sdata->label);\n"
+ ">>   }\n"
+ ">>\n"
+ ">> +static int __init get_logical_cpu(unsigned int hwcpu)\n"
+ ">> +{\n"
+ ">> +    int cpu;\n"
+ ">> +\n"
+ ">> +    for_each_possible_cpu(cpu)\n"
+ ">> +        if (get_hard_smp_processor_id(cpu) == hwcpu)\n"
+ ">> +            return cpu;\n"
+ ">> +\n"
+ ">> +    pr_err(\"%s: could not find a cpu with physical id 0x%x\\n\",\n"
+ ">> +           __func__, hwcpu);\n"
+ "> \n"
+ "> I like moving this into a function, but I really dislike this error\n"
+ "> message. If the devicetree data is wrong/bad, the log and the console\n"
+ "> will be clogged with that message. And the user will not be able\n"
+ "> to do anything about it.\n"
+ "\n"
+ "yes. It is not super useful anyway and it is redundant with the \"phy\" \n"
+ "prefix below. Do you want me to kill it in a v4 ? \n"
+ "\n"
+ "Thanks,\n"
+ "\n"
+ "C. \n"
+ "\n"
+ "> \n"
+ "> Guenter\n"
+ "> \n"
+ ">> +    return -ENOENT;\n"
+ ">> +}\n"
+ ">> +\n"
+ ">>   static void __init make_sensor_label(struct device_node *np,\n"
+ ">>               struct sensor_data *sdata, const char *label)\n"
+ ">>   {\n"
+ ">> +    u32 id;\n"
+ ">>       size_t n;\n"
+ ">>\n"
+ ">>       n = snprintf(sdata->label, sizeof(sdata->label), \"%s\", label);\n"
+ ">> +\n"
+ ">> +    /*\n"
+ ">> +     * Core temp pretty print\n"
+ ">> +     */\n"
+ ">> +    if (!of_property_read_u32(np, \"ibm,pir\", &id)) {\n"
+ ">> +        int cpuid = get_logical_cpu(id);\n"
+ ">> +\n"
+ ">> +        if (cpuid >= 0)\n"
+ ">> +            /*\n"
+ ">> +             * The digital thermal sensors are associated\n"
+ ">> +             * with a core. Let's print out the range of\n"
+ ">> +             * cpu ids corresponding to the hardware\n"
+ ">> +             * threads of the core.\n"
+ ">> +             */\n"
+ ">> +            n += snprintf(sdata->label + n,\n"
+ ">> +                      sizeof(sdata->label) - n, \" %d-%d\",\n"
+ ">> +                      cpuid, cpuid + threads_per_core - 1);\n"
+ ">> +        else\n"
+ ">> +            n += snprintf(sdata->label + n,\n"
+ ">> +                      sizeof(sdata->label) - n, \" phy%d\", id);\n"
+ ">> +    }\n"
+ ">> +\n"
+ ">> +    /*\n"
+ ">> +     * Membuffer pretty print\n"
+ ">> +     */\n"
+ ">> +    if (!of_property_read_u32(np, \"ibm,chip-id\", &id))\n"
+ ">> +        n += snprintf(sdata->label + n, sizeof(sdata->label) - n,\n"
+ ">> +                  \" %d\", id & 0xffff);\n"
+ ">>   }\n"
+ ">>\n"
+ ">>   static int get_sensor_index_attr(const char *name, u32 *index,\n"
+ ">>\n"
+ ">>\n"
+ >
 
-4904da75cb57096d3904c84818dff9a0a7f38a4a3d3646c58cedccdf58dd898e
+6c41945721da1ac51397846431fd6d11ccc04fa21fc4294164acbcfa0ca13bfb

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.