Skip to content

Commit 08a491b

Browse files
committed
Revert "parisc: Fix invalidate/flush vmap routines"
This reverts commit 53d862f. It turned out that flush_kernel_vmap_range() is being called with interrupts disabled. There's no way to flush entire cache with interrupts disabled. Signed-off-by: Helge Deller <deller@gmx.de>
1 parent ae085d7 commit 08a491b

1 file changed

Lines changed: 5 additions & 19 deletions

File tree

arch/parisc/kernel/cache.c

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -611,8 +611,8 @@ void
611611
flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long pfn)
612612
{
613613
if (pfn_valid(pfn)) {
614-
flush_tlb_page(vma, vmaddr);
615614
if (likely(vma->vm_mm->context.space_id)) {
615+
flush_tlb_page(vma, vmaddr);
616616
__flush_cache_page(vma, vmaddr, PFN_PHYS(pfn));
617617
} else {
618618
__purge_cache_page(vma, vmaddr, PFN_PHYS(pfn));
@@ -624,7 +624,6 @@ void flush_kernel_vmap_range(void *vaddr, int size)
624624
{
625625
unsigned long start = (unsigned long)vaddr;
626626
unsigned long end = start + size;
627-
unsigned long flags, physaddr;
628627

629628
if ((!IS_ENABLED(CONFIG_SMP) || !arch_irqs_disabled()) &&
630629
(unsigned long)size >= parisc_cache_flush_threshold) {
@@ -633,22 +632,15 @@ void flush_kernel_vmap_range(void *vaddr, int size)
633632
return;
634633
}
635634

636-
while (start < end) {
637-
physaddr = lpa(start);
638-
purge_tlb_start(flags);
639-
pdtlb(SR_KERNEL, start);
640-
purge_tlb_end(flags);
641-
flush_dcache_page_asm(physaddr, start);
642-
start += PAGE_SIZE;
643-
}
635+
flush_kernel_dcache_range_asm(start, end);
636+
flush_tlb_kernel_range(start, end);
644637
}
645638
EXPORT_SYMBOL(flush_kernel_vmap_range);
646639

647640
void invalidate_kernel_vmap_range(void *vaddr, int size)
648641
{
649642
unsigned long start = (unsigned long)vaddr;
650643
unsigned long end = start + size;
651-
unsigned long flags, physaddr;
652644

653645
if ((!IS_ENABLED(CONFIG_SMP) || !arch_irqs_disabled()) &&
654646
(unsigned long)size >= parisc_cache_flush_threshold) {
@@ -657,13 +649,7 @@ void invalidate_kernel_vmap_range(void *vaddr, int size)
657649
return;
658650
}
659651

660-
while (start < end) {
661-
physaddr = lpa(start);
662-
purge_tlb_start(flags);
663-
pdtlb(SR_KERNEL, start);
664-
purge_tlb_end(flags);
665-
purge_dcache_page_asm(physaddr, start);
666-
start += PAGE_SIZE;
667-
}
652+
purge_kernel_dcache_range_asm(start, end);
653+
flush_tlb_kernel_range(start, end);
668654
}
669655
EXPORT_SYMBOL(invalidate_kernel_vmap_range);

0 commit comments

Comments
 (0)