svn commit: r294727 - head/sys/arm/arm
Andrew Turner
andrew at fubar.geek.nz
Mon Jan 25 17:01:01 UTC 2016
On Mon, 25 Jan 2016 17:44:53 +0200
Konstantin Belousov <kostikbel at gmail.com> wrote:
> On Mon, Jan 25, 2016 at 02:09:36PM +0000, Svatopluk Kraus wrote:
> > Author: skra
> > Date: Mon Jan 25 14:09:35 2016
> > New Revision: 294727
> > URL: https://svnweb.freebsd.org/changeset/base/294727
> >
> > Log:
> > Fix an occasional undefined instruction abort during module
> > loading.
> > Even if data cache maintenance was done by IO code, the relocation
> > fixup process creates dirty cache entries that we must write back
> > before doing icache sync.
> Does arm64 need the same fix ?
>
I don't think so. On arm64 we call cpu_icache_sync_range to sync the I
and D cache. This will clean the D-Cache to the Point of Coherency,
then invalidate the I-Cache. I think this is slightly wrong as we only
need to clean to the Point of Unification.
Looking at the ARMv7 implementation of cpu_icache_sync_all is wrong, it
only invalidates the I-Cache. cpu_icache_sync_range is almost correct,
it will clean the D-Cache, with the same issue as arm64, but it is
missing a barrier after this operation, and is missing a branch
predictor invalidation.
This change seems to be working around the brokenness of the existing
cache sync operations rather than fixing them, however I don't know the
details on why this approach to fixing the issue was taken.
Andrew
More information about the svn-src-all
mailing list