]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/patches/suse-2.6.27.39/patches.arch/s390-17-perf-13-dasd-goodcase-perf.patch
Fix oinkmaster patch.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.arch / s390-17-perf-13-dasd-goodcase-perf.patch
1 From: Gerald Schaefer <geraldsc@de.ibm.com>
2 Subject: [PATCH] dasd: optimize cpu usage in goodcase
3 References: bnc#532063,LTC#55526
4
5 From: Stefan Haberland <stefan.haberland@de.ibm.com>
6
7 remove unnecessary dbf call, remove string operations for magic
8
9 Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com>
10
11 Acked-by: John Jolly <jjolly@suse.de>
12
13 ---
14 drivers/s390/block/dasd.c | 21 ++++++++-------------
15 drivers/s390/block/dasd_alias.c | 3 +--
16 drivers/s390/block/dasd_diag.c | 3 +--
17 drivers/s390/block/dasd_eckd.c | 35 +++++++++++++++--------------------
18 drivers/s390/block/dasd_eer.c | 2 +-
19 drivers/s390/block/dasd_fba.c | 5 ++---
20 drivers/s390/block/dasd_int.h | 11 ++++++++---
21 7 files changed, 36 insertions(+), 44 deletions(-)
22
23 Index: linux-sles11/drivers/s390/block/dasd.c
24 ===================================================================
25 --- linux-sles11.orig/drivers/s390/block/dasd.c
26 +++ linux-sles11/drivers/s390/block/dasd.c
27 @@ -645,14 +645,14 @@ static void dasd_profile_end(struct dasd
28 * memory and 2) dasd_smalloc_request uses the static ccw memory
29 * that gets allocated for each device.
30 */
31 -struct dasd_ccw_req *dasd_kmalloc_request(char *magic, int cplength,
32 +struct dasd_ccw_req *dasd_kmalloc_request(int magic, int cplength,
33 int datasize,
34 struct dasd_device *device)
35 {
36 struct dasd_ccw_req *cqr;
37
38 /* Sanity checks */
39 - BUG_ON( magic == NULL || datasize > PAGE_SIZE ||
40 + BUG_ON(datasize > PAGE_SIZE ||
41 (cplength*sizeof(struct ccw1)) > PAGE_SIZE);
42
43 cqr = kzalloc(sizeof(struct dasd_ccw_req), GFP_ATOMIC);
44 @@ -676,14 +676,13 @@ struct dasd_ccw_req *dasd_kmalloc_reques
45 return ERR_PTR(-ENOMEM);
46 }
47 }
48 - strncpy((char *) &cqr->magic, magic, 4);
49 - ASCEBC((char *) &cqr->magic, 4);
50 + cqr->magic = magic;
51 set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
52 dasd_get_device(device);
53 return cqr;
54 }
55
56 -struct dasd_ccw_req *dasd_smalloc_request(char *magic, int cplength,
57 +struct dasd_ccw_req *dasd_smalloc_request(int magic, int cplength,
58 int datasize,
59 struct dasd_device *device)
60 {
61 @@ -693,7 +692,7 @@ struct dasd_ccw_req *dasd_smalloc_reques
62 int size;
63
64 /* Sanity checks */
65 - BUG_ON( magic == NULL || datasize > PAGE_SIZE ||
66 + BUG_ON(datasize > PAGE_SIZE ||
67 (cplength*sizeof(struct ccw1)) > PAGE_SIZE);
68
69 size = (sizeof(struct dasd_ccw_req) + 7L) & -8L;
70 @@ -720,8 +719,7 @@ struct dasd_ccw_req *dasd_smalloc_reques
71 cqr->data = data;
72 memset(cqr->data, 0, datasize);
73 }
74 - strncpy((char *) &cqr->magic, magic, 4);
75 - ASCEBC((char *) &cqr->magic, 4);
76 + cqr->magic = magic;
77 set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
78 dasd_get_device(device);
79 return cqr;
80 @@ -865,9 +863,6 @@ int dasd_start_IO(struct dasd_ccw_req *c
81 switch (rc) {
82 case 0:
83 cqr->status = DASD_CQR_IN_IO;
84 - DBF_DEV_EVENT(DBF_DEBUG, device,
85 - "start_IO: request %p started successful",
86 - cqr);
87 break;
88 case -EBUSY:
89 DBF_DEV_EVENT(DBF_ERR, device, "%s",
90 @@ -2393,7 +2388,7 @@ int dasd_generic_notify(struct ccw_devic
91 static struct dasd_ccw_req *dasd_generic_build_rdc(struct dasd_device *device,
92 void *rdc_buffer,
93 int rdc_buffer_size,
94 - char *magic)
95 + int magic)
96 {
97 struct dasd_ccw_req *cqr;
98 struct ccw1 *ccw;
99 @@ -2422,7 +2417,7 @@ static struct dasd_ccw_req *dasd_generic
100 }
101
102
103 -int dasd_generic_read_dev_chars(struct dasd_device *device, char *magic,
104 +int dasd_generic_read_dev_chars(struct dasd_device *device, int magic,
105 void **rdc_buffer, int rdc_buffer_size)
106 {
107 int ret;
108 Index: linux-sles11/drivers/s390/block/dasd_alias.c
109 ===================================================================
110 --- linux-sles11.orig/drivers/s390/block/dasd_alias.c
111 +++ linux-sles11/drivers/s390/block/dasd_alias.c
112 @@ -377,8 +377,7 @@ static int read_unit_address_configurati
113 int rc;
114 unsigned long flags;
115
116 - cqr = dasd_kmalloc_request("ECKD",
117 - 1 /* PSF */ + 1 /* RSSD */ ,
118 + cqr = dasd_kmalloc_request(DASD_ECKD_MAGIC, 1 /* PSF */ + 1 /* RSSD */,
119 (sizeof(struct dasd_psf_prssd_data)),
120 device);
121 if (IS_ERR(cqr))
122 Index: linux-sles11/drivers/s390/block/dasd_diag.c
123 ===================================================================
124 --- linux-sles11.orig/drivers/s390/block/dasd_diag.c
125 +++ linux-sles11/drivers/s390/block/dasd_diag.c
126 @@ -521,8 +521,7 @@ static struct dasd_ccw_req *dasd_diag_bu
127 /* Build the request */
128 datasize = sizeof(struct dasd_diag_req) +
129 count*sizeof(struct dasd_diag_bio);
130 - cqr = dasd_smalloc_request(dasd_diag_discipline.name, 0,
131 - datasize, memdev);
132 + cqr = dasd_smalloc_request(DASD_DIAG_MAGIC, 0, datasize, memdev);
133 if (IS_ERR(cqr))
134 return cqr;
135
136 Index: linux-sles11/drivers/s390/block/dasd_eckd.c
137 ===================================================================
138 --- linux-sles11.orig/drivers/s390/block/dasd_eckd.c
139 +++ linux-sles11/drivers/s390/block/dasd_eckd.c
140 @@ -582,7 +582,8 @@ static struct dasd_ccw_req *dasd_eckd_bu
141 struct dasd_ccw_req *cqr;
142 struct ccw1 *ccw;
143
144 - cqr = dasd_smalloc_request("ECKD", 1 /* RCD */, ciw->count, device);
145 + cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1 /* RCD */, ciw->count,
146 + device);
147
148 if (IS_ERR(cqr)) {
149 DEV_MESSAGE(KERN_WARNING, device, "%s",
150 @@ -784,8 +785,7 @@ static int dasd_eckd_read_features(struc
151 struct dasd_eckd_private *private;
152
153 private = (struct dasd_eckd_private *) device->private;
154 - cqr = dasd_smalloc_request(dasd_eckd_discipline.name,
155 - 1 /* PSF */ + 1 /* RSSD */ ,
156 + cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1 /* PSF */ + 1 /* RSSD */,
157 (sizeof(struct dasd_psf_prssd_data) +
158 sizeof(struct dasd_rssd_features)),
159 device);
160 @@ -846,7 +846,7 @@ static struct dasd_ccw_req *dasd_eckd_bu
161 struct dasd_psf_ssc_data *psf_ssc_data;
162 struct ccw1 *ccw;
163
164 - cqr = dasd_smalloc_request("ECKD", 1 /* PSF */ ,
165 + cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1 /* PSF */ ,
166 sizeof(struct dasd_psf_ssc_data),
167 device);
168
169 @@ -995,7 +995,8 @@ dasd_eckd_check_characteristics(struct d
170 /* Read Device Characteristics */
171 rdc_data = (void *) &(private->rdc_data);
172 memset(rdc_data, 0, sizeof(rdc_data));
173 - rc = dasd_generic_read_dev_chars(device, "ECKD", &rdc_data, 64);
174 + rc = dasd_generic_read_dev_chars(device, DASD_ECKD_MAGIC, &rdc_data,
175 + 64);
176 if (rc) {
177 DEV_MESSAGE(KERN_WARNING, device,
178 "Read device characteristics returned "
179 @@ -1055,8 +1056,7 @@ dasd_eckd_analysis_ccw(struct dasd_devic
180
181 cplength = 8;
182 datasize = sizeof(struct DE_eckd_data) + 2*sizeof(struct LO_eckd_data);
183 - cqr = dasd_smalloc_request(dasd_eckd_discipline.name,
184 - cplength, datasize, device);
185 + cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, cplength, datasize, device);
186 if (IS_ERR(cqr))
187 return cqr;
188 ccw = cqr->cpaddr;
189 @@ -1327,8 +1327,7 @@ dasd_eckd_format_device(struct dasd_devi
190 return ERR_PTR(-EINVAL);
191 }
192 /* Allocate the format ccw request. */
193 - fcp = dasd_smalloc_request(dasd_eckd_discipline.name,
194 - cplength, datasize, device);
195 + fcp = dasd_smalloc_request(DASD_ECKD_MAGIC, cplength, datasize, device);
196 if (IS_ERR(fcp))
197 return fcp;
198
199 @@ -1607,8 +1606,8 @@ static struct dasd_ccw_req *dasd_eckd_bu
200 datasize += count*sizeof(struct LO_eckd_data);
201 }
202 /* Allocate the ccw request. */
203 - cqr = dasd_smalloc_request(dasd_eckd_discipline.name,
204 - cplength, datasize, startdev);
205 + cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, cplength, datasize,
206 + startdev);
207 if (IS_ERR(cqr))
208 return cqr;
209 ccw = cqr->cpaddr;
210 @@ -1865,8 +1864,7 @@ dasd_eckd_release(struct dasd_device *de
211 if (!capable(CAP_SYS_ADMIN))
212 return -EACCES;
213
214 - cqr = dasd_smalloc_request(dasd_eckd_discipline.name,
215 - 1, 32, device);
216 + cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1, 32, device);
217 if (IS_ERR(cqr)) {
218 DEV_MESSAGE(KERN_WARNING, device, "%s",
219 "Could not allocate initialization request");
220 @@ -1906,8 +1904,7 @@ dasd_eckd_reserve(struct dasd_device *de
221 if (!capable(CAP_SYS_ADMIN))
222 return -EACCES;
223
224 - cqr = dasd_smalloc_request(dasd_eckd_discipline.name,
225 - 1, 32, device);
226 + cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1, 32, device);
227 if (IS_ERR(cqr)) {
228 DEV_MESSAGE(KERN_WARNING, device, "%s",
229 "Could not allocate initialization request");
230 @@ -1946,8 +1943,7 @@ dasd_eckd_steal_lock(struct dasd_device
231 if (!capable(CAP_SYS_ADMIN))
232 return -EACCES;
233
234 - cqr = dasd_smalloc_request(dasd_eckd_discipline.name,
235 - 1, 32, device);
236 + cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1, 32, device);
237 if (IS_ERR(cqr)) {
238 DEV_MESSAGE(KERN_WARNING, device, "%s",
239 "Could not allocate initialization request");
240 @@ -1984,8 +1980,7 @@ dasd_eckd_performance(struct dasd_device
241 struct ccw1 *ccw;
242 int rc;
243
244 - cqr = dasd_smalloc_request(dasd_eckd_discipline.name,
245 - 1 /* PSF */ + 1 /* RSSD */ ,
246 + cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1 /* PSF */ + 1 /* RSSD */,
247 (sizeof(struct dasd_psf_prssd_data) +
248 sizeof(struct dasd_rssd_perf_stats_t)),
249 device);
250 @@ -2131,7 +2126,7 @@ static int dasd_symm_io(struct dasd_devi
251 }
252
253 /* setup CCWs for PSF + RSSD */
254 - cqr = dasd_smalloc_request("ECKD", 2 , 0, device);
255 + cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 2 , 0, device);
256 if (IS_ERR(cqr)) {
257 DEV_MESSAGE(KERN_WARNING, device, "%s",
258 "Could not allocate initialization request");
259 Index: linux-sles11/drivers/s390/block/dasd_eer.c
260 ===================================================================
261 --- linux-sles11.orig/drivers/s390/block/dasd_eer.c
262 +++ linux-sles11/drivers/s390/block/dasd_eer.c
263 @@ -456,7 +456,7 @@ int dasd_eer_enable(struct dasd_device *
264 if (!device->discipline || strcmp(device->discipline->name, "ECKD"))
265 return -EPERM; /* FIXME: -EMEDIUMTYPE ? */
266
267 - cqr = dasd_kmalloc_request("ECKD", 1 /* SNSS */,
268 + cqr = dasd_kmalloc_request(DASD_ECKD_MAGIC, 1 /* SNSS */,
269 SNSS_DATA_SIZE, device);
270 if (IS_ERR(cqr))
271 return -ENOMEM;
272 Index: linux-sles11/drivers/s390/block/dasd_fba.c
273 ===================================================================
274 --- linux-sles11.orig/drivers/s390/block/dasd_fba.c
275 +++ linux-sles11/drivers/s390/block/dasd_fba.c
276 @@ -148,7 +148,7 @@ dasd_fba_check_characteristics(struct da
277
278 /* Read Device Characteristics */
279 rdc_data = (void *) &(private->rdc_data);
280 - rc = dasd_generic_read_dev_chars(device, "FBA ", &rdc_data, 32);
281 + rc = dasd_generic_read_dev_chars(device, DASD_FBA_MAGIC, &rdc_data, 32);
282 if (rc) {
283 DEV_MESSAGE(KERN_WARNING, device,
284 "Read device characteristics returned error %d",
285 @@ -298,8 +298,7 @@ static struct dasd_ccw_req *dasd_fba_bui
286 datasize += (count - 1)*sizeof(struct LO_fba_data);
287 }
288 /* Allocate the ccw request. */
289 - cqr = dasd_smalloc_request(dasd_fba_discipline.name,
290 - cplength, datasize, memdev);
291 + cqr = dasd_smalloc_request(DASD_FBA_MAGIC, cplength, datasize, memdev);
292 if (IS_ERR(cqr))
293 return cqr;
294 ccw = cqr->cpaddr;
295 Index: linux-sles11/drivers/s390/block/dasd_int.h
296 ===================================================================
297 --- linux-sles11.orig/drivers/s390/block/dasd_int.h
298 +++ linux-sles11/drivers/s390/block/dasd_int.h
299 @@ -60,6 +60,11 @@
300 #include <asm/dasd.h>
301 #include <asm/idals.h>
302
303 +/* DASD discipline magic */
304 +#define DASD_ECKD_MAGIC 0xC5C3D2C4
305 +#define DASD_DIAG_MAGIC 0xC4C9C1C7
306 +#define DASD_FBA_MAGIC 0xC6C2C140
307 +
308 /*
309 * SECTION: Type definitions
310 */
311 @@ -528,9 +533,9 @@ extern struct block_device_operations da
312 extern struct kmem_cache *dasd_page_cache;
313
314 struct dasd_ccw_req *
315 -dasd_kmalloc_request(char *, int, int, struct dasd_device *);
316 +dasd_kmalloc_request(int , int, int, struct dasd_device *);
317 struct dasd_ccw_req *
318 -dasd_smalloc_request(char *, int, int, struct dasd_device *);
319 +dasd_smalloc_request(int , int, int, struct dasd_device *);
320 void dasd_kfree_request(struct dasd_ccw_req *, struct dasd_device *);
321 void dasd_sfree_request(struct dasd_ccw_req *, struct dasd_device *);
322
323 @@ -572,7 +577,7 @@ int dasd_generic_set_offline (struct ccw
324 int dasd_generic_notify(struct ccw_device *, int);
325 void dasd_generic_handle_state_change(struct dasd_device *);
326
327 -int dasd_generic_read_dev_chars(struct dasd_device *, char *, void **, int);
328 +int dasd_generic_read_dev_chars(struct dasd_device *, int, void **, int);
329
330 /* externals in dasd_devmap.c */
331 extern int dasd_max_devindex;