s390/qeth: remove .do_ioctl() callback from driver discipline
authorJulian Wiedmann <jwi@linux.ibm.com>
Mon, 25 Oct 2021 09:56:51 +0000 (11:56 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Oct 2021 12:58:19 +0000 (13:58 +0100)
With commit 18787eeebd71 ("qeth: use ndo_siocdevprivate") this callback
is now actually used to handle transport mode-specific _private_ ioctls.

We only have such ioctls for L3 devices. So wire up a L3-specific
.ndo_siocdevprivate() callback that handles those ioctls, and defers to
the core qeth_siocdevprivate() for all other private ioctls.

This takes the discipline one step closer to its original purpose of
providing an internal extension for the qeth_core_ccwgroup_driver.

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

index a5aa0bdc61d69587eb2e2e7becb6c2182ee990e3..0dc62b288480535529ea2d98449ab57ad97e4a41 100644 (file)
@@ -771,8 +771,6 @@ struct qeth_discipline {
        void (*remove) (struct ccwgroup_device *);
        int (*set_online)(struct qeth_card *card, bool carrier_ok);
        void (*set_offline)(struct qeth_card *card);
-       int (*do_ioctl)(struct net_device *dev, struct ifreq *rq,
-                       void __user *data, int cmd);
        int (*control_event_handler)(struct qeth_card *card,
                                        struct qeth_ipa_cmd *cmd);
 };
index 15999a8160544a8c39c7ddfff44dfec0c0ec705b..4149ea253fa0ef9d9a8420593720b15a253eb981 100644 (file)
@@ -6600,10 +6600,7 @@ int qeth_siocdevprivate(struct net_device *dev, struct ifreq *rq, void __user *d
                rc = qeth_query_oat_command(card, data);
                break;
        default:
-               if (card->discipline->do_ioctl)
-                       rc = card->discipline->do_ioctl(dev, rq, data, cmd);
-               else
-                       rc = -EOPNOTSUPP;
+               rc = -EOPNOTSUPP;
        }
        if (rc)
                QETH_CARD_TEXT_(card, 2, "ioce%x", rc);
index 07104fe63df49e966a67383d3003f3ee9b4f9681..adba52da9cab35430c504df8fa748ac596838134 100644 (file)
@@ -2430,7 +2430,6 @@ const struct qeth_discipline qeth_l2_discipline = {
        .remove = qeth_l2_remove_device,
        .set_online = qeth_l2_set_online,
        .set_offline = qeth_l2_set_offline,
-       .do_ioctl = NULL,
        .control_event_handler = qeth_l2_control_event,
 };
 EXPORT_SYMBOL_GPL(qeth_l2_discipline);
index e6e9213102117a055aa38b97a41d69d534a35558..b68942e866666e5f9f999a977823483777d37765 100644 (file)
@@ -1511,7 +1511,8 @@ static int qeth_l3_arp_flush_cache(struct qeth_card *card)
        return rc;
 }
 
-static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, void __user *data, int cmd)
+static int qeth_l3_ndo_siocdevprivate(struct net_device *dev, struct ifreq *rq,
+                                     void __user *data, int cmd)
 {
        struct qeth_card *card = dev->ml_priv;
        struct qeth_arp_cache_entry arp_entry;
@@ -1552,7 +1553,7 @@ static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, void __use
                rc = qeth_l3_arp_flush_cache(card);
                break;
        default:
-               rc = -EOPNOTSUPP;
+               rc = qeth_siocdevprivate(dev, rq, data, cmd);
        }
        return rc;
 }
@@ -1841,7 +1842,7 @@ static const struct net_device_ops qeth_l3_netdev_ops = {
        .ndo_validate_addr      = eth_validate_addr,
        .ndo_set_rx_mode        = qeth_l3_set_rx_mode,
        .ndo_eth_ioctl          = qeth_do_ioctl,
-       .ndo_siocdevprivate     = qeth_siocdevprivate,
+       .ndo_siocdevprivate     = qeth_l3_ndo_siocdevprivate,
        .ndo_fix_features       = qeth_fix_features,
        .ndo_set_features       = qeth_set_features,
        .ndo_tx_timeout         = qeth_tx_timeout,
@@ -1857,7 +1858,7 @@ static const struct net_device_ops qeth_l3_osa_netdev_ops = {
        .ndo_validate_addr      = eth_validate_addr,
        .ndo_set_rx_mode        = qeth_l3_set_rx_mode,
        .ndo_eth_ioctl          = qeth_do_ioctl,
-       .ndo_siocdevprivate     = qeth_siocdevprivate,
+       .ndo_siocdevprivate     = qeth_l3_ndo_siocdevprivate,
        .ndo_fix_features       = qeth_fix_features,
        .ndo_set_features       = qeth_set_features,
        .ndo_tx_timeout         = qeth_tx_timeout,
@@ -2071,7 +2072,6 @@ const struct qeth_discipline qeth_l3_discipline = {
        .remove = qeth_l3_remove_device,
        .set_online = qeth_l3_set_online,
        .set_offline = qeth_l3_set_offline,
-       .do_ioctl = qeth_l3_do_ioctl,
        .control_event_handler = qeth_l3_control_event,
 };
 EXPORT_SYMBOL_GPL(qeth_l3_discipline);