From: Heiko Carstens <[EMAIL PROTECTED]>

Emit a warning if cpu capability changes e.g. because the cpus are
overheating. The new cpu capability can be read via /proc/sysinfo.

Signed-off-by: Martin Schwidefsky <[EMAIL PROTECTED]>
Signed-off-by: Heiko Carstens <[EMAIL PROTECTED]>
---

 drivers/s390/char/Makefile       |    2 -
 drivers/s390/char/sclp.h         |    2 +
 drivers/s390/char/sclp_confmgm.c |   57 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 60 insertions(+), 1 deletion(-)

Index: linux-2.6/drivers/s390/char/Makefile
===================================================================
--- linux-2.6.orig/drivers/s390/char/Makefile
+++ linux-2.6/drivers/s390/char/Makefile
@@ -3,7 +3,7 @@
 #
 
 obj-y += ctrlchar.o keyboard.o defkeymap.o sclp.o sclp_rw.o sclp_quiesce.o \
-        sclp_info.o
+        sclp_info.o sclp_confmgm.o
 
 obj-$(CONFIG_TN3270) += raw3270.o
 obj-$(CONFIG_TN3270_CONSOLE) += con3270.o
Index: linux-2.6/drivers/s390/char/sclp_confmgm.c
===================================================================
--- /dev/null
+++ linux-2.6/drivers/s390/char/sclp_confmgm.c
@@ -0,0 +1,57 @@
+/*
+ *  drivers/s390/char/sclp_confmgm.c
+ *
+ *    Copyright IBM Corp. 2007
+ *    Author(s): Heiko Carstens <[EMAIL PROTECTED]>
+ */
+
+#include <linux/init.h>
+#include <linux/errno.h>
+#include "sclp.h"
+
+#define SCLP_CONFMGM_PRINT_HEADER      "sclp_confmgm: "
+
+struct conf_mgm_data {
+       u8 reserved;
+       u8 ev_qualifier;
+} __attribute__((packed));
+
+#define EV_QUAL_CAP_CHANGE     3
+
+static void sclp_conf_receiver_fn(struct evbuf_header *evbuf)
+{
+       struct conf_mgm_data *cdata;
+
+       cdata = (struct conf_mgm_data *)(evbuf + 1);
+       if (cdata->ev_qualifier == EV_QUAL_CAP_CHANGE)
+               /* Will be parsed. Don't change. */
+               printk(KERN_WARNING "sclp: CPU capability changed.\n");
+}
+
+static struct sclp_register sclp_conf_register =
+{
+       .receive_mask = EvTyp_ConfMgmData_Mask,
+       .receiver_fn  = sclp_conf_receiver_fn,
+};
+
+static int __init sclp_conf_init(void)
+{
+       int rc;
+
+       rc = sclp_register(&sclp_conf_register);
+       if (rc) {
+               printk(KERN_ERR SCLP_CONFMGM_PRINT_HEADER
+                      "failed to register (%d).\n", rc);
+               return rc;
+       }
+
+       if (!(sclp_conf_register.sclp_receive_mask & EvTyp_ConfMgmData_Mask)) {
+               printk(KERN_WARNING SCLP_CONFMGM_PRINT_HEADER
+                      "no configuration management.\n");
+               sclp_unregister(&sclp_conf_register);
+               rc = -ENOSYS;
+       }
+       return rc;
+}
+
+__initcall(sclp_conf_init);
Index: linux-2.6/drivers/s390/char/sclp.h
===================================================================
--- linux-2.6.orig/drivers/s390/char/sclp.h
+++ linux-2.6/drivers/s390/char/sclp.h
@@ -27,6 +27,7 @@
 #define EvTyp_CntlProgIdent    0x0B
 #define EvTyp_SigQuiesce       0x1D
 #define EvTyp_VT220Msg         0x1A
+#define EvTyp_ConfMgmData      0x04
 
 #define EvTyp_OpCmd_Mask       0x80000000
 #define EvTyp_Msg_Mask         0x40000000
@@ -36,6 +37,7 @@
 #define EvTyp_CtlProgIdent_Mask        0x00200000
 #define EvTyp_SigQuiesce_Mask  0x00000008
 #define EvTyp_VT220Msg_Mask    0x00000040
+#define EvTyp_ConfMgmData_Mask 0x10000000
 
 #define GnrlMsgFlgs_DOM                0x8000
 #define GnrlMsgFlgs_SndAlrm    0x4000

-- 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to