Commit 0a4c40a3 authored by Vineet Gupta's avatar Vineet Gupta

ARC: Fix bogus gcc warning and micro-optimise TLB iteration loop

```--------------->8----------------------
arch/arc/mm/tlb.c: In function ‘do_tlb_overlap_fault’:
arch/arc/mm/tlb.c:688:13: warning: array subscript is above array bounds
[-Warray-bounds]
         (pd0[n] & PAGE_MASK)) {
             ^
```

--------------->8----------------------

While at it, remove the usless last iteration of outer loop when reading
a TLB SET for duplicate entries.
Suggested-by: default avatarMischa Jonker <mjonker@synopsys.com>
Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
parent 0dafafc3
...@@ -610,9 +610,9 @@ void do_tlb_overlap_fault(unsigned long cause, unsigned long address, ...@@ -610,9 +610,9 @@ void do_tlb_overlap_fault(unsigned long cause, unsigned long address,
struct pt_regs *regs) struct pt_regs *regs)
{ {
int set, way, n; int set, way, n;
unsigned int pd0[4], pd1[4]; /* assume max 4 ways */
unsigned long flags, is_valid; unsigned long flags, is_valid;
struct cpuinfo_arc_mmu *mmu = &cpuinfo_arc700[smp_processor_id()].mmu; struct cpuinfo_arc_mmu *mmu = &cpuinfo_arc700[smp_processor_id()].mmu;
unsigned int pd0[mmu->ways], pd1[mmu->ways];
local_irq_save(flags); local_irq_save(flags);
...@@ -637,7 +637,7 @@ void do_tlb_overlap_fault(unsigned long cause, unsigned long address, ...@@ -637,7 +637,7 @@ void do_tlb_overlap_fault(unsigned long cause, unsigned long address,
continue; continue;
/* Scan the set for duplicate ways: needs a nested loop */ /* Scan the set for duplicate ways: needs a nested loop */
for (way = 0; way < mmu->ways; way++) { for (way = 0; way < mmu->ways - 1; way++) {
if (!pd0[way]) if (!pd0[way])
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment