aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/net/qeth_l2_main.c
diff options
context:
space:
mode:
authorFrank Blaschka <frank.blaschka@de.ibm.com>2010-05-11 15:34:47 -0400
committerDavid S. Miller <davem@davemloft.net>2010-05-16 03:50:11 -0400
commitc4949f074332a64baeb2ead6ab9319ca37642f96 (patch)
tree185005280b499114ba872560efe21ec75b0ba726 /drivers/s390/net/qeth_l2_main.c
parent65a1f898efac136aeea65509e61ac6cdecd4f6bf (diff)
qeth: synchronize configuration interface
Synchronize access to the drivers configuration interface. Also do not allow configuration changes during online/offline transition. Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/s390/net/qeth_l2_main.c')
-rw-r--r--drivers/s390/net/qeth_l2_main.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
index 904b1f3567b..b447e1998c6 100644
--- a/drivers/s390/net/qeth_l2_main.c
+++ b/drivers/s390/net/qeth_l2_main.c
@@ -924,6 +924,7 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
924 enum qeth_card_states recover_flag; 924 enum qeth_card_states recover_flag;
925 925
926 BUG_ON(!card); 926 BUG_ON(!card);
927 mutex_lock(&card->conf_mutex);
927 QETH_DBF_TEXT(SETUP, 2, "setonlin"); 928 QETH_DBF_TEXT(SETUP, 2, "setonlin");
928 QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *)); 929 QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
929 930
@@ -956,7 +957,7 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
956 dev_warn(&card->gdev->dev, 957 dev_warn(&card->gdev->dev,
957 "The LAN is offline\n"); 958 "The LAN is offline\n");
958 card->lan_online = 0; 959 card->lan_online = 0;
959 return 0; 960 goto out;
960 } 961 }
961 rc = -ENODEV; 962 rc = -ENODEV;
962 goto out_remove; 963 goto out_remove;
@@ -995,6 +996,8 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
995 } 996 }
996 /* let user_space know that device is online */ 997 /* let user_space know that device is online */
997 kobject_uevent(&gdev->dev.kobj, KOBJ_CHANGE); 998 kobject_uevent(&gdev->dev.kobj, KOBJ_CHANGE);
999out:
1000 mutex_unlock(&card->conf_mutex);
998 return 0; 1001 return 0;
999 1002
1000out_remove: 1003out_remove:
@@ -1007,6 +1010,7 @@ out_remove:
1007 card->state = CARD_STATE_RECOVER; 1010 card->state = CARD_STATE_RECOVER;
1008 else 1011 else
1009 card->state = CARD_STATE_DOWN; 1012 card->state = CARD_STATE_DOWN;
1013 mutex_unlock(&card->conf_mutex);
1010 return rc; 1014 return rc;
1011} 1015}
1012 1016
@@ -1022,6 +1026,7 @@ static int __qeth_l2_set_offline(struct ccwgroup_device *cgdev,
1022 int rc = 0, rc2 = 0, rc3 = 0; 1026 int rc = 0, rc2 = 0, rc3 = 0;
1023 enum qeth_card_states recover_flag; 1027 enum qeth_card_states recover_flag;
1024 1028
1029 mutex_lock(&card->conf_mutex);
1025 QETH_DBF_TEXT(SETUP, 3, "setoffl"); 1030 QETH_DBF_TEXT(SETUP, 3, "setoffl");
1026 QETH_DBF_HEX(SETUP, 3, &card, sizeof(void *)); 1031 QETH_DBF_HEX(SETUP, 3, &card, sizeof(void *));
1027 1032
@@ -1040,6 +1045,7 @@ static int __qeth_l2_set_offline(struct ccwgroup_device *cgdev,
1040 card->state = CARD_STATE_RECOVER; 1045 card->state = CARD_STATE_RECOVER;
1041 /* let user_space know that device is offline */ 1046 /* let user_space know that device is offline */
1042 kobject_uevent(&cgdev->dev.kobj, KOBJ_CHANGE); 1047 kobject_uevent(&cgdev->dev.kobj, KOBJ_CHANGE);
1048 mutex_unlock(&card->conf_mutex);
1043 return 0; 1049 return 0;
1044} 1050}
1045 1051