From: Andrey Ryabinin <[email protected]>

When we in interrupt, the 'current' is just any random task. We shouldn't
account per-task atomic allocations latency to random tasks. Use in_task()
macro to identify task context, and account per-task latency iff we in
task.

https://jira.sw.ru/browse/PSBM-87797
Signed-off-by: Andrey Ryabinin <[email protected]>

Reviewed-by: Denis V. Lunev <[email protected]>

(cherry-picked from 3ed23cb6c686fab5bc6b36e1e7170e07a7ee788b)
Signed-off-by: Andrey Zhadchenko <[email protected]>
---
 mm/page_alloc.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 2d8365e..e430fda 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -4537,8 +4537,10 @@ static void __alloc_collect_stats(gfp_t gfp_mask, 
unsigned int order,
        cpu = smp_processor_id();
        KSTAT_LAT_PCPU_ADD(&kstat_glob.alloc_lat[ind], time);
 
-       current->alloc_lat[ind].totlat += time;
-       current->alloc_lat[ind].count++;
+       if (in_task()) {
+               current->alloc_lat[ind].totlat += time;
+               current->alloc_lat[ind].count++;
+       }
 
        if (!page)
                kstat_glob.alloc_fails[cpu][ind]++;
-- 
1.8.3.1

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to