]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
net_tstamp: add new flag HWTSTAMP_FLAG_BONDED_PHC_INDEX
authorHangbin Liu <liuhangbin@gmail.com>
Fri, 10 Dec 2021 08:59:58 +0000 (16:59 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 14 Dec 2021 12:28:24 +0000 (12:28 +0000)
Since commit 94dd016ae538 ("bond: pass get_ts_info and SIOC[SG]HWTSTAMP
ioctl to active device") the user could get bond active interface's
PHC index directly. But when there is a failover, the bond active
interface will change, thus the PHC index is also changed. This may
break the user's program if they did not update the PHC timely.

This patch adds a new hwtstamp_config flag HWTSTAMP_FLAG_BONDED_PHC_INDEX.
When the user wants to get the bond active interface's PHC, they need to
add this flag and be aware the PHC index may be changed.

With the new flag. All flag checks in current drivers are removed. Only
the checking in net_hwtstamp_validate() is kept.

Suggested-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
40 files changed:
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
drivers/net/dsa/mv88e6xxx/hwtstamp.c
drivers/net/ethernet/amd/xgbe/xgbe-drv.c
drivers/net/ethernet/aquantia/atlantic/aq_main.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c
drivers/net/ethernet/broadcom/tg3.c
drivers/net/ethernet/cadence/macb_ptp.c
drivers/net/ethernet/cavium/liquidio/lio_main.c
drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
drivers/net/ethernet/cavium/thunder/nicvf_main.c
drivers/net/ethernet/engleder/tsnep_ptp.c
drivers/net/ethernet/freescale/fec_ptp.c
drivers/net/ethernet/freescale/gianfar.c
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/intel/i40e/i40e_ptp.c
drivers/net/ethernet/intel/ice/ice_ptp.c
drivers/net/ethernet/intel/igb/igb_ptp.c
drivers/net/ethernet/intel/igc/igc_ptp.c
drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
drivers/net/ethernet/mellanox/mlx4/en_netdev.c
drivers/net/ethernet/microchip/lan743x_ptp.c
drivers/net/ethernet/mscc/ocelot.c
drivers/net/ethernet/neterion/vxge/vxge-main.c
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
drivers/net/ethernet/qlogic/qede/qede_ptp.c
drivers/net/ethernet/renesas/ravb_main.c
drivers/net/ethernet/sfc/ptp.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ethernet/ti/cpsw_priv.c
drivers/net/ethernet/ti/netcp_ethss.c
drivers/net/ethernet/xscale/ixp4xx_eth.c
drivers/net/phy/dp83640.c
drivers/net/phy/mscc/mscc_ptp.c
drivers/ptp/ptp_ines.c
include/uapi/linux/net_tstamp.h
net/core/dev_ioctl.c

index 40b41c794dfacbb45a5ebba88714009e3452ae67..b3bc948d6145bdd149c6f6f386d29464cde405d1 100644 (file)
@@ -52,10 +52,6 @@ static int hellcreek_set_hwtstamp_config(struct hellcreek *hellcreek, int port,
         */
        clear_bit_unlock(HELLCREEK_HWTSTAMP_ENABLED, &ps->state);
 
-       /* Reserved for future extensions */
-       if (config->flags)
-               return -EINVAL;
-
        switch (config->tx_type) {
        case HWTSTAMP_TX_ON:
                tx_tstamp_enable = true;
index 8f74ffc7a2799d5f229823688a921fe2aad89b55..389f8a6ec0ab30194e3596f26e77ff68637d25ed 100644 (file)
@@ -100,10 +100,6 @@ static int mv88e6xxx_set_hwtstamp_config(struct mv88e6xxx_chip *chip, int port,
         */
        clear_bit_unlock(MV88E6XXX_HWTSTAMP_ENABLED, &ps->state);
 
-       /* reserved for future extensions */
-       if (config->flags)
-               return -EINVAL;
-
        switch (config->tx_type) {
        case HWTSTAMP_TX_OFF:
                tstamp_enable = false;
index 30d24d19f40d11732e1fbaea77d9bea0cce1abe5..492ac383f16df068f38a8c8776f8681eb11edd36 100644 (file)
@@ -1508,9 +1508,6 @@ static int xgbe_set_hwtstamp_settings(struct xgbe_prv_data *pdata,
        if (copy_from_user(&config, ifreq->ifr_data, sizeof(config)))
                return -EFAULT;
 
-       if (config.flags)
-               return -EINVAL;
-
        mac_tscr = 0;
 
        switch (config.tx_type) {
index e22935ce95730bea37ddd5f7c964c240f38a986e..e65ce7199dac99155e9be5d31bc3bdeb8d8e125f 100644 (file)
@@ -231,9 +231,6 @@ static void aq_ndev_set_multicast_settings(struct net_device *ndev)
 static int aq_ndev_config_hwtstamp(struct aq_nic_s *aq_nic,
                                   struct hwtstamp_config *config)
 {
-       if (config->flags)
-               return -EINVAL;
-
        switch (config->tx_type) {
        case HWTSTAMP_TX_OFF:
        case HWTSTAMP_TX_ON:
index aec666e976831e0ba44b5a2f25812b938b6f3199..651bc1d7a57ab34ee06eaea2181df5e0f6b57207 100644 (file)
@@ -15356,11 +15356,6 @@ static int bnx2x_hwtstamp_ioctl(struct bnx2x *bp, struct ifreq *ifr)
        DP(BNX2X_MSG_PTP, "Requested tx_type: %d, requested rx_filters = %d\n",
           config.tx_type, config.rx_filter);
 
-       if (config.flags) {
-               BNX2X_ERR("config.flags is reserved for future use\n");
-               return -EINVAL;
-       }
-
        bp->hwtstamp_ioctl_called = true;
        bp->tx_type = config.tx_type;
        bp->rx_filter = config.rx_filter;
index 8388be119f9a07512b42b04cd69180055e678941..48520967746ff9806d4f48201ec51edf9ca9906a 100644 (file)
@@ -417,9 +417,6 @@ int bnxt_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
        if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
                return -EFAULT;
 
-       if (stmpconf.flags)
-               return -EINVAL;
-
        if (stmpconf.tx_type != HWTSTAMP_TX_ON &&
            stmpconf.tx_type != HWTSTAMP_TX_OFF)
                return -ERANGE;
index 283f3c1f119507b04cf8820e34cd7f5b9e434c05..c28f8cc00d1cf102aee2291fb824cda5c8fd7f79 100644 (file)
@@ -13806,9 +13806,6 @@ static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
        if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
                return -EFAULT;
 
-       if (stmpconf.flags)
-               return -EINVAL;
-
        if (stmpconf.tx_type != HWTSTAMP_TX_ON &&
            stmpconf.tx_type != HWTSTAMP_TX_OFF)
                return -ERANGE;
index 095c5a2144a71ea973ae58f93861f0429bf822ee..fb6b27f46b153c717f6e1fd3a3c1f02a97c5c95d 100644 (file)
@@ -464,10 +464,6 @@ int gem_set_hwtst(struct net_device *dev, struct ifreq *ifr, int cmd)
                           sizeof(*tstamp_config)))
                return -EFAULT;
 
-       /* reserved for future extensions */
-       if (tstamp_config->flags)
-               return -EINVAL;
-
        switch (tstamp_config->tx_type) {
        case HWTSTAMP_TX_OFF:
                break;
index 12eee2bc7f5c885228b984a181feeb68eb9a675e..ba28aa444e5aeaa4b7f6c34654c263c28f15d0f3 100644 (file)
@@ -2114,9 +2114,6 @@ static int hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr)
        if (copy_from_user(&conf, ifr->ifr_data, sizeof(conf)))
                return -EFAULT;
 
-       if (conf.flags)
-               return -EINVAL;
-
        switch (conf.tx_type) {
        case HWTSTAMP_TX_ON:
        case HWTSTAMP_TX_OFF:
index c607756b731f07e76f8ad92ee208ae6bfef4323b..568f211d91ccd06dbc9f21f5d785af2120fcf066 100644 (file)
@@ -1254,9 +1254,6 @@ static int hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr)
        if (copy_from_user(&conf, ifr->ifr_data, sizeof(conf)))
                return -EFAULT;
 
-       if (conf.flags)
-               return -EINVAL;
-
        switch (conf.tx_type) {
        case HWTSTAMP_TX_ON:
        case HWTSTAMP_TX_OFF:
index 4b4ffdd1044d83668fa9015c1e04a45e1641afad..103591dcea1c3217978069b60c6e44f282d55662 100644 (file)
@@ -702,9 +702,6 @@ static int octeon_mgmt_ioctl_hwtstamp(struct net_device *netdev,
        if (copy_from_user(&config, rq->ifr_data, sizeof(config)))
                return -EFAULT;
 
-       if (config.flags) /* reserved for future extensions */
-               return -EINVAL;
-
        /* Check the status of hardware for tiemstamps */
        if (OCTEON_IS_MODEL(OCTEON_CN6XXX)) {
                /* Get the current state of the PTP clock */
index bb45d5df2856fc22f4ab551fcdb8264c3c32f300..63191692f624cc78768919cb707c70a73a269ea7 100644 (file)
@@ -1917,10 +1917,6 @@ static int nicvf_config_hwtstamp(struct net_device *netdev, struct ifreq *ifr)
        if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
                return -EFAULT;
 
-       /* reserved for future extensions */
-       if (config.flags)
-               return -EINVAL;
-
        switch (config.tx_type) {
        case HWTSTAMP_TX_OFF:
        case HWTSTAMP_TX_ON:
index 4bfb4d8508f58386b9ec5fda904c0c6040251adb..eaad453d487e11029d2ed3bb6861aa7b1e0aa069 100644 (file)
@@ -31,9 +31,6 @@ int tsnep_ptp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
                if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
                        return -EFAULT;
 
-               if (config.flags)
-                       return -EINVAL;
-
                switch (config.tx_type) {
                case HWTSTAMP_TX_OFF:
                case HWTSTAMP_TX_ON:
index d71eac7e192490bbef29d8b07745958952f085c6..af99017a54539aaae91c9b2ee2835f8595896506 100644 (file)
@@ -473,10 +473,6 @@ int fec_ptp_set(struct net_device *ndev, struct ifreq *ifr)
        if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
                return -EFAULT;
 
-       /* reserved for future extensions */
-       if (config.flags)
-               return -EINVAL;
-
        switch (config.tx_type) {
        case HWTSTAMP_TX_OFF:
                fep->hwts_tx_en = 0;
index acab58fd3db38cfb22f31610922c5f0c0d398ba8..206b7a35eaf55a7af95f44b911c9f489a3c5fa1d 100644 (file)
@@ -2076,10 +2076,6 @@ static int gfar_hwtstamp_set(struct net_device *netdev, struct ifreq *ifr)
        if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
                return -EFAULT;
 
-       /* reserved for future extensions */
-       if (config.flags)
-               return -EINVAL;
-
        switch (config.tx_type) {
        case HWTSTAMP_TX_OFF:
                priv->hwts_tx_en = 0;
index 44e2dc8328a2224afd22553943044d19a16e3611..635a95927e93005b1ee2091c7c8d5dfb9a3ee1fb 100644 (file)
@@ -3614,10 +3614,6 @@ static int e1000e_config_hwtstamp(struct e1000_adapter *adapter,
        if (!(adapter->flags & FLAG_HAS_HW_TIMESTAMP))
                return -EINVAL;
 
-       /* flags reserved for future extensions - must be zero */
-       if (config->flags)
-               return -EINVAL;
-
        switch (config->tx_type) {
        case HWTSTAMP_TX_OFF:
                tsync_tx_ctl = 0;
index 09b1d5aed1c9f37260b341dd90d8b9e98a937a44..61e5789d78db70040a97f404c191fb87e51ed95d 100644 (file)
@@ -1205,10 +1205,6 @@ static int i40e_ptp_set_timestamp_mode(struct i40e_pf *pf,
 
        INIT_WORK(&pf->ptp_extts0_work, i40e_ptp_extts0_work);
 
-       /* Reserved for future extensions. */
-       if (config->flags)
-               return -EINVAL;
-
        switch (config->tx_type) {
        case HWTSTAMP_TX_OFF:
                pf->ptp_tx = false;
index bf7247c6f58e259406e20cb456c750a8997a44d1..dfc7c830acf6181a02cb7e8cf0a84e98598a3404 100644 (file)
@@ -1205,10 +1205,6 @@ int ice_ptp_get_ts_config(struct ice_pf *pf, struct ifreq *ifr)
 static int
 ice_ptp_set_timestamp_mode(struct ice_pf *pf, struct hwtstamp_config *config)
 {
-       /* Reserved for future extensions. */
-       if (config->flags)
-               return -EINVAL;
-
        switch (config->tx_type) {
        case HWTSTAMP_TX_OFF:
                ice_set_tx_tstamp(pf, false);
index 0011b15e678c352a9354b01e42b4bd2026bba6bd..0ac4cc5eaa2d1012f529f7db9857bff61743c7c0 100644 (file)
@@ -1015,10 +1015,6 @@ static int igb_ptp_set_timestamp_mode(struct igb_adapter *adapter,
        bool is_l2 = false;
        u32 regval;
 
-       /* reserved for future extensions */
-       if (config->flags)
-               return -EINVAL;
-
        switch (config->tx_type) {
        case HWTSTAMP_TX_OFF:
                tsync_tx_ctl = 0;
index 30568e3544cdab6290d855f42292cf4b75676da7..71813fa8f928ade2205143cd15c67382f58490cf 100644 (file)
@@ -560,10 +560,6 @@ static void igc_ptp_enable_tx_timestamp(struct igc_adapter *adapter)
 static int igc_ptp_set_timestamp_mode(struct igc_adapter *adapter,
                                      struct hwtstamp_config *config)
 {
-       /* reserved for future extensions */
-       if (config->flags)
-               return -EINVAL;
-
        switch (config->tx_type) {
        case HWTSTAMP_TX_OFF:
                igc_ptp_disable_tx_timestamp(adapter);
index 23ddfd79fc8b675bbc8f00e2933ee3ef7e29b022..336426a67ac1beb68278e8f3b80da82004ef36b3 100644 (file)
@@ -992,10 +992,6 @@ static int ixgbe_ptp_set_timestamp_mode(struct ixgbe_adapter *adapter,
        bool is_l2 = false;
        u32 regval;
 
-       /* reserved for future extensions */
-       if (config->flags)
-               return -EINVAL;
-
        switch (config->tx_type) {
        case HWTSTAMP_TX_OFF:
                tsync_tx_ctl = 0;
index 8e5820d12362702b2f5dbdaafebf5845dc356cd8..b1cce44252965e0e153bcc8ab413a78aa8ae2abf 100644 (file)
@@ -5142,9 +5142,6 @@ static int mvpp2_set_ts_config(struct mvpp2_port *port, struct ifreq *ifr)
        if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
                return -EFAULT;
 
-       if (config.flags)
-               return -EINVAL;
-
        if (config.tx_type != HWTSTAMP_TX_OFF &&
            config.tx_type != HWTSTAMP_TX_ON)
                return -ERANGE;
index 1333edf1c361c57bd5c97dce77bb7e9cd28d650b..6080ebd9bd947eb31645f63b244cadd7f4e26a54 100644 (file)
@@ -2002,10 +2002,6 @@ int otx2_config_hwtstamp(struct net_device *netdev, struct ifreq *ifr)
        if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
                return -EFAULT;
 
-       /* reserved for future extensions */
-       if (config.flags)
-               return -EINVAL;
-
        switch (config.tx_type) {
        case HWTSTAMP_TX_OFF:
                otx2_config_hw_tx_tstamp(pfvf, false);
index f1c10f2bda780a1d4a9dabe3c1a126b80809e5e9..ad1e4caf48bf3d812013d321059d80d83643f430 100644 (file)
@@ -2427,10 +2427,6 @@ static int mlx4_en_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
        if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
                return -EFAULT;
 
-       /* reserved for future extensions */
-       if (config.flags)
-               return -EINVAL;
-
        /* device doesn't support time stamping */
        if (!(mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS))
                return -EINVAL;
index 9380e396f648787e49bbc84c9ed4620e1b6eae77..8b7a8d879083b3aeae0edcf2fbb0193685c7bccf 100644 (file)
@@ -1305,12 +1305,6 @@ int lan743x_ptp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
        if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
                return -EFAULT;
 
-       if (config.flags) {
-               netif_warn(adapter, drv, adapter->netdev,
-                          "ignoring hwtstamp_config.flags == 0x%08X, expected 0\n",
-                          config.flags);
-       }
-
        switch (config.tx_type) {
        case HWTSTAMP_TX_OFF:
                for (index = 0; index < LAN743X_MAX_TX_CHANNELS;
index 876a7ecf86eba77462d1676f47130497edd7431f..9b42187a026a8f0b7fbe838af2263387b2ce15ee 100644 (file)
@@ -1617,10 +1617,6 @@ int ocelot_hwstamp_set(struct ocelot *ocelot, int port, struct ifreq *ifr)
        if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
                return -EFAULT;
 
-       /* reserved for future extensions */
-       if (cfg.flags)
-               return -EINVAL;
-
        /* Tx type sanity check */
        switch (cfg.tx_type) {
        case HWTSTAMP_TX_ON:
index 1969009a91e79b16eaf325de02b81e885c341727..2c2e9e56ed4e54f6efff9a2931e9f5f6e026a436 100644 (file)
@@ -3159,10 +3159,6 @@ static int vxge_hwtstamp_set(struct vxgedev *vdev, void __user *data)
        if (copy_from_user(&config, data, sizeof(config)))
                return -EFAULT;
 
-       /* reserved for future extensions */
-       if (config.flags)
-               return -EINVAL;
-
        /* Transmit HW Timestamp not supported */
        switch (config.tx_type) {
        case HWTSTAMP_TX_OFF:
index 71d234291fc576b4cd08d6cbcfc53097cf35b410..1dc40c53728134b16365f2f91c591246bdf8d841 100644 (file)
@@ -210,9 +210,6 @@ static int hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
        if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
                return -EFAULT;
 
-       if (cfg.flags) /* reserved for future extensions */
-               return -EINVAL;
-
        /* Get ieee1588's dev information */
        pdev = adapter->ptp_pdev;
 
index 8c28fabb0ff638b4f4cc1d86bce0d5e6100ff3d4..39176e7657676e647853569556ca50a6443bd0fb 100644 (file)
@@ -304,11 +304,6 @@ int qede_ptp_hw_ts(struct qede_dev *edev, struct ifreq *ifr)
                   "HWTSTAMP IOCTL: Requested tx_type = %d, requested rx_filters = %d\n",
                   config.tx_type, config.rx_filter);
 
-       if (config.flags) {
-               DP_ERR(edev, "config.flags is reserved for future use\n");
-               return -EINVAL;
-       }
-
        ptp->hw_ts_ioctl_called = 1;
        ptp->tx_type = config.tx_type;
        ptp->rx_filter = config.rx_filter;
index ce09bd45527ea530e18c29689f1aecc1b5d48d19..b215cde68e10b5a0097dcf55e83e00b2a9d72bcb 100644 (file)
@@ -2221,10 +2221,6 @@ static int ravb_hwtstamp_set(struct net_device *ndev, struct ifreq *req)
        if (copy_from_user(&config, req->ifr_data, sizeof(config)))
                return -EFAULT;
 
-       /* Reserved for future extensions */
-       if (config.flags)
-               return -EINVAL;
-
        switch (config.tx_type) {
        case HWTSTAMP_TX_OFF:
                tstamp_tx_ctrl = 0;
index 797e51802ccbb5bfd6add5eeb2d9b164eed63a3a..f0ef515e2ade51d3715473616032edadad6ec2f4 100644 (file)
@@ -1765,9 +1765,6 @@ static int efx_ptp_ts_init(struct efx_nic *efx, struct hwtstamp_config *init)
 {
        int rc;
 
-       if (init->flags)
-               return -EINVAL;
-
        if ((init->tx_type != HWTSTAMP_TX_OFF) &&
            (init->tx_type != HWTSTAMP_TX_ON))
                return -ERANGE;
index 7e3e1bc0f61d1d819c5452f7036f87499db8bc60..c26ac288f9814696cb82db884b1646b5a423ba02 100644 (file)
@@ -638,10 +638,6 @@ static int stmmac_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
        netdev_dbg(priv->dev, "%s config flags:0x%x, tx_type:0x%x, rx_filter:0x%x\n",
                   __func__, config.flags, config.tx_type, config.rx_filter);
 
-       /* reserved for future extensions */
-       if (config.flags)
-               return -EINVAL;
-
        if (config.tx_type != HWTSTAMP_TX_OFF &&
            config.tx_type != HWTSTAMP_TX_ON)
                return -ERANGE;
index c99dd9735087ded91833c15b6bb04231dd3cef47..8624a044776f29aa3cad36918b22359315a03c6d 100644 (file)
@@ -626,10 +626,6 @@ static int cpsw_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
        if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
                return -EFAULT;
 
-       /* reserved for future extensions */
-       if (cfg.flags)
-               return -EINVAL;
-
        if (cfg.tx_type != HWTSTAMP_TX_OFF && cfg.tx_type != HWTSTAMP_TX_ON)
                return -ERANGE;
 
index 33c1592d5381ede5d92c19e100b5a139e0d59cfb..751fb0bc65c501cb7b4df87c44a453bc10e05c5d 100644 (file)
@@ -2654,10 +2654,6 @@ static int gbe_hwtstamp_set(struct gbe_intf *gbe_intf, struct ifreq *ifr)
        if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
                return -EFAULT;
 
-       /* reserved for future extensions */
-       if (cfg.flags)
-               return -EINVAL;
-
        switch (cfg.tx_type) {
        case HWTSTAMP_TX_OFF:
                gbe_dev->tx_ts_enabled = 0;
index 65fdad1107fc598a30df0d807dc27c7c0f733adb..df77a22d1b81cddfb442268fa1fd7113c1dd9543 100644 (file)
@@ -382,9 +382,6 @@ static int hwtstamp_set(struct net_device *netdev, struct ifreq *ifr)
        if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
                return -EFAULT;
 
-       if (cfg.flags) /* reserved for future extensions */
-               return -EINVAL;
-
        ret = ixp46x_ptp_find(&port->timesync_regs, &port->phc_index);
        if (ret)
                return ret;
index 705c16675b80c1405caa6bca5b182a742fff2f91..c2d1a85ec5591a858f5d95d7cabf0c8468b84d84 100644 (file)
@@ -1235,9 +1235,6 @@ static int dp83640_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr)
        if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
                return -EFAULT;
 
-       if (cfg.flags) /* reserved for future extensions */
-               return -EINVAL;
-
        if (cfg.tx_type < 0 || cfg.tx_type > HWTSTAMP_TX_ONESTEP_SYNC)
                return -ERANGE;
 
index edb951695b13e1cb13278bb80cd26b3df2162c3b..34f829845d0670cbe467d4976d5bcd835cd1cf06 100644 (file)
@@ -1057,9 +1057,6 @@ static int vsc85xx_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr)
        if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
                return -EFAULT;
 
-       if (cfg.flags)
-               return -EINVAL;
-
        switch (cfg.tx_type) {
        case HWTSTAMP_TX_ONESTEP_SYNC:
                one_step = true;
index 6c7c2843ba0b09c9332af66ad84b2f1ec5cd2bef..61f47fb9d997991ca500462ab19a78e1af22dbdc 100644 (file)
@@ -338,10 +338,6 @@ static int ines_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr)
        if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
                return -EFAULT;
 
-       /* reserved for future extensions */
-       if (cfg.flags)
-               return -EINVAL;
-
        switch (cfg.tx_type) {
        case HWTSTAMP_TX_OFF:
                ts_stat_tx = 0;
index fcc61c73a6668c7741c8488377135466ed047df6..e258e52cfd1fcbf8c9139916e45a52d172792472 100644 (file)
@@ -62,7 +62,7 @@ struct so_timestamping {
 /**
  * struct hwtstamp_config - %SIOCGHWTSTAMP and %SIOCSHWTSTAMP parameter
  *
- * @flags:     no flags defined right now, must be zero for %SIOCSHWTSTAMP
+ * @flags:     one of HWTSTAMP_FLAG_*
  * @tx_type:   one of HWTSTAMP_TX_*
  * @rx_filter: one of HWTSTAMP_FILTER_*
  *
@@ -78,6 +78,20 @@ struct hwtstamp_config {
        int rx_filter;
 };
 
+/* possible values for hwtstamp_config->flags */
+enum hwtstamp_flags {
+       /*
+        * With this flag, the user could get bond active interface's
+        * PHC index. Note this PHC index is not stable as when there
+        * is a failover, the bond active interface will be changed, so
+        * will be the PHC index.
+        */
+       HWTSTAMP_FLAG_BONDED_PHC_INDEX = (1<<0),
+
+       HWTSTAMP_FLAG_LAST = HWTSTAMP_FLAG_BONDED_PHC_INDEX,
+       HWTSTAMP_FLAG_MASK = (HWTSTAMP_FLAG_LAST - 1) | HWTSTAMP_FLAG_LAST
+};
+
 /* possible values for hwtstamp_config->tx_type */
 enum hwtstamp_tx_types {
        /*
index 1d309a6669325ad26c59892c4e78ca14dec017d9..1b807d119da54a4368329ae1249c96e12307973c 100644 (file)
@@ -192,7 +192,7 @@ static int net_hwtstamp_validate(struct ifreq *ifr)
        if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
                return -EFAULT;
 
-       if (cfg.flags) /* reserved for future extensions */
+       if (cfg.flags & ~HWTSTAMP_FLAG_MASK)
                return -EINVAL;
 
        tx_type = cfg.tx_type;