On Fri, Nov 01, 2019 at 03:57:27PM +0800, Huang, Ying wrote: > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 0a83e9cf6685..22bdbb7afac2 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -1486,6 +1486,41 @@ static bool numa_migration_check_rate_limit(struct pglist_data *pgdat, > return true; > } > > +#define NUMA_MIGRATION_ADJUST_STEPS 16 > + > +static void numa_migration_adjust_threshold(struct pglist_data *pgdat, > + unsigned long rate_limit, > + unsigned long ref_threshold) > +{ > + unsigned long now = jiffies, last_threshold_jiffies; > + unsigned long unit_threshold, threshold; > + unsigned long try_migrate, ref_try_migrate, mdiff; > + > + last_threshold_jiffies = pgdat->autonuma_threshold_jiffies; > + if (now > last_threshold_jiffies + > + msecs_to_jiffies(sysctl_numa_balancing_scan_period_max) && > + cmpxchg(&pgdat->autonuma_threshold_jiffies, > + last_threshold_jiffies, now) == last_threshold_jiffies) { That is seriously unreadable gunk. > + > + ref_try_migrate = rate_limit * > + sysctl_numa_balancing_scan_period_max / 1000; > + try_migrate = node_page_state(pgdat, NUMA_TRY_MIGRATE); > + mdiff = try_migrate - pgdat->autonuma_threshold_try_migrate; > + unit_threshold = ref_threshold / NUMA_MIGRATION_ADJUST_STEPS; > + threshold = pgdat->autonuma_threshold; > + if (!threshold) > + threshold = ref_threshold; > + if (mdiff > ref_try_migrate * 11 / 10) > + threshold = max(threshold - unit_threshold, > + unit_threshold); > + else if (mdiff < ref_try_migrate * 9 / 10) > + threshold = min(threshold + unit_threshold, > + ref_threshold); And that is violating codingstyle. > + pgdat->autonuma_threshold_try_migrate = try_migrate; > + pgdat->autonuma_threshold = threshold; > + } > +} Maybe if you use variable names that are slightly shorter than half your line length?