Blackfin: SMP: kgdb: flush core internal write buffer before flushinv
KGDB single step in SMP kernel may hang forever in flushinv without a CSYNC ahead. This is because the core internal write buffers need to be flushed before invalidating the data cache to make sure the insn fetch is not out of sync. Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Родитель
e54b673081
Коммит
064cc44e62
|
@ -49,6 +49,7 @@ ENTRY(_get_core_lock)
|
|||
jump .Lretry_corelock
|
||||
.Ldone_corelock:
|
||||
p0 = r1;
|
||||
/* flush core internal write buffer before invalidate dcache */
|
||||
CSYNC(r2);
|
||||
flushinv[p0];
|
||||
SSYNC(r2);
|
||||
|
@ -685,6 +686,8 @@ ENTRY(___raw_atomic_test_asm)
|
|||
r1 = -L1_CACHE_BYTES;
|
||||
r1 = r0 & r1;
|
||||
p0 = r1;
|
||||
/* flush core internal write buffer before invalidate dcache */
|
||||
CSYNC(r2);
|
||||
flushinv[p0];
|
||||
SSYNC(r2);
|
||||
r0 = [p1];
|
||||
|
@ -907,6 +910,8 @@ ENTRY(___raw_uncached_fetch_asm)
|
|||
r1 = -L1_CACHE_BYTES;
|
||||
r1 = r0 & r1;
|
||||
p0 = r1;
|
||||
/* flush core internal write buffer before invalidate dcache */
|
||||
CSYNC(r2);
|
||||
flushinv[p0];
|
||||
SSYNC(r2);
|
||||
r0 = [p1];
|
||||
|
|
Загрузка…
Ссылка в новой задаче