lede/package/qca/nss/qca-nss-ecm/patches/200-resolve-high-load.patch
2021-07-19 12:52:07 +08:00

45 lines
1.9 KiB
Diff

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;