All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthew Wilcox <willy@infradead.org>
To: Christopher Lameter <cl@linux.com>
Cc: Nicolas Boichat <drinkcat@chromium.org>,
	Robin Murphy <robin.murphy@arm.com>,
	Will Deacon <will.deacon@arm.com>, Joerg Roedel <joro@8bytes.org>,
	Pekka Enberg <penberg@kernel.org>,
	David Rientjes <rientjes@google.com>,
	Joonsoo Kim <iamjoonsoo.kim@lge.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Vlastimil Babka <vbabka@suse.cz>, Michal Hocko <mhocko@suse.com>,
	Mel Gorman <mgorman@techsingularity.net>,
	Levin Alexander <Alexander.Levin@microsoft.com>,
	Huaisheng Ye <yehs1@lenovo.com>,
	Mike Rapoport <rppt@linux.vnet.ibm.com>,
	linux-arm-kernel@lists.infradead.org,
	iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, Yong Wu <yong.wu@mediatek.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Tomasz Figa <tfiga@google.com>,
	yingjoe.chen@mediatek.com
Subject: Re: [PATCH v2 0/3] iommu/io-pgtable-arm-v7s: Use DMA32 zone for page tables
Date: Wed, 21 Nov 2018 13:38:53 -0800	[thread overview]
Message-ID: <20181121213853.GL3065@bombadil.infradead.org> (raw)
In-Reply-To: <0100016737801f14-84f1265d-4577-4dcf-ad57-90dbc8e0a78f-000000@email.amazonses.com>

On Wed, Nov 21, 2018 at 06:20:02PM +0000, Christopher Lameter wrote:
> On Sun, 11 Nov 2018, Nicolas Boichat wrote:
> 
> > This is a follow-up to the discussion in [1], to make sure that the page
> > tables allocated by iommu/io-pgtable-arm-v7s are contained within 32-bit
> > physical address space.
> 
> Page tables? This means you need a page frame? Why go through the slab
> allocators?

Because this particular architecture has sub-page-size PMD page tables.
We desperately need to hoist page table allocation out of the architectures;
there're a bunch of different implementations and they're mostly bad,
one way or another.

For each level of page table we generally have three cases:

1. single page
2. sub-page, naturally aligned
3. multiple pages, naturally aligned

for 1 and 3, the page allocator will do just fine.
for 2, we should have a per-MM page_frag allocator.  s390 already has
something like this, although it's more complicated.  ppc also has
something a little more complex for the cases when it's configured with
a 64k page size but wants to use a 4k page table entry.

I'd like x86 to be able to simply do:

#define pte_alloc_one(mm, addr)	page_alloc_table(mm, addr, 0)
#define pmd_alloc_one(mm, addr)	page_alloc_table(mm, addr, 0)
#define pud_alloc_one(mm, addr)	page_alloc_table(mm, addr, 0)
#define p4d_alloc_one(mm, addr)	page_alloc_table(mm, addr, 0)

An architecture with 4k page size and needing a 16k PMD would do:

#define pmd_alloc_one(mm, addr) page_alloc_table(mm, addr, 2)

while an architecture with a 64k page size needing a 4k PTE would do:

#define ARCH_PAGE_TABLE_FRAG
#define pte_alloc_one(mm, addr) pagefrag_alloc_table(mm, addr, 4096)

I haven't had time to work on this, but perhaps someone with a problem
that needs fixing would like to, instead of burying yet another awful
implementation away in arch/ somewhere.

WARNING: multiple messages have this Message-ID (diff)
From: Matthew Wilcox <willy-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
To: Christopher Lameter <cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org>
Cc: Michal Hocko <mhocko-IBi9RG/b67k@public.gmane.org>,
	Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>,
	Levin Alexander
	<Alexander.Levin-0li6OtcxBFHby3iVrkZq2A@public.gmane.org>,
	linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org,
	Nicolas Boichat
	<drinkcat-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>,
	Huaisheng Ye <yehs1-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>,
	David Rientjes <rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	yingjoe.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
	Vlastimil Babka <vbabka-AlSwsSmVLrQ@public.gmane.org>,
	Tomasz Figa <tfiga-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	Mike Rapoport
	<rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>,
	Matthias Brugger
	<matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Andrew Morton
	<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	Robin Murphy <robin.murphy-5wv7dgnIgG8@public.gmane.org>,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Pekka Enberg <penberg-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	Joonsoo Kim <iamjoonsoo.kim-Hm3cg6mZ9cc@public.gmane.org>,
	Mel Gorman
	<mgorman-3eNAlZScCAx27rWaFMvyedHuzzzSOjJt@public.gmane.org>
Subject: Re: [PATCH v2 0/3] iommu/io-pgtable-arm-v7s: Use DMA32 zone for page tables
Date: Wed, 21 Nov 2018 13:38:53 -0800	[thread overview]
Message-ID: <20181121213853.GL3065@bombadil.infradead.org> (raw)
In-Reply-To: <0100016737801f14-84f1265d-4577-4dcf-ad57-90dbc8e0a78f-000000-p/GC64/jrecnJqMo6gzdpkEOCMrvLtNR@public.gmane.org>

On Wed, Nov 21, 2018 at 06:20:02PM +0000, Christopher Lameter wrote:
> On Sun, 11 Nov 2018, Nicolas Boichat wrote:
> 
> > This is a follow-up to the discussion in [1], to make sure that the page
> > tables allocated by iommu/io-pgtable-arm-v7s are contained within 32-bit
> > physical address space.
> 
> Page tables? This means you need a page frame? Why go through the slab
> allocators?

Because this particular architecture has sub-page-size PMD page tables.
We desperately need to hoist page table allocation out of the architectures;
there're a bunch of different implementations and they're mostly bad,
one way or another.

For each level of page table we generally have three cases:

1. single page
2. sub-page, naturally aligned
3. multiple pages, naturally aligned

for 1 and 3, the page allocator will do just fine.
for 2, we should have a per-MM page_frag allocator.  s390 already has
something like this, although it's more complicated.  ppc also has
something a little more complex for the cases when it's configured with
a 64k page size but wants to use a 4k page table entry.

I'd like x86 to be able to simply do:

#define pte_alloc_one(mm, addr)	page_alloc_table(mm, addr, 0)
#define pmd_alloc_one(mm, addr)	page_alloc_table(mm, addr, 0)
#define pud_alloc_one(mm, addr)	page_alloc_table(mm, addr, 0)
#define p4d_alloc_one(mm, addr)	page_alloc_table(mm, addr, 0)

An architecture with 4k page size and needing a 16k PMD would do:

#define pmd_alloc_one(mm, addr) page_alloc_table(mm, addr, 2)

while an architecture with a 64k page size needing a 4k PTE would do:

#define ARCH_PAGE_TABLE_FRAG
#define pte_alloc_one(mm, addr) pagefrag_alloc_table(mm, addr, 4096)

I haven't had time to work on this, but perhaps someone with a problem
that needs fixing would like to, instead of burying yet another awful
implementation away in arch/ somewhere.

WARNING: multiple messages have this Message-ID (diff)
From: willy@infradead.org (Matthew Wilcox)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 0/3] iommu/io-pgtable-arm-v7s: Use DMA32 zone for page tables
Date: Wed, 21 Nov 2018 13:38:53 -0800	[thread overview]
Message-ID: <20181121213853.GL3065@bombadil.infradead.org> (raw)
In-Reply-To: <0100016737801f14-84f1265d-4577-4dcf-ad57-90dbc8e0a78f-000000@email.amazonses.com>

On Wed, Nov 21, 2018 at 06:20:02PM +0000, Christopher Lameter wrote:
> On Sun, 11 Nov 2018, Nicolas Boichat wrote:
> 
> > This is a follow-up to the discussion in [1], to make sure that the page
> > tables allocated by iommu/io-pgtable-arm-v7s are contained within 32-bit
> > physical address space.
> 
> Page tables? This means you need a page frame? Why go through the slab
> allocators?

Because this particular architecture has sub-page-size PMD page tables.
We desperately need to hoist page table allocation out of the architectures;
there're a bunch of different implementations and they're mostly bad,
one way or another.

For each level of page table we generally have three cases:

1. single page
2. sub-page, naturally aligned
3. multiple pages, naturally aligned

for 1 and 3, the page allocator will do just fine.
for 2, we should have a per-MM page_frag allocator.  s390 already has
something like this, although it's more complicated.  ppc also has
something a little more complex for the cases when it's configured with
a 64k page size but wants to use a 4k page table entry.

I'd like x86 to be able to simply do:

#define pte_alloc_one(mm, addr)	page_alloc_table(mm, addr, 0)
#define pmd_alloc_one(mm, addr)	page_alloc_table(mm, addr, 0)
#define pud_alloc_one(mm, addr)	page_alloc_table(mm, addr, 0)
#define p4d_alloc_one(mm, addr)	page_alloc_table(mm, addr, 0)

An architecture with 4k page size and needing a 16k PMD would do:

#define pmd_alloc_one(mm, addr) page_alloc_table(mm, addr, 2)

while an architecture with a 64k page size needing a 4k PTE would do:

#define ARCH_PAGE_TABLE_FRAG
#define pte_alloc_one(mm, addr) pagefrag_alloc_table(mm, addr, 4096)

I haven't had time to work on this, but perhaps someone with a problem
that needs fixing would like to, instead of burying yet another awful
implementation away in arch/ somewhere.

  reply	other threads:[~2018-11-21 21:39 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-11  9:03 [PATCH v2 0/3] iommu/io-pgtable-arm-v7s: Use DMA32 zone for page tables Nicolas Boichat
2018-11-11  9:03 ` Nicolas Boichat
2018-11-11  9:03 ` Nicolas Boichat
2018-11-11  9:03 ` [PATCH v2 1/3] mm: slab/slub: Add check_slab_flags function to check for valid flags Nicolas Boichat
2018-11-11  9:03   ` Nicolas Boichat
2018-11-11  9:03   ` Nicolas Boichat
2018-11-11  9:03 ` [PATCH v2 2/3] mm: Add support for SLAB_CACHE_DMA32 Nicolas Boichat
2018-11-11  9:03   ` Nicolas Boichat
2018-11-11  9:03   ` Nicolas Boichat
2018-11-21 18:32   ` Christopher Lameter
2018-11-21 18:32     ` Christopher Lameter
2018-11-22  0:52     ` Nicolas Boichat
2018-11-22  0:52       ` Nicolas Boichat
2018-11-22  0:52       ` Nicolas Boichat
2018-11-11  9:03 ` [PATCH v2 3/3] iommu/io-pgtable-arm-v7s: Request DMA32 memory, and improve debugging Nicolas Boichat
2018-11-11  9:03   ` Nicolas Boichat
2018-11-11  9:03   ` Nicolas Boichat
2018-11-21 16:46   ` Will Deacon
2018-11-21 16:46     ` Will Deacon
2018-11-21 17:38     ` Christopher Lameter
2018-11-21 17:38       ` Christopher Lameter
2018-11-21 17:43       ` Robin Murphy
2018-11-21 17:43         ` Robin Murphy
2018-11-21 18:18         ` Christopher Lameter
2018-11-21 18:18           ` Christopher Lameter
2018-11-21 18:02     ` Michal Hocko
2018-11-21 18:02       ` Michal Hocko
2018-11-22  1:20       ` Nicolas Boichat
2018-11-22  1:20         ` Nicolas Boichat
2018-11-22  1:20         ` Nicolas Boichat
2018-11-23 12:15         ` Vlastimil Babka
2018-11-23 12:15           ` Vlastimil Babka
2018-11-21 18:20 ` [PATCH v2 0/3] iommu/io-pgtable-arm-v7s: Use DMA32 zone for page tables Christopher Lameter
2018-11-21 18:20   ` Christopher Lameter
2018-11-21 21:38   ` Matthew Wilcox [this message]
2018-11-21 21:38     ` Matthew Wilcox
2018-11-21 21:38     ` Matthew Wilcox
2018-11-21 22:26     ` Robin Murphy
2018-11-21 22:26       ` Robin Murphy
2018-11-21 22:26       ` Robin Murphy
2018-11-22  1:05       ` Nicolas Boichat
2018-11-22  1:05         ` Nicolas Boichat
2018-11-22  1:05         ` Nicolas Boichat
2018-11-22  2:35       ` Matthew Wilcox
2018-11-22  2:35         ` Matthew Wilcox
2018-11-22  2:35         ` Matthew Wilcox
2018-11-22  5:56         ` Nicolas Boichat
2018-11-22  5:56           ` Nicolas Boichat
2018-11-22  5:56           ` Nicolas Boichat
2018-11-22  8:26         ` Christoph Hellwig
2018-11-22  8:26           ` Christoph Hellwig
2018-11-22  8:26           ` Christoph Hellwig
2018-11-22 15:16           ` Matthew Wilcox
2018-11-22 15:16             ` Matthew Wilcox
2018-11-22 15:16             ` Matthew Wilcox
2018-11-22 15:19             ` Christoph Hellwig
2018-11-22 15:19               ` Christoph Hellwig
2018-11-22 15:19               ` Christoph Hellwig
2018-11-22  8:23       ` Christoph Hellwig
2018-11-22  8:23         ` Christoph Hellwig
2018-11-22  8:23         ` Christoph Hellwig
2018-11-23  3:04         ` Nicolas Boichat
2018-11-23  3:04           ` Nicolas Boichat
2018-11-23  3:04           ` Nicolas Boichat
2018-11-23  5:37           ` Nicolas Boichat
2018-11-23  5:37             ` Nicolas Boichat
2018-11-23  5:37             ` Nicolas Boichat
2018-11-23 12:23         ` Vlastimil Babka
2018-11-23 12:23           ` Vlastimil Babka
2018-11-23 12:23           ` Vlastimil Babka
2018-11-23 12:30           ` Michal Hocko
2018-11-23 12:30             ` Michal Hocko
2018-11-23 12:30             ` Michal Hocko
2018-11-26  8:02           ` Christoph Hellwig
2018-11-26  8:02             ` Christoph Hellwig
2018-11-26  8:02             ` Christoph Hellwig
2018-11-28  8:55             ` Nicolas Boichat
2018-11-28  8:55               ` Nicolas Boichat
2018-11-28  8:55               ` Nicolas Boichat
2018-12-04  9:37 ` Nicolas Boichat
2018-12-04  9:37   ` Nicolas Boichat
2018-12-04 14:35   ` Vlastimil Babka
2018-12-04 14:35     ` Vlastimil Babka
2018-12-04 14:35     ` Vlastimil Babka
2018-12-05  2:04     ` Nicolas Boichat
2018-12-05  2:04       ` Nicolas Boichat
2018-12-05  2:04       ` Nicolas Boichat
2018-12-05  5:51       ` Nicolas Boichat
2018-12-05  5:51         ` Nicolas Boichat
2018-12-05  5:51         ` Nicolas Boichat
2018-12-05 14:41       ` Will Deacon
2018-12-05 14:41         ` Will Deacon
2018-12-05 14:41         ` Will Deacon
2018-12-04 16:28   ` Will Deacon
2018-12-04 16:28     ` Will Deacon
2018-12-04 16:28     ` Will Deacon

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=20181121213853.GL3065@bombadil.infradead.org \
    --to=willy@infradead.org \
    --cc=Alexander.Levin@microsoft.com \
    --cc=akpm@linux-foundation.org \
    --cc=cl@linux.com \
    --cc=drinkcat@chromium.org \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=iommu@lists.linux-foundation.org \
    --cc=joro@8bytes.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=matthias.bgg@gmail.com \
    --cc=mgorman@techsingularity.net \
    --cc=mhocko@suse.com \
    --cc=penberg@kernel.org \
    --cc=rientjes@google.com \
    --cc=robin.murphy@arm.com \
    --cc=rppt@linux.vnet.ibm.com \
    --cc=tfiga@google.com \
    --cc=vbabka@suse.cz \
    --cc=will.deacon@arm.com \
    --cc=yehs1@lenovo.com \
    --cc=yingjoe.chen@mediatek.com \
    --cc=yong.wu@mediatek.com \
    /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.