Skip to content

Commit b2500ed

Browse files
author
Sergey Matyukevich
committed
ARCv3: modify icache flush
Properly handle kgdb and kprobes addresses in kernel translated memory. Update address check: throw bugs for user mappings and inconsistent vmalloc areas. Signed-off-by: Sergey Matyukevich <sergey.matyukevich@synopsys.com>
1 parent 1c9ab04 commit b2500ed

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

arch/arc/mm/cache-arcv3.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,14 +315,19 @@ void flush_icache_range(unsigned long kvaddr, unsigned long kvend)
315315
{
316316
unsigned int tot_sz = kvend - kvaddr;
317317

318-
BUG_ON((kvaddr < VMALLOC_START) || (kvend > VMALLOC_END));
318+
BUG_ON(is_vmalloc_addr((void *)kvaddr) && !is_vmalloc_addr((void *)kvend));
319+
BUG_ON(!is_vmalloc_addr((void *)kvaddr) && is_vmalloc_addr((void *)kvend));
320+
BUG_ON(kvaddr < TASK_SIZE);
319321

320322
while (tot_sz > 0) {
321323
unsigned int off, sz;
322324
unsigned long paddr, pfn;
323325

324326
off = kvaddr % PAGE_SIZE;
325-
pfn = vmalloc_to_pfn((void *)kvaddr);
327+
if (is_vmalloc_addr((void *)kvaddr))
328+
pfn = vmalloc_to_pfn((void *)kvaddr);
329+
else
330+
pfn = virt_to_pfn((void *)kvaddr);
326331
paddr = (pfn << PAGE_SHIFT) + off;
327332
sz = min_t(unsigned int, tot_sz, PAGE_SIZE - off);
328333
__sync_icache_dcache(paddr, kvaddr, sz);

0 commit comments

Comments
 (0)