All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jesper Dangaard Brouer <brouer@redhat.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	Ilias Apalodimas <ilias.apalodimas@linaro.org>,
	Matteo Croce <mcroce@linux.microsoft.com>,
	Grygorii Strashko <grygorii.strashko@ti.com>,
	Arnd Bergmann <arnd@kernel.org>, Christoph Hellwig <hch@lst.de>,
	brouer@redhat.com
Subject: Re: [PATCH 1/1] mm: Fix struct page layout on 32-bit systems
Date: Wed, 14 Apr 2021 10:10:44 +0200	[thread overview]
Message-ID: <20210414101044.19da09df@carbon> (raw)
In-Reply-To: <20210412011532.GG2531743@casper.infradead.org>

On Mon, 12 Apr 2021 02:15:32 +0100
Matthew Wilcox <willy@infradead.org> wrote:

> On Sun, Apr 11, 2021 at 11:33:18AM +0100, Matthew Wilcox wrote:
> > Basically, we have three aligned dwords here.  We can either alias with
> > @flags and the first word of @lru, or the second word of @lru and @mapping,
> > or @index and @private.  @flags is a non-starter.  If we use @mapping,
> > then you have to set it to NULL before you free it, and I'm not sure
> > how easy that will be for you.  If that's trivial, then we could use
> > the layout:
> > 
> > 	unsigned long _pp_flags;
> > 	unsigned long pp_magic;
> > 	union {
> > 		dma_addr_t dma_addr;    /* might be one or two words */
> > 		unsigned long _pp_align[2];
> > 	};
> > 	unsigned long pp_pfmemalloc;
> > 	unsigned long xmi;  
> 
> I forgot about the munmap path.  That calls zap_page_range() which calls
> set_page_dirty() which calls page_mapping().  If we use page->mapping,
> that's going to get interpreted as an address_space pointer.
> 
> *sigh*.  Foiled at every turn.

Yes, indeed! - And very frustrating.  It's keeping me up at night.
I'm dreaming about 32 vs 64 bit data structures. My fitbit stats tell
me that I don't sleep well with these kind of dreams ;-)

> I'm kind of inclined towards using two (or more) bits for PageSlab as
> we discussed here:
> 
> https://lore.kernel.org/linux-mm/01000163efe179fe-d6270c58-eaba-482f-a6bd-334667250ef7-000000@email.amazonses.com/
> 
> so we have PageKAlloc that's true for PageSlab, PagePool, PageDMAPool,
> PageVMalloc, PageFrag and maybe a few other kernel-internal allocations.

I actually like this idea a lot.  I also think it will solve or remove
Matteo/Ilias'es[2] need to introduce the pp_magic signature.  Ilias do
say[1] that page_pool pages could be used for TCP RX zerocopy, but I
don't think we should "allow" that (meaning page_pool should drop the
DMA-mapping and give up recycling).  I should argue why in that thread.

That said, I think we need to have a quicker fix for the immediate
issue with 64-bit bit dma_addr on 32-bit arch and the misalignment hole
it leaves[3] in struct page.  In[3] you mention ppc32, does it only
happens on certain 32-bit archs?

I'm seriously considering removing page_pool's support for doing/keeping
DMA-mappings on 32-bit arch's.  AFAIK only a single driver use this.

> (see also here:)
> https://lore.kernel.org/linux-mm/20180518194519.3820-18-willy@infradead.org/

[1] https://lore.kernel.org/netdev/YHHuE7g73mZNrMV4@enceladus/
[2] https://patchwork.kernel.org/project/netdevbpf/patch/20210409223801.104657-3-mcroce@linux.microsoft.com/
[3] https://lore.kernel.org/linux-mm/20210410024313.GX2531743@casper.infradead.org/
-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  LinkedIn: http://www.linkedin.com/in/brouer


WARNING: multiple messages have this Message-ID (diff)
From: Jesper Dangaard Brouer <brouer@redhat.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: Arnd Bergmann <arnd@kernel.org>,
	Grygorii Strashko <grygorii.strashko@ti.com>,
	netdev@vger.kernel.org,
	Ilias Apalodimas <ilias.apalodimas@linaro.org>,
	linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, brouer@redhat.com,
	Matteo Croce <mcroce@linux.microsoft.com>,
	linuxppc-dev@lists.ozlabs.org, Christoph Hellwig <hch@lst.de>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 1/1] mm: Fix struct page layout on 32-bit systems
Date: Wed, 14 Apr 2021 10:10:44 +0200	[thread overview]
Message-ID: <20210414101044.19da09df@carbon> (raw)
In-Reply-To: <20210412011532.GG2531743@casper.infradead.org>

On Mon, 12 Apr 2021 02:15:32 +0100
Matthew Wilcox <willy@infradead.org> wrote:

> On Sun, Apr 11, 2021 at 11:33:18AM +0100, Matthew Wilcox wrote:
> > Basically, we have three aligned dwords here.  We can either alias with
> > @flags and the first word of @lru, or the second word of @lru and @mapping,
> > or @index and @private.  @flags is a non-starter.  If we use @mapping,
> > then you have to set it to NULL before you free it, and I'm not sure
> > how easy that will be for you.  If that's trivial, then we could use
> > the layout:
> > 
> > 	unsigned long _pp_flags;
> > 	unsigned long pp_magic;
> > 	union {
> > 		dma_addr_t dma_addr;    /* might be one or two words */
> > 		unsigned long _pp_align[2];
> > 	};
> > 	unsigned long pp_pfmemalloc;
> > 	unsigned long xmi;  
> 
> I forgot about the munmap path.  That calls zap_page_range() which calls
> set_page_dirty() which calls page_mapping().  If we use page->mapping,
> that's going to get interpreted as an address_space pointer.
> 
> *sigh*.  Foiled at every turn.

Yes, indeed! - And very frustrating.  It's keeping me up at night.
I'm dreaming about 32 vs 64 bit data structures. My fitbit stats tell
me that I don't sleep well with these kind of dreams ;-)

> I'm kind of inclined towards using two (or more) bits for PageSlab as
> we discussed here:
> 
> https://lore.kernel.org/linux-mm/01000163efe179fe-d6270c58-eaba-482f-a6bd-334667250ef7-000000@email.amazonses.com/
> 
> so we have PageKAlloc that's true for PageSlab, PagePool, PageDMAPool,
> PageVMalloc, PageFrag and maybe a few other kernel-internal allocations.

I actually like this idea a lot.  I also think it will solve or remove
Matteo/Ilias'es[2] need to introduce the pp_magic signature.  Ilias do
say[1] that page_pool pages could be used for TCP RX zerocopy, but I
don't think we should "allow" that (meaning page_pool should drop the
DMA-mapping and give up recycling).  I should argue why in that thread.

That said, I think we need to have a quicker fix for the immediate
issue with 64-bit bit dma_addr on 32-bit arch and the misalignment hole
it leaves[3] in struct page.  In[3] you mention ppc32, does it only
happens on certain 32-bit archs?

I'm seriously considering removing page_pool's support for doing/keeping
DMA-mappings on 32-bit arch's.  AFAIK only a single driver use this.

> (see also here:)
> https://lore.kernel.org/linux-mm/20180518194519.3820-18-willy@infradead.org/

[1] https://lore.kernel.org/netdev/YHHuE7g73mZNrMV4@enceladus/
[2] https://patchwork.kernel.org/project/netdevbpf/patch/20210409223801.104657-3-mcroce@linux.microsoft.com/
[3] https://lore.kernel.org/linux-mm/20210410024313.GX2531743@casper.infradead.org/
-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  LinkedIn: http://www.linkedin.com/in/brouer


WARNING: multiple messages have this Message-ID (diff)
From: Jesper Dangaard Brouer <brouer@redhat.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org,
	Ilias Apalodimas <ilias.apalodimas@linaro.org>,
	Matteo Croce <mcroce@linux.microsoft.com>,
	Grygorii Strashko <grygorii.strashko@ti.com>,
	Arnd Bergmann <arnd@kernel.org>, Christoph Hellwig <hch@lst.de>,
	brouer@redhat.com
Subject: Re: [PATCH 1/1] mm: Fix struct page layout on 32-bit systems
Date: Wed, 14 Apr 2021 10:10:44 +0200	[thread overview]
Message-ID: <20210414101044.19da09df@carbon> (raw)
In-Reply-To: <20210412011532.GG2531743@casper.infradead.org>

On Mon, 12 Apr 2021 02:15:32 +0100
Matthew Wilcox <willy@infradead.org> wrote:

> On Sun, Apr 11, 2021 at 11:33:18AM +0100, Matthew Wilcox wrote:
> > Basically, we have three aligned dwords here.  We can either alias with
> > @flags and the first word of @lru, or the second word of @lru and @mapping,
> > or @index and @private.  @flags is a non-starter.  If we use @mapping,
> > then you have to set it to NULL before you free it, and I'm not sure
> > how easy that will be for you.  If that's trivial, then we could use
> > the layout:
> > 
> > 	unsigned long _pp_flags;
> > 	unsigned long pp_magic;
> > 	union {
> > 		dma_addr_t dma_addr;    /* might be one or two words */
> > 		unsigned long _pp_align[2];
> > 	};
> > 	unsigned long pp_pfmemalloc;
> > 	unsigned long xmi;  
> 
> I forgot about the munmap path.  That calls zap_page_range() which calls
> set_page_dirty() which calls page_mapping().  If we use page->mapping,
> that's going to get interpreted as an address_space pointer.
> 
> *sigh*.  Foiled at every turn.

Yes, indeed! - And very frustrating.  It's keeping me up at night.
I'm dreaming about 32 vs 64 bit data structures. My fitbit stats tell
me that I don't sleep well with these kind of dreams ;-)

> I'm kind of inclined towards using two (or more) bits for PageSlab as
> we discussed here:
> 
> https://lore.kernel.org/linux-mm/01000163efe179fe-d6270c58-eaba-482f-a6bd-334667250ef7-000000@email.amazonses.com/
> 
> so we have PageKAlloc that's true for PageSlab, PagePool, PageDMAPool,
> PageVMalloc, PageFrag and maybe a few other kernel-internal allocations.

I actually like this idea a lot.  I also think it will solve or remove
Matteo/Ilias'es[2] need to introduce the pp_magic signature.  Ilias do
say[1] that page_pool pages could be used for TCP RX zerocopy, but I
don't think we should "allow" that (meaning page_pool should drop the
DMA-mapping and give up recycling).  I should argue why in that thread.

That said, I think we need to have a quicker fix for the immediate
issue with 64-bit bit dma_addr on 32-bit arch and the misalignment hole
it leaves[3] in struct page.  In[3] you mention ppc32, does it only
happens on certain 32-bit archs?

I'm seriously considering removing page_pool's support for doing/keeping
DMA-mappings on 32-bit arch's.  AFAIK only a single driver use this.

> (see also here:)
> https://lore.kernel.org/linux-mm/20180518194519.3820-18-willy@infradead.org/

[1] https://lore.kernel.org/netdev/YHHuE7g73mZNrMV4@enceladus/
[2] https://patchwork.kernel.org/project/netdevbpf/patch/20210409223801.104657-3-mcroce@linux.microsoft.com/
[3] https://lore.kernel.org/linux-mm/20210410024313.GX2531743@casper.infradead.org/
-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  LinkedIn: http://www.linkedin.com/in/brouer


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-04-14  8:11 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-10 20:52 [PATCH 0/1] Fix struct page layout on 32-bit systems Matthew Wilcox (Oracle)
2021-04-10 20:52 ` Matthew Wilcox (Oracle)
2021-04-10 20:52 ` Matthew Wilcox (Oracle)
2021-04-10 20:52 ` [PATCH 1/1] mm: " Matthew Wilcox (Oracle)
2021-04-10 20:52   ` Matthew Wilcox (Oracle)
2021-04-10 20:52   ` Matthew Wilcox (Oracle)
2021-04-11  9:43   ` Jesper Dangaard Brouer
2021-04-11  9:43     ` Jesper Dangaard Brouer
2021-04-11  9:43     ` Jesper Dangaard Brouer
2021-04-11 10:33     ` Matthew Wilcox
2021-04-11 10:33       ` Matthew Wilcox
2021-04-11 10:33       ` Matthew Wilcox
2021-04-12  1:15       ` Matthew Wilcox
2021-04-12  1:15         ` Matthew Wilcox
2021-04-12  1:15         ` Matthew Wilcox
2021-04-14  8:10         ` Jesper Dangaard Brouer [this message]
2021-04-14  8:10           ` Jesper Dangaard Brouer
2021-04-14  8:10           ` Jesper Dangaard Brouer
2021-04-14 11:50           ` Matthew Wilcox
2021-04-14 11:50             ` Matthew Wilcox
2021-04-14 11:50             ` Matthew Wilcox
2021-04-14 11:56             ` Ilias Apalodimas
2021-04-14 11:56               ` Ilias Apalodimas
2021-04-14 11:56               ` Ilias Apalodimas
2021-04-14 15:52             ` David Laight
2021-04-14 15:52               ` David Laight
2021-04-14 15:52               ` David Laight
2021-04-14 15:52               ` David Laight
2021-04-14 19:13             ` Jesper Dangaard Brouer
2021-04-14 19:13               ` Jesper Dangaard Brouer
2021-04-14 19:13               ` Jesper Dangaard Brouer
2021-04-14 21:35               ` Matthew Wilcox
2021-04-14 21:35                 ` Matthew Wilcox
2021-04-14 21:35                 ` Matthew Wilcox
2021-04-14 21:56                 ` David Laight
2021-04-14 21:56                   ` David Laight
2021-04-14 21:56                   ` David Laight
2021-04-14 21:56                   ` David Laight
2021-04-15 18:08                   ` Jesper Dangaard Brouer
2021-04-15 18:08                     ` Jesper Dangaard Brouer
2021-04-15 18:08                     ` Jesper Dangaard Brouer
2021-04-15 18:08                     ` Jesper Dangaard Brouer
2021-04-15 18:21                     ` Matthew Wilcox
2021-04-15 18:21                       ` Matthew Wilcox
2021-04-15 18:21                       ` Matthew Wilcox
2021-04-15 18:21                       ` Matthew Wilcox
2021-04-15 21:11                       ` David Laight
2021-04-15 21:11                         ` David Laight
2021-04-15 21:11                         ` David Laight
2021-04-15 21:11                         ` David Laight
2021-04-15 22:22                         ` Matthew Wilcox
2021-04-15 22:22                           ` Matthew Wilcox
2021-04-15 22:22                           ` Matthew Wilcox
2021-04-15 22:22                           ` Matthew Wilcox
2021-04-16  7:32                           ` David Laight
2021-04-16  7:32                             ` David Laight
2021-04-16  7:32                             ` David Laight
2021-04-16  7:32                             ` David Laight
2021-04-16 11:05                             ` Matthew Wilcox
2021-04-16 11:05                               ` Matthew Wilcox
2021-04-16 11:05                               ` Matthew Wilcox
2021-04-16 11:05                               ` Matthew Wilcox
2021-04-16 15:27                     ` Matthew Wilcox
2021-04-16 15:27                       ` Matthew Wilcox
2021-04-16 15:27                       ` Matthew Wilcox
2021-04-16 15:27                       ` Matthew Wilcox
2021-04-16 17:08                       ` Jesper Dangaard Brouer
2021-04-16 17:08                         ` Jesper Dangaard Brouer
2021-04-16 17:08                         ` Jesper Dangaard Brouer
2021-04-16 17:08                         ` Jesper Dangaard Brouer
2021-04-17  3:19                         ` Matthew Wilcox
2021-04-17  3:19                           ` Matthew Wilcox
2021-04-17  3:19                           ` Matthew Wilcox
2021-04-17  3:19                           ` Matthew Wilcox
2021-04-17 10:31                       ` Arnd Bergmann
2021-04-17 10:31                         ` Arnd Bergmann
2021-04-17 10:31                         ` Arnd Bergmann
2021-04-17 10:31                         ` Arnd Bergmann
2021-04-17 13:56                         ` Matthew Wilcox
2021-04-17 13:56                           ` Matthew Wilcox
2021-04-17 13:56                           ` Matthew Wilcox
2021-04-17 13:56                           ` Matthew Wilcox
2021-04-17 17:30                           ` Arnd Bergmann
2021-04-17 17:30                             ` Arnd Bergmann
2021-04-17 17:30                             ` Arnd Bergmann
2021-04-17 17:30                             ` Arnd Bergmann
2021-04-17 10:59                       ` David Laight
2021-04-17 10:59                         ` David Laight
2021-04-17 10:59                         ` David Laight
2021-04-17 10:59                         ` David Laight
2021-04-19  6:34                       ` Christoph Hellwig
2021-04-19  6:34                         ` Christoph Hellwig
2021-04-19  6:34                         ` Christoph Hellwig
2021-04-19  6:34                         ` Christoph Hellwig
2021-04-19  7:15                         ` Ilias Apalodimas
2021-04-19  7:15                           ` Ilias Apalodimas
2021-04-19  7:15                           ` Ilias Apalodimas
2021-04-19  7:15                           ` Ilias Apalodimas
2021-04-12 18:23     ` Matthew Wilcox
2021-04-12 18:23       ` Matthew Wilcox
2021-04-12 18:23       ` Matthew Wilcox
2021-04-13  8:21       ` David Laight
2021-04-13  8:21         ` David Laight
2021-04-13  8:21         ` David Laight
2021-04-13  8:21         ` David Laight

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210414101044.19da09df@carbon \
    --to=brouer@redhat.com \
    --cc=arnd@kernel.org \
    --cc=grygorii.strashko@ti.com \
    --cc=hch@lst.de \
    --cc=ilias.apalodimas@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mcroce@linux.microsoft.com \
    --cc=netdev@vger.kernel.org \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.