All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Jan Beulich <JBeulich@suse.com>,
	xen-devel <xen-devel@lists.xenproject.org>
Cc: Keir Fraser <keir@xen.org>
Subject: Re: [PATCH] x86: don't use VA for cache flush when also flushing TLB
Date: Mon, 26 May 2014 17:37:30 +0100	[thread overview]
Message-ID: <53836DCA.8090907@citrix.com> (raw)
In-Reply-To: <538330EF0200007800015B4B@mail.emea.novell.com>


[-- Attachment #1.1: Type: text/plain, Size: 2598 bytes --]

On 26/05/2014 11:17, Jan Beulich wrote:
> Doing both flushes at once is a strong indication for the address
> mapping to either having got dropped (in which case the cache flush,
> when done via INVLPG, would fault) or its physical address having
> changed (in which case the cache flush would end up being done on the
> wrong address range). There is no adverse effect (other than the
> obvious performance one) using WBINVD in this case regardless of the
> range's size; only map_pages_to_xen() uses combined flushes at present.
>
> This problem was observed with the 2nd try backport of d6cb14b3 ("VT-d:
> suppress UR signaling for desktop chipsets") to 4.2 (where ioremap()
> needs to be replaced with set_fixmap_nocache(); the now commented out
> __set_fixmap(, 0, 0) there to undo the mapping resulted in the first of
> the above two scenarios).
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Overall, I agree with your final assessment, and it might indeed be the
easiest way, so on that basis, Reviewed-by: Andrew Cooper
<andrew.cooper3@citrix.com>

It would be nice to avoid the performance hit if possible.

The fault case can be fixed by reording the cache flush with respect to
the tlb flush inside flush_area_local.  For callers performing a TLB
shootdown and a cache flush, it is far more likely that the VAs wanting
flushing are under the old TLB mappings rather than the new.

This does come with a risk that the old TLB entry has already fallen out
of the TLB before the flush happens, at which point we are back into the
risk of a fault or flushing the wrong physical area.

The only way I can see to safely flush bot the caches and TLB for a
given change is to flush the cache by VA, then update the PTE, then
shoot down the TLB entry.  Despite this being awkward, I think it is
preferable to falling back to wbinvd() to cover up bad behaviour in the
callers.

~Andrew

>
> --- a/xen/arch/x86/flushtlb.c
> +++ b/xen/arch/x86/flushtlb.c
> @@ -152,7 +152,8 @@ void flush_area_local(const void *va, un
>          if ( order < (BITS_PER_LONG - PAGE_SHIFT) )
>              sz = 1UL << (order + PAGE_SHIFT);
>  
> -        if ( c->x86_clflush_size && c->x86_cache_size && sz &&
> +        if ( !(flags & (FLUSH_TLB|FLUSH_TLB_GLOBAL)) &&
> +             c->x86_clflush_size && c->x86_cache_size && sz &&
>               ((sz >> 10) < c->x86_cache_size) )
>          {
>              va = (const void *)((unsigned long)va & ~(sz - 1));
>
>
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel


[-- Attachment #1.2: Type: text/html, Size: 3698 bytes --]

[-- Attachment #2: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  reply	other threads:[~2014-05-26 16:37 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-26 10:17 [PATCH] x86: don't use VA for cache flush when also flushing TLB Jan Beulich
2014-05-26 16:37 ` Andrew Cooper [this message]
2014-05-27  9:18   ` Jan Beulich
2014-05-28  4:35     ` Zhang, Yang Z
2014-05-28  6:56       ` Jan Beulich
2014-05-28  7:37         ` Zhang, Yang Z

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=53836DCA.8090907@citrix.com \
    --to=andrew.cooper3@citrix.com \
    --cc=JBeulich@suse.com \
    --cc=keir@xen.org \
    --cc=xen-devel@lists.xenproject.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.