page_pool: make sure frag API fields don't span between cachelines
[linux-2.6-block.git] / net / core / page_pool.c
index dd364d738c0063405a9d10717edc290344bf3bbe..95eac12e8790eed1a2b4b5754b2e8bcf61df8a1c 100644 (file)
@@ -172,12 +172,22 @@ static void page_pool_producer_unlock(struct page_pool *pool,
                spin_unlock_bh(&pool->ring.producer_lock);
 }
 
+static void page_pool_struct_check(void)
+{
+       CACHELINE_ASSERT_GROUP_MEMBER(struct page_pool, frag, frag_users);
+       CACHELINE_ASSERT_GROUP_MEMBER(struct page_pool, frag, frag_page);
+       CACHELINE_ASSERT_GROUP_MEMBER(struct page_pool, frag, frag_offset);
+       CACHELINE_ASSERT_GROUP_SIZE(struct page_pool, frag, 4 * sizeof(long));
+}
+
 static int page_pool_init(struct page_pool *pool,
                          const struct page_pool_params *params,
                          int cpuid)
 {
        unsigned int ring_qsize = 1024; /* Default */
 
+       page_pool_struct_check();
+
        memcpy(&pool->p, &params->fast, sizeof(pool->p));
        memcpy(&pool->slow, &params->slow, sizeof(pool->slow));