[...]
>> By the way, I think the 'delay' is from the
>> unsolicited_report_interval() and it just return value of
>> idev->cnf.mldv{1 | 2}_unsolicited_report_interval.
>> I think this value is msecs, not jiffies.
>> So, It should be converted to use msecs_to_jiffies(), I think.
>> How do you thi
On Sun, Feb 14, 2021 at 2:56 AM Taehee Yoo wrote:
>
>
>
> On 21. 2. 14. 오전 4:07, Cong Wang wrote:
> > On Sat, Feb 13, 2021 at 9:51 AM Taehee Yoo wrote:
> >> -static void mld_dad_start_timer(struct inet6_dev *idev, unsigned
> long delay)
> >> +static void mld_dad_start_work(struct inet6_dev *id
On 21. 2. 14. 오전 4:07, Cong Wang wrote:
> On Sat, Feb 13, 2021 at 9:51 AM Taehee Yoo wrote:
>> -static void mld_dad_start_timer(struct inet6_dev *idev, unsigned
long delay)
>> +static void mld_dad_start_work(struct inet6_dev *idev, unsigned
long delay)
>> {
>> unsigned long tv =
On Sat, Feb 13, 2021 at 9:51 AM Taehee Yoo wrote:
> -static void mld_dad_start_timer(struct inet6_dev *idev, unsigned long delay)
> +static void mld_dad_start_work(struct inet6_dev *idev, unsigned long delay)
> {
> unsigned long tv = prandom_u32() % delay;
>
> - if (!mod_timer(&idev
mcast.c has several timers for delaying works.
Timer's expire handler is working under atomic context so it can't use
sleepable things such as GFP_KERNEL, mutex, etc.
In order to use sleepable APIs, it converts from timers to delayed work.
But there are some critical sections, which is used by both