All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan_Lynch@mentor.com (Nathan Lynch)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v7 7/9] ARM: add vdso user-space code
Date: Sun, 29 Jun 2014 18:04:35 -0500	[thread overview]
Message-ID: <53B09B83.6020009@mentor.com> (raw)
In-Reply-To: <20140629160751.GQ32514@n2100.arm.linux.org.uk>

On 06/29/2014 11:07 AM, Russell King - ARM Linux wrote:
> On Sun, Jun 29, 2014 at 10:48:13AM -0500, Nathan Lynch wrote:
>> On 06/29/2014 03:34 AM, Russell King - ARM Linux wrote:
>>> On Sat, Jun 28, 2014 at 04:35:12PM -0500, Nathan Lynch wrote:
>>>> That's consistent with my results on iMX6.  The reported 1.00x "speedup"
>>>> for clock-gettime-monotonic etc indicates the VDSO is falling back to
>>>> syscall.
>>>>
>>>> Thanks for testing.
>>>
>>> Here's another issue which cropped up when I ran this patch set through
>>> the autobuilder last night - allnoconfig's now fail with:
>>>
>>> mm/memory.c: In function 'gate_vma_init':
>>> mm/memory.c:3410:22: error: 'FIXADDR_USER_START' undeclared (first use in this function)
>>> mm/memory.c:3411:20: error: 'FIXADDR_USER_END' undeclared (first use in this function)
>>> mm/memory.c: In function 'in_gate_area_no_mm':
>>> mm/memory.c:3432:15: error: 'FIXADDR_USER_START' undeclared (first use in this function)
>>> mm/memory.c:3432:46: error: 'FIXADDR_USER_END' undeclared (first use in this function)
>>> make[2]: *** [mm/memory.o] Error 1
>>
>> arch/arm/include/page.h:
>> #ifdef CONFIG_KUSER_HELPERS
>> #define __HAVE_ARCH_GATE_AREA 1
>> #endif
>>
>> mm/memory.c:
>> #if !defined(__HAVE_ARCH_GATE_AREA)
>>
>> #if defined(AT_SYSINFO_EHDR)
>> static struct vm_area_struct gate_vma;
>>
>> static int __init gate_vma_init(void)
>> {
>> 	gate_vma.vm_mm = NULL;
>> 	gate_vma.vm_start = FIXADDR_USER_START;
>> 	gate_vma.vm_end = FIXADDR_USER_END;
>> ...
>>
>> The vdso patches add an ARM definition for AT_SYSINFO_EHDR.  So when
>> CONFIG_KUSER_HELPERS=n, this code is pulled in now...
>>
>> Not sure what the fix would be right now.  I don't understand why there
>> is this relationship between AT_SYSINFO_EHDR and gate vma code.
> 
> Me neither.  It looks like changing those tests for AT_SYSINFO_EHDR to
> something like __HAVE_GATE_VMA or CONFIG_HAVE_GATE_VMA would be a good
> step, so we can keep this disabled on ARM.  I don't see a need for the
> gate VMA stuff just because we have a vDSO.

How about the following as an additonal preparatory patch?  It's not as
good as cleaning up interaction between the core mm and architecture code
with respect to the gate vma APIs, but it has the advantage of not
blocking the ARM VDSO code.

(sorry if it's mangled, I swear I'm going to stop using this mail client soon)

============

>From 4ad05345625d6f6a045ebe5ed355e3a2c2272fd4 Mon Sep 17 00:00:00 2001
From: Nathan Lynch <nathan_lynch@mentor.com>
Date: Sun, 29 Jun 2014 17:20:46 -0500
Subject: [PATCH] ARM: provide gate vma API stubs when CONFIG_KUSER_HELPERS
 disabled

If an architecture defines AT_SYSINFO_EHDR and does not define
__HAVE_ARCH_GATE_AREA, code in mm/memory.c (gate_vma_init,
get_gate_vma, etc) is enabled which is unbuildable unless the
architecure provides FIXADDR_USER_START and FIXADDR_USER_END.

This situation can arise with arch/arm with the introduction of VDSO
support, which adds a definition for AT_SYSINFO_EHDR.
__HAVE_ARCH_GATE_AREA is conditional on CONFIG_KUSER_HELPERS, so if
that config option is disabled, the ARM build fails.  We don't want to
enable this code on ARM.

Other architectures (arm64, powerpc, s390, tile) define
__HAVE_ARCH_GATE_AREA unconditionally, and provide stub
implementations of the gate vma APIs.  This avoids building the
default gate vma code in the core mm, which appears to be useful only
for ia64 and user-mode x86.

Make ARM work similarly, except we provide real implementations of the
gate APIs when the kuser helper page is enabled.  When it's disabled,
use stubs like the other architectures.  Define __HAVE_ARCH_GATE_AREA
unconditionally.

Signed-off-by: Nathan Lynch <nathan_lynch@mentor.com>
---
 arch/arm/include/asm/page.h |  2 --
 arch/arm/kernel/process.c   | 20 ++++++++++++++++++--
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/arch/arm/include/asm/page.h b/arch/arm/include/asm/page.h
index 4355f0ec44d6..6363f3d1d505 100644
--- a/arch/arm/include/asm/page.h
+++ b/arch/arm/include/asm/page.h
@@ -142,9 +142,7 @@ extern void __cpu_copy_user_highpage(struct page *to, struct page *from,
 #define clear_page(page)	memset((void *)(page), 0, PAGE_SIZE)
 extern void copy_page(void *to, const void *from);
 
-#ifdef CONFIG_KUSER_HELPERS
 #define __HAVE_ARCH_GATE_AREA 1
-#endif
 
 #ifdef CONFIG_ARM_LPAE
 #include <asm/pgtable-3level-types.h>
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 39b0d68aa068..35f4cb54bb14 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -467,9 +467,25 @@ int in_gate_area_no_mm(unsigned long addr)
 	return in_gate_area(NULL, addr);
 }
 #define is_gate_vma(vma)	((vma) == &gate_vma)
-#else
+
+#else /* !CONFIG_KUSER_HELPERS */
+
+struct vm_area_struct *get_gate_vma(struct mm_struct *mm)
+{
+	return NULL;
+}
+
+int in_gate_area(struct mm_struct *mm, unsigned long addr)
+{
+	return 0;
+}
+
+int in_gate_area_no_mm(unsigned long addr)
+{
+	return 0;
+}
 #define is_gate_vma(vma)	0
-#endif
+#endif /* CONFIG_KUSER_HELPERS */
 
 const char *arch_vma_name(struct vm_area_struct *vma)
 {
-- 
1.9.3

  reply	other threads:[~2014-06-29 23:04 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-23  3:11 [PATCH v7 0/9] ARM: VDSO Nathan Lynch
2014-06-23  3:11 ` [PATCH v7 1/9] clocksource: arm_arch_timer: change clocksource name if CP15 unavailable Nathan Lynch
2014-06-23  3:11 ` [PATCH v7 2/9] clocksource: arm_arch_timer: enable counter access for 32-bit ARM Nathan Lynch
2014-06-23  3:11 ` [PATCH v7 3/9] ARM: arch_timer: remove unused functions Nathan Lynch
2014-06-23  3:11 ` [PATCH v7 4/9] arm64: " Nathan Lynch
2014-06-23  3:11 ` [PATCH v7 5/9] ARM: place sigpage at a random offset above stack Nathan Lynch
2014-06-23  3:11 ` [PATCH v7 6/9] ARM: miscellaneous vdso infrastructure, preparation Nathan Lynch
2014-06-30 10:11   ` Arnd Bergmann
2014-06-30 12:27     ` Nathan Lynch
2014-06-30 13:06       ` Arnd Bergmann
2014-06-23  3:11 ` [PATCH v7 7/9] ARM: add vdso user-space code Nathan Lynch
2014-06-28  9:53   ` Russell King - ARM Linux
2014-06-28 10:03     ` Russell King - ARM Linux
2014-06-30 15:56       ` Andy Lutomirski
2014-06-28 15:19     ` Nathan Lynch
2014-06-28 15:26   ` Russell King - ARM Linux
2014-06-28 16:13     ` Nathan Lynch
2014-06-28 18:12       ` Russell King - ARM Linux
2014-06-28 19:45         ` Nathan Lynch
2014-06-28 20:11           ` Russell King - ARM Linux
2014-06-28 21:35             ` Nathan Lynch
2014-06-29  8:34               ` Russell King - ARM Linux
2014-06-29 15:48                 ` Nathan Lynch
2014-06-29 16:07                   ` Russell King - ARM Linux
2014-06-29 23:04                     ` Nathan Lynch [this message]
2014-06-30 21:33                     ` Andy Lutomirski
2014-06-30 15:59     ` Andy Lutomirski
2014-06-30 16:50       ` Nathan Lynch
2014-06-30 21:29   ` Andy Lutomirski
2014-07-01  9:00     ` Will Deacon
2014-07-01 13:34       ` Nathan Lynch
2014-07-01 14:11         ` Andy Lutomirski
2014-07-01 13:28     ` Nathan Lynch
2014-07-01 14:56       ` Andy Lutomirski
2014-06-23  3:11 ` [PATCH v7 8/9] ARM: vdso initialization, mapping, and synchronization Nathan Lynch
2014-06-30 21:37   ` Andy Lutomirski
2014-07-01  9:03     ` Will Deacon
2014-07-01 14:11       ` Nathan Lynch
2014-07-01 14:15         ` Will Deacon
2014-07-01 14:17           ` Andy Lutomirski
2014-07-01 17:27             ` Christopher Covington
2014-07-02 14:40             ` Will Deacon
2014-07-02 15:54               ` Andy Lutomirski
2014-07-02 16:18                 ` Nathan Lynch
2014-07-02 16:27                   ` Will Deacon
2014-07-02 16:47                     ` Andy Lutomirski
2014-07-02 17:24                       ` Will Deacon
2014-07-02 18:34                         ` Andy Lutomirski
2014-07-02 18:54                           ` Will Deacon
2014-07-22  0:14                             ` Andy Lutomirski
2014-07-22  8:13                               ` Will Deacon
2014-07-01 14:01     ` Nathan Lynch
2014-07-01 14:09       ` Andy Lutomirski
2014-07-01 14:14         ` Russell King - ARM Linux
2014-06-23  3:11 ` [PATCH v7 9/9] ARM: add CONFIG_VDSO Kconfig and Makefile bits Nathan Lynch
2014-06-27  8:51 ` [PATCH v7 0/9] ARM: VDSO Jan Glauber
2014-06-27  8:57   ` Russell King - ARM Linux
2014-06-27  9:41     ` Ard Biesheuvel
2014-06-27  9:46       ` Russell King - ARM Linux
2014-06-27 17:01         ` Nathan Lynch
2014-06-28  9:42           ` Russell King - ARM Linux
2014-06-28  9:55             ` Russell King - ARM Linux
2014-06-28 14:49               ` Russell King - ARM Linux
2014-06-30  7:27                 ` Arnd Bergmann
2014-06-30  7:43             ` Arnd Bergmann
2014-06-30 18:27               ` Nathan Lynch
2014-06-27 16:00   ` Nathan Lynch
2014-06-30 16:03   ` Andy Lutomirski
2014-06-30  8:12 ` Ard Biesheuvel
2014-07-01 16:34   ` Nathan Lynch
2014-07-01 20:08     ` Ard Biesheuvel
2014-07-01 22:44       ` Russell King - ARM Linux
2014-06-30 14:40 ` Will Deacon
2014-06-30 15:42   ` Nathan Lynch
2014-06-30 21:56     ` Andy Lutomirski
2014-07-01  9:04       ` 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=53B09B83.6020009@mentor.com \
    --to=nathan_lynch@mentor.com \
    --cc=linux-arm-kernel@lists.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.