[S390] cio: Fix inverted isc priorities.
authorCornelia Huck <cornelia.huck@de.ibm.com>
Tue, 10 Jun 2008 08:03:21 +0000 (10:03 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 10 Jun 2008 08:03:27 +0000 (10:03 +0200)
Priorities for I/O interruption subclasses range from 0 (highest)
to 7 (lowest). Unfortunately, the console has been using isc 7
instead of an isc with a higher priority than regular I/O
subchannels (which use 3). Fix this by making the console use
isc 1.

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/cio/cio.c

index 82c6a2d451284424c40fc14791736f642ef80934..b32d7eb3d81a4d8ee3dc29fb587bc78f91b5b7e8 100644 (file)
@@ -576,12 +576,14 @@ cio_validate_subchannel (struct subchannel *sch, struct subchannel_id schid)
                err = -ENODEV;
                goto out;
        }
-       if (cio_is_console(sch->schid))
+       if (cio_is_console(sch->schid)) {
                sch->opm = 0xff;
-       else
+               sch->isc = 1;
+       } else {
                sch->opm = chp_get_sch_opm(sch);
+               sch->isc = 3;
+       }
        sch->lpm = sch->schib.pmcw.pam & sch->opm;
-       sch->isc = 3;
 
        CIO_MSG_EVENT(6, "Detected device %04x on subchannel 0.%x.%04X "
                      "- PIM = %02X, PAM = %02X, POM = %02X\n",
@@ -704,9 +706,9 @@ void wait_cons_dev(void)
        if (!console_subchannel_in_use)
                return;
 
-       /* disable all but isc 7 (console device) */
+       /* disable all but isc 1 (console device) */
        __ctl_store (save_cr6, 6, 6);
-       cr6 = 0x01000000;
+       cr6 = 0x40000000;
        __ctl_load (cr6, 6, 6);
 
        do {
@@ -788,11 +790,11 @@ cio_probe_console(void)
        }
 
        /*
-        * enable console I/O-interrupt subclass 7
+        * enable console I/O-interrupt subclass 1
         */
-       ctl_set_bit(6, 24);
-       console_subchannel.isc = 7;
-       console_subchannel.schib.pmcw.isc = 7;
+       ctl_set_bit(6, 30);
+       console_subchannel.isc = 1;
+       console_subchannel.schib.pmcw.isc = 1;
        console_subchannel.schib.pmcw.intparm =
                (u32)(addr_t)&console_subchannel;
        ret = cio_modify(&console_subchannel);