Loading drivers/s390/cio/chsc_sch.c +31 −1 Original line number Diff line number Diff line /* * Driver for s390 chsc subchannels * * Copyright IBM Corp. 2008 * Copyright IBM Corp. 2008, 2009 * * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> * */ Loading Loading @@ -112,6 +113,31 @@ static void chsc_subchannel_shutdown(struct subchannel *sch) cio_disable_subchannel(sch); } static int chsc_subchannel_prepare(struct subchannel *sch) { int cc; struct schib schib; /* * Don't allow suspend while the subchannel is not idle * since we don't have a way to clear the subchannel and * cannot disable it with a request running. */ cc = stsch(sch->schid, &schib); if (!cc && scsw_stctl(&schib.scsw)) return -EAGAIN; return 0; } static int chsc_subchannel_freeze(struct subchannel *sch) { return cio_disable_subchannel(sch); } static int chsc_subchannel_restore(struct subchannel *sch) { return cio_enable_subchannel(sch, (u32)(unsigned long)sch); } static struct css_device_id chsc_subchannel_ids[] = { { .match_flags = 0x1, .type =SUBCHANNEL_TYPE_CHSC, }, { /* end of list */ }, Loading @@ -125,6 +151,10 @@ static struct css_driver chsc_subchannel_driver = { .probe = chsc_subchannel_probe, .remove = chsc_subchannel_remove, .shutdown = chsc_subchannel_shutdown, .prepare = chsc_subchannel_prepare, .freeze = chsc_subchannel_freeze, .thaw = chsc_subchannel_restore, .restore = chsc_subchannel_restore, .name = "chsc_subchannel", }; Loading Loading
drivers/s390/cio/chsc_sch.c +31 −1 Original line number Diff line number Diff line /* * Driver for s390 chsc subchannels * * Copyright IBM Corp. 2008 * Copyright IBM Corp. 2008, 2009 * * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> * */ Loading Loading @@ -112,6 +113,31 @@ static void chsc_subchannel_shutdown(struct subchannel *sch) cio_disable_subchannel(sch); } static int chsc_subchannel_prepare(struct subchannel *sch) { int cc; struct schib schib; /* * Don't allow suspend while the subchannel is not idle * since we don't have a way to clear the subchannel and * cannot disable it with a request running. */ cc = stsch(sch->schid, &schib); if (!cc && scsw_stctl(&schib.scsw)) return -EAGAIN; return 0; } static int chsc_subchannel_freeze(struct subchannel *sch) { return cio_disable_subchannel(sch); } static int chsc_subchannel_restore(struct subchannel *sch) { return cio_enable_subchannel(sch, (u32)(unsigned long)sch); } static struct css_device_id chsc_subchannel_ids[] = { { .match_flags = 0x1, .type =SUBCHANNEL_TYPE_CHSC, }, { /* end of list */ }, Loading @@ -125,6 +151,10 @@ static struct css_driver chsc_subchannel_driver = { .probe = chsc_subchannel_probe, .remove = chsc_subchannel_remove, .shutdown = chsc_subchannel_shutdown, .prepare = chsc_subchannel_prepare, .freeze = chsc_subchannel_freeze, .thaw = chsc_subchannel_restore, .restore = chsc_subchannel_restore, .name = "chsc_subchannel", }; Loading