claw/lcs/netiucv: check s390dbf level before sprints
authorPeter Tiedemann <ptiedem@de.ibm.com>
Fri, 8 Feb 2008 12:09:05 +0000 (13:09 +0100)
committerJeff Garzik <jeff@garzik.org>
Mon, 11 Feb 2008 16:14:50 +0000 (11:14 -0500)
additional check of s390dbf level results in better performance
if the default low debugging level is active.

Signed-off-by: Peter Tiedemann <ptiedem@de.ibm.com>
Signed-off-by: Ursula Braun <braunu@de.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/s390/net/claw.h
drivers/s390/net/lcs.h
drivers/s390/net/netiucv.c

index 7fbd017..1a89d98 100644 (file)
@@ -114,11 +114,20 @@ do { \
        debug_event(claw_dbf_##name,level,(void*)(addr),len); \
 } while (0)
 
+/* Allow to sort out low debug levels early to avoid wasted sprints */
+static inline int claw_dbf_passes(debug_info_t *dbf_grp, int level)
+{
+       return (level <= dbf_grp->level);
+}
+
 #define CLAW_DBF_TEXT_(level,name,text...) \
-do {                                       \
-       sprintf(debug_buffer, text);  \
-               debug_text_event(claw_dbf_##name,level, debug_buffer);\
-} while (0)
+       do { \
+               if (claw_dbf_passes(claw_dbf_##name, level)) { \
+                       sprintf(debug_buffer, text); \
+                       debug_text_event(claw_dbf_##name, level, \
+                                               debug_buffer); \
+               } \
+       } while (0)
 
 /*******************************************************
 *  Define Control Blocks                               *
index 8976fb0..d58fea5 100644 (file)
@@ -16,11 +16,19 @@ do { \
        debug_event(lcs_dbf_##name,level,(void*)(addr),len); \
 } while (0)
 
+/* Allow to sort out low debug levels early to avoid wasted sprints */
+static inline int lcs_dbf_passes(debug_info_t *dbf_grp, int level)
+{
+       return (level <= dbf_grp->level);
+}
+
 #define LCS_DBF_TEXT_(level,name,text...) \
-do {                                       \
-       sprintf(debug_buffer, text);  \
-               debug_text_event(lcs_dbf_##name,level, debug_buffer);\
-} while (0)
+       do { \
+               if (lcs_dbf_passes(lcs_dbf_##name, level)) { \
+                       sprintf(debug_buffer, text); \
+                       debug_text_event(lcs_dbf_##name, level, debug_buffer); \
+               } \
+       } while (0)
 
 /**
  *     sysfs related stuff
index 42d701b..874a199 100644 (file)
@@ -97,12 +97,22 @@ MODULE_DESCRIPTION ("Linux for S/390 IUCV network driver");
 
 DECLARE_PER_CPU(char[256], iucv_dbf_txt_buf);
 
-#define IUCV_DBF_TEXT_(name,level,text...)                             \
-       do {                                                            \
-               char* iucv_dbf_txt_buf = get_cpu_var(iucv_dbf_txt_buf); \
-               sprintf(iucv_dbf_txt_buf, text);                        \
-               debug_text_event(iucv_dbf_##name,level,iucv_dbf_txt_buf); \
-               put_cpu_var(iucv_dbf_txt_buf);                          \
+/* Allow to sort out low debug levels early to avoid wasted sprints */
+static inline int iucv_dbf_passes(debug_info_t *dbf_grp, int level)
+{
+       return (level <= dbf_grp->level);
+}
+
+#define IUCV_DBF_TEXT_(name, level, text...) \
+       do { \
+               if (iucv_dbf_passes(iucv_dbf_##name, level)) { \
+                       char* iucv_dbf_txt_buf = \
+                                       get_cpu_var(iucv_dbf_txt_buf); \
+                       sprintf(iucv_dbf_txt_buf, text); \
+                       debug_text_event(iucv_dbf_##name, level, \
+                                               iucv_dbf_txt_buf); \
+                       put_cpu_var(iucv_dbf_txt_buf); \
+               } \
        } while (0)
 
 #define IUCV_DBF_SPRINTF(name,level,text...) \