From: Catalin Marinas <catalin.marinas@arm.com>
To: Steve Capper <steve.capper@linaro.org>
Cc: "linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux@arm.linux.org.uk" <linux@arm.linux.org.uk>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
"peterz@infradead.org" <peterz@infradead.org>,
"gary.robertson@linaro.org" <gary.robertson@linaro.org>,
"anders.roxell@linaro.org" <anders.roxell@linaro.org>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>
Subject: Re: [RFC PATCH V4 6/7] arm64: mm: Enable HAVE_RCU_TABLE_FREE logic
Date: Thu, 1 May 2014 10:52:47 +0100 [thread overview]
Message-ID: <20140501095246.GB22316@arm.com> (raw)
In-Reply-To: <20140501073402.GA30358@linaro.org>
On Thu, May 01, 2014 at 08:34:03AM +0100, Steve Capper wrote:
> On Wed, Apr 30, 2014 at 06:21:14PM +0100, Catalin Marinas wrote:
> > Both powerpc and sparc use tlb_remove_table() via their __pte_free_tlb()
> > etc. which implies an IPI for synchronisation if mm_users > 1. For
> > gup_fast we may not need it since we use the RCU for protection. Am I
> > missing anything?
>
> So my understanding is:
>
> tlb_remove_table will just immediately free any pages where there's a
> single user as there's no need to consider a gup walking.
Does gup_fast walking increment the mm_users? Or is it a requirement of
the calling code? I can't seem to find where this happens.
> For the case of multiple users we have an mmu_table_batch structure
> that holds references to pages that should be freed at a later point.
Yes.
> This batch is contained on a page that is allocated on the fly. If, for
> any reason, we can't allocate the batch container we fallback to a slow
> path which is to issue an IPI (via tlb_remove_table_one). This IPI will
> block on the gup walker. We need this fallback behaviour on ARM/ARM64.
That's my main point: this batch page allocation on the fly for table
pages happens in tlb_remove_table(). With your patch for arm64
HAVE_RCU_TABLE_FREE, I can comment out tlb_remove_table() and it
compiles just fine because you don't call it from functions like
__pte_free_tlb() (as powerpc and sparc do). The __tlb_remove_page() that
we currently use doesn't give us any RCU protection here.
--
Catalin
WARNING: multiple messages have this Message-ID (diff)
From: catalin.marinas@arm.com (Catalin Marinas)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH V4 6/7] arm64: mm: Enable HAVE_RCU_TABLE_FREE logic
Date: Thu, 1 May 2014 10:52:47 +0100 [thread overview]
Message-ID: <20140501095246.GB22316@arm.com> (raw)
In-Reply-To: <20140501073402.GA30358@linaro.org>
On Thu, May 01, 2014 at 08:34:03AM +0100, Steve Capper wrote:
> On Wed, Apr 30, 2014 at 06:21:14PM +0100, Catalin Marinas wrote:
> > Both powerpc and sparc use tlb_remove_table() via their __pte_free_tlb()
> > etc. which implies an IPI for synchronisation if mm_users > 1. For
> > gup_fast we may not need it since we use the RCU for protection. Am I
> > missing anything?
>
> So my understanding is:
>
> tlb_remove_table will just immediately free any pages where there's a
> single user as there's no need to consider a gup walking.
Does gup_fast walking increment the mm_users? Or is it a requirement of
the calling code? I can't seem to find where this happens.
> For the case of multiple users we have an mmu_table_batch structure
> that holds references to pages that should be freed at a later point.
Yes.
> This batch is contained on a page that is allocated on the fly. If, for
> any reason, we can't allocate the batch container we fallback to a slow
> path which is to issue an IPI (via tlb_remove_table_one). This IPI will
> block on the gup walker. We need this fallback behaviour on ARM/ARM64.
That's my main point: this batch page allocation on the fly for table
pages happens in tlb_remove_table(). With your patch for arm64
HAVE_RCU_TABLE_FREE, I can comment out tlb_remove_table() and it
compiles just fine because you don't call it from functions like
__pte_free_tlb() (as powerpc and sparc do). The __tlb_remove_page() that
we currently use doesn't give us any RCU protection here.
--
Catalin
WARNING: multiple messages have this Message-ID (diff)
From: Catalin Marinas <catalin.marinas@arm.com>
To: Steve Capper <steve.capper@linaro.org>
Cc: "linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux@arm.linux.org.uk" <linux@arm.linux.org.uk>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
"peterz@infradead.org" <peterz@infradead.org>,
"gary.robertson@linaro.org" <gary.robertson@linaro.org>,
"anders.roxell@linaro.org" <anders.roxell@linaro.org>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>
Subject: Re: [RFC PATCH V4 6/7] arm64: mm: Enable HAVE_RCU_TABLE_FREE logic
Date: Thu, 1 May 2014 10:52:47 +0100 [thread overview]
Message-ID: <20140501095246.GB22316@arm.com> (raw)
In-Reply-To: <20140501073402.GA30358@linaro.org>
On Thu, May 01, 2014 at 08:34:03AM +0100, Steve Capper wrote:
> On Wed, Apr 30, 2014 at 06:21:14PM +0100, Catalin Marinas wrote:
> > Both powerpc and sparc use tlb_remove_table() via their __pte_free_tlb()
> > etc. which implies an IPI for synchronisation if mm_users > 1. For
> > gup_fast we may not need it since we use the RCU for protection. Am I
> > missing anything?
>
> So my understanding is:
>
> tlb_remove_table will just immediately free any pages where there's a
> single user as there's no need to consider a gup walking.
Does gup_fast walking increment the mm_users? Or is it a requirement of
the calling code? I can't seem to find where this happens.
> For the case of multiple users we have an mmu_table_batch structure
> that holds references to pages that should be freed at a later point.
Yes.
> This batch is contained on a page that is allocated on the fly. If, for
> any reason, we can't allocate the batch container we fallback to a slow
> path which is to issue an IPI (via tlb_remove_table_one). This IPI will
> block on the gup walker. We need this fallback behaviour on ARM/ARM64.
That's my main point: this batch page allocation on the fly for table
pages happens in tlb_remove_table(). With your patch for arm64
HAVE_RCU_TABLE_FREE, I can comment out tlb_remove_table() and it
compiles just fine because you don't call it from functions like
__pte_free_tlb() (as powerpc and sparc do). The __tlb_remove_page() that
we currently use doesn't give us any RCU protection here.
--
Catalin
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2014-05-01 9:53 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-28 15:01 [RFC PATCH V4 0/7] get_user_pages_fast for ARM and ARM64 Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` [RFC PATCH V4 1/7] mm: Introduce a general RCU get_user_pages_fast Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` [RFC PATCH V4 2/7] arm: mm: Introduce special ptes for LPAE Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` [RFC PATCH V4 3/7] arm: mm: Enable HAVE_RCU_TABLE_FREE logic Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-05-01 11:11 ` Catalin Marinas
2014-05-01 11:11 ` Catalin Marinas
2014-05-01 11:11 ` Catalin Marinas
2014-05-01 11:44 ` Steve Capper
2014-05-01 11:44 ` Steve Capper
2014-05-01 11:44 ` Steve Capper
2014-03-28 15:01 ` [RFC PATCH V4 4/7] arm: mm: Enable RCU fast_gup Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` [RFC PATCH V4 5/7] arm64: Convert asm/tlb.h to generic mmu_gather Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` [RFC PATCH V4 6/7] arm64: mm: Enable HAVE_RCU_TABLE_FREE logic Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-04-30 15:20 ` Catalin Marinas
2014-04-30 15:20 ` Catalin Marinas
2014-04-30 15:20 ` Catalin Marinas
2014-04-30 15:33 ` Catalin Marinas
2014-04-30 15:33 ` Catalin Marinas
2014-04-30 15:33 ` Catalin Marinas
2014-04-30 15:38 ` Steve Capper
2014-04-30 15:38 ` Steve Capper
2014-04-30 15:38 ` Steve Capper
2014-04-30 17:21 ` Catalin Marinas
2014-04-30 17:21 ` Catalin Marinas
2014-04-30 17:21 ` Catalin Marinas
2014-05-01 7:34 ` Steve Capper
2014-05-01 7:34 ` Steve Capper
2014-05-01 7:34 ` Steve Capper
2014-05-01 9:52 ` Catalin Marinas [this message]
2014-05-01 9:52 ` Catalin Marinas
2014-05-01 9:52 ` Catalin Marinas
2014-05-01 9:57 ` Peter Zijlstra
2014-05-01 9:57 ` Peter Zijlstra
2014-05-01 9:57 ` Peter Zijlstra
2014-05-01 10:04 ` Catalin Marinas
2014-05-01 10:04 ` Catalin Marinas
2014-05-01 10:04 ` Catalin Marinas
2014-05-01 10:15 ` Steve Capper
2014-05-01 10:15 ` Steve Capper
2014-05-01 10:15 ` Steve Capper
2014-03-28 15:01 ` [RFC PATCH V4 7/7] arm64: mm: Enable RCU fast_gup Steve Capper
2014-03-28 15:01 ` Steve Capper
2014-03-28 15:01 ` Steve Capper
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=20140501095246.GB22316@arm.com \
--to=catalin.marinas@arm.com \
--cc=akpm@linux-foundation.org \
--cc=anders.roxell@linaro.org \
--cc=gary.robertson@linaro.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-mm@kvack.org \
--cc=linux@arm.linux.org.uk \
--cc=peterz@infradead.org \
--cc=steve.capper@linaro.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.