I've been debugging an issue where it looks like a threshold mask is
getting read in incorrectly.
I have the following raw SDR:
00000760 1f 00 51 01 3b 20 00 1d 07 01 23 c3 03 09 00 00 |..Q.; ....#.....|
00000770 00 00 03 00 00 06 00 00 02 00 00 00 00 00 02 00 |................|
00000780 1e 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 cb |................|
00000790 50 6f 77 65 72 20 4d 65 74 65 72 00 00 00 00 00 |Power Meter.....|
Byte 19 (Settable Threshold Mask) = 0x03
Byte 20 (Readable Threshold Mask) = 0x00
However, after parsing this sdr, ipmitool is seeing bits set in the Readable
Threshold Mask. I verified that w/ the following patch:
--- lib/ipmi_sdr.c.orig 2010-03-01 15:47:05.000000000 -0700
+++ lib/ipmi_sdr.c 2010-03-01 15:47:09.000000000 -0700
@@ -2472,6 +2472,8 @@ ipmi_sdr_print_sdr(struct ipmi_intf *int
case SDR_RECORD_TYPE_FULL_SENSOR:
sdrr->record.full =
(struct sdr_record_full_sensor *) rec;
+ printf("Readable Threshold Mask LC is %x\n",
+ sdrr->record.full->mask.type.threshold.read.lcr);
break;
case SDR_RECORD_TYPE_COMPACT_SENSOR:
sdrr->record.compact =
Which outputs "Readable Threshold Mask LC is 1" for the sensor in question.
This seems to be related to the use of uint16_t as the type, though I can't
put my finger on exactly why. The patch below appears to fix it for me.
fyi, my patch basically looks like a revert of this one:
http://bit.ly/c539td
---
include/ipmitool/ipmi_sdr.h | 75 +++++++++++++++++++-----------------------
1 files changed, 34 insertions(+), 41 deletions(-)
diff --git a/include/ipmitool/ipmi_sdr.h b/include/ipmitool/ipmi_sdr.h
index f84700e..f824dd4 100644
--- a/include/ipmitool/ipmi_sdr.h
+++ b/include/ipmitool/ipmi_sdr.h
@@ -232,52 +232,45 @@ struct sdr_record_mask {
uint16_t status_unr:1;
uint16_t reserved_2:1;
#endif
- union {
+#if WORDS_BIGENDIAN
struct {
-#if WORDS_BIGENDIAN /* settable threshold mask */
- uint16_t reserved:2;
- uint16_t unr:1;
- uint16_t ucr:1;
- uint16_t unc:1;
- uint16_t lnr:1;
- uint16_t lcr:1;
- uint16_t lnc:1;
- /* padding lower 8 bits */
- uint16_t readable:8;
-#else
- uint16_t readable:8;
- uint16_t lnc:1;
- uint16_t lcr:1;
- uint16_t lnr:1;
- uint16_t unc:1;
- uint16_t ucr:1;
- uint16_t unr:1;
- uint16_t reserved:2;
-#endif
+ uint8_t reserved:2;
+ uint8_t unr:1;
+ uint8_t ucr:1;
+ uint8_t unc:1;
+ uint8_t lnr:1;
+ uint8_t lcr:1;
+ uint8_t lnc:1;
} set;
struct {
-#if WORDS_BIGENDIAN /* readable threshold mask */
- /* padding upper 8 bits */
- uint16_t settable:8;
- uint16_t reserved:2;
- uint16_t unr:1;
- uint16_t ucr:1;
- uint16_t unc:1;
- uint16_t lnr:1;
- uint16_t lcr:1;
- uint16_t lnc:1;
+ uint8_t reserved:2;
+ uint8_t unr:1;
+ uint8_t ucr:1;
+ uint8_t unc:1;
+ uint8_t lnr:1;
+ uint8_t lcr:1;
+ uint8_t lnc:1;
+ } read;
#else
- uint16_t lnc:1;
- uint16_t lcr:1;
- uint16_t lnr:1;
- uint16_t unc:1;
- uint16_t ucr:1;
- uint16_t unr:1;
- uint16_t reserved:2;
- uint16_t settable:8;
-#endif
+ struct {
+ uint8_t lnc:1;
+ uint8_t lcr:1;
+ uint8_t lnr:1;
+ uint8_t unc:1;
+ uint8_t ucr:1;
+ uint8_t unr:1;
+ uint8_t reserved:2;
+ } set;
+ struct {
+ uint8_t lnc:1;
+ uint8_t lcr:1;
+ uint8_t lnr:1;
+ uint8_t unc:1;
+ uint8_t ucr:1;
+ uint8_t unr:1;
+ uint8_t reserved:2;
} read;
- };
+#endif
} threshold;
} type;
} __attribute__ ((packed));
--
1.5.6.5
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Ipmitool-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ipmitool-devel