--- zzzz-none-000/linux-5.15.111/net/ipv4/igmp.c 2023-05-11 14:00:40.000000000 +0000 +++ puma7-atom-6670-761/linux-5.15.111/net/ipv4/igmp.c 2024-02-07 10:23:30.000000000 +0000 @@ -1319,7 +1319,14 @@ /* IGMPv3 */ igmpv3_add_delrec(in_dev, im, gfp); +#ifdef CONFIG_LTQ_MCAST_LATENCY_OPTIMIZATION + in_dev->mr_ifc_count = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv; + in_dev_hold(in_dev); + igmp_ifc_timer_expire(&in_dev->mr_ifc_timer); +#else igmp_ifc_event(in_dev); +#endif + } #endif } @@ -1353,9 +1360,14 @@ im->unsolicit_count = READ_ONCE(net->ipv4.sysctl_igmp_qrv); if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) { +# ifdef CONFIG_LTQ_MCAST_LATENCY_OPTIMIZATION + refcount_inc(&im->refcnt); + igmp_timer_expire(&im->timer); +# else spin_lock_bh(&im->lock); igmp_start_timer(im, IGMP_INITIAL_REPORT_DELAY); spin_unlock_bh(&im->lock); +# endif return; } /* else, v3 */ @@ -1367,7 +1379,13 @@ if (im->sfmode == MCAST_EXCLUDE) im->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv); +# ifdef CONFIG_LTQ_MCAST_LATENCY_OPTIMIZATION + in_dev->mr_ifc_count = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv; + in_dev_hold(in_dev); + igmp_ifc_timer_expire(&in_dev->mr_ifc_timer); +# else igmp_ifc_event(in_dev); +# endif #endif }