s390/qeth: no VLAN support on OSM
authorJulian Wiedmann <jwi@linux.vnet.ibm.com>
Wed, 18 Oct 2017 15:40:20 +0000 (17:40 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Oct 2017 12:11:04 +0000 (13:11 +0100)
Instead of silently discarding VLAN registration requests on OSM,
just indicate that this card type doesn't support VLAN.

Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/s390/net/qeth_l2_main.c

index 87aa8c2..d2537c0 100644 (file)
@@ -348,10 +348,6 @@ static int qeth_l2_vlan_rx_add_vid(struct net_device *dev,
        QETH_CARD_TEXT_(card, 4, "aid:%d", vid);
        if (!vid)
                return 0;
-       if (card->info.type == QETH_CARD_TYPE_OSM) {
-               QETH_CARD_TEXT(card, 3, "aidOSM");
-               return 0;
-       }
        if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) {
                QETH_CARD_TEXT(card, 3, "aidREC");
                return 0;
@@ -381,10 +377,6 @@ static int qeth_l2_vlan_rx_kill_vid(struct net_device *dev,
        int rc = 0;
 
        QETH_CARD_TEXT_(card, 4, "kid:%d", vid);
-       if (card->info.type == QETH_CARD_TYPE_OSM) {
-               QETH_CARD_TEXT(card, 3, "kidOSM");
-               return 0;
-       }
        if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) {
                QETH_CARD_TEXT(card, 3, "kidREC");
                return 0;
@@ -1010,7 +1002,11 @@ static int qeth_l2_setup_netdev(struct qeth_card *card)
        } else {
                card->dev->ethtool_ops = &qeth_l2_ethtool_ops;
        }
-       card->dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
+
+       if (card->info.type == QETH_CARD_TYPE_OSM)
+               card->dev->features |= NETIF_F_VLAN_CHALLENGED;
+       else
+               card->dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
        if (card->info.type == QETH_CARD_TYPE_OSD && !card->info.guestlan) {
                card->dev->hw_features = NETIF_F_SG;
                card->dev->vlan_features = NETIF_F_SG;
@@ -1120,8 +1116,7 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
                        goto out_remove;
        }
 
-       if (card->info.type != QETH_CARD_TYPE_OSN &&
-           card->info.type != QETH_CARD_TYPE_OSM)
+       if (card->info.type != QETH_CARD_TYPE_OSN)
                qeth_l2_process_vlans(card);
 
        netif_tx_disable(card->dev);