From: Tim Deegan <tim@xen.org>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>,
Ian Campbell <Ian.Campbell@citrix.com>
Subject: Re: [PATCH 6/7] xen/arm: flush D-cache and I-cache when appropriate
Date: Fri, 26 Oct 2012 17:55:49 +0100 [thread overview]
Message-ID: <20121026165549.GF76080@ocelot.phlegethon.org> (raw)
In-Reply-To: <alpine.DEB.2.02.1210261700310.2689@kaball.uk.xensource.com>
At 17:03 +0100 on 26 Oct (1351271018), Stefano Stabellini wrote:
> On Fri, 26 Oct 2012, Stefano Stabellini wrote:
> > On Fri, 26 Oct 2012, Stefano Stabellini wrote:
> > > On Fri, 26 Oct 2012, Tim Deegan wrote:
> > > > At 18:35 +0100 on 24 Oct (1351103740), Stefano Stabellini wrote:
> > > > > > I don't think this is necessary - why not just pass va directly to the
> > > > > > inline asm? We don't care what register it's in (and if we did I'm not
> > > > > > convinced this would guarantee it was r0).
> > > > > >
> > > > > > > + asm volatile (
> > > > > > > + "dsb;"
> > > > > > > + STORE_CP32(0, DCCMVAC)
> > > > > > > + "isb;"
> > > > > > > + : : "r" (r0) : "memory");
> > > > > >
> > > > > > Does this need a 'memory' clobber? Can we get away with just saying it
> > > > > > consumes *va as an input? All we need to be sure of is that the
> > > > > > particular thing we're flushing has been written out; no need to stop
> > > > > > any other optimizations.
> > > > >
> > > > > you are right on both points
> > > > >
> > > > > > I guess it might need to be re-cast as a macro so the compiler knows how
> > > > > > big *va is?
> > > > >
> > > > > I don't think it is necessary, after all the size of a register has to
> > > > > be the same of a virtual address
> > > >
> > > > But it's the size of the thing in memory that's being flushed that
> > > > matters, not the size of the pointer to it!
> > > >
> > > > E.g. after a PTE write we
> > > > need a 64-bit memory input operand to stop the compiler from hoisting
> > > > any part of the PTE write past the cache flush. (well OK we explicitly use
> > > > a 64-bit atomic write for PTE writes, but YKWIM).
> > >
> > > The implementation of write_pte is entirely in assembly so I doubt that
> > > the compiler is going to reorder it.
> > >
> > > However I see your point in case of flush_xen_dcache_va.
> > > Wouldn't a barrier() at the beginning of the function be enough?
> > >
> >
> > Actually we already have a memory clobber in flush_xen_dcache_va,
> > shouldn't that prevent the compiler from reordering instructions?
> >
>
> After reading again the entire thread I think that I understand what you
> meant: can't we get rid of the memory clobber and specify *va as input?
>
> However in order to do that correctly we need to make clear how big *va is
> otherwise the compiler could reorder things.
Yes!
> The problem is that we don't know at compile time how big a cacheline
> is, so I think that we need to keep the memory clobber.
No! It's always safe to flush the entire line -- regardless of what
other writes might be happening to it. After all, the cache controller
might evict that line on its own at any time, so nothing can be relying
on its _not_ being flushed.
The only problem with not knowing how big a cacheline is is this: if the
object is _bigger_ than a cache line we might use one DCCMVAC where more
than one is needed. We can avoid that by a compile-time check on some
sort of architectural minimum cacheline size.
Tim.
next prev parent reply other threads:[~2012-10-26 16:55 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-24 15:03 [PATCH 0/7] xen/arm: run on real hardware Stefano Stabellini
2012-10-24 15:03 ` [PATCH 1/7] xen/arm: fix rank calculation in vgic_vcpu_inject_irq Stefano Stabellini
2012-10-25 9:27 ` Ian Campbell
2012-10-26 16:33 ` Stefano Stabellini
2012-10-26 16:40 ` Ian Campbell
2012-10-26 18:42 ` Stefano Stabellini
2012-10-26 20:47 ` Ian Campbell
2012-10-27 10:09 ` Tim Deegan
2012-10-27 10:44 ` Ian Campbell
2012-11-13 11:57 ` Stefano Stabellini
2012-11-13 12:00 ` Ian Campbell
2012-11-13 12:23 ` Stefano Stabellini
2012-10-24 15:03 ` [PATCH 2/7] xen/arm: setup the fixmap in head.S Stefano Stabellini
2012-10-24 15:27 ` Tim Deegan
2012-10-24 15:37 ` Stefano Stabellini
2012-10-25 9:33 ` Ian Campbell
2012-10-25 11:00 ` Stefano Stabellini
2012-10-24 15:03 ` [PATCH 3/7] pl011: set baud and clock_hz to the right defaults for Versatile Express Stefano Stabellini
2012-10-25 9:37 ` Ian Campbell
2012-10-25 10:57 ` Stefano Stabellini
2012-10-25 11:00 ` Ian Campbell
2012-10-24 15:03 ` [PATCH 4/7] xen/arm: set the SMP bit in the ACTLR register Stefano Stabellini
2012-10-25 9:52 ` Ian Campbell
2012-10-25 11:57 ` Stefano Stabellini
2012-10-25 12:04 ` Ian Campbell
2012-10-26 8:56 ` Tim Deegan
2012-10-26 8:59 ` Ian Campbell
2012-10-24 15:03 ` [PATCH 5/7] xen/arm: wake up secondary cpus Stefano Stabellini
2012-10-24 15:38 ` Tim Deegan
2012-10-24 15:59 ` Stefano Stabellini
2012-10-24 16:05 ` Tim Deegan
2012-10-25 9:59 ` Ian Campbell
2012-10-25 17:45 ` Stefano Stabellini
2012-10-26 7:30 ` Ian Campbell
2012-10-26 11:18 ` Stefano Stabellini
2012-10-26 12:16 ` Ian Campbell
2012-10-26 15:24 ` Stefano Stabellini
2012-10-26 15:32 ` Ian Campbell
2012-10-24 15:03 ` [PATCH 6/7] xen/arm: flush D-cache and I-cache when appropriate Stefano Stabellini
2012-10-24 15:59 ` Tim Deegan
2012-10-24 16:05 ` Ian Campbell
2012-10-24 16:17 ` Tim Deegan
2012-10-24 17:35 ` Stefano Stabellini
2012-10-26 9:01 ` Tim Deegan
2012-10-26 15:53 ` Stefano Stabellini
2012-10-26 15:55 ` Stefano Stabellini
2012-10-26 16:03 ` Stefano Stabellini
2012-10-26 16:55 ` Tim Deegan [this message]
2012-10-26 18:40 ` Stefano Stabellini
2012-10-27 10:44 ` Tim Deegan
2012-10-27 11:54 ` Tim Deegan
2012-10-29 9:53 ` Stefano Stabellini
2012-10-29 9:52 ` Stefano Stabellini
2012-11-13 12:01 ` Stefano Stabellini
2012-11-13 12:15 ` Tim Deegan
2012-10-26 16:45 ` Tim Deegan
2012-10-24 15:03 ` [PATCH 7/7] xen/arm: get the number of cpus from device tree Stefano Stabellini
2012-10-25 10:02 ` Ian Campbell
2012-10-24 16:02 ` [PATCH 0/7] xen/arm: run on real hardware Tim Deegan
-- strict thread matches above, loose matches on Subject: below --
2012-11-13 15:40 [PATCH v2 " Stefano Stabellini
2012-11-13 15:42 ` [PATCH 6/7] xen/arm: flush D-cache and I-cache when appropriate Stefano Stabellini
2012-11-15 10:02 ` Ian Campbell
2012-11-16 15:36 ` Stefano Stabellini
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=20121026165549.GF76080@ocelot.phlegethon.org \
--to=tim@xen.org \
--cc=Ian.Campbell@citrix.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xensource.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).