aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio/blacklist.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/cio/blacklist.c')
-rw-r--r--drivers/s390/cio/blacklist.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/s390/cio/blacklist.c b/drivers/s390/cio/blacklist.c
index a1c52a68219..a4b03031ff5 100644
--- a/drivers/s390/cio/blacklist.c
+++ b/drivers/s390/cio/blacklist.c
@@ -35,7 +35,7 @@
35 */ 35 */
36 36
37/* 65536 bits to indicate if a devno is blacklisted or not */ 37/* 65536 bits to indicate if a devno is blacklisted or not */
38#define __BL_DEV_WORDS ((__MAX_SUBCHANNELS + (8*sizeof(long) - 1)) / \ 38#define __BL_DEV_WORDS ((__MAX_SUBCHANNEL + (8*sizeof(long) - 1)) / \
39 (8*sizeof(long))) 39 (8*sizeof(long)))
40static unsigned long bl_dev[__BL_DEV_WORDS]; 40static unsigned long bl_dev[__BL_DEV_WORDS];
41typedef enum {add, free} range_action; 41typedef enum {add, free} range_action;
@@ -50,7 +50,7 @@ blacklist_range (range_action action, unsigned int from, unsigned int to)
50 if (!to) 50 if (!to)
51 to = from; 51 to = from;
52 52
53 if (from > to || to > __MAX_SUBCHANNELS) { 53 if (from > to || to > __MAX_SUBCHANNEL) {
54 printk (KERN_WARNING "Invalid blacklist range " 54 printk (KERN_WARNING "Invalid blacklist range "
55 "0x%04x to 0x%04x, skipping\n", from, to); 55 "0x%04x to 0x%04x, skipping\n", from, to);
56 return; 56 return;
@@ -143,7 +143,7 @@ blacklist_parse_parameters (char *str, range_action action)
143 if (strncmp(str,"all,",4) == 0 || strcmp(str,"all") == 0 || 143 if (strncmp(str,"all,",4) == 0 || strcmp(str,"all") == 0 ||
144 strncmp(str,"all\n",4) == 0 || strncmp(str,"all ",4) == 0) { 144 strncmp(str,"all\n",4) == 0 || strncmp(str,"all ",4) == 0) {
145 from = 0; 145 from = 0;
146 to = __MAX_SUBCHANNELS; 146 to = __MAX_SUBCHANNEL;
147 str += 3; 147 str += 3;
148 } else { 148 } else {
149 int rc; 149 int rc;
@@ -226,20 +226,21 @@ is_blacklisted (int devno)
226static inline void 226static inline void
227s390_redo_validation (void) 227s390_redo_validation (void)
228{ 228{
229 unsigned int irq; 229 struct subchannel_id schid;
230 230
231 CIO_TRACE_EVENT (0, "redoval"); 231 CIO_TRACE_EVENT (0, "redoval");
232 for (irq = 0; irq < __MAX_SUBCHANNELS; irq++) { 232 init_subchannel_id(&schid);
233 do {
233 int ret; 234 int ret;
234 struct subchannel *sch; 235 struct subchannel *sch;
235 236
236 sch = get_subchannel_by_schid(irq); 237 sch = get_subchannel_by_schid(schid);
237 if (sch) { 238 if (sch) {
238 /* Already known. */ 239 /* Already known. */
239 put_device(&sch->dev); 240 put_device(&sch->dev);
240 continue; 241 continue;
241 } 242 }
242 ret = css_probe_device(irq); 243 ret = css_probe_device(schid);
243 if (ret == -ENXIO) 244 if (ret == -ENXIO)
244 break; /* We're through. */ 245 break; /* We're through. */
245 if (ret == -ENOMEM) 246 if (ret == -ENOMEM)
@@ -248,7 +249,7 @@ s390_redo_validation (void)
248 * panic. 249 * panic.
249 */ 250 */
250 break; 251 break;
251 } 252 } while (schid.sch_no++ < __MAX_SUBCHANNEL);
252} 253}
253 254
254/* 255/*
@@ -289,12 +290,12 @@ static int cio_ignore_read (char *page, char **start, off_t off,
289 len = 0; 290 len = 0;
290 for (devno = off; /* abuse the page variable 291 for (devno = off; /* abuse the page variable
291 * as counter, see fs/proc/generic.c */ 292 * as counter, see fs/proc/generic.c */
292 devno < __MAX_SUBCHANNELS && len + entry_size < count; devno++) { 293 devno < __MAX_SUBCHANNEL && len + entry_size < count; devno++) {
293 if (!test_bit(devno, bl_dev)) 294 if (!test_bit(devno, bl_dev))
294 continue; 295 continue;
295 len += sprintf(page + len, "0.0.%04lx", devno); 296 len += sprintf(page + len, "0.0.%04lx", devno);
296 if (test_bit(devno + 1, bl_dev)) { /* print range */ 297 if (test_bit(devno + 1, bl_dev)) { /* print range */
297 while (++devno < __MAX_SUBCHANNELS) 298 while (++devno < __MAX_SUBCHANNEL)
298 if (!test_bit(devno, bl_dev)) 299 if (!test_bit(devno, bl_dev))
299 break; 300 break;
300 len += sprintf(page + len, "-0.0.%04lx", --devno); 301 len += sprintf(page + len, "-0.0.%04lx", --devno);
@@ -302,7 +303,7 @@ static int cio_ignore_read (char *page, char **start, off_t off,
302 len += sprintf(page + len, "\n"); 303 len += sprintf(page + len, "\n");
303 } 304 }
304 305
305 if (devno < __MAX_SUBCHANNELS) 306 if (devno < __MAX_SUBCHANNEL)
306 *eof = 1; 307 *eof = 1;
307 *start = (char *) (devno - off); /* number of checked entries */ 308 *start = (char *) (devno - off); /* number of checked entries */
308 return len; 309 return len;