qemu/include/exec
Peter Xu f06a696dc9 intel_iommu: provide its own replay() callback
The default replay() don't work for VT-d since vt-d will have a huge
default memory region which covers address range 0-(2^64-1). This will
normally consumes a lot of time (which looks like a dead loop).

The solution is simple - we don't walk over all the regions. Instead, we
jump over the regions when we found that the page directories are empty.
It'll greatly reduce the time to walk the whole region.

To achieve this, we provided a page walk helper to do that, invoking
corresponding hook function when we found an page we are interested in.
vtd_page_walk_level() is the core logic for the page walking. It's
interface is designed to suite further use case, e.g., to invalidate a
range of addresses.

Reviewed-by: Jason Wang <jasowang@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: \"Michael S. Tsirkin\" <mst@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <1491562755-23867-8-git-send-email-peterx@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
2017-04-20 15:22:41 -03:00
..
user linux-user: Use correct alignment for long long on i386 guests 2016-08-04 16:34:59 +03:00
address-spaces.h Clean up header guards that don't match their file name 2016-07-12 16:19:16 +02:00
cpu_ldst_template.h trace: switch to modular code generation for sub-directories 2017-01-31 17:11:18 +00:00
cpu_ldst_useronly_template.h trace: switch to modular code generation for sub-directories 2017-01-31 17:11:18 +00:00
cpu_ldst.h cpu_ldst.h: use correct guest address parameter 2016-11-22 23:26:51 +01:00
cpu-all.h exec: introduce MemoryRegionCache 2016-12-22 16:00:23 +01:00
cpu-common.h RAMBlocks: qemu_ram_is_shared 2017-03-16 09:00:58 +01:00
cpu-defs.h qemu-common: stop including qemu/host-utils.h from qemu-common.h 2016-05-19 16:42:28 +02:00
cputlb.h cputlb: atomically update tlb fields used by tlb_reset_dirty 2017-02-24 10:32:46 +00:00
exec-all.h cputlb: introduce tlb_flush_*_all_cpus[_synced] 2017-02-24 10:32:46 +00:00
gdbstub.h linux-user: Remove redundant gdb_queuesig() 2016-06-07 16:39:07 +03:00
gen-icount.h cpu-exec: unify icount_decr and tcg_exit_req 2017-02-22 14:56:34 +01:00
helper-gen.h Clean up decorations and whitespace around header guards 2016-07-12 16:20:46 +02:00
helper-head.h Clean up header guards that don't match their file name 2016-07-12 16:19:16 +02:00
helper-proto.h Clean up decorations and whitespace around header guards 2016-07-12 16:20:46 +02:00
helper-tcg.h Clean up decorations and whitespace around header guards 2016-07-12 16:20:46 +02:00
hwaddr.h hw: Clean up includes 2016-06-07 18:19:23 +03:00
ioport.h hw: clean up hw/hw.h includes 2016-05-19 16:42:30 +02:00
log.h log: do not unnecessarily include qom/cpu.h 2016-02-03 09:19:10 +00:00
memattrs.h hw/pci: Introduce pci_requester_id() 2015-10-19 10:13:07 +02:00
memory-internal.h memory: unregister AddressSpace MemoryListener within BQL 2015-02-10 10:25:44 -07:00
memory.h intel_iommu: provide its own replay() callback 2017-04-20 15:22:41 -03:00
poison.h cpu: move endian-dependent load/store functions to cpu-all.h 2016-05-19 16:42:28 +02:00
ram_addr.h Change the method to calculate dirty-pages-rate 2017-03-16 08:55:56 +01:00
ramlist.h ramblock-notifier: new 2017-01-16 17:52:35 +01:00
semihost.h semihosting: add --semihosting-config arg sub-argument 2015-06-19 14:17:45 +01:00
softmmu-semi.h Clean up decorations and whitespace around header guards 2016-07-12 16:20:46 +02:00
tb-context.h tcg: Make tb_flush() thread safe 2016-09-27 11:57:30 +02:00
tb-hash-xx.h Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00
tb-hash.h Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00