From: Laurent Vivier <laurent@vivier.eu>
To: Richard Henderson <richard.henderson@linaro.org>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 2/6] target/m68k: add MC68040 MMU
Date: Fri, 12 Jan 2018 19:46:29 +0100 [thread overview]
Message-ID: <881a5160-2803-5418-9b68-7acdf69c778f@vivier.eu> (raw)
In-Reply-To: <755a005d-600e-7f39-bd90-314bd970ef8e@linaro.org>
Le 10/01/2018 à 21:12, Richard Henderson a écrit :
> On 01/08/2018 03:10 PM, Laurent Vivier wrote:
>> +static int get_physical_address(CPUM68KState *env, hwaddr *physical,
>> + int *prot, target_ulong address,
>> + int access_type, target_ulong *page_size)
...
>> + if (env->mmu.tcr & M68K_TCR_PAGE_8K) {
>> + *page_size = 8192;
>> + page_offset = address & 0x1fff;
>> + *physical = (next & ~0x1fff) + page_offset;
>> + } else {
>> + *page_size = 4096;
>> + page_offset = address & 0x0fff;
>> + *physical = (next & ~0x0fff) + page_offset;
>> + }
>
> So...
>
>> + if (ret == 0) {
>> + tlb_set_page(cs, address & TARGET_PAGE_MASK,
>> + physical & TARGET_PAGE_MASK,
>> + prot, mmu_idx, page_size);
>
> ... this is going to go through the tlb_add_large_page path every time, since
> both 4K and 8K are larger than the default 1K page size.
>
> Using the large page path by default means that any single-page tlb flush will
> quickly devolve to flushing the entire tlb.
>
> Also, using page_size and TARGET_PAGE_MASK looks wrong. I think you would have
> needed address & -page_size.
>
> That said, you may want to compare the performance of passing page_size vs
> TARGET_PAGE_SIZE to tlb_set_page.
I've found several examples using TARGET_PAGE_MASK and page_size [1], so
I think we can use the mix of them, but I'm going to update
TARGET_PAGE_BITS to 12 to avoid to go through the tlb_add_large_page()
function (kernel uses 13 for coldfire or SUN3, and 12 for others).
Thanks,
Laurent
[1]
target/sparc/mmu_helper.c
211 int sparc_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int
size, int rw,
212 int mmu_idx)
213 {
...
221 address &= TARGET_PAGE_MASK;
222 error_code = get_physical_address(env, &paddr, &prot,
&access_index,
223 address, rw, mmu_idx,
&page_size);
224 vaddr = address;
225 if (error_code == 0) {
...
229 tlb_set_page(cs, vaddr, paddr, prot, mmu_idx, page_size);
230 return 0;
231 }
or
target/unicore32/softmmu.c
218 int uc32_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int size,
219 int access_type, int mmu_idx)
...
255 if (ret == 0) {
256 /* Map a single page. */
257 phys_addr &= TARGET_PAGE_MASK;
258 address &= TARGET_PAGE_MASK;
259 tlb_set_page(cs, address, phys_addr, prot, mmu_idx,
page_size);
260 return 0;
261 }
or
target/xtensa/op_helper.c
53 void tlb_fill(CPUState *cs, target_ulong vaddr, int size,
54 MMUAccessType access_type, int mmu_idx, uintptr_t
retaddr)
...
68 tlb_set_page(cs,
69 vaddr & TARGET_PAGE_MASK,
70 paddr & TARGET_PAGE_MASK,
71 access, mmu_idx, page_size);
or
target/ppc/mmu-hash64.c
694 int ppc_hash64_handle_mmu_fault(PowerPCCPU *cpu, vaddr eaddr,
695 int rwx, int mmu_idx)
...
866 tlb_set_page(cs, eaddr & TARGET_PAGE_MASK, raddr &
TARGET_PAGE_MASK,
867 prot, mmu_idx, 1ULL << apshift);
next prev parent reply other threads:[~2018-01-12 18:46 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-08 23:10 [Qemu-devel] [PATCH 0/6] target/m68k: supervisor mode (part 2) Laurent Vivier
2018-01-08 23:10 ` [Qemu-devel] [PATCH 1/6] accel/tcg: add size paremeter in tlb_fill() Laurent Vivier
2018-01-10 8:43 ` [Qemu-devel] [qemu-s390x] " David Hildenbrand
2018-01-10 13:42 ` Laurent Vivier
2018-01-10 18:47 ` Richard Henderson
2018-01-08 23:10 ` [Qemu-devel] [PATCH 2/6] target/m68k: add MC68040 MMU Laurent Vivier
2018-01-10 20:12 ` Richard Henderson
2018-01-12 18:46 ` Laurent Vivier [this message]
2018-01-08 23:10 ` [Qemu-devel] [PATCH 3/6] target/m68k: add Transparent Translation Laurent Vivier
2018-01-10 21:08 ` Richard Henderson
2018-01-08 23:10 ` [Qemu-devel] [PATCH 4/6] target/m68k: add moves Laurent Vivier
2018-01-10 21:22 ` Richard Henderson
2018-01-08 23:10 ` [Qemu-devel] [PATCH 5/6] target/m68k: add pflush/ptest Laurent Vivier
2018-01-10 21:25 ` Richard Henderson
2018-01-08 23:10 ` [Qemu-devel] [PATCH 6/6] target/m68k: add HMP command "info tlb" Laurent Vivier
2018-01-10 21:27 ` Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=881a5160-2803-5418-9b68-7acdf69c778f@vivier.eu \
--to=laurent@vivier.eu \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.