|
@@ -373,8 +373,6 @@ static int qeth_l2_stop_card(struct qeth_card *card, int recovery_mode)
|
|
|
QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
|
|
QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
|
|
|
|
|
|
|
|
qeth_set_allowed_threads(card, 0, 1);
|
|
qeth_set_allowed_threads(card, 0, 1);
|
|
|
- if (qeth_wait_for_threads(card, ~QETH_RECOVER_THREAD))
|
|
|
|
|
- return -ERESTARTSYS;
|
|
|
|
|
if (card->read.state == CH_STATE_UP &&
|
|
if (card->read.state == CH_STATE_UP &&
|
|
|
card->write.state == CH_STATE_UP &&
|
|
card->write.state == CH_STATE_UP &&
|
|
|
(card->state == CARD_STATE_UP)) {
|
|
(card->state == CARD_STATE_UP)) {
|
|
@@ -451,12 +449,15 @@ static void qeth_l2_process_inbound_buffer(struct qeth_card *card,
|
|
|
netif_rx(skb);
|
|
netif_rx(skb);
|
|
|
break;
|
|
break;
|
|
|
case QETH_HEADER_TYPE_OSN:
|
|
case QETH_HEADER_TYPE_OSN:
|
|
|
- skb_push(skb, sizeof(struct qeth_hdr));
|
|
|
|
|
- skb_copy_to_linear_data(skb, hdr,
|
|
|
|
|
|
|
+ if (card->info.type == QETH_CARD_TYPE_OSN) {
|
|
|
|
|
+ skb_push(skb, sizeof(struct qeth_hdr));
|
|
|
|
|
+ skb_copy_to_linear_data(skb, hdr,
|
|
|
sizeof(struct qeth_hdr));
|
|
sizeof(struct qeth_hdr));
|
|
|
- len = skb->len;
|
|
|
|
|
- card->osn_info.data_cb(skb);
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ len = skb->len;
|
|
|
|
|
+ card->osn_info.data_cb(skb);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ /* else unknown */
|
|
|
default:
|
|
default:
|
|
|
dev_kfree_skb_any(skb);
|
|
dev_kfree_skb_any(skb);
|
|
|
QETH_DBF_TEXT(TRACE, 3, "inbunkno");
|
|
QETH_DBF_TEXT(TRACE, 3, "inbunkno");
|
|
@@ -975,12 +976,6 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
|
|
|
QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
|
|
QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
|
|
|
|
|
|
|
|
qeth_set_allowed_threads(card, QETH_RECOVER_THREAD, 1);
|
|
qeth_set_allowed_threads(card, QETH_RECOVER_THREAD, 1);
|
|
|
- if (qeth_wait_for_threads(card, ~QETH_RECOVER_THREAD)) {
|
|
|
|
|
- PRINT_WARN("set_online of card %s interrupted by user!\n",
|
|
|
|
|
- CARD_BUS_ID(card));
|
|
|
|
|
- return -ERESTARTSYS;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
recover_flag = card->state;
|
|
recover_flag = card->state;
|
|
|
rc = ccw_device_set_online(CARD_RDEV(card));
|
|
rc = ccw_device_set_online(CARD_RDEV(card));
|
|
|
if (rc) {
|
|
if (rc) {
|
|
@@ -1091,11 +1086,7 @@ static int __qeth_l2_set_offline(struct ccwgroup_device *cgdev,
|
|
|
if (card->dev && netif_carrier_ok(card->dev))
|
|
if (card->dev && netif_carrier_ok(card->dev))
|
|
|
netif_carrier_off(card->dev);
|
|
netif_carrier_off(card->dev);
|
|
|
recover_flag = card->state;
|
|
recover_flag = card->state;
|
|
|
- if (qeth_l2_stop_card(card, recovery_mode) == -ERESTARTSYS) {
|
|
|
|
|
- PRINT_WARN("Stopping card %s interrupted by user!\n",
|
|
|
|
|
- CARD_BUS_ID(card));
|
|
|
|
|
- return -ERESTARTSYS;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ qeth_l2_stop_card(card, recovery_mode);
|
|
|
rc = ccw_device_set_offline(CARD_DDEV(card));
|
|
rc = ccw_device_set_offline(CARD_DDEV(card));
|
|
|
rc2 = ccw_device_set_offline(CARD_WDEV(card));
|
|
rc2 = ccw_device_set_offline(CARD_WDEV(card));
|
|
|
rc3 = ccw_device_set_offline(CARD_RDEV(card));
|
|
rc3 = ccw_device_set_offline(CARD_RDEV(card));
|