All of lore.kernel.org
 help / color / mirror / Atom feed
From: "tip-bot for Kirill A. Shutemov" <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: hpa@zytor.com, catalin.marinas@arm.com, bp@alien8.de,
	dann.frazier@canonical.com, linux-kernel@vger.kernel.org,
	mingo@kernel.org, aneesh.kumar@linux.vnet.ibm.com,
	tglx@linutronix.de, steve.capper@linaro.org,
	torvalds@linux-foundation.org, akpm@linux-foundation.org,
	kirill.shutemov@linux.intel.com, peterz@infradead.org,
	riel@redhat.com, dave.hansen@intel.com
Subject: [tip:x86/mm] mm/gup: Provide callback to check if __GUP_fast() is allowed for the range
Date: Sat, 18 Mar 2017 02:52:21 -0700	[thread overview]
Message-ID: <tip-73e10a61817dfc97fe7418bfad1f608e562d7348@git.kernel.org> (raw)
In-Reply-To: <20170316152655.37789-7-kirill.shutemov@linux.intel.com>

Commit-ID:  73e10a61817dfc97fe7418bfad1f608e562d7348
Gitweb:     http://git.kernel.org/tip/73e10a61817dfc97fe7418bfad1f608e562d7348
Author:     Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
AuthorDate: Thu, 16 Mar 2017 18:26:54 +0300
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Sat, 18 Mar 2017 09:48:03 +0100

mm/gup: Provide callback to check if __GUP_fast() is allowed for the range

This is a preparation patch for the transition of x86 to the generic GUP_fast()
implementation.

On x86, get_user_pages_fast() does a couple of sanity checks to see if we can
call __get_user_pages_fast() for the range.

This kind of wrapping protection should be useful for the generic code too.

Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Aneesh Kumar K . V <aneesh.kumar@linux.vnet.ibm.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Dann Frazier <dann.frazier@canonical.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Steve Capper <steve.capper@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20170316152655.37789-7-kirill.shutemov@linux.intel.com
[ Small readability edits. ]
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 mm/gup.c | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/mm/gup.c b/mm/gup.c
index e3d1e80..527ec2c 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -1614,6 +1614,21 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
 	return nr;
 }
 
+#ifndef gup_fast_permitted
+/*
+ * Check if it's allowed to use __get_user_pages_fast() for the range, or
+ * we need to fall back to the slow version:
+ */
+bool gup_fast_permitted(unsigned long start, int nr_pages, int write)
+{
+	unsigned long len, end;
+
+	len = (unsigned long) nr_pages << PAGE_SHIFT;
+	end = start + len;
+	return end >= start;
+}
+#endif
+
 /**
  * get_user_pages_fast() - pin user pages in memory
  * @start:	starting user address
@@ -1633,11 +1648,14 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
 int get_user_pages_fast(unsigned long start, int nr_pages, int write,
 			struct page **pages)
 {
-	int nr, ret;
+	int nr = 0, ret = 0;
 
 	start &= PAGE_MASK;
-	nr = __get_user_pages_fast(start, nr_pages, write, pages);
-	ret = nr;
+
+	if (gup_fast_permitted(start, nr_pages, write)) {
+		nr = __get_user_pages_fast(start, nr_pages, write, pages);
+		ret = nr;
+	}
 
 	if (nr < nr_pages) {
 		/* Try to get the remaining pages with get_user_pages */

  reply	other threads:[~2017-03-18 13:45 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-16 15:26 [PATCH 0/7] Switch x86 to generic get_user_pages_fast() implementation Kirill A. Shutemov
2017-03-16 15:26 ` Kirill A. Shutemov
2017-03-16 15:26 ` [PATCH 1/7] mm: Drop arch_pte_access_permitted() mmu hook Kirill A. Shutemov
2017-03-16 15:26   ` Kirill A. Shutemov
2017-03-18  9:49   ` [tip:x86/mm] mm/gup: Drop the arch_pte_access_permitted() MMU callback tip-bot for Kirill A. Shutemov
2017-03-16 15:26 ` [PATCH 2/7] mm/gup: Move permission checks into helpers Kirill A. Shutemov
2017-03-16 15:26   ` Kirill A. Shutemov
2017-03-18  9:50   ` [tip:x86/mm] " tip-bot for Kirill A. Shutemov
2017-03-16 15:26 ` [PATCH 3/7] mm/gup: Move page table entry dereference into helper Kirill A. Shutemov
2017-03-16 15:26   ` Kirill A. Shutemov
2017-03-18  9:50   ` [tip:x86/mm] mm/gup: Move page table entry dereference into helper function tip-bot for Kirill A. Shutemov
2017-03-16 15:26 ` [PATCH 4/7] mm/gup: Make pages referenced during generic get_user_pages_fast() Kirill A. Shutemov
2017-03-16 15:26   ` Kirill A. Shutemov
2017-03-18  9:51   ` [tip:x86/mm] mm/gup: Mark all pages PageReferenced in " tip-bot for Kirill A. Shutemov
2017-03-16 15:26 ` [PATCH 5/7] mm/gup: Implement dev_pagemap logic " Kirill A. Shutemov
2017-03-16 15:26   ` Kirill A. Shutemov
2017-03-17 17:27   ` Kirill A. Shutemov
2017-03-17 17:27     ` Kirill A. Shutemov
2017-03-18  9:51   ` [tip:x86/mm] mm/gup: Implement the dev_pagemap() logic in the generic get_user_pages_fast() function tip-bot for Kirill A. Shutemov
2017-03-16 15:26 ` [PATCH 6/7] mm/gup: Provide hook to check if __GUP_fast() is allowed for the range Kirill A. Shutemov
2017-03-16 15:26   ` Kirill A. Shutemov
2017-03-18  9:52   ` tip-bot for Kirill A. Shutemov [this message]
2017-03-16 15:26 ` [PATCH 7/7] x86/mm: Switch to generic get_user_page_fast() implementation Kirill A. Shutemov
2017-03-16 15:26   ` Kirill A. Shutemov
2017-03-16 17:20   ` Peter Zijlstra
2017-03-16 17:20     ` Peter Zijlstra
2017-03-16 19:11     ` Paul E. McKenney
2017-03-16 19:11       ` Paul E. McKenney
2017-03-16 21:39   ` [PATCHv2 " Kirill A. Shutemov
2017-03-16 21:39     ` Kirill A. Shutemov
2017-03-17 17:27     ` Kirill A. Shutemov
2017-03-17 17:27       ` Kirill A. Shutemov
2017-03-18  9:52     ` [tip:x86/mm] x86/mm/gup: Switch GUP to the " tip-bot for Kirill A. Shutemov
2017-03-16 18:03 ` [PATCH 0/7] Switch x86 to generic get_user_pages_fast() implementation Linus Torvalds
2017-03-16 18:03   ` Linus Torvalds
2017-03-17  8:31 ` Ingo Molnar
2017-03-17  8:31   ` Ingo Molnar
2017-03-17  8:31   ` Ingo Molnar

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=tip-73e10a61817dfc97fe7418bfad1f608e562d7348@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=akpm@linux-foundation.org \
    --cc=aneesh.kumar@linux.vnet.ibm.com \
    --cc=bp@alien8.de \
    --cc=catalin.marinas@arm.com \
    --cc=dann.frazier@canonical.com \
    --cc=dave.hansen@intel.com \
    --cc=hpa@zytor.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=riel@redhat.com \
    --cc=steve.capper@linaro.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.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.