OSDN Git Service

ionic: pull hwstamp queue_lock up a level
authorShannon Nelson <snelson@pensando.io>
Fri, 27 Aug 2021 18:55:11 +0000 (11:55 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 28 Aug 2021 10:23:09 +0000 (11:23 +0100)
Move the hwstamp configuration use of queue_lock up
a level to simplify use and error handling.

Signed-off-by: Shannon Nelson <snelson@pensando.io>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/pensando/ionic/ionic_lif.c
drivers/net/ethernet/pensando/ionic/ionic_phc.c

index 1d31b93..96e7e28 100644 (file)
@@ -849,10 +849,8 @@ int ionic_lif_create_hwstamp_txq(struct ionic_lif *lif)
        u64 features;
        int err;
 
-       mutex_lock(&lif->queue_lock);
-
        if (lif->hwstamp_txq)
-               goto out;
+               return 0;
 
        features = IONIC_Q_F_2X_CQ_DESC | IONIC_TXQ_F_HWSTAMP;
 
@@ -894,9 +892,6 @@ int ionic_lif_create_hwstamp_txq(struct ionic_lif *lif)
                }
        }
 
-out:
-       mutex_unlock(&lif->queue_lock);
-
        return 0;
 
 err_qcq_enable:
@@ -907,7 +902,6 @@ err_qcq_init:
        ionic_qcq_free(lif, txq);
        devm_kfree(lif->ionic->dev, txq);
 err_qcq_alloc:
-       mutex_unlock(&lif->queue_lock);
        return err;
 }
 
@@ -919,10 +913,8 @@ int ionic_lif_create_hwstamp_rxq(struct ionic_lif *lif)
        u64 features;
        int err;
 
-       mutex_lock(&lif->queue_lock);
-
        if (lif->hwstamp_rxq)
-               goto out;
+               return 0;
 
        features = IONIC_Q_F_2X_CQ_DESC | IONIC_RXQ_F_HWSTAMP;
 
@@ -960,9 +952,6 @@ int ionic_lif_create_hwstamp_rxq(struct ionic_lif *lif)
                }
        }
 
-out:
-       mutex_unlock(&lif->queue_lock);
-
        return 0;
 
 err_qcq_enable:
@@ -973,7 +962,6 @@ err_qcq_init:
        ionic_qcq_free(lif, rxq);
        devm_kfree(lif->ionic->dev, rxq);
 err_qcq_alloc:
-       mutex_unlock(&lif->queue_lock);
        return err;
 }
 
index afc45da..c39790a 100644 (file)
@@ -194,7 +194,9 @@ int ionic_lif_hwstamp_set(struct ionic_lif *lif, struct ifreq *ifr)
        if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
                return -EFAULT;
 
+       mutex_lock(&lif->queue_lock);
        err = ionic_lif_hwstamp_set_ts_config(lif, &config);
+       mutex_unlock(&lif->queue_lock);
        if (err) {
                netdev_info(lif->netdev, "hwstamp set failed: %d\n", err);
                return err;
@@ -213,7 +215,9 @@ void ionic_lif_hwstamp_replay(struct ionic_lif *lif)
        if (!lif->phc || !lif->phc->ptp)
                return;
 
+       mutex_lock(&lif->queue_lock);
        err = ionic_lif_hwstamp_set_ts_config(lif, NULL);
+       mutex_unlock(&lif->queue_lock);
        if (err)
                netdev_info(lif->netdev, "hwstamp replay failed: %d\n", err);
 }