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.