Re: NUMA memchr_inv() in mm/vmstat.c:need_update()?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri 02-11-18 14:44:11, Janne Huttunen wrote:
> Hi,
> 
> The commit 1d90ca897 changed the type of the vm_numa_stat_diff
> from s8 into u16. It also changed the associated BUILD_BUG_ON()
> in need_update(), but didn't touch the memchr_inv() call after
> it. Is the memchr_inv() call still supposed to cover the whole
> array or am I just misreading the code?
 
I guess you are not missing anything. We need something like
diff --git a/mm/vmstat.c b/mm/vmstat.c
index 6038ce593ce3..c42f01fbe964 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -1829,10 +1829,10 @@ static bool need_update(int cpu)
 		 * The fast way of checking if there are any vmstat diffs.
 		 * This works because the diffs are byte sized items.
 		 */
-		if (memchr_inv(p->vm_stat_diff, 0, NR_VM_ZONE_STAT_ITEMS))
+		if (memchr_inv(p->vm_stat_diff, 0, sizeof(*p->vm_stat_diff) * NR_VM_ZONE_STAT_ITEMS))
 			return true;
 #ifdef CONFIG_NUMA
-		if (memchr_inv(p->vm_numa_stat_diff, 0, NR_VM_NUMA_STAT_ITEMS))
+		if (memchr_inv(p->vm_numa_stat_diff, 0, sizeof(p->vm_numa_stat_diff) * NR_VM_NUMA_STAT_ITEMS))
 			return true;
 #endif
 	}

sizeof(p->vm_numa_stat_diff) would be shorter but more fragile if we
ever decide to change the type to be a pointer rather than a fixed
arrasy.

Care to send a full patch?
-- 
Michal Hocko
SUSE Labs




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux