From c063d6091f6f608db955fb5ac1cb4b63c6a5931c Mon Sep 17 00:00:00 2001 From: Sebastian Ott Date: Mon, 25 Oct 2010 16:10:32 +0200 Subject: [PATCH] --- yaml --- r: 216763 b: refs/heads/master c: 62da177ac2bc1f6f3707230070af268b1e689651 h: refs/heads/master i: 216761: 9149e737cf0431af151a4aded757a8cd4438f8f3 216759: bb4980ad14953a739e2d88ab1f511e8a04ab141d v: v3 --- [refs] | 2 +- trunk/drivers/s390/cio/chsc.c | 5 +++-- trunk/drivers/s390/cio/css.c | 9 +++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index e6869d86c860..07ea8d485a90 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c38a90a34cfc880eb2f7234c511cdb7d8bdebc45 +refs/heads/master: 62da177ac2bc1f6f3707230070af268b1e689651 diff --git a/trunk/drivers/s390/cio/chsc.c b/trunk/drivers/s390/cio/chsc.c index 44d7cc2f9738..1aaddea673e0 100644 --- a/trunk/drivers/s390/cio/chsc.c +++ b/trunk/drivers/s390/cio/chsc.c @@ -680,9 +680,10 @@ int chsc_determine_base_channel_path_desc(struct chp_id chpid, { struct chsc_response_struct *chsc_resp; struct chsc_scpd *scpd_area; + unsigned long flags; int ret; - spin_lock_irq(&chsc_page_lock); + spin_lock_irqsave(&chsc_page_lock, flags); scpd_area = chsc_page; ret = chsc_determine_channel_path_desc(chpid, 0, 0, 0, 0, scpd_area); if (ret) @@ -690,7 +691,7 @@ int chsc_determine_base_channel_path_desc(struct chp_id chpid, chsc_resp = (void *)&scpd_area->response; memcpy(desc, &chsc_resp->data, sizeof(*desc)); out: - spin_unlock_irq(&chsc_page_lock); + spin_unlock_irqrestore(&chsc_page_lock, flags); return ret; } diff --git a/trunk/drivers/s390/cio/css.c b/trunk/drivers/s390/cio/css.c index 5e1235c6aba0..771576bb2928 100644 --- a/trunk/drivers/s390/cio/css.c +++ b/trunk/drivers/s390/cio/css.c @@ -1030,7 +1030,16 @@ subsys_initcall_sync(channel_subsystem_init_sync); void channel_subsystem_reinit(void) { + struct channel_path *chp; + struct chp_id chpid; + chsc_enable_facility(CHSC_SDA_OC_MSS); + chp_id_for_each(&chpid) { + chp = chpid_to_chp(chpid); + if (!chp) + continue; + chsc_determine_base_channel_path_desc(chpid, &chp->desc); + } } #ifdef CONFIG_PROC_FS