sorry for my silence for several resending posts. I talked with Ralf
on this briefly, when the patch was posted for the first time last
year. He seems busy these days, so I'm trying to move things forward.
On 01/06/2011 04:31 PM, Kevin Cernekee wrote:
> On processors with deep write buffers, it is likely that many cycles
> will pass between a CACHE instruction and the time the data actually
> gets written out to DRAM. Add a SYNC instruction to ensure that the
> buffers get emptied before the flush functions return.
Having a talk with appropriate people (probably including MIPS guys),
such CACHE behavior would be eventually considered to be _legitimate_,
Ralf said. Thus we agree with this change required not only for BMIPS
cores, but also for the rest of processors, as one of cache features.
The problem is how to implement it.
Most of SYNC-equipped processors work fine without this treatment,
so unless it's required, we don't want to have __sync() after every
cacheflush operations. Having SYNC there is somewhat waste of time.
> diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
> index b4923a7..dc5d9c4 100644
> --- a/arch/mips/mm/c-r4k.c
> +++ b/arch/mips/mm/c-r4k.c
> @@ -604,6 +604,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr,
> unsigned long size)
> blast_scache_range(addr, addr + size);
> + __sync();
Just random thought, how it's going to be when implementing this as,
- sort of barrier
- sort of hazard
- one of cache features (e.g., cpu_has_xxx or similar way)
- and so on...
Another concern is that, except for four __sync() insertions, are we
missing other places?
Ralf also thinks that run-time probe & detection would be better than
build-time configuration. Optimization is easy and won't be problem
here, so we'd like to keep things synthesized as much as possible.
I couldn't imagine the final shape how this patch should be as of now,