mirror of
https://github.com/torvalds/linux
synced 2024-10-18 17:29:25 +00:00
ionic: recreate hwstamp queues on ifup
The queues can be freed in ionic_close(). They need to be recreated after ionic_open(). It doesn't need to replay the whole config. It only needs to create the timestamping queues again. Signed-off-by: Allen Hubbe <allenbh@pensando.io> Signed-off-by: Shannon Nelson <snelson@pensando.io> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7ee99fc5ed
commit
ccbbd002a4
|
@ -2246,7 +2246,13 @@ static int ionic_open(struct net_device *netdev)
|
|||
goto err_txrx_deinit;
|
||||
}
|
||||
|
||||
/* If hardware timestamping is enabled, but the queues were freed by
|
||||
* ionic_stop, those need to be reallocated and initialized, too.
|
||||
*/
|
||||
ionic_lif_hwstamp_recreate_queues(lif);
|
||||
|
||||
mutex_unlock(&lif->queue_lock);
|
||||
|
||||
return 0;
|
||||
|
||||
err_txrx_deinit:
|
||||
|
|
|
@ -306,6 +306,7 @@ int ionic_lif_size(struct ionic *ionic);
|
|||
|
||||
#if IS_ENABLED(CONFIG_PTP_1588_CLOCK)
|
||||
void ionic_lif_hwstamp_replay(struct ionic_lif *lif);
|
||||
void ionic_lif_hwstamp_recreate_queues(struct ionic_lif *lif);
|
||||
int ionic_lif_hwstamp_set(struct ionic_lif *lif, struct ifreq *ifr);
|
||||
int ionic_lif_hwstamp_get(struct ionic_lif *lif, struct ifreq *ifr);
|
||||
ktime_t ionic_lif_phc_ktime(struct ionic_lif *lif, u64 counter);
|
||||
|
@ -315,6 +316,7 @@ void ionic_lif_alloc_phc(struct ionic_lif *lif);
|
|||
void ionic_lif_free_phc(struct ionic_lif *lif);
|
||||
#else
|
||||
static inline void ionic_lif_hwstamp_replay(struct ionic_lif *lif) {}
|
||||
static inline void ionic_lif_hwstamp_recreate_queues(struct ionic_lif *lif) {}
|
||||
|
||||
static inline int ionic_lif_hwstamp_set(struct ionic_lif *lif, struct ifreq *ifr)
|
||||
{
|
||||
|
|
|
@ -222,6 +222,30 @@ void ionic_lif_hwstamp_replay(struct ionic_lif *lif)
|
|||
netdev_info(lif->netdev, "hwstamp replay failed: %d\n", err);
|
||||
}
|
||||
|
||||
void ionic_lif_hwstamp_recreate_queues(struct ionic_lif *lif)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (!lif->phc || !lif->phc->ptp)
|
||||
return;
|
||||
|
||||
mutex_lock(&lif->phc->config_lock);
|
||||
|
||||
if (lif->phc->ts_config_tx_mode) {
|
||||
err = ionic_lif_create_hwstamp_txq(lif);
|
||||
if (err)
|
||||
netdev_info(lif->netdev, "hwstamp recreate txq failed: %d\n", err);
|
||||
}
|
||||
|
||||
if (lif->phc->ts_config_rx_filt) {
|
||||
err = ionic_lif_create_hwstamp_rxq(lif);
|
||||
if (err)
|
||||
netdev_info(lif->netdev, "hwstamp recreate rxq failed: %d\n", err);
|
||||
}
|
||||
|
||||
mutex_unlock(&lif->phc->config_lock);
|
||||
}
|
||||
|
||||
int ionic_lif_hwstamp_get(struct ionic_lif *lif, struct ifreq *ifr)
|
||||
{
|
||||
struct hwtstamp_config config;
|
||||
|
|
Loading…
Reference in a new issue