* tip-bot for John Ogness <tipbot@xxxxxxxxx> wrote: > Commit-ID: 459fbe00693449fade2d1bc802791b081c94edcf > Gitweb: http://git.kernel.org/tip/459fbe00693449fade2d1bc802791b081c94edcf > Author: John Ogness <john.ogness@xxxxxxxxxxxxx> > AuthorDate: Mon, 30 Jan 2017 09:41:21 +0100 > Committer: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > CommitDate: Mon, 30 Jan 2017 15:33:52 +0100 > > x86/mm/cpa: Avoid wbinvd() for PREEMPT > > Although wbinvd() is faster than flushing many individual pages, it blocks > the memory bus for "long" periods of time (>100us), thus directly causing > unusually large latencies on all CPUs, regardless of any CPU isolation > features that may be active. This is an unpriviledged operatation as it is > exposed to user space via the graphics subsystem. s/unpriviledged /unprivileged > > For 1024 pages, flushing those pages individually can take up to 2200us, > but the task remains fully preemptible during that time. > > Signed-off-by: John Ogness <john.ogness@xxxxxxxxxxxxx> > Acked-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> > Cc: Sebastian Siewior <bigeasy@xxxxxxxxxxxxx> > Cc: linux-rt-users <linux-rt-users@xxxxxxxxxxxxxxx> > Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > > --- > arch/x86/mm/pageattr.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c > index 5a287e5..28d4213 100644 > --- a/arch/x86/mm/pageattr.c > +++ b/arch/x86/mm/pageattr.c > @@ -214,7 +214,20 @@ static void cpa_flush_array(unsigned long *start, int numpages, int cache, > int in_flags, struct page **pages) > { > unsigned int i, level; > +#ifdef CONFIG_PREEMPT > + /* > + * Avoid wbinvd() because it causes latencies on all CPUs, > + * regardless of any CPU isolation that may be in effect. > + * > + * This should be extended for CAT enabled systems independent of > + * PREEMPT because wbinvd() does not respect the CAT partitions and > + * this is exposed to unpriviledged users through the graphics > + * subsystem. s/unpriviledged /unprivileged > +#else > unsigned long do_wbinvd = cache && numpages >= 1024; /* 4M threshold */ > +#endif ... and while at it: s/4M/4MB? Thanks, Ingo -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html