aboutsummaryrefslogtreecommitdiff
path: root/cputlb.c
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2012-10-03 16:22:53 +0200
committerAvi Kivity <avi@redhat.com>2012-10-22 14:50:08 +0200
commitac1970fbe8ad5a70174f462109ac0f6c7bf1bc43 (patch)
treeaa2f9702bfd593515b6fb7ee438f6cc5bacef74e /cputlb.c
parent0e8a6d47afcc88564079387928f2da45736d36e8 (diff)
memory: per-AddressSpace dispatch
Currently we use a global radix tree to dispatch memory access. This only works with a single address space; to support multiple address spaces we make the radix tree a member of AddressSpace (via an intermediate structure AddressSpaceDispatch to avoid exposing too many internals). A side effect is that address_space_io also gains a dispatch table. When we remove all the pre-memory-API I/O registrations, we can use that for dispatching I/O and get rid of the original I/O dispatch. Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'cputlb.c')
-rw-r--r--cputlb.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/cputlb.c b/cputlb.c
index 0627f32e35..9027557604 100644
--- a/cputlb.c
+++ b/cputlb.c
@@ -21,6 +21,7 @@
#include "cpu.h"
#include "exec-all.h"
#include "memory.h"
+#include "exec-memory.h"
#include "cputlb.h"
@@ -251,7 +252,7 @@ void tlb_set_page(CPUArchState *env, target_ulong vaddr,
if (size != TARGET_PAGE_SIZE) {
tlb_add_large_page(env, vaddr, size);
}
- section = phys_page_find(paddr >> TARGET_PAGE_BITS);
+ section = phys_page_find(address_space_memory.dispatch, paddr >> TARGET_PAGE_BITS);
#if defined(DEBUG_TLB)
printf("tlb_set_page: vaddr=" TARGET_FMT_lx " paddr=0x" TARGET_FMT_plx
" prot=%x idx=%d pd=0x%08lx\n",