unicorn/qemu
Paolo Bonzini f9315cde1c
memory: do not add a reference to the owner of aliased regions
Very often the owner of the aliased region is the same as the owner of the alias
region itself.  When this happens, the reference count can never go back to 0 and
the owner is leaked.  This is for example breaking hot-unplug of virtio-pci
devices (the device cannot be plugged back again with the same id).

Another common use for alias is to transform the system I/O address space
into an MMIO regions; in this case the aliased region never dies, so there
is no problem.  Otherwise the owner is always the same for aliasing
and aliased region.

I checked all calls to memory_region_init_alias introduced after commit
dfde4e6 (memory: add ref/unref calls, 2013-05-06) and they do not need the
reference in order to keep the owner of the aliased region alive.

Backports commit 52c91dac6bd891656f297dab76da51fc8bc61309 from qemu
2018-02-21 11:10:49 -05:00
..
crypto crypto: Clean up includes 2018-02-19 00:47:40 -05:00
default-configs arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
docs docs: clarify memory region lifecycle 2018-02-12 15:11:21 -05:00
fpu softfloat: Remove lingering fast casts 2018-02-20 19:04:22 -05:00
hw x86: Clean up includes 2018-02-19 01:00:09 -05:00
include memory: Drop MemoryRegion.ram_addr 2018-02-21 08:53:08 -05:00
qapi qapi: Don't box branches of flat unions 2018-02-20 16:44:55 -05:00
qobject qapi: Convert QType into QAPI built-in enum type 2018-02-19 21:47:05 -05:00
qom cpu: Add callback to check architectural watchpoint match 2018-02-20 11:43:56 -05:00
scripts qapi: Don't box branches of flat unions 2018-02-20 16:44:55 -05:00
target-arm target-arm: Only trap SRS from S-EL1 if specified mode is MON 2018-02-21 02:49:28 -05:00
target-i386 tcg: Make cpu_tmp1 and cpu_tmp4 a TCGv 2018-02-21 00:07:23 -05:00
target-m68k tcg: Make store_dummy a TCGv 2018-02-21 00:24:40 -05:00
target-mips tcg: Make cpu_gpr a TCGv array 2018-02-21 01:02:46 -05:00
target-sparc tcg: Make cpu_regs_sparc a TCGv array 2018-02-21 01:50:28 -05:00
tcg tcg: Make cpu_regs_sparc a TCGv array 2018-02-21 01:50:28 -05:00
util error: New error_fatal 2018-02-20 08:22:27 -05:00
aarch64.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
aarch64eb.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
accel.c all: Clean up includes 2018-02-19 01:34:28 -05:00
arm.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
armeb.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
CODING_STYLE import 2015-08-21 15:04:50 +08:00
configure tcg: Drop ia64 host support 2018-02-04 18:33:02 -05:00
COPYING import 2015-08-21 15:04:50 +08:00
COPYING.LIB import 2015-08-21 15:04:50 +08:00
cpu-exec-common.c exec: Clean up includes 2018-02-19 00:49:55 -05:00
cpu-exec.c exec: Clean up includes 2018-02-19 00:49:55 -05:00
cpus.c exec: Clean up includes 2018-02-19 00:49:55 -05:00
cputlb.c memory: Drop MemoryRegion.ram_addr 2018-02-21 08:53:08 -05:00
exec.c exec: Remove unnecessary return in qemu_ram_remap 2018-02-21 09:51:23 -05:00
gen_all_header.sh arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
glib_compat.c crypto: introduce new module for computing hash digests 2018-02-17 15:23:17 -05:00
HACKING import 2015-08-21 15:04:50 +08:00
header_gen.py memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
ioport.c all: Clean up includes 2018-02-19 01:34:28 -05:00
LICENSE import 2015-08-21 15:04:50 +08:00
m68k.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
Makefile qapi: Turn generators' mandatory option -i into an argument 2018-02-19 15:22:27 -05:00
Makefile.objs crypto: move crypto objects out of libqemuutil.la 2018-02-17 15:23:50 -05:00
Makefile.target tcg: split tcg_op_defs to -common 2018-02-17 15:23:51 -05:00
memory.c memory: do not add a reference to the owner of aliased regions 2018-02-21 11:10:49 -05:00
memory_mapping.c all: Clean up includes 2018-02-19 01:34:28 -05:00
mips.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
mips64.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
mips64el.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
mipsel.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
powerpc.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
qapi-schema.json qapi: Lazy creation of array types 2018-02-19 18:55:35 -05:00
qemu-log.c all: Clean up includes 2018-02-19 01:34:28 -05:00
qemu-timer.c all: Clean up includes 2018-02-19 01:34:28 -05:00
rules.mak import 2015-08-21 15:04:50 +08:00
softmmu_template.h exec.c: Pass MemTxAttrs to iotlb_to_region so it uses the right AS 2018-02-17 23:19:00 -05:00
sparc.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
sparc64.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00
tcg-runtime.c all: Clean up includes 2018-02-19 01:34:28 -05:00
translate-all.c all: Clean up includes 2018-02-19 01:34:28 -05:00
translate-all.h translate-all: remove unnecessary argument to tb_invalidate_phys_range 2018-02-13 09:04:51 -05:00
translate-common.c exec: Clean up includes 2018-02-19 00:49:55 -05:00
unicorn_common.h qom/cpu: Add MemoryRegion property 2018-02-18 21:54:50 -05:00
VERSION import 2015-08-21 15:04:50 +08:00
vl.c vl.c: Remove periods and exclamation points from error messages 2018-02-17 15:24:14 -05:00
vl.h import 2015-08-21 15:04:50 +08:00
x86_64.h memory: Implement memory_region_get_ram_addr with mr->ram_block 2018-02-21 08:53:08 -05:00