Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 Jan 2013 08:28:40 -0800
From:      Oleksandr Tymoshenko <gonzo@bluezbox.com>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r245147 - head/sys/arm/include
Message-ID:  <EAD5C0F8-20BC-4A43-9DAC-0080E29EA574@bluezbox.com>
In-Reply-To: <20130108155641.GG82219@kib.kiev.ua>
References:  <201301080240.r082eKVq080302@svn.freebsd.org> <20130108030022.GC82219@kib.kiev.ua> <50EBA947.1030902@freebsd.org> <20130108155641.GG82219@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help

On 2013-01-08, at 7:56 AM, Konstantin Belousov <kostikbel@gmail.com> =
wrote:

> On Mon, Jan 07, 2013 at 09:06:15PM -0800, Oleksandr Tymoshenko wrote:
>> On 1/7/2013 7:00 PM, Konstantin Belousov wrote:
>>> On Tue, Jan 08, 2013 at 02:40:20AM +0000, Oleksandr Tymoshenko =
wrote:
>>>> Author: gonzo
>>>> Date: Tue Jan  8 02:40:20 2013
>>>> New Revision: 245147
>>>> URL: http://svnweb.freebsd.org/changeset/base/245147
>>>>=20
>>>> Log:
>>>>   Switch default cache type for ARMv6/ARMv7 from write-through to
>>>>   writeback-writeallocate
>>> Could you, please, describe how this is supposed to work.
>>>=20
>>> Assume that a process mapped the same file page at two different
>>> addresses, both read-write, and writes to both mappings. Usermode =
code
>>> does not consider the need to flush caches or synchronize writes =
into
>>> non-overlapping regions, usually. Would it break, i.e. could the =
values
>>> appear in the page which were never written to it ?
>>=20
>> I might misunderstood question so let me rephrase it:
>> One physical page P, virtual addresses A and B both mapped to it. Two=20=

>> conditions should
>> be true:
>>=20
>> -  if I write word to A+0x200  same value should appear at B+0x200 =
next=20
>> time it is read
>> - If there are no writes to P either through A or B each next read=20
>> should yield same result.
> I am more concerned with the following:
> assume that current content in the page is 0x200:u, 0x201:v, and a =
byte
> x was written at A+0x200, byte y at B+0x201. Is it possible that
> future read of the bytes at A+0x200, A+0x201 (on the same core)
> returns (x, v) ?
    On ARMv7 - no, it's not possible. On ARMv6 - it seems to be possible=20=

from what I gather.=20

>>=20
>> These conditions are met for ARMv7 devices for both WT and WBWA =
caches.=20
>> They're PIPT
>> so no aliasing in this case. Up until now I believed that "no =
aliasing"=20
>> is true for all ARM CPUs
>> we target but quick check proved me wrong: ARM1176 on which Raspberry =
Pi
>> is based is prone to cache aliasing problem. Which might explain =
memory=20
>> corruption
>> easily reproducible under load. Again the problem is not related to=20=

>> cache type itself but
>> to the lack of handling of this situation in pmap module.
> I am trying to find a way through the ARM ARM and some additional =
texts.
> Could it be that cache aliasing is only limited to the I-cache on ARM,
> at least for recent cores ?  My concern is hopefully not valid than.
>=20
> Hm, it seems, according to the link below, that ARMv6 is affected.

>=20
>>=20
>> Some info on subject:
>> =
http://blogs.arm.com/software-enablement/716-page-colouring-on-armv6-and-a=
-bit-on-armv7/
>=20
> This seems to support the idea that mmap does not work on ARM, at =
least
> for ARMv6. It seems that sf buffers do not obey the arch requirements
> for aliasing as well.
>=20
> Thank you for the link.





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?EAD5C0F8-20BC-4A43-9DAC-0080E29EA574>