return 0;
 }
 
-static int cio_validate_io_subchannel(struct subchannel *sch)
+static int cio_check_devno_blacklisted(struct subchannel *sch)
 {
-       /* Initialization for io subchannels. */
-       if (!css_sch_is_valid(&sch->schib))
-               return -ENODEV;
-
-       /* Devno is valid. */
        if (is_blacklisted(sch->schid.ssid, sch->schib.pmcw.dev)) {
                /*
                 * This device must not be known to Linux. So we simply
        return 0;
 }
 
+static int cio_validate_io_subchannel(struct subchannel *sch)
+{
+       /* Initialization for io subchannels. */
+       if (!css_sch_is_valid(&sch->schib))
+               return -ENODEV;
+
+       /* Devno is valid. */
+       return cio_check_devno_blacklisted(sch);
+}
+
+static int cio_validate_msg_subchannel(struct subchannel *sch)
+{
+       /* Initialization for message subchannels. */
+       if (!css_sch_is_valid(&sch->schib))
+               return -ENODEV;
+
+       /* Devno is valid. */
+       return cio_check_devno_blacklisted(sch);
+}
+
 /**
  * cio_validate_subchannel - basic validation of subchannel
  * @sch: subchannel structure to be filled out
        case SUBCHANNEL_TYPE_IO:
                err = cio_validate_io_subchannel(sch);
                break;
+       case SUBCHANNEL_TYPE_MSG:
+               err = cio_validate_msg_subchannel(sch);
+               break;
        default:
                err = 0;
        }
 
 struct pmcw {
        u32 intparm;            /* interruption parameter */
        u32 qf   : 1;           /* qdio facility */
-       u32 res0 : 1;           /* reserved zeros */
+       u32 w    : 1;
        u32 isc  : 3;           /* interruption sublass */
        u32 res5 : 3;           /* reserved zeros */
        u32 ena  : 1;           /* enabled */
 
 {
        if ((schib->pmcw.st == SUBCHANNEL_TYPE_IO) && !schib->pmcw.dnv)
                return 0;
+       if ((schib->pmcw.st == SUBCHANNEL_TYPE_MSG) && !schib->pmcw.w)
+               return 0;
        return 1;
 }
 EXPORT_SYMBOL_GPL(css_sch_is_valid);