[RFC PATCH 11/18] accel/tcg: Replace size with first/last in tlb_fill_align
Richard Henderson <[email protected]>
| Newsgroups | org.nongnu.qemu-riscv,org.nongnu.qemu-arm,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
Propagate the API change down one step further within cputlb.c. Signed-off-by: Richard Henderson <[email protected]> --- accel/tcg/cputlb.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index b8c23b2948..95db2c22e2 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -1236,11 +1236,12 @@ static inline bool tlb_hit(uint64_t tlb_addr, vaddr addr) * (e.g. CPUTLBEntry pointers) must be discarded and looked up again * (e.g. via tlb_entry()). */ -static bool tlb_fill_align(CPUState *cpu, vaddr addr, MMUAccessType type, - int mmu_idx, MemOp memop, int size, +static bool tlb_fill_align(CPUState *cpu, vaddr addr, vaddr first, vaddr last, + MMUAccessType type, int mmu_idx, MemOp memop, bool probe, uintptr_t ra) { const TCGCPUOps *ops = cpu->cc->tcg_ops; + int size = last - addr + 1; CPUTLBEntryFull full; if (ops->tlb_fill_align) { @@ -1374,8 +1375,8 @@ static int probe_access_internal(CPUState *cpu, vaddr addr, vaddr first, if (!tlb_hit_page(tlb_addr, page_addr)) { if (!victim_tlb_hit(cpu, mmu_idx, index, access_type, page_addr)) { - if (!tlb_fill_align(cpu, addr, access_type, mmu_idx, - 0, last - addr + 1, nonfault, retaddr)) { + if (!tlb_fill_align(cpu, addr, first, last, access_type, + mmu_idx, MO_UNALN, nonfault, retaddr)) { /* Non-faulting page table read failed. */ *phost = NULL; *pfull = NULL; @@ -1664,8 +1665,8 @@ static bool mmu_lookup1(CPUState *cpu, MMULookupPageData *data, MemOp memop, if (!tlb_hit(tlb_addr, addr)) { if (!victim_tlb_hit(cpu, mmu_idx, index, access_type, addr & TARGET_PAGE_MASK)) { - tlb_fill_align(cpu, addr, access_type, mmu_idx, - memop, data->size, false, ra); + tlb_fill_align(cpu, addr, addr, addr + data->size - 1, + access_type, mmu_idx, memop, false, ra); maybe_resized = true; index = tlb_index(cpu, mmu_idx, addr); entry = tlb_entry(cpu, mmu_idx, addr); @@ -1833,8 +1834,8 @@ static void *atomic_mmu_lookup(CPUState *cpu, vaddr addr, MemOpIdx oi, if (!tlb_hit(tlb_addr, addr)) { if (!victim_tlb_hit(cpu, mmu_idx, index, MMU_DATA_STORE, addr & TARGET_PAGE_MASK)) { - tlb_fill_align(cpu, addr, MMU_DATA_STORE, mmu_idx, - mop, size, false, retaddr); + tlb_fill_align(cpu, addr, addr, addr + size - 1, + MMU_DATA_STORE, mmu_idx, mop, false, retaddr); did_tlb_fill = true; index = tlb_index(cpu, mmu_idx, addr); tlbe = tlb_entry(cpu, mmu_idx, addr); @@ -1849,8 +1850,8 @@ static void *atomic_mmu_lookup(CPUState *cpu, vaddr addr, MemOpIdx oi, * but addr_read will only be -1 if PAGE_READ was unset. */ if (unlikely(tlbe->addr_read == -1)) { - tlb_fill_align(cpu, addr, MMU_DATA_LOAD, mmu_idx, - 0, size, false, retaddr); + tlb_fill_align(cpu, addr, addr, addr + size - 1, + MMU_DATA_LOAD, mmu_idx, 0, false, retaddr); /* * Since we don't support reads and writes to different * addresses, and we do have the proper page loaded for -- 2.43.0