The sync update work queue tasks is calling uninterruptible sleep function, which is causing high CPU load. Changed to interruptible sleep function. The stats update task should be interruptible. --- a/frontends/nss/ecm_nss_ipv4.c +++ b.frontends/nss/ecm_nss_ipv4.c @@ -2411,7 +2411,7 @@ static void ecm_nss_ipv4_stats_sync_req_ } spin_unlock_bh(&ecm_nss_ipv4_lock); - usleep_range(ECM_NSS_IPV4_STATS_SYNC_UDELAY - 100, ECM_NSS_IPV4_STATS_SYNC_UDELAY); + msleep_interruptible(ECM_NSS_IPV4_STATS_SYNC_UDELAY / 1000); /* * If index is 0, we are starting a new round, but if we still have time remain @@ -2425,7 +2425,7 @@ static void ecm_nss_ipv4_stats_sync_req_ } if (ecm_nss_ipv4_next_req_time > current_jiffies) { - msleep(jiffies_to_msecs(ecm_nss_ipv4_next_req_time - current_jiffies)); + msleep_interruptible(jiffies_to_msecs(ecm_nss_ipv4_next_req_time - current_jiffies)); } ecm_nss_ipv4_roll_check_jiffies = jiffies; ecm_nss_ipv4_next_req_time = ecm_nss_ipv4_roll_check_jiffies + ECM_NSS_IPV4_STATS_SYNC_PERIOD; --- a/frontends/nss/ecm_nss_ipv6.c +++ b.frontends/nss/ecm_nss_ipv6.c @@ -2128,7 +2128,7 @@ static void ecm_nss_ipv6_stats_sync_req_ } spin_unlock_bh(&ecm_nss_ipv6_lock); - usleep_range(ECM_NSS_IPV6_STATS_SYNC_UDELAY - 100, ECM_NSS_IPV6_STATS_SYNC_UDELAY); + msleep_interruptible(ECM_NSS_IPV6_STATS_SYNC_UDELAY / 1000); /* * If index is 0, we are starting a new round, but if we still have time remain @@ -2142,7 +2142,7 @@ static void ecm_nss_ipv6_stats_sync_req_ } if (ecm_nss_ipv6_next_req_time > current_jiffies) { - msleep(jiffies_to_msecs(ecm_nss_ipv6_next_req_time - current_jiffies)); + msleep_interruptible(jiffies_to_msecs(ecm_nss_ipv6_next_req_time - current_jiffies)); } ecm_nss_ipv6_roll_check_jiffies = jiffies; ecm_nss_ipv6_next_req_time = ecm_nss_ipv6_roll_check_jiffies + ECM_NSS_IPV6_STATS_SYNC_PERIOD;