Message ID | 20210908015606.3999871-1-liushixin2@huawei.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mm/vmstat: annotate data race for zone->free_area[order].nr_free | expand |
On Wed, 8 Sep 2021 09:56:06 +0800 Liu Shixin <liushixin2@huawei.com> wrote: > KCSAN reports a data-race on v5.10 which also exists on mainline: > > ================================================================== > BUG: KCSAN: data-race in extfrag_for_order+0x33/0x2d0 > > race at unknown origin, with read to 0xffff9ee9bfffab48 of 8 bytes by task 34 on cpu 1: > extfrag_for_order+0x33/0x2d0 > kcompactd+0x5f0/0xce0 > kthread+0x1f9/0x220 > ret_from_fork+0x22/0x30 > > Reported by Kernel Concurrency Sanitizer on: > CPU: 1 PID: 34 Comm: kcompactd0 Not tainted 5.10.0+ #2 > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014 > ================================================================== > > Access to zone->free_area[order].nr_free in extfrag_for_order()/frag_show_print() > is lockless. That's intentional and the stats are a rough estimate anyway. > Annotate them with data_race(). checkpatch helpfully says WARNING: data_race without comment #40: FILE: mm/vmstat.c:1074: + blocks = data_race(zone->free_area[order].nr_free); can we please add a comment ;)
diff --git a/mm/vmstat.c b/mm/vmstat.c index 0885a34197b7..17d1f9ec4fd4 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1023,7 +1023,7 @@ static void fill_contig_page_info(struct zone *zone, unsigned long blocks; /* Count number of free blocks */ - blocks = zone->free_area[order].nr_free; + blocks = data_race(zone->free_area[order].nr_free); info->free_blocks_total += blocks; /* Count free base pages */ @@ -1397,7 +1397,7 @@ static void frag_show_print(struct seq_file *m, pg_data_t *pgdat, seq_printf(m, "Node %d, zone %8s ", pgdat->node_id, zone->name); for (order = 0; order < MAX_ORDER; ++order) - seq_printf(m, "%6lu ", zone->free_area[order].nr_free); + seq_printf(m, "%6lu ", data_race(zone->free_area[order].nr_free)); seq_putc(m, '\n'); }
KCSAN reports a data-race on v5.10 which also exists on mainline: ================================================================== BUG: KCSAN: data-race in extfrag_for_order+0x33/0x2d0 race at unknown origin, with read to 0xffff9ee9bfffab48 of 8 bytes by task 34 on cpu 1: extfrag_for_order+0x33/0x2d0 kcompactd+0x5f0/0xce0 kthread+0x1f9/0x220 ret_from_fork+0x22/0x30 Reported by Kernel Concurrency Sanitizer on: CPU: 1 PID: 34 Comm: kcompactd0 Not tainted 5.10.0+ #2 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014 ================================================================== Access to zone->free_area[order].nr_free in extfrag_for_order()/frag_show_print() is lockless. That's intentional and the stats are a rough estimate anyway. Annotate them with data_race(). Signed-off-by: Liu Shixin <liushixin2@huawei.com> --- mm/vmstat.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)