On 03/23/2018 05:18 AM, Jesper Dangaard Brouer wrote:


> +#define PP_ALLOC_CACHE_SIZE  128
> +#define PP_ALLOC_CACHE_REFILL        64
> +struct pp_alloc_cache {
> +     u32 count ____cacheline_aligned_in_smp;
> +     void *cache[PP_ALLOC_CACHE_SIZE];
> +};
> +
> +struct page_pool_params {
...
> +};
> +#define      PAGE_POOL_PARAMS_SIZE   offsetof(struct page_pool_params, 
> end_marker)
> +
> +struct page_pool {
> +     struct page_pool_params p;
> +
> +     struct pp_alloc_cache alloc;
> +
>...
> +     struct ptr_ring ring;
> +
> +     struct rcu_head rcu;
> +};
> +


The placement of ____cacheline_aligned_in_smp in pp_alloc_cache is odd.

I would rather put it in struct page_pool as in :

+struct page_pool {
+       struct page_pool_params p;

+       struct pp_alloc_cache alloc ____cacheline_aligned_in_smp;;

To make clear the intent here (let the page_pool_params being in a read only 
cache line)

Also you probably can move the struct rcu_head  between p and 
pp_alloc_cache_alloc to fill a hole.

(assuming allowing variable sized params is no longer needed)

Reply via email to