Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 98226208 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

mlx4: fix race accessing page->_count



This is illegal to use atomic_set(&page->_count, ...) even if we 'own'
the page. Other entities in the kernel need to use get_page_unless_zero()
to get a reference to the page before testing page properties, so we could
loose a refcount increment.

Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ec916983
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -76,10 +76,10 @@ static int mlx4_alloc_pages(struct mlx4_en_priv *priv,
	page_alloc->dma = dma;
	page_alloc->page_offset = frag_info->frag_align;
	/* Not doing get_page() for each frag is a big win
	 * on asymetric workloads.
	 * on asymetric workloads. Note we can not use atomic_set().
	 */
	atomic_set(&page->_count,
		   page_alloc->page_size / frag_info->frag_stride);
	atomic_add(page_alloc->page_size / frag_info->frag_stride - 1,
		   &page->_count);
	return 0;
}