All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Laight <David.Laight@ACULAB.COM>
To: 'Matthew Wilcox' <willy@infradead.org>,
	Jesper Dangaard Brouer <brouer@redhat.com>
Cc: "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: Thu, 15 Apr 2021 21:11:56 +0000	[thread overview]
Message-ID: <5179a01a462f43d6951a65de2a299070@AcuMS.aculab.com> (raw)
In-Reply-To: <20210415182155.GD2531743@casper.infradead.org>

From: Matthew Wilcox <willy@infradead.org>
> Sent: 15 April 2021 19:22
> 
> On Thu, Apr 15, 2021 at 08:08:32PM +0200, Jesper Dangaard Brouer wrote:
> > +static inline
> > +dma_addr_t page_pool_dma_addr_read(dma_addr_t dma_addr)
> > +{
> > +	/* Workaround for storing 64-bit DMA-addr on 32-bit machines in struct
> > +	 * page.  The page->dma_addr share area with page->compound_head which
> > +	 * use bit zero to mark compound pages. This is okay, as DMA-addr are
> > +	 * aligned pointers which have bit zero cleared.
> > +	 *
> > +	 * In the 32-bit case, page->compound_head is 32-bit.  Thus, when
> > +	 * dma_addr_t is 64-bit it will be located in top 32-bit.  Solve by
> > +	 * swapping dma_addr 32-bit segments.
> > +	 */
> > +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
> 
> #if defined(CONFIG_ARCH_DMA_ADDR_T_64BIT) && defined(__BIG_ENDIAN)
> otherwise you'll create the problem on ARM that you're avoiding on PPC ...
> 
> I think you want to delete the word '_read' from this function name because
> you're using it for both read and write.

I think I'd use explicit dma_addr_hi and dma_addr_lo and
separate read/write functions just to make absolutely sure
nothing picks up the swapped value.

Isn't it possible to move the field down one long?
This might require an explicit zero - but this is not a common
code path - the extra write will be noise.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)


WARNING: multiple messages have this Message-ID (diff)
From: David Laight <David.Laight@ACULAB.COM>
To: 'Matthew Wilcox' <willy@infradead.org>,
	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-mips@vger.kernel.org" <linux-mips@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>,
	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: Thu, 15 Apr 2021 21:11:56 +0000	[thread overview]
Message-ID: <5179a01a462f43d6951a65de2a299070@AcuMS.aculab.com> (raw)
In-Reply-To: <20210415182155.GD2531743@casper.infradead.org>

From: Matthew Wilcox <willy@infradead.org>
> Sent: 15 April 2021 19:22
> 
> On Thu, Apr 15, 2021 at 08:08:32PM +0200, Jesper Dangaard Brouer wrote:
> > +static inline
> > +dma_addr_t page_pool_dma_addr_read(dma_addr_t dma_addr)
> > +{
> > +	/* Workaround for storing 64-bit DMA-addr on 32-bit machines in struct
> > +	 * page.  The page->dma_addr share area with page->compound_head which
> > +	 * use bit zero to mark compound pages. This is okay, as DMA-addr are
> > +	 * aligned pointers which have bit zero cleared.
> > +	 *
> > +	 * In the 32-bit case, page->compound_head is 32-bit.  Thus, when
> > +	 * dma_addr_t is 64-bit it will be located in top 32-bit.  Solve by
> > +	 * swapping dma_addr 32-bit segments.
> > +	 */
> > +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
> 
> #if defined(CONFIG_ARCH_DMA_ADDR_T_64BIT) && defined(__BIG_ENDIAN)
> otherwise you'll create the problem on ARM that you're avoiding on PPC ...
> 
> I think you want to delete the word '_read' from this function name because
> you're using it for both read and write.

I think I'd use explicit dma_addr_hi and dma_addr_lo and
separate read/write functions just to make absolutely sure
nothing picks up the swapped value.

Isn't it possible to move the field down one long?
This might require an explicit zero - but this is not a common
code path - the extra write will be noise.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)


WARNING: multiple messages have this Message-ID (diff)
From: David Laight <David.Laight@ACULAB.COM>
To: 'Matthew Wilcox' <willy@infradead.org>,
	Jesper Dangaard Brouer <brouer@redhat.com>
Cc: "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: Thu, 15 Apr 2021 21:11:56 +0000	[thread overview]
Message-ID: <5179a01a462f43d6951a65de2a299070@AcuMS.aculab.com> (raw)
In-Reply-To: <20210415182155.GD2531743@casper.infradead.org>

From: Matthew Wilcox <willy@infradead.org>
> Sent: 15 April 2021 19:22
> 
> On Thu, Apr 15, 2021 at 08:08:32PM +0200, Jesper Dangaard Brouer wrote:
> > +static inline
> > +dma_addr_t page_pool_dma_addr_read(dma_addr_t dma_addr)
> > +{
> > +	/* Workaround for storing 64-bit DMA-addr on 32-bit machines in struct
> > +	 * page.  The page->dma_addr share area with page->compound_head which
> > +	 * use bit zero to mark compound pages. This is okay, as DMA-addr are
> > +	 * aligned pointers which have bit zero cleared.
> > +	 *
> > +	 * In the 32-bit case, page->compound_head is 32-bit.  Thus, when
> > +	 * dma_addr_t is 64-bit it will be located in top 32-bit.  Solve by
> > +	 * swapping dma_addr 32-bit segments.
> > +	 */
> > +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
> 
> #if defined(CONFIG_ARCH_DMA_ADDR_T_64BIT) && defined(__BIG_ENDIAN)
> otherwise you'll create the problem on ARM that you're avoiding on PPC ...
> 
> I think you want to delete the word '_read' from this function name because
> you're using it for both read and write.

I think I'd use explicit dma_addr_hi and dma_addr_lo and
separate read/write functions just to make absolutely sure
nothing picks up the swapped value.

Isn't it possible to move the field down one long?
This might require an explicit zero - but this is not a common
code path - the extra write will be noise.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)


_______________________________________________
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-15 21:12 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 [this message]
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=5179a01a462f43d6951a65de2a299070@AcuMS.aculab.com \
    --to=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 \
    --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.