From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Cc: linux-kernel@vger.kernel.org, mingo@redhat.com, hpa@zytor.com,
paulus@samba.org, acme@redhat.com, efault@gmx.de,
npiggin@suse.de, tglx@linutronix.de, mingo@elte.hu,
linux-tip-commits@vger.kernel.org
Subject: Re: [tip:perfcounters/core] x86: Add NMI types for kmap_atomic
Date: Mon, 15 Jun 2009 17:41:26 +0200 [thread overview]
Message-ID: <1245080486.6800.561.camel@laptop> (raw)
In-Reply-To: <Pine.LNX.4.64.0906151623570.5225@sister.anvils>
On Mon, 2009-06-15 at 16:30 +0100, Hugh Dickins wrote:
> On Mon, 15 Jun 2009, Peter Zijlstra wrote:
> >
> > The below would fix it, but that's getting rather ugly :-/,
> > alternatively I would have to introduce something like
> > pte_offset_map_irq() which would make the irq/nmi detection and leave
> > the regular code paths alone, however that would mean either duplicating
> > the gup_fast() pagewalk or passing down a pte function pointer, which
> > would only duplicate the gup_pte_range() bit, neither is really
> > attractive...
>
> > Index: linux-2.6/arch/x86/include/asm/pgtable_32.h
> > ===================================================================
> > --- linux-2.6.orig/arch/x86/include/asm/pgtable_32.h
> > +++ linux-2.6/arch/x86/include/asm/pgtable_32.h
> > @@ -49,7 +49,10 @@ extern void set_pmd_pfn(unsigned long, u
> > #endif
> >
> > #if defined(CONFIG_HIGHPTE)
> > -#define __KM_PTE (in_nmi() ? KM_NMI_PTE : KM_PTE0)
> > +#define __KM_PTE \
> > + (in_nmi() ? KM_NMI_PTE : \
> > + in_irq() ? KM_IRQ_PTE : \
> > + KM_PTE0)
> > #define pte_offset_map(dir, address) \
> > ((pte_t *)kmap_atomic_pte(pmd_page(*(dir)), __KM_PTE) + \
> > pte_index((address)))
>
> Yes, that does look ugly!
>
> I've not been following the background to this,
We need/want to do a user-space stack walk from IRQ/NMI context. The NMI
bit means we cannot simply use __copy_from_user_inatomic() since that
will still fault (albeit not page), and the fault return path invokes
IRET which will terminate the NMI context.
Therefore I wrote a copy_from_user_nmi() variant that is based of of
__get_user_pages_fast() (a variant that doesn't fall back to the regular
GUP), but that means we get 2 kmap_atomic()s, one for HIGHPTE and one
for the user page.
So this introduces the pte map from IRQ context and one from NMI
context.
> but I've often
> wondered if a kmap_push() and kmap_pop() could be useful,
> allowing you to reuse the slot in between - any use here?
Yes, that would be much nicer, although less we would loose some of the
type validation that lives in -mm, (along with a massive overhaul of the
current kmap_atomic usage).
Hmm, if we give each explicit type an level and ensure the new push()'ed
type's level <= the previous one, we'd still have the full nesting
validation and such..
I'll look into doing this.
next prev parent reply other threads:[~2009-06-15 15:41 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <tip-3ff0141aa3a03ca3388b40b36167d0a37919f3fd@git.kernel.org>
2009-06-15 14:46 ` [tip:perfcounters/core] x86: Add NMI types for kmap_atomic Peter Zijlstra
2009-06-15 15:30 ` Hugh Dickins
2009-06-15 15:41 ` Peter Zijlstra [this message]
2009-06-15 15:52 ` Ingo Molnar
2009-06-15 16:02 ` Hugh Dickins
2009-06-15 18:04 ` Peter Zijlstra
2009-06-15 18:15 ` Ingo Molnar
2009-06-15 18:19 ` Peter Zijlstra
2009-06-15 18:25 ` Ingo Molnar
2009-06-15 18:30 ` Peter Zijlstra
2009-06-15 18:42 ` Ingo Molnar
2009-06-15 18:47 ` Peter Zijlstra
2009-06-15 18:52 ` Ingo Molnar
2009-06-15 19:00 ` Peter Zijlstra
2009-06-16 8:13 ` Ingo Molnar
2009-06-16 12:38 ` Hugh Dickins
2009-06-17 7:58 ` Peter Zijlstra
2009-06-17 8:43 ` Tejun Heo
2009-06-17 9:05 ` Peter Zijlstra
2009-06-17 7:44 ` Peter Zijlstra
2009-06-17 12:28 ` Ingo Molnar
2009-06-15 18:42 ` Andrew Morton
2009-06-15 18:45 ` Peter Zijlstra
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=1245080486.6800.561.camel@laptop \
--to=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=efault@gmx.de \
--cc=hpa@zytor.com \
--cc=hugh.dickins@tiscali.co.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mingo@redhat.com \
--cc=npiggin@suse.de \
--cc=paulus@samba.org \
--cc=tglx@linutronix.de \
/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.