On Thu Feb 05 2026, Loktionov, Aleksandr wrote:
>> +/**
>> + * igb_ptp_tx_tstamp_event
>> + * @adapter: pointer to igb adapter
>> + *
>> + * This function checks the TSYNCTXCTL valid bit and stores the Tx
>> +hardware
>> + * timestamp at the current skb.
>> + **/
>> +void igb_ptp_tx_tstamp_event(struct igb_adapter *adapter) {
>> +    struct e1000_hw *hw = &adapter->hw;
>> +    u32 tsynctxctl;
>> +
>> +    if (!adapter->ptp_tx_skb)
>> +            return;
>> +
>> +    tsynctxctl = rd32(E1000_TSYNCTXCTL);
>> +    if (WARN_ON_ONCE(!(tsynctxctl & E1000_TSYNCTXCTL_VALID)))
>> +            return;
>> +
>> +    igb_ptp_tx_hwtstamp(adapter); <-Calls existing function designed for 
>> work queue!
>
> skb_tstamp_tx() can sleep
> Smells like sleep-in-atomic isn't it?

AFAICS skb_tstamp_tx() is safe to call here.

> spin_lock_irqsave(&wq_head->lock, flags);  <- RT mutex can sleep

In case you're worried about PREEMPT_RT: On -RT the IRQ runs a dedicated
thread. BTW I've tested this with and without -RT and with
CONFIG_DEBUG_ATOMIC_SLEEP.

Thanks,
Kurt

Attachment: signature.asc
Description: PGP signature

Reply via email to