On Wed, 9 Oct 2024 at 01:05, Richard Henderson <richard.henderson@xxxxxxxxxx> wrote: > > When we have a tlb miss, defer the alignment check to > the new tlb_fill_align hook. Move the existing alignment > check so that we only perform it with a tlb hit. > > Signed-off-by: Richard Henderson <richard.henderson@xxxxxxxxxx> > @@ -1754,8 +1767,8 @@ static bool mmu_lookup(CPUState *cpu, vaddr addr, MemOpIdx oi, > * Lookup both pages, recognizing exceptions from either. If the > * second lookup potentially resized, refresh first CPUTLBEntryFull. > */ > - mmu_lookup1(cpu, &l->page[0], l->mmu_idx, type, ra); > - if (mmu_lookup1(cpu, &l->page[1], l->mmu_idx, type, ra)) { > + mmu_lookup1(cpu, &l->page[0], l->memop, l->mmu_idx, type, ra); > + if (mmu_lookup1(cpu, &l->page[1], 0, l->mmu_idx, type, ra)) { Is 0 the right thing here ? Given that alignment-requirements can differ per-page, what happens for the case of an unaligned access that crosses a page boundary where the first page is "memory that doesn't care about alignment" and the second page is "memory that does enforce alignment" ? For Arm this is moot, because an access that crosses a page boundary into something with different memory attributes is CONSTRAINED UNPREDICTABLE (per Arm ARM rev K.a B2.15.3), but maybe other architectures are less flexible. Also, the comment does say "recognizing exceptions from either", and we aren't going to do that for alignment issues in page 2, so if we're OK with ignoring this we should update the comment. thanks -- PMM