lkml.org 
[lkml]   [2022]   [Aug]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 2/7] mm: add private field of first tail to struct page and struct folio
On Mon, Aug 29, 2022 at 04:00:09PM -0700, Sidhartha Kumar wrote:
> +++ b/include/linux/mm_types.h
> @@ -144,6 +144,7 @@ struct page {
> #ifdef CONFIG_64BIT
> unsigned int compound_nr; /* 1 << compound_order */
> #endif
> + unsigned long _private_1;
> };
> struct { /* Second tail page of compound page */
> unsigned long _compound_pad_1; /* compound_head */

Have you tested compiling this on 32-bit? I think you need to move
the _private_1 inside the ifdef CONFIG_64BIT.

> @@ -251,6 +252,7 @@ struct page {
> * @_total_mapcount: Do not use directly, call folio_entire_mapcount().
> * @_pincount: Do not use directly, call folio_maybe_dma_pinned().
> * @_folio_nr_pages: Do not use directly, call folio_nr_pages().
> + * @_private_1: Do not use directly, call folio_get_private_1().
> *
> * A folio is a physically, virtually and logically contiguous set
> * of bytes. It is a power-of-two in size, and it is aligned to that
> @@ -298,6 +300,8 @@ struct folio {
> #ifdef CONFIG_64BIT
> unsigned int _folio_nr_pages;
> #endif
> + unsigned long _private_1;

(but don't do that here!)

The intent is that _private_1 lines up with head[1].private on 32-bit.
It's a bit tricky, and I'm not sure that I'm thinking about it quite right.

> };
>
> #define FOLIO_MATCH(pg, fl) \
> @@ -325,6 +329,7 @@ FOLIO_MATCH(compound_mapcount, _total_mapcount);
> FOLIO_MATCH(compound_pincount, _pincount);
> #ifdef CONFIG_64BIT
> FOLIO_MATCH(compound_nr, _folio_nr_pages);
> +FOLIO_MATCH(_private_1, _private_1);
> #endif
> #undef FOLIO_MATCH
>
> @@ -370,6 +375,16 @@ static inline void *folio_get_private(struct folio *folio)
> return folio->private;
> }
>
> +static inline void folio_set_private_1(struct folio *folio, unsigned long private)
> +{
> + folio->_private_1 = private;
> +}
> +
> +static inline unsigned long folio_get_private_1(struct folio *folio)
> +{
> + return folio->_private_1;
> +}
> +
> struct page_frag_cache {
> void * va;
> #if (PAGE_SIZE < PAGE_FRAG_CACHE_MAX_SIZE)
> --
> 2.31.1
>

\
 
 \ /
  Last update: 2022-08-30 05:37    [W:0.107 / U:0.024 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site