]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/suse-2.6.27.39/patches.arch/s390-17-perf-15-zfcp-move-debug-data.patch
Fix oinkmaster patch.
[ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.arch / s390-17-perf-15-zfcp-move-debug-data.patch
CommitLineData
82094b55
AF
1From: Gerald Schaefer <geraldsc@de.ibm.com>
2Subject: [PATCH] zfcp: Move debug data from zfcp_data to own data structure
3References: bnc#532063,LTC#55526
4
5From: Christof Schmitt <christof.schmitt@de.ibm.com>
6
7The struct zfcp_adapter includes everything related to the debug
8traces. This introduces dependences between the definitions in
9zfcp_def.h and zfcp_dbf.h. Move all debug related data structures to a
10new data structure to break those dependencies and manage the debug
11data in zfcp_dbf.[hc].
12
13Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
14
15Acked-by: John Jolly <jjolly@suse.de>
16---
17
18 drivers/s390/scsi/zfcp_aux.c | 4
19 drivers/s390/scsi/zfcp_dbf.c | 217 ++++++++++++++++++++++++-------------------
20 drivers/s390/scsi/zfcp_dbf.h | 17 +++
21 drivers/s390/scsi/zfcp_def.h | 15 --
22 drivers/s390/scsi/zfcp_fsf.h | 3
23 5 files changed, 143 insertions(+), 113 deletions(-)
24
25Index: linux-sles11/drivers/s390/scsi/zfcp_aux.c
26===================================================================
27--- linux-sles11.orig/drivers/s390/scsi/zfcp_aux.c 2009-08-17 15:31:25.000000000 +0200
28+++ linux-sles11/drivers/s390/scsi/zfcp_aux.c 2009-08-17 15:31:35.000000000 +0200
29@@ -494,10 +494,6 @@
30
31 spin_lock_init(&adapter->req_list_lock);
32
33- spin_lock_init(&adapter->hba_dbf_lock);
34- spin_lock_init(&adapter->san_dbf_lock);
35- spin_lock_init(&adapter->scsi_dbf_lock);
36- spin_lock_init(&adapter->rec_dbf_lock);
37 spin_lock_init(&adapter->req_q_lock);
38 spin_lock_init(&adapter->qdio_stat_lock);
39
40Index: linux-sles11/drivers/s390/scsi/zfcp_dbf.c
41===================================================================
42--- linux-sles11.orig/drivers/s390/scsi/zfcp_dbf.c 2009-08-17 15:31:25.000000000 +0200
43+++ linux-sles11/drivers/s390/scsi/zfcp_dbf.c 2009-08-17 15:31:35.000000000 +0200
44@@ -3,13 +3,14 @@
45 *
46 * Debug traces for zfcp.
47 *
48- * Copyright IBM Corporation 2002, 2008
49+ * Copyright IBM Corporation 2002, 2009
50 */
51
52 #define KMSG_COMPONENT "zfcp"
53
54 #include <linux/ctype.h>
55 #include <asm/debug.h>
56+#include "zfcp_dbf.h"
57 #include "zfcp_ext.h"
58
59 static u32 dbfsize = 4;
60@@ -125,6 +126,7 @@
61 void zfcp_hba_dbf_event_fsf_response(struct zfcp_fsf_req *fsf_req)
62 {
63 struct zfcp_adapter *adapter = fsf_req->adapter;
64+ struct zfcp_dbf *dbf = adapter->dbf;
65 struct fsf_qtcb *qtcb = fsf_req->qtcb;
66 union fsf_prot_status_qual *prot_status_qual =
67 &qtcb->prefix.prot_status_qual;
68@@ -133,12 +135,12 @@
69 struct zfcp_port *port;
70 struct zfcp_unit *unit;
71 struct zfcp_send_els *send_els;
72- struct zfcp_hba_dbf_record *rec = &adapter->hba_dbf_buf;
73+ struct zfcp_hba_dbf_record *rec = &dbf->hba_dbf_buf;
74 struct zfcp_hba_dbf_record_response *response = &rec->u.response;
75 int level;
76 unsigned long flags;
77
78- spin_lock_irqsave(&adapter->hba_dbf_lock, flags);
79+ spin_lock_irqsave(&dbf->hba_dbf_lock, flags);
80 memset(rec, 0, sizeof(*rec));
81 strncpy(rec->tag, "resp", ZFCP_DBF_TAG_SIZE);
82
83@@ -223,7 +225,7 @@
84 break;
85 }
86
87- debug_event(adapter->hba_dbf, level, rec, sizeof(*rec));
88+ debug_event(dbf->hba_dbf, level, rec, sizeof(*rec));
89
90 /* have fcp channel microcode fixed to use as little as possible */
91 if (fsf_req->fsf_command != FSF_QTCB_FCP_CMND) {
92@@ -231,11 +233,11 @@
93 char *buf = (char *)qtcb + qtcb->header.log_start;
94 int len = qtcb->header.log_length;
95 for (; len && !buf[len - 1]; len--);
96- zfcp_dbf_hexdump(adapter->hba_dbf, rec, sizeof(*rec), level,
97- buf, len);
98+ zfcp_dbf_hexdump(dbf->hba_dbf, rec, sizeof(*rec), level, buf,
99+ len);
100 }
101
102- spin_unlock_irqrestore(&adapter->hba_dbf_lock, flags);
103+ spin_unlock_irqrestore(&dbf->hba_dbf_lock, flags);
104 }
105
106 /**
107@@ -247,10 +249,11 @@
108 void zfcp_hba_dbf_event_fsf_unsol(const char *tag, struct zfcp_adapter *adapter,
109 struct fsf_status_read_buffer *status_buffer)
110 {
111- struct zfcp_hba_dbf_record *rec = &adapter->hba_dbf_buf;
112+ struct zfcp_dbf *dbf = adapter->dbf;
113+ struct zfcp_hba_dbf_record *rec = &dbf->hba_dbf_buf;
114 unsigned long flags;
115
116- spin_lock_irqsave(&adapter->hba_dbf_lock, flags);
117+ spin_lock_irqsave(&dbf->hba_dbf_lock, flags);
118 memset(rec, 0, sizeof(*rec));
119 strncpy(rec->tag, "stat", ZFCP_DBF_TAG_SIZE);
120 strncpy(rec->tag2, tag, ZFCP_DBF_TAG_SIZE);
121@@ -292,8 +295,8 @@
122 &status_buffer->payload, rec->u.status.payload_size);
123 }
124
125- debug_event(adapter->hba_dbf, 2, rec, sizeof(*rec));
126- spin_unlock_irqrestore(&adapter->hba_dbf_lock, flags);
127+ debug_event(dbf->hba_dbf, 2, rec, sizeof(*rec));
128+ spin_unlock_irqrestore(&dbf->hba_dbf_lock, flags);
129 }
130
131 /**
132@@ -307,17 +310,18 @@
133 unsigned int qdio_error, int sbal_index,
134 int sbal_count)
135 {
136- struct zfcp_hba_dbf_record *r = &adapter->hba_dbf_buf;
137+ struct zfcp_dbf *dbf = adapter->dbf;
138+ struct zfcp_hba_dbf_record *r = &dbf->hba_dbf_buf;
139 unsigned long flags;
140
141- spin_lock_irqsave(&adapter->hba_dbf_lock, flags);
142+ spin_lock_irqsave(&dbf->hba_dbf_lock, flags);
143 memset(r, 0, sizeof(*r));
144 strncpy(r->tag, "qdio", ZFCP_DBF_TAG_SIZE);
145 r->u.qdio.qdio_error = qdio_error;
146 r->u.qdio.sbal_index = sbal_index;
147 r->u.qdio.sbal_count = sbal_count;
148- debug_event(adapter->hba_dbf, 0, r, sizeof(*r));
149- spin_unlock_irqrestore(&adapter->hba_dbf_lock, flags);
150+ debug_event(dbf->hba_dbf, 0, r, sizeof(*r));
151+ spin_unlock_irqrestore(&dbf->hba_dbf_lock, flags);
152 }
153
154 /**
155@@ -328,17 +332,18 @@
156 void zfcp_hba_dbf_event_berr(struct zfcp_adapter *adapter,
157 struct zfcp_fsf_req *req)
158 {
159- struct zfcp_hba_dbf_record *r = &adapter->hba_dbf_buf;
160+ struct zfcp_dbf *dbf = adapter->dbf;
161+ struct zfcp_hba_dbf_record *r = &dbf->hba_dbf_buf;
162 struct fsf_status_read_buffer *sr_buf = req->data;
163 struct fsf_bit_error_payload *err = &sr_buf->payload.bit_error;
164 unsigned long flags;
165
166- spin_lock_irqsave(&adapter->hba_dbf_lock, flags);
167+ spin_lock_irqsave(&dbf->hba_dbf_lock, flags);
168 memset(r, 0, sizeof(*r));
169 strncpy(r->tag, "berr", ZFCP_DBF_TAG_SIZE);
170 memcpy(&r->u.berr, err, sizeof(struct fsf_bit_error_payload));
171- debug_event(adapter->hba_dbf, 0, r, sizeof(*r));
172- spin_unlock_irqrestore(&adapter->hba_dbf_lock, flags);
173+ debug_event(dbf->hba_dbf, 0, r, sizeof(*r));
174+ spin_unlock_irqrestore(&dbf->hba_dbf_lock, flags);
175 }
176 static void zfcp_hba_dbf_view_response(char **p,
177 struct zfcp_hba_dbf_record_response *r)
178@@ -707,7 +712,8 @@
179 */
180 void zfcp_rec_dbf_event_thread(u8 id2, struct zfcp_adapter *adapter)
181 {
182- struct zfcp_rec_dbf_record *r = &adapter->rec_dbf_buf;
183+ struct zfcp_dbf *dbf = adapter->dbf;
184+ struct zfcp_rec_dbf_record *r = &dbf->rec_dbf_buf;
185 unsigned long flags = 0;
186 struct list_head *entry;
187 unsigned ready = 0, running = 0, total;
188@@ -718,15 +724,15 @@
189 running++;
190 total = adapter->erp_total_count;
191
192- spin_lock_irqsave(&adapter->rec_dbf_lock, flags);
193+ spin_lock_irqsave(&dbf->rec_dbf_lock, flags);
194 memset(r, 0, sizeof(*r));
195 r->id = ZFCP_REC_DBF_ID_THREAD;
196 r->id2 = id2;
197 r->u.thread.total = total;
198 r->u.thread.ready = ready;
199 r->u.thread.running = running;
200- debug_event(adapter->rec_dbf, 6, r, sizeof(*r));
201- spin_unlock_irqrestore(&adapter->rec_dbf_lock, flags);
202+ debug_event(dbf->rec_dbf, 6, r, sizeof(*r));
203+ spin_unlock_irqrestore(&dbf->rec_dbf_lock, flags);
204 }
205
206 /**
207@@ -749,10 +755,11 @@
208 atomic_t *status, atomic_t *erp_count,
209 u64 wwpn, u32 d_id, u64 fcp_lun)
210 {
211- struct zfcp_rec_dbf_record *r = &adapter->rec_dbf_buf;
212+ struct zfcp_dbf *dbf = adapter->dbf;
213+ struct zfcp_rec_dbf_record *r = &dbf->rec_dbf_buf;
214 unsigned long flags;
215
216- spin_lock_irqsave(&adapter->rec_dbf_lock, flags);
217+ spin_lock_irqsave(&dbf->rec_dbf_lock, flags);
218 memset(r, 0, sizeof(*r));
219 r->id = ZFCP_REC_DBF_ID_TARGET;
220 r->id2 = id2;
221@@ -762,8 +769,8 @@
222 r->u.target.d_id = d_id;
223 r->u.target.fcp_lun = fcp_lun;
224 r->u.target.erp_count = atomic_read(erp_count);
225- debug_event(adapter->rec_dbf, 3, r, sizeof(*r));
226- spin_unlock_irqrestore(&adapter->rec_dbf_lock, flags);
227+ debug_event(dbf->rec_dbf, 3, r, sizeof(*r));
228+ spin_unlock_irqrestore(&dbf->rec_dbf_lock, flags);
229 }
230
231 /**
232@@ -824,10 +831,11 @@
233 void *action, struct zfcp_adapter *adapter,
234 struct zfcp_port *port, struct zfcp_unit *unit)
235 {
236- struct zfcp_rec_dbf_record *r = &adapter->rec_dbf_buf;
237+ struct zfcp_dbf *dbf = adapter->dbf;
238+ struct zfcp_rec_dbf_record *r = &dbf->rec_dbf_buf;
239 unsigned long flags;
240
241- spin_lock_irqsave(&adapter->rec_dbf_lock, flags);
242+ spin_lock_irqsave(&dbf->rec_dbf_lock, flags);
243 memset(r, 0, sizeof(*r));
244 r->id = ZFCP_REC_DBF_ID_TRIGGER;
245 r->id2 = id2;
246@@ -844,8 +852,8 @@
247 r->u.trigger.us = atomic_read(&unit->status);
248 r->u.trigger.fcp_lun = unit->fcp_lun;
249 }
250- debug_event(adapter->rec_dbf, action ? 1 : 4, r, sizeof(*r));
251- spin_unlock_irqrestore(&adapter->rec_dbf_lock, flags);
252+ debug_event(dbf->rec_dbf, action ? 1 : 4, r, sizeof(*r));
253+ spin_unlock_irqrestore(&dbf->rec_dbf_lock, flags);
254 }
255
256 /**
257@@ -856,10 +864,11 @@
258 void zfcp_rec_dbf_event_action(u8 id2, struct zfcp_erp_action *erp_action)
259 {
260 struct zfcp_adapter *adapter = erp_action->adapter;
261- struct zfcp_rec_dbf_record *r = &adapter->rec_dbf_buf;
262+ struct zfcp_dbf *dbf = adapter->dbf;
263+ struct zfcp_rec_dbf_record *r = &dbf->rec_dbf_buf;
264 unsigned long flags;
265
266- spin_lock_irqsave(&adapter->rec_dbf_lock, flags);
267+ spin_lock_irqsave(&dbf->rec_dbf_lock, flags);
268 memset(r, 0, sizeof(*r));
269 r->id = ZFCP_REC_DBF_ID_ACTION;
270 r->id2 = id2;
271@@ -867,8 +876,8 @@
272 r->u.action.status = erp_action->status;
273 r->u.action.step = erp_action->step;
274 r->u.action.fsf_req = (unsigned long)erp_action->fsf_req;
275- debug_event(adapter->rec_dbf, 5, r, sizeof(*r));
276- spin_unlock_irqrestore(&adapter->rec_dbf_lock, flags);
277+ debug_event(dbf->rec_dbf, 5, r, sizeof(*r));
278+ spin_unlock_irqrestore(&dbf->rec_dbf_lock, flags);
279 }
280
281 /**
282@@ -880,13 +889,14 @@
283 struct zfcp_send_ct *ct = (struct zfcp_send_ct *)fsf_req->data;
284 struct zfcp_wka_port *wka_port = ct->wka_port;
285 struct zfcp_adapter *adapter = wka_port->adapter;
286+ struct zfcp_dbf *dbf = adapter->dbf;
287 struct ct_hdr *hdr = sg_virt(ct->req);
288- struct zfcp_san_dbf_record *r = &adapter->san_dbf_buf;
289+ struct zfcp_san_dbf_record *r = &dbf->san_dbf_buf;
290 struct zfcp_san_dbf_record_ct_request *oct = &r->u.ct_req;
291 int level = 3;
292 unsigned long flags;
293
294- spin_lock_irqsave(&adapter->san_dbf_lock, flags);
295+ spin_lock_irqsave(&dbf->san_dbf_lock, flags);
296 memset(r, 0, sizeof(*r));
297 strncpy(r->tag, "octc", ZFCP_DBF_TAG_SIZE);
298 r->fsf_reqid = (unsigned long)fsf_req;
299@@ -901,10 +911,10 @@
300 oct->max_res_size = hdr->max_res_size;
301 oct->len = min((int)ct->req->length - (int)sizeof(struct ct_hdr),
302 ZFCP_DBF_SAN_MAX_PAYLOAD);
303- debug_event(adapter->san_dbf, level, r, sizeof(*r));
304- zfcp_dbf_hexdump(adapter->san_dbf, r, sizeof(*r), level,
305+ debug_event(dbf->san_dbf, level, r, sizeof(*r));
306+ zfcp_dbf_hexdump(dbf->san_dbf, r, sizeof(*r), level,
307 (void *)hdr + sizeof(struct ct_hdr), oct->len);
308- spin_unlock_irqrestore(&adapter->san_dbf_lock, flags);
309+ spin_unlock_irqrestore(&dbf->san_dbf_lock, flags);
310 }
311
312 /**
313@@ -917,12 +927,13 @@
314 struct zfcp_wka_port *wka_port = ct->wka_port;
315 struct zfcp_adapter *adapter = wka_port->adapter;
316 struct ct_hdr *hdr = sg_virt(ct->resp);
317- struct zfcp_san_dbf_record *r = &adapter->san_dbf_buf;
318+ struct zfcp_dbf *dbf = adapter->dbf;
319+ struct zfcp_san_dbf_record *r = &dbf->san_dbf_buf;
320 struct zfcp_san_dbf_record_ct_response *rct = &r->u.ct_resp;
321 int level = 3;
322 unsigned long flags;
323
324- spin_lock_irqsave(&adapter->san_dbf_lock, flags);
325+ spin_lock_irqsave(&dbf->san_dbf_lock, flags);
326 memset(r, 0, sizeof(*r));
327 strncpy(r->tag, "rctc", ZFCP_DBF_TAG_SIZE);
328 r->fsf_reqid = (unsigned long)fsf_req;
329@@ -937,10 +948,10 @@
330 rct->max_res_size = hdr->max_res_size;
331 rct->len = min((int)ct->resp->length - (int)sizeof(struct ct_hdr),
332 ZFCP_DBF_SAN_MAX_PAYLOAD);
333- debug_event(adapter->san_dbf, level, r, sizeof(*r));
334- zfcp_dbf_hexdump(adapter->san_dbf, r, sizeof(*r), level,
335+ debug_event(dbf->san_dbf, level, r, sizeof(*r));
336+ zfcp_dbf_hexdump(dbf->san_dbf, r, sizeof(*r), level,
337 (void *)hdr + sizeof(struct ct_hdr), rct->len);
338- spin_unlock_irqrestore(&adapter->san_dbf_lock, flags);
339+ spin_unlock_irqrestore(&dbf->san_dbf_lock, flags);
340 }
341
342 static void zfcp_san_dbf_event_els(const char *tag, int level,
343@@ -949,10 +960,11 @@
344 int buflen)
345 {
346 struct zfcp_adapter *adapter = fsf_req->adapter;
347- struct zfcp_san_dbf_record *rec = &adapter->san_dbf_buf;
348+ struct zfcp_dbf *dbf = adapter->dbf;
349+ struct zfcp_san_dbf_record *rec = &dbf->san_dbf_buf;
350 unsigned long flags;
351
352- spin_lock_irqsave(&adapter->san_dbf_lock, flags);
353+ spin_lock_irqsave(&dbf->san_dbf_lock, flags);
354 memset(rec, 0, sizeof(*rec));
355 strncpy(rec->tag, tag, ZFCP_DBF_TAG_SIZE);
356 rec->fsf_reqid = (unsigned long)fsf_req;
357@@ -960,10 +972,10 @@
358 rec->s_id = s_id;
359 rec->d_id = d_id;
360 rec->u.els.ls_code = ls_code;
361- debug_event(adapter->san_dbf, level, rec, sizeof(*rec));
362- zfcp_dbf_hexdump(adapter->san_dbf, rec, sizeof(*rec), level,
363+ debug_event(dbf->san_dbf, level, rec, sizeof(*rec));
364+ zfcp_dbf_hexdump(dbf->san_dbf, rec, sizeof(*rec), level,
365 buffer, min(buflen, ZFCP_DBF_SAN_MAX_PAYLOAD));
366- spin_unlock_irqrestore(&adapter->san_dbf_lock, flags);
367+ spin_unlock_irqrestore(&dbf->san_dbf_lock, flags);
368 }
369
370 /**
371@@ -1067,14 +1079,15 @@
372 struct zfcp_fsf_req *fsf_req,
373 unsigned long old_req_id)
374 {
375- struct zfcp_scsi_dbf_record *rec = &adapter->scsi_dbf_buf;
376+ struct zfcp_dbf *dbf = adapter->dbf;
377+ struct zfcp_scsi_dbf_record *rec = &dbf->scsi_dbf_buf;
378 struct zfcp_dbf_dump *dump = (struct zfcp_dbf_dump *)rec;
379 unsigned long flags;
380 struct fcp_rsp_iu *fcp_rsp;
381 char *fcp_rsp_info = NULL, *fcp_sns_info = NULL;
382 int offset = 0, buflen = 0;
383
384- spin_lock_irqsave(&adapter->scsi_dbf_lock, flags);
385+ spin_lock_irqsave(&dbf->scsi_dbf_lock, flags);
386 do {
387 memset(rec, 0, sizeof(*rec));
388 if (offset == 0) {
389@@ -1133,9 +1146,9 @@
390 memcpy(dump->data, fcp_sns_info + offset, dump->size);
391 offset += dump->size;
392 }
393- debug_event(adapter->scsi_dbf, level, rec, sizeof(*rec));
394+ debug_event(dbf->scsi_dbf, level, rec, sizeof(*rec));
395 } while (offset < buflen);
396- spin_unlock_irqrestore(&adapter->scsi_dbf_lock, flags);
397+ spin_unlock_irqrestore(&dbf->scsi_dbf_lock, flags);
398 }
399
400 /**
401@@ -1239,6 +1252,22 @@
402 NULL
403 };
404
405+static debug_info_t *zfcp_dbf_reg(const char *name, int level,
406+ struct debug_view *view, int size)
407+{
408+ struct debug_info *d;
409+
410+ d = debug_register(name, dbfsize, level, size);
411+ if (!d)
412+ return NULL;
413+
414+ debug_register_view(d, &debug_hex_ascii_view);
415+ debug_register_view(d, view);
416+ debug_set_level(d, level);
417+
418+ return d;
419+}
420+
421 /**
422 * zfcp_adapter_debug_register - registers debug feature for an adapter
423 * @adapter: pointer to adapter for which debug features should be registered
424@@ -1247,52 +1276,56 @@
425 int zfcp_adapter_debug_register(struct zfcp_adapter *adapter)
426 {
427 char dbf_name[DEBUG_MAX_NAME_LEN];
428+ struct zfcp_dbf *dbf;
429+
430+ dbf = kmalloc(sizeof(struct zfcp_dbf), GFP_KERNEL);
431+ if (!dbf)
432+ return -ENOMEM;
433+
434+ spin_lock_init(&dbf->hba_dbf_lock);
435+ spin_lock_init(&dbf->san_dbf_lock);
436+ spin_lock_init(&dbf->scsi_dbf_lock);
437+ spin_lock_init(&dbf->rec_dbf_lock);
438
439 /* debug feature area which records recovery activity */
440 sprintf(dbf_name, "zfcp_%s_rec", zfcp_get_busid_by_adapter(adapter));
441- adapter->rec_dbf = debug_register(dbf_name, dbfsize, 1,
442- sizeof(struct zfcp_rec_dbf_record));
443- if (!adapter->rec_dbf)
444- goto failed;
445- debug_register_view(adapter->rec_dbf, &debug_hex_ascii_view);
446- debug_register_view(adapter->rec_dbf, &zfcp_rec_dbf_view);
447- debug_set_level(adapter->rec_dbf, 3);
448+ dbf->rec_dbf = zfcp_dbf_reg(dbf_name, 3, &zfcp_rec_dbf_view,
449+ sizeof(struct zfcp_rec_dbf_record));
450+ if (!dbf->rec_dbf)
451+ goto fail_rec;
452
453 /* debug feature area which records HBA (FSF and QDIO) conditions */
454 sprintf(dbf_name, "zfcp_%s_hba", zfcp_get_busid_by_adapter(adapter));
455- adapter->hba_dbf = debug_register(dbf_name, dbfsize, 1,
456- sizeof(struct zfcp_hba_dbf_record));
457- if (!adapter->hba_dbf)
458- goto failed;
459- debug_register_view(adapter->hba_dbf, &debug_hex_ascii_view);
460- debug_register_view(adapter->hba_dbf, &zfcp_hba_dbf_view);
461- debug_set_level(adapter->hba_dbf, 3);
462+ dbf->hba_dbf = zfcp_dbf_reg(dbf_name, 3, &zfcp_hba_dbf_view,
463+ sizeof(struct zfcp_hba_dbf_record));
464+ if (!dbf->hba_dbf)
465+ goto fail_hba;
466
467 /* debug feature area which records SAN command failures and recovery */
468 sprintf(dbf_name, "zfcp_%s_san", zfcp_get_busid_by_adapter(adapter));
469- adapter->san_dbf = debug_register(dbf_name, dbfsize, 1,
470- sizeof(struct zfcp_san_dbf_record));
471- if (!adapter->san_dbf)
472- goto failed;
473- debug_register_view(adapter->san_dbf, &debug_hex_ascii_view);
474- debug_register_view(adapter->san_dbf, &zfcp_san_dbf_view);
475- debug_set_level(adapter->san_dbf, 6);
476+ dbf->san_dbf = zfcp_dbf_reg(dbf_name, 6, &zfcp_san_dbf_view,
477+ sizeof(struct zfcp_san_dbf_record));
478+ if (!dbf->san_dbf)
479+ goto fail_san;
480
481 /* debug feature area which records SCSI command failures and recovery */
482 sprintf(dbf_name, "zfcp_%s_scsi", zfcp_get_busid_by_adapter(adapter));
483- adapter->scsi_dbf = debug_register(dbf_name, dbfsize, 1,
484- sizeof(struct zfcp_scsi_dbf_record));
485- if (!adapter->scsi_dbf)
486- goto failed;
487- debug_register_view(adapter->scsi_dbf, &debug_hex_ascii_view);
488- debug_register_view(adapter->scsi_dbf, &zfcp_scsi_dbf_view);
489- debug_set_level(adapter->scsi_dbf, 3);
490+ dbf->scsi_dbf = zfcp_dbf_reg(dbf_name, 3, &zfcp_scsi_dbf_view,
491+ sizeof(struct zfcp_scsi_dbf_record));
492+ if (!dbf->scsi_dbf)
493+ goto fail_scsi;
494
495+ adapter->dbf = dbf;
496 return 0;
497
498- failed:
499- zfcp_adapter_debug_unregister(adapter);
500-
501+fail_scsi:
502+ debug_unregister(dbf->san_dbf);
503+fail_san:
504+ debug_unregister(dbf->hba_dbf);
505+fail_hba:
506+ debug_unregister(dbf->rec_dbf);
507+fail_rec:
508+ kfree(dbf);
509 return -ENOMEM;
510 }
511
512@@ -1302,12 +1335,10 @@
513 */
514 void zfcp_adapter_debug_unregister(struct zfcp_adapter *adapter)
515 {
516- debug_unregister(adapter->scsi_dbf);
517- debug_unregister(adapter->san_dbf);
518- debug_unregister(adapter->hba_dbf);
519- debug_unregister(adapter->rec_dbf);
520- adapter->scsi_dbf = NULL;
521- adapter->san_dbf = NULL;
522- adapter->hba_dbf = NULL;
523- adapter->rec_dbf = NULL;
524+ debug_unregister(adapter->dbf->scsi_dbf);
525+ debug_unregister(adapter->dbf->san_dbf);
526+ debug_unregister(adapter->dbf->hba_dbf);
527+ debug_unregister(adapter->dbf->rec_dbf);
528+ kfree(adapter->dbf);
529+ adapter->dbf = NULL;
530 }
531Index: linux-sles11/drivers/s390/scsi/zfcp_dbf.h
532===================================================================
533--- linux-sles11.orig/drivers/s390/scsi/zfcp_dbf.h 2009-08-17 15:31:25.000000000 +0200
534+++ linux-sles11/drivers/s390/scsi/zfcp_dbf.h 2009-08-17 15:31:35.000000000 +0200
535@@ -2,7 +2,7 @@
536 * This file is part of the zfcp device driver for
537 * FCP adapters for IBM System z9 and zSeries.
538 *
539- * Copyright IBM Corp. 2008, 2008
540+ * Copyright IBM Corp. 2008, 2009
541 *
542 * This program is free software; you can redistribute it and/or modify
543 * it under the terms of the GNU General Public License as published by
544@@ -221,4 +221,19 @@
545 u8 sns_info[ZFCP_DBF_SCSI_FCP_SNS_INFO];
546 } __attribute__ ((packed));
547
548+struct zfcp_dbf {
549+ debug_info_t *rec_dbf;
550+ debug_info_t *hba_dbf;
551+ debug_info_t *san_dbf;
552+ debug_info_t *scsi_dbf;
553+ spinlock_t rec_dbf_lock;
554+ spinlock_t hba_dbf_lock;
555+ spinlock_t san_dbf_lock;
556+ spinlock_t scsi_dbf_lock;
557+ struct zfcp_rec_dbf_record rec_dbf_buf;
558+ struct zfcp_hba_dbf_record hba_dbf_buf;
559+ struct zfcp_san_dbf_record san_dbf_buf;
560+ struct zfcp_scsi_dbf_record scsi_dbf_buf;
561+};
562+
563 #endif /* ZFCP_DBF_H */
564Index: linux-sles11/drivers/s390/scsi/zfcp_def.h
565===================================================================
566--- linux-sles11.orig/drivers/s390/scsi/zfcp_def.h 2009-08-17 15:31:29.000000000 +0200
567+++ linux-sles11/drivers/s390/scsi/zfcp_def.h 2009-08-17 15:31:35.000000000 +0200
568@@ -33,10 +33,8 @@
569 #include <asm/qdio.h>
570 #include <asm/debug.h>
571 #include <asm/ebcdic.h>
572-#include "zfcp_dbf.h"
573 #include "zfcp_fsf.h"
574
575-
576 /********************* GENERAL DEFINES *********************************/
577
578 #define REQUEST_LIST_SIZE 128
579@@ -499,18 +497,7 @@
580 u32 erp_low_mem_count; /* nr of erp actions waiting
581 for memory */
582 struct zfcp_wka_port nsp; /* adapter's nameserver */
583- debug_info_t *rec_dbf;
584- debug_info_t *hba_dbf;
585- debug_info_t *san_dbf; /* debug feature areas */
586- debug_info_t *scsi_dbf;
587- spinlock_t rec_dbf_lock;
588- spinlock_t hba_dbf_lock;
589- spinlock_t san_dbf_lock;
590- spinlock_t scsi_dbf_lock;
591- struct zfcp_rec_dbf_record rec_dbf_buf;
592- struct zfcp_hba_dbf_record hba_dbf_buf;
593- struct zfcp_san_dbf_record san_dbf_buf;
594- struct zfcp_scsi_dbf_record scsi_dbf_buf;
595+ struct zfcp_dbf *dbf; /* debug traces */
596 struct zfcp_adapter_mempool pool; /* Adapter memory pools */
597 struct qdio_initialize qdio_init_data; /* for qdio_establish */
598 struct fc_host_statistics *fc_stats;
599Index: linux-sles11/drivers/s390/scsi/zfcp_fsf.h
600===================================================================
601--- linux-sles11.orig/drivers/s390/scsi/zfcp_fsf.h 2009-08-17 15:31:25.000000000 +0200
602+++ linux-sles11/drivers/s390/scsi/zfcp_fsf.h 2009-08-17 15:31:35.000000000 +0200
603@@ -3,13 +3,14 @@
604 *
605 * Interface to the FSF support functions.
606 *
607- * Copyright IBM Corporation 2002, 2008
608+ * Copyright IBM Corporation 2002, 2009
609 */
610
611 #ifndef FSF_H
612 #define FSF_H
613
614 #include <linux/pfn.h>
615+#include <linux/scatterlist.h>
616
617 #define FSF_QTCB_CURRENT_VERSION 0x00000001
618