aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorJan Glauber <jang@linux.vnet.ibm.com>2012-09-11 07:42:06 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2012-09-26 09:45:18 -0400
commitd3feb481083636296f25daf36dbf44493fa7e1f2 (patch)
tree61df6077aba121ad8a73bd8d8dfef054f5fb1821 /drivers/s390
parentc0162b07b34ce8b33548f4b2658ec3133f960e71 (diff)
s390/qdio: fix truncated debug output of hex values
Calling debug_event the s390 debug feature only logs up to buf_size bytes of the debug view. If debug_event is called with more bytes than buf_size the additional data is ignored and not logged in the debug view. Use multiple calls to debug_event if the length exceeds buf_size. Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/cio/qdio_debug.h38
1 files changed, 25 insertions, 13 deletions
diff --git a/drivers/s390/cio/qdio_debug.h b/drivers/s390/cio/qdio_debug.h
index e1f646800ddb..7f8b973da298 100644
--- a/drivers/s390/cio/qdio_debug.h
+++ b/drivers/s390/cio/qdio_debug.h
@@ -37,10 +37,14 @@ static inline int qdio_dbf_passes(debug_info_t *dbf_grp, int level)
37 debug_text_event(qdio_dbf_setup, DBF_ERR, debug_buffer); \ 37 debug_text_event(qdio_dbf_setup, DBF_ERR, debug_buffer); \
38 } while (0) 38 } while (0)
39 39
40#define DBF_HEX(addr, len) \ 40static inline void DBF_HEX(void *addr, int len)
41 do { \ 41{
42 debug_event(qdio_dbf_setup, DBF_ERR, (void*)(addr), len); \ 42 while (len > 0) {
43 } while (0) 43 debug_event(qdio_dbf_setup, DBF_ERR, addr, len);
44 len -= qdio_dbf_setup->buf_size;
45 addr += qdio_dbf_setup->buf_size;
46 }
47}
44 48
45#define DBF_ERROR(text...) \ 49#define DBF_ERROR(text...) \
46 do { \ 50 do { \
@@ -49,11 +53,14 @@ static inline int qdio_dbf_passes(debug_info_t *dbf_grp, int level)
49 debug_text_event(qdio_dbf_error, DBF_ERR, debug_buffer); \ 53 debug_text_event(qdio_dbf_error, DBF_ERR, debug_buffer); \
50 } while (0) 54 } while (0)
51 55
52#define DBF_ERROR_HEX(addr, len) \ 56static inline void DBF_ERROR_HEX(void *addr, int len)
53 do { \ 57{
54 debug_event(qdio_dbf_error, DBF_ERR, (void*)(addr), len); \ 58 while (len > 0) {
55 } while (0) 59 debug_event(qdio_dbf_error, DBF_ERR, addr, len);
56 60 len -= qdio_dbf_error->buf_size;
61 addr += qdio_dbf_error->buf_size;
62 }
63}
57 64
58#define DBF_DEV_EVENT(level, device, text...) \ 65#define DBF_DEV_EVENT(level, device, text...) \
59 do { \ 66 do { \
@@ -64,10 +71,15 @@ static inline int qdio_dbf_passes(debug_info_t *dbf_grp, int level)
64 } \ 71 } \
65 } while (0) 72 } while (0)
66 73
67#define DBF_DEV_HEX(level, device, addr, len) \ 74static inline void DBF_DEV_HEX(struct qdio_irq *dev, void *addr,
68 do { \ 75 int len, int level)
69 debug_event(device->debug_area, level, (void*)(addr), len); \ 76{
70 } while (0) 77 while (len > 0) {
78 debug_event(dev->debug_area, level, addr, len);
79 len -= dev->debug_area->buf_size;
80 addr += dev->debug_area->buf_size;
81 }
82}
71 83
72void qdio_allocate_dbf(struct qdio_initialize *init_data, 84void qdio_allocate_dbf(struct qdio_initialize *init_data,
73 struct qdio_irq *irq_ptr); 85 struct qdio_irq *irq_ptr);