diff -ruN linux-2.4.19.SuSE.orig/Documentation/s390/s390dbf.txt linux-2.4.19.SuSE/Documentation/s390/s390dbf.txt --- linux-2.4.19.SuSE.orig/Documentation/s390/s390dbf.txt 2001-10-11 11:04:57.000000000 -0500 +++ linux-2.4.19.SuSE/Documentation/s390/s390dbf.txt 2003-07-24 02:36:43.000000000 -0500 @@ -168,6 +168,20 @@ Return Value: Address of written debug entry +Description: writes debug entry with processed string and varargs to + active debug area (if level $<=$ actual debug level). + +--------------------------------------------------------------------------- +debug_entry_t* debug_unsafe_sprintf_event (debug_info_t * id, int level, + char* string,...); + +Parameter: id: handle for debug log + level: debug level + string: format string for debug entry + ...: varargs used as in sprintf() + +Return Value: Address of written debug entry + Description: writes debug entry with format string and varargs (longs) to active debug area (if level $<=$ actual debug level). floats and long long datatypes cannot be used as varargs. @@ -227,6 +241,21 @@ Return Value: Address of written debug entry +Description: writes debug entry with processed string and varargs to + active debug area (if level $<=$ actual debug level) and + switches to next debug area. + +--------------------------------------------------------------------------- +debug_entry_t* debug_unsafe_sprintf_exception (debug_info_t * id, int level, + char* string,...); + +Parameter: id: handle for debug log + level: debug level + string: format string for debug entry + ...: varargs used as in sprintf() + +Return Value: Address of written debug entry + Description: writes debug entry with format string and varargs (longs) to active debug area (if level $<=$ actual debug level) and switches to next debug area. diff -ruN linux-2.4.19.SuSE.orig/arch/s390/kernel/debug.c linux-2.4.19.SuSE/arch/s390/kernel/debug.c --- linux-2.4.19.SuSE.orig/arch/s390/kernel/debug.c 2003-06-05 16:45:29.000000000 -0500 +++ linux-2.4.19.SuSE/arch/s390/kernel/debug.c 2003-07-24 04:09:36.000000000 -0500 @@ -856,6 +856,72 @@ int level,char *string,...) { va_list ap; + int alloc_size,len; + debug_sprintf_entry *curr_event; + debug_entry_t *retval = NULL; + char buf[1]; + + if((!id) || (level > id->level)) + return NULL; + else { + va_start(ap,string); + len=vsnprintf(buf,0,string,ap)+1; + alloc_size=len+sizeof(debug_sprintf_entry); + va_end(ap); + curr_event=alloca(alloc_size); + + if(curr_event){ + va_start(ap,string); + vsnprintf((char *)&curr_event->args[0],len,string,ap); + va_end(ap); + curr_event->string = (char *)-1; + retval=debug_common(id,level, curr_event,alloc_size,0); + } + return retval; + } +} + +/* + * debug_sprintf_exception: + */ + +debug_entry_t *debug_sprintf_exception(debug_info_t* id, + int level,char *string,...) +{ + va_list ap; + int alloc_size,len; + debug_sprintf_entry *curr_event; + debug_entry_t *retval = NULL; + char buf[1]; + + if((!id) || (level > id->level)) + return NULL; + else { + va_start(ap,string); + len=vsnprintf(buf,0,string,ap)+1; + alloc_size=len+sizeof(debug_sprintf_entry); + va_end(ap); + curr_event=alloca(alloc_size); + + if(curr_event){ + va_start(ap,string); + vsnprintf((char *)&curr_event->args[0],len,string,ap); + va_end(ap); + curr_event->string = (char *)-1; + retval=debug_common(id,level, curr_event,alloc_size,1); + } + return retval; + } +} + +/* + * debug_unsafe_sprintf_event: + */ + +debug_entry_t *debug_unsafe_sprintf_event(debug_info_t* id, + int level,char *string,...) +{ + va_list ap; int numargs,alloc_size,idx; debug_sprintf_entry *curr_event; debug_entry_t *retval = NULL; @@ -880,11 +946,11 @@ } /* - * debug_sprintf_exception: + * debug_unsafe_sprintf_exception: */ -debug_entry_t *debug_sprintf_exception(debug_info_t* id, - int level,char *string,...) +debug_entry_t *debug_unsafe_sprintf_exception(debug_info_t* id, + int level,char *string,...) { va_list ap; int numargs,alloc_size,idx; @@ -1230,6 +1296,13 @@ int num_longs, num_used_args = 0,i, rc = 0; int index[DEBUG_SPRINTF_MAX_ARGS]; + /* check for preprocessed string */ + if(curr_event->string == (char *)-1) { + strcpy(out_buf, (char *)&curr_event->args[0]); + rc = strlen(out_buf); + goto out; + } + /* count of longs fit into one entry */ num_longs = id->buf_size / sizeof(long); @@ -1309,3 +1382,5 @@ EXPORT_SYMBOL(debug_sprintf_view); EXPORT_SYMBOL(debug_sprintf_exception); EXPORT_SYMBOL(debug_sprintf_event); +EXPORT_SYMBOL(debug_unsafe_sprintf_exception); +EXPORT_SYMBOL(debug_unsafe_sprintf_event); diff -ruN linux-2.4.19.SuSE.orig/arch/s390x/kernel/debug.c linux-2.4.19.SuSE/arch/s390x/kernel/debug.c --- linux-2.4.19.SuSE.orig/arch/s390x/kernel/debug.c 2003-06-05 16:45:29.000000000 -0500 +++ linux-2.4.19.SuSE/arch/s390x/kernel/debug.c 2003-07-24 04:08:31.000000000 -0500 @@ -856,6 +856,72 @@ int level,char *string,...) { va_list ap; + int alloc_size,len; + debug_sprintf_entry *curr_event; + debug_entry_t *retval = NULL; + char buf[1]; + + if((!id) || (level > id->level)) + return NULL; + else { + va_start(ap,string); + len=vsnprintf(buf,0,string,ap)+1; + alloc_size=len+sizeof(debug_sprintf_entry); + va_end(ap); + curr_event=alloca(alloc_size); + + if(curr_event){ + va_start(ap,string); + vsnprintf((char *)&curr_event->args[0],len,string,ap); + va_end(ap); + curr_event->string = (char *)-1; + retval=debug_common(id,level, curr_event,alloc_size,0); + } + return retval; + } +} + +/* + * debug_sprintf_exception: + */ + +debug_entry_t *debug_sprintf_exception(debug_info_t* id, + int level,char *string,...) +{ + va_list ap; + int alloc_size,len; + debug_sprintf_entry *curr_event; + debug_entry_t *retval = NULL; + char buf[1]; + + if((!id) || (level > id->level)) + return NULL; + else { + va_start(ap,string); + len=vsnprintf(buf,0,string,ap)+1; + alloc_size=len+sizeof(debug_sprintf_entry); + va_end(ap); + curr_event=alloca(alloc_size); + + if(curr_event){ + va_start(ap,string); + vsnprintf((char *)&curr_event->args[0],len,string,ap); + va_end(ap); + curr_event->string = (char *)-1; + retval=debug_common(id,level, curr_event,alloc_size,1); + } + return retval; + } +} + +/* + * debug_unsafe_sprintf_event: + */ + +debug_entry_t *debug_unsafe_sprintf_event(debug_info_t* id, + int level,char *string,...) +{ + va_list ap; int numargs,alloc_size,idx; debug_sprintf_entry *curr_event; debug_entry_t *retval = NULL; @@ -880,11 +946,11 @@ } /* - * debug_sprintf_exception: + * debug_unsafe_sprintf_exception: */ -debug_entry_t *debug_sprintf_exception(debug_info_t* id, - int level,char *string,...) +debug_entry_t *debug_unsafe_sprintf_exception(debug_info_t* id, + int level,char *string,...) { va_list ap; int numargs,alloc_size,idx; @@ -1230,6 +1296,13 @@ int num_longs, num_used_args = 0,i, rc = 0; int index[DEBUG_SPRINTF_MAX_ARGS]; + /* check for preprocessed string */ + if(curr_event->string == (char *)-1) { + strcpy(out_buf, (char *)&curr_event->args[0]); + rc = strlen(out_buf); + goto out; + } + /* count of longs fit into one entry */ num_longs = id->buf_size / sizeof(long); @@ -1309,3 +1382,5 @@ EXPORT_SYMBOL(debug_sprintf_view); EXPORT_SYMBOL(debug_sprintf_exception); EXPORT_SYMBOL(debug_sprintf_event); +EXPORT_SYMBOL(debug_unsafe_sprintf_exception); +EXPORT_SYMBOL(debug_unsafe_sprintf_event); diff -ruN linux-2.4.19.SuSE.orig/drivers/s390/block/dasd.c linux-2.4.19.SuSE/drivers/s390/block/dasd.c --- linux-2.4.19.SuSE.orig/drivers/s390/block/dasd.c 2003-06-05 16:45:37.000000000 -0500 +++ linux-2.4.19.SuSE/drivers/s390/block/dasd.c 2003-07-24 02:36:43.000000000 -0500 @@ -3903,7 +3911,7 @@ device->debug_area = debug_register (device->name, 0, /* size of debug area */ 2, /* number of areas */ - 8 * sizeof (long)); + 128); debug_register_view (device->debug_area, &debug_sprintf_view); @@ -5172,7 +5248,7 @@ dasd_debug_area = debug_register (DASD_NAME, 0, /* size of debug area */ 2, /* number of areas */ - 8 * sizeof (long)); + 128); debug_register_view (dasd_debug_area, &debug_sprintf_view); diff -ruN linux-2.4.19.SuSE.orig/drivers/s390/char/tape.c linux-2.4.19.SuSE/drivers/s390/char/tape.c --- linux-2.4.19.SuSE.orig/drivers/s390/char/tape.c 2003-06-05 16:45:29.000000000 -0500 +++ linux-2.4.19.SuSE/drivers/s390/char/tape.c 2003-07-24 02:38:14.000000000 -0500 @@ -1842,7 +1842,7 @@ tape_init_devregs(); #ifdef TAPE_DEBUG - tape_dbf_area = debug_register ( "tape", 1, 2, 3*sizeof(long)); + tape_dbf_area = debug_register ( "tape", 1, 2, 128); debug_register_view(tape_dbf_area,&debug_sprintf_view); tape_sprintf_event (tape_dbf_area,3,"begin init: ($Revision: 1.87.2.6 $)\n"); #endif /* TAPE_DEBUG */ diff -ruN linux-2.4.19.SuSE.orig/drivers/s390/char/tape3480.c linux-2.4.19.SuSE/drivers/s390/char/tape3480.c --- linux-2.4.19.SuSE.orig/drivers/s390/char/tape3480.c 2003-06-05 16:45:29.000000000 -0500 +++ linux-2.4.19.SuSE/drivers/s390/char/tape3480.c 2003-07-24 02:38:36.000000000 -0500 @@ -92,7 +92,7 @@ tape_discipline_t *disc; #ifdef TAPE_DEBUG #ifdef MODULE - tape_dbf_3480 = debug_register("tape3480", 1, 2, 3*sizeof(long)); + tape_dbf_3480 = debug_register("tape3480", 1, 2, 128); debug_register_view(tape_dbf_3480, &debug_sprintf_view); #endif /* MODULE */ #endif /* TAPE_DEBUG */ diff -ruN linux-2.4.19.SuSE.orig/drivers/s390/char/tape3490.c linux-2.4.19.SuSE/drivers/s390/char/tape3490.c --- linux-2.4.19.SuSE.orig/drivers/s390/char/tape3490.c 2003-06-05 16:45:29.000000000 -0500 +++ linux-2.4.19.SuSE/drivers/s390/char/tape3490.c 2003-07-24 02:38:45.000000000 -0500 @@ -93,7 +93,7 @@ tape_discipline_t *disc; #ifdef TAPE_DEBUG #ifdef MODULE - tape_dbf_3490 = debug_register("tape3490", 1, 2, 3*sizeof(long)); + tape_dbf_3490 = debug_register("tape3490", 1, 2, 128); debug_register_view(tape_dbf_3490, &debug_sprintf_view); #endif /* MODULE */ #endif /* TAPE_DEBUG */ diff -ruN linux-2.4.19.SuSE.orig/drivers/s390/net/lcs.c linux-2.4.19.SuSE/drivers/s390/net/lcs.c --- linux-2.4.19.SuSE.orig/drivers/s390/net/lcs.c 2003-06-05 16:45:26.000000000 -0500 +++ linux-2.4.19.SuSE/drivers/s390/net/lcs.c 2003-07-24 02:36:47.000000000 -0500 @@ -3640,7 +3640,7 @@ lcs_debug_register(void) { if (lcs_id == NULL) { - lcs_id = debug_register("lcs", 1, 16, 16 * sizeof (long)); + lcs_id = debug_register("lcs", 1, 16, 128); debug_register_view(lcs_id, &debug_sprintf_view); debug_set_level(lcs_id, 0); } diff -ruN linux-2.4.19.SuSE.orig/drivers/s390/s390io.c linux-2.4.19.SuSE/drivers/s390/s390io.c --- linux-2.4.19.SuSE.orig/drivers/s390/s390io.c 2003-06-05 16:45:36.000000000 -0500 +++ linux-2.4.19.SuSE/drivers/s390/s390io.c 2003-07-24 02:36:48.000000000 -0500 @@ -7855,7 +7855,7 @@ { int ret = 0; - cio_debug_msg_id = debug_register ("cio_msg", 4, 4, 16 * sizeof (long)); + cio_debug_msg_id = debug_register ("cio_msg", 4, 4, 128); if (cio_debug_msg_id != NULL) { debug_register_view (cio_debug_msg_id, &debug_sprintf_view); debug_set_level (cio_debug_msg_id, 6); @@ -7869,7 +7869,7 @@ } else { ret = -1; } - cio_debug_crw_id = debug_register ("cio_crw", 2, 4, 16 * sizeof (long)); + cio_debug_crw_id = debug_register ("cio_crw", 2, 4, 128); if (cio_debug_crw_id != NULL) { debug_register_view (cio_debug_crw_id, &debug_sprintf_view); debug_set_level (cio_debug_crw_id, 6); diff -ruN linux-2.4.19.SuSE.orig/include/asm-s390/debug.h linux-2.4.19.SuSE/include/asm-s390/debug.h --- linux-2.4.19.SuSE.orig/include/asm-s390/debug.h 2002-08-02 19:39:45.000000000 -0500 +++ linux-2.4.19.SuSE/include/asm-s390/debug.h 2003-07-24 02:36:48.000000000 -0500 @@ -162,6 +162,9 @@ extern debug_entry_t * debug_sprintf_event(debug_info_t* id,int level,char *string,...); +extern debug_entry_t * +debug_unsafe_sprintf_event(debug_info_t* id,int level,char *string,...); + extern inline debug_entry_t* debug_exception(debug_info_t* id, int level, void* data, int length) @@ -197,6 +200,9 @@ extern debug_entry_t * debug_sprintf_exception(debug_info_t* id,int level,char *string,...); +extern debug_entry_t * +debug_unsafe_sprintf_exception(debug_info_t* id,int level,char *string,...); + int debug_register_view(debug_info_t* id, struct debug_view* view); int debug_unregister_view(debug_info_t* id, struct debug_view* view); diff -ruN linux-2.4.19.SuSE.orig/include/asm-s390x/debug.h linux-2.4.19.SuSE/include/asm-s390x/debug.h --- linux-2.4.19.SuSE.orig/include/asm-s390x/debug.h 2002-08-02 19:39:45.000000000 -0500 +++ linux-2.4.19.SuSE/include/asm-s390x/debug.h 2003-07-24 02:36:48.000000000 -0500 @@ -162,6 +162,9 @@ extern debug_entry_t * debug_sprintf_event(debug_info_t* id,int level,char *string,...); +extern debug_entry_t * +debug_unsafe_sprintf_event(debug_info_t* id,int level,char *string,...); + extern inline debug_entry_t* debug_exception(debug_info_t* id, int level, void* data, int length) @@ -197,6 +200,9 @@ extern debug_entry_t * debug_sprintf_exception(debug_info_t* id,int level,char *string,...); +extern debug_entry_t * +debug_unsafe_sprintf_exception(debug_info_t* id,int level,char *string,...); + int debug_register_view(debug_info_t* id, struct debug_view* view); int debug_unregister_view(debug_info_t* id, struct debug_view* view);