s390/cio: add ipldev keyword to cio_ignore
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Tue, 30 Apr 2013 15:16:17 +0000 (17:16 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 2 May 2013 13:50:20 +0000 (15:50 +0200)
Provide an 'ipldev' keyword to cio_ignore to (un)ignore the
CCW or FCP based boot device.

Reviewed-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Documentation/s390/CommonIO
drivers/s390/cio/blacklist.c

index d378cba..d90a5dd 100644 (file)
@@ -8,9 +8,9 @@ Command line parameters
 
   Enable logging of debug information in case of ccw device timeouts.
 
-* cio_ignore = {all} |
-              {<device> | <range of devices>} |
-              {!<device> | !<range of devices>}
+* cio_ignore = device[,device[,..]]
+
+       device := {all | [!]ipldev | [!]<devno> | [!]<devno>-<devno>}
 
   The given devices will be ignored by the common I/O-layer; no detection
   and device sensing will be done on any of those devices. The subchannel to 
@@ -24,9 +24,10 @@ Command line parameters
   device numbers (0xabcd or abcd, for 2.4 backward compatibility). If you
   give a device number 0xabcd, it will be interpreted as 0.0.abcd.
 
-  You can use the 'all' keyword to ignore all devices.
-  The '!' operator will cause the I/O-layer to _not_ ignore a device.
-  The command line is parsed from left to right.
+  You can use the 'all' keyword to ignore all devices. The 'ipldev' keyword can
+  be used to refer to the CCW based boot device (this is probably useful only
+  when combined with the '!' operator). The '!' operator will cause the I/O-layer
+  to _not_ ignore a device. The command line is parsed from left to right.
 
   For example, 
        cio_ignore=0.0.0023-0.0.0042,0.0.4711
index 2d2a966..706eb9b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *   S/390 common I/O routines -- blacklisting of specific devices
  *
- *    Copyright IBM Corp. 1999, 2002
+ *    Copyright IBM Corp. 1999, 2013
  *    Author(s): Ingo Adlung (adlung@de.ibm.com)
  *              Cornelia Huck (cornelia.huck@de.ibm.com)
  *              Arnd Bergmann (arndb@de.ibm.com)
@@ -17,8 +17,9 @@
 #include <linux/ctype.h>
 #include <linux/device.h>
 
-#include <asm/cio.h>
 #include <asm/uaccess.h>
+#include <asm/cio.h>
+#include <asm/ipl.h>
 
 #include "blacklist.h"
 #include "cio.h"
@@ -172,6 +173,22 @@ static int blacklist_parse_parameters(char *str, range_action action,
                        to_cssid = __MAX_CSSID;
                        to_ssid = __MAX_SSID;
                        to = __MAX_SUBCHANNEL;
+               } else if (strcmp(parm, "ipldev") == 0) {
+                       if (ipl_info.type == IPL_TYPE_CCW) {
+                               from_cssid = 0;
+                               from_ssid = ipl_info.data.ccw.dev_id.ssid;
+                               from = ipl_info.data.ccw.dev_id.devno;
+                       } else if (ipl_info.type == IPL_TYPE_FCP ||
+                                  ipl_info.type == IPL_TYPE_FCP_DUMP) {
+                               from_cssid = 0;
+                               from_ssid = ipl_info.data.fcp.dev_id.ssid;
+                               from = ipl_info.data.fcp.dev_id.devno;
+                       } else {
+                               continue;
+                       }
+                       to_cssid = from_cssid;
+                       to_ssid = from_ssid;
+                       to = from;
                } else {
                        rc = parse_busid(strsep(&parm, "-"), &from_cssid,
                                         &from_ssid, &from, msgtrigger);