From: Matthew Wilcox <willy@infradead.org>
To: Jesper Dangaard Brouer <brouer@redhat.com>
Cc: David Laight <David.Laight@aculab.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-mips@vger.kernel.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>
Subject: Re: [PATCH 1/1] mm: Fix struct page layout on 32-bit systems
Date: Sat, 17 Apr 2021 04:19:06 +0100 [thread overview]
Message-ID: <20210417031906.GQ2531743@casper.infradead.org> (raw)
In-Reply-To: <20210416190823.3b3aace0@carbon>
On Fri, Apr 16, 2021 at 07:08:23PM +0200, Jesper Dangaard Brouer wrote:
> On Fri, 16 Apr 2021 16:27:55 +0100
> Matthew Wilcox <willy@infradead.org> wrote:
>
> > On Thu, Apr 15, 2021 at 08:08:32PM +0200, Jesper Dangaard Brouer wrote:
> > > See below patch. Where I swap32 the dma address to satisfy
> > > page->compound having bit zero cleared. (It is the simplest fix I could
> > > come up with).
> >
> > I think this is slightly simpler, and as a bonus code that assumes the
> > old layout won't compile.
>
> This is clever, I like it! When reading the code one just have to
> remember 'unsigned long' size difference between 64-bit vs 32-bit.
> And I assume compiler can optimize the sizeof check out then doable.
I checked before/after with the replacement patch that doesn't
have compiler warnings. On x86, there is zero codegen difference
(objdump -dr before/after matches exactly) for both x86-32 with 32-bit
dma_addr_t and x86-64. For x86-32 with 64-bit dma_addr_t, the compiler
makes some different inlining decisions in page_pool_empty_ring(),
page_pool_put_page() and page_pool_put_page_bulk(), but it's not clear
to me that they're wrong.
Function old new delta
page_pool_empty_ring 387 307 -80
page_pool_put_page 604 516 -88
page_pool_put_page_bulk 690 517 -173
WARNING: multiple messages have this Message-ID (diff)
From: Matthew Wilcox <willy@infradead.org>
To: Jesper Dangaard Brouer <brouer@redhat.com>
Cc: Arnd Bergmann <arnd@kernel.org>,
Grygorii Strashko <grygorii.strashko@ti.com>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
Ilias Apalodimas <ilias.apalodimas@linaro.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-mips@vger.kernel.org" <linux-mips@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
David Laight <David.Laight@aculab.com>,
Matteo Croce <mcroce@linux.microsoft.com>,
"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>,
Christoph Hellwig <hch@lst.de>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 1/1] mm: Fix struct page layout on 32-bit systems
Date: Sat, 17 Apr 2021 04:19:06 +0100 [thread overview]
Message-ID: <20210417031906.GQ2531743@casper.infradead.org> (raw)
In-Reply-To: <20210416190823.3b3aace0@carbon>
On Fri, Apr 16, 2021 at 07:08:23PM +0200, Jesper Dangaard Brouer wrote:
> On Fri, 16 Apr 2021 16:27:55 +0100
> Matthew Wilcox <willy@infradead.org> wrote:
>
> > On Thu, Apr 15, 2021 at 08:08:32PM +0200, Jesper Dangaard Brouer wrote:
> > > See below patch. Where I swap32 the dma address to satisfy
> > > page->compound having bit zero cleared. (It is the simplest fix I could
> > > come up with).
> >
> > I think this is slightly simpler, and as a bonus code that assumes the
> > old layout won't compile.
>
> This is clever, I like it! When reading the code one just have to
> remember 'unsigned long' size difference between 64-bit vs 32-bit.
> And I assume compiler can optimize the sizeof check out then doable.
I checked before/after with the replacement patch that doesn't
have compiler warnings. On x86, there is zero codegen difference
(objdump -dr before/after matches exactly) for both x86-32 with 32-bit
dma_addr_t and x86-64. For x86-32 with 64-bit dma_addr_t, the compiler
makes some different inlining decisions in page_pool_empty_ring(),
page_pool_put_page() and page_pool_put_page_bulk(), but it's not clear
to me that they're wrong.
Function old new delta
page_pool_empty_ring 387 307 -80
page_pool_put_page 604 516 -88
page_pool_put_page_bulk 690 517 -173
WARNING: multiple messages have this Message-ID (diff)
From: Matthew Wilcox <willy@infradead.org>
To: Jesper Dangaard Brouer <brouer@redhat.com>
Cc: David Laight <David.Laight@aculab.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-mips@vger.kernel.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>
Subject: Re: [PATCH 1/1] mm: Fix struct page layout on 32-bit systems
Date: Sat, 17 Apr 2021 04:19:06 +0100 [thread overview]
Message-ID: <20210417031906.GQ2531743@casper.infradead.org> (raw)
In-Reply-To: <20210416190823.3b3aace0@carbon>
On Fri, Apr 16, 2021 at 07:08:23PM +0200, Jesper Dangaard Brouer wrote:
> On Fri, 16 Apr 2021 16:27:55 +0100
> Matthew Wilcox <willy@infradead.org> wrote:
>
> > On Thu, Apr 15, 2021 at 08:08:32PM +0200, Jesper Dangaard Brouer wrote:
> > > See below patch. Where I swap32 the dma address to satisfy
> > > page->compound having bit zero cleared. (It is the simplest fix I could
> > > come up with).
> >
> > I think this is slightly simpler, and as a bonus code that assumes the
> > old layout won't compile.
>
> This is clever, I like it! When reading the code one just have to
> remember 'unsigned long' size difference between 64-bit vs 32-bit.
> And I assume compiler can optimize the sizeof check out then doable.
I checked before/after with the replacement patch that doesn't
have compiler warnings. On x86, there is zero codegen difference
(objdump -dr before/after matches exactly) for both x86-32 with 32-bit
dma_addr_t and x86-64. For x86-32 with 64-bit dma_addr_t, the compiler
makes some different inlining decisions in page_pool_empty_ring(),
page_pool_put_page() and page_pool_put_page_bulk(), but it's not clear
to me that they're wrong.
Function old new delta
page_pool_empty_ring 387 307 -80
page_pool_put_page 604 516 -88
page_pool_put_page_bulk 690 517 -173
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-04-17 3:20 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
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 [this message]
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=20210417031906.GQ2531743@casper.infradead.org \
--to=willy@infradead.org \
--cc=David.Laight@aculab.com \
--cc=arnd@kernel.org \
--cc=brouer@redhat.com \
--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 \
/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.