* @offset:    DMA sync address offset for PP_FLAG_DMA_SYNC_DEV
  */
 struct page_pool_params {
-       unsigned int    flags;
-       unsigned int    order;
-       unsigned int    pool_size;
-       int             nid;
-       struct device   *dev;
-       struct napi_struct *napi;
-       enum dma_data_direction dma_dir;
-       unsigned int    max_len;
-       unsigned int    offset;
+       struct_group_tagged(page_pool_params_fast, fast,
+               unsigned int    flags;
+               unsigned int    order;
+               unsigned int    pool_size;
+               int             nid;
+               struct device   *dev;
+               struct napi_struct *napi;
+               enum dma_data_direction dma_dir;
+               unsigned int    max_len;
+               unsigned int    offset;
+       );
+       struct_group_tagged(page_pool_params_slow, slow,
 /* private: used by test code only */
-       void (*init_callback)(struct page *page, void *arg);
-       void *init_arg;
+               void (*init_callback)(struct page *page, void *arg);
+               void *init_arg;
+       );
 };
 
 #ifdef CONFIG_PAGE_POOL_STATS
 #endif
 
 struct page_pool {
-       struct page_pool_params p;
+       struct page_pool_params_fast p;
 
        long frag_users;
        struct page *frag_page;
        refcount_t user_cnt;
 
        u64 destroy_cnt;
+
+       /* Slow/Control-path information follows */
+       struct page_pool_params_slow slow;
 };
 
 struct page *page_pool_alloc_pages(struct page_pool *pool, gfp_t gfp);
 
 {
        unsigned int ring_qsize = 1024; /* Default */
 
-       memcpy(&pool->p, params, sizeof(pool->p));
+       memcpy(&pool->p, ¶ms->fast, sizeof(pool->p));
+       memcpy(&pool->slow, ¶ms->slow, sizeof(pool->slow));
 
        /* Validate only known flags were used */
        if (pool->p.flags & ~(PP_FLAG_ALL))
         * the overhead is negligible.
         */
        page_pool_fragment_page(page, 1);
-       if (pool->p.init_callback)
-               pool->p.init_callback(page, pool->p.init_arg);
+       if (pool->slow.init_callback)
+               pool->slow.init_callback(page, pool->slow.init_arg);
 }
 
 static void page_pool_clear_pp_info(struct page *page)