Loading drivers/s390/cio/cio.c +24 −6 Original line number Diff line number Diff line Loading @@ -498,13 +498,8 @@ int cio_create_sch_lock(struct subchannel *sch) 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 Loading @@ -518,6 +513,26 @@ static int cio_validate_io_subchannel(struct subchannel *sch) 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 Loading Loading @@ -573,6 +588,9 @@ int cio_validate_subchannel(struct subchannel *sch, struct subchannel_id schid) 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; } Loading drivers/s390/cio/cio.h +1 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ 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 */ Loading drivers/s390/cio/css.c +2 −0 Original line number Diff line number Diff line Loading @@ -332,6 +332,8 @@ int css_sch_is_valid(struct schib *schib) { 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); Loading Loading
drivers/s390/cio/cio.c +24 −6 Original line number Diff line number Diff line Loading @@ -498,13 +498,8 @@ int cio_create_sch_lock(struct subchannel *sch) 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 Loading @@ -518,6 +513,26 @@ static int cio_validate_io_subchannel(struct subchannel *sch) 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 Loading Loading @@ -573,6 +588,9 @@ int cio_validate_subchannel(struct subchannel *sch, struct subchannel_id schid) 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; } Loading
drivers/s390/cio/cio.h +1 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ 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 */ Loading
drivers/s390/cio/css.c +2 −0 Original line number Diff line number Diff line Loading @@ -332,6 +332,8 @@ int css_sch_is_valid(struct schib *schib) { 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); Loading