Hello Prasad,

在 2025/3/27 20:40, Prasad Pandit wrote:
>> @@ -360,13 +360,13 @@ e1000e_intrmgr_fire_all_timers(E1000ECore *core)
>>      int i;
>>
>>      if (core->itr.running) {
>> -        timer_del(core->itr.timer);
>> +        timer_free(core->itr.timer);
>>          e1000e_intrmgr_on_throttling_timer(&core->itr);
>>      }
>>
>>      for (i = 0; i < E1000E_MSIX_VEC_NUM; i++) {
>>          if (core->eitr[i].running) {
>> -            timer_del(core->eitr[i].timer);
>> +            timer_free(core->eitr[i].timer);
>>              e1000e_intrmgr_on_msix_throttling_timer(&core->eitr[i]);
>>          }
>>      }
>> @@ -3452,7 +3452,7 @@ static void e1000e_reset(E1000ECore *core, bool sw)
>>  {
>>      int i;
>>
>> -    timer_del(core->autoneg_timer);
>> +    timer_free(core->autoneg_timer);
>>
>>      e1000e_intrmgr_reset(core);
> 
> * I doubt if this is correct; Because timer_del() API explicitly says
> -> /* stop a timer, but do not dealloc it */
> 
> * Secondly: autoneg_timer/mit_timer/flush_queue_timer objects are
> freed in 'pci_e1000_uninit()/e1000e_pci_uninit()' functions via
> timer_free() calls. So the memory leak could be because the respective
> *_pci__uninit() function is not called?

Yes, you are right. I mistakenly assumed that there's no way to reenable a
`_del()`ed timer. Thank you sincerely for pointing out this. I'll check the
usage carefully in other occurences.

Best regard,
Zheng

Reply via email to