提交 0dd8357f 编写于 作者: J Jacob Keller 提交者: Jeff Kirsher

i40e: remove ptp_tx_work timestamp work item

This patch removes the unnecessary ptp_tx_work item. It conflicts with
the interrupt-based handler, and will cause spurious warning messages to
be displayed in the kernel log. Since the hardware can properly trigger
an interrupt, we do not need to poll for an available timestamp in a
work queue any more.
Signed-off-by: NJacob Keller <jacob.e.keller@intel.com>
Acked-by: NJesse Brandeburg <jesse.brandeburg@intel.com>
Tested-by: NKavindya Deegala <kavindya.s.deegala@intel.com>
Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
上级 a49eb42a
...@@ -329,9 +329,7 @@ struct i40e_pf { ...@@ -329,9 +329,7 @@ struct i40e_pf {
struct ptp_clock *ptp_clock; struct ptp_clock *ptp_clock;
struct ptp_clock_info ptp_caps; struct ptp_clock_info ptp_caps;
struct sk_buff *ptp_tx_skb; struct sk_buff *ptp_tx_skb;
struct work_struct ptp_tx_work;
struct hwtstamp_config tstamp_config; struct hwtstamp_config tstamp_config;
unsigned long ptp_tx_start;
unsigned long last_rx_ptp_check; unsigned long last_rx_ptp_check;
spinlock_t tmreg_lock; /* Used to protect the device time registers. */ spinlock_t tmreg_lock; /* Used to protect the device time registers. */
u64 ptp_base_adj; u64 ptp_base_adj;
......
...@@ -216,40 +216,6 @@ static int i40e_ptp_settime(struct ptp_clock_info *ptp, ...@@ -216,40 +216,6 @@ static int i40e_ptp_settime(struct ptp_clock_info *ptp,
return 0; return 0;
} }
/**
* i40e_ptp_tx_work
* @work: pointer to work struct
*
* This work function polls the PRTTSYN_STAT_0.TXTIME bit to determine when a
* Tx timestamp event has occurred, in order to pass the Tx timestamp value up
* the stack in the skb.
*/
static void i40e_ptp_tx_work(struct work_struct *work)
{
struct i40e_pf *pf = container_of(work, struct i40e_pf,
ptp_tx_work);
struct i40e_hw *hw = &pf->hw;
u32 prttsyn_stat_0;
if (!pf->ptp_tx_skb)
return;
if (time_is_before_jiffies(pf->ptp_tx_start +
I40E_PTP_TX_TIMEOUT)) {
dev_kfree_skb_any(pf->ptp_tx_skb);
pf->ptp_tx_skb = NULL;
pf->tx_hwtstamp_timeouts++;
dev_warn(&pf->pdev->dev, "clearing Tx timestamp hang\n");
return;
}
prttsyn_stat_0 = rd32(hw, I40E_PRTTSYN_STAT_0);
if (prttsyn_stat_0 & I40E_PRTTSYN_STAT_0_TXTIME_MASK)
i40e_ptp_tx_hwtstamp(pf);
else
schedule_work(&pf->ptp_tx_work);
}
/** /**
* i40e_ptp_enable - Enable/disable ancillary features of the PHC subsystem * i40e_ptp_enable - Enable/disable ancillary features of the PHC subsystem
* @ptp: The PTP clock structure * @ptp: The PTP clock structure
...@@ -608,7 +574,6 @@ void i40e_ptp_init(struct i40e_pf *pf) ...@@ -608,7 +574,6 @@ void i40e_ptp_init(struct i40e_pf *pf)
u32 regval; u32 regval;
spin_lock_init(&pf->tmreg_lock); spin_lock_init(&pf->tmreg_lock);
INIT_WORK(&pf->ptp_tx_work, i40e_ptp_tx_work);
dev_info(&pf->pdev->dev, "%s: added PHC on %s\n", __func__, dev_info(&pf->pdev->dev, "%s: added PHC on %s\n", __func__,
netdev->name); netdev->name);
...@@ -647,7 +612,6 @@ void i40e_ptp_stop(struct i40e_pf *pf) ...@@ -647,7 +612,6 @@ void i40e_ptp_stop(struct i40e_pf *pf)
pf->ptp_tx = false; pf->ptp_tx = false;
pf->ptp_rx = false; pf->ptp_rx = false;
cancel_work_sync(&pf->ptp_tx_work);
if (pf->ptp_tx_skb) { if (pf->ptp_tx_skb) {
dev_kfree_skb_any(pf->ptp_tx_skb); dev_kfree_skb_any(pf->ptp_tx_skb);
pf->ptp_tx_skb = NULL; pf->ptp_tx_skb = NULL;
......
...@@ -1825,9 +1825,6 @@ static int i40e_tsyn(struct i40e_ring *tx_ring, struct sk_buff *skb, ...@@ -1825,9 +1825,6 @@ static int i40e_tsyn(struct i40e_ring *tx_ring, struct sk_buff *skb,
*cd_type_cmd_tso_mss |= (u64)I40E_TX_CTX_DESC_TSYN << *cd_type_cmd_tso_mss |= (u64)I40E_TX_CTX_DESC_TSYN <<
I40E_TXD_CTX_QW1_CMD_SHIFT; I40E_TXD_CTX_QW1_CMD_SHIFT;
pf->ptp_tx_start = jiffies;
schedule_work(&pf->ptp_tx_work);
return 1; return 1;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册