@@ -79,6 +79,8 @@ static int ionic_lif_hwstamp_set_ts_config(struct ionic_lif *lif,
if (!lif->phc || !lif->phc->ptp)
return -EOPNOTSUPP;
+ mutex_lock(&lif->phc->config_lock);
+
if (new_ts) {
config = new_ts;
} else {
@@ -96,12 +98,16 @@ static int ionic_lif_hwstamp_set_ts_config(struct ionic_lif *lif,
}
tx_mode = ionic_hwstamp_tx_mode(config->tx_type);
- if (tx_mode < 0)
- return tx_mode;
+ if (tx_mode < 0) {
+ err = tx_mode;
+ goto err_queues;
+ }
mask = cpu_to_le64(BIT_ULL(tx_mode));
- if ((ionic->ident.lif.eth.hwstamp_tx_modes & mask) != mask)
- return -ERANGE;
+ if ((ionic->ident.lif.eth.hwstamp_tx_modes & mask) != mask) {
+ err = -ERANGE;
+ goto err_queues;
+ }
rx_filt = ionic_hwstamp_rx_filt(config->rx_filter);
rx_all = config->rx_filter != HWTSTAMP_FILTER_NONE && !rx_filt;
@@ -116,8 +122,6 @@ static int ionic_lif_hwstamp_set_ts_config(struct ionic_lif *lif,
dev_dbg(ionic->dev, "config_rx_filter %d rx_filt %#llx rx_all %d\n",
config->rx_filter, rx_filt, rx_all);
- mutex_lock(&lif->phc->config_lock);
-
if (tx_mode) {
err = ionic_lif_create_hwstamp_txq(lif);
if (err)
Make sure the configuration is locked before operating on it for the replay. Signed-off-by: Shannon Nelson <snelson@pensando.io> --- drivers/net/ethernet/pensando/ionic/ionic_phc.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)