memory: Add address_space_init_shareable()
commitf0c02d15b57da6f5463e3768aa0cfeedccf4b8f4
authorPeter Crosthwaite <peter.crosthwaite@xilinx.com>
Thu, 21 Jan 2016 14:15:06 +0000 (21 14:15 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Thu, 21 Jan 2016 14:15:06 +0000 (21 14:15 +0000)
tree5b9ab0f89c38fce4e8097e2147cef945fbf65074
parent79ed0416477440ccb6acf136d6808a4f5848bbdf
memory: Add address_space_init_shareable()

This will either create a new AS or return a pointer to an
already existing equivalent one, if we have already created
an AS for the specified root memory region.

The motivation is to reuse address spaces as much as possible.
It's going to be quite common that bus masters out in device land
have pointers to the same memory region for their mastering yet
each will need to create its own address space. Let the memory
API implement sharing for them.

Aside from the perf optimisations, this should reduce the amount
of redundant output on info mtree as well.

Thee returned value will be malloced, but the malloc will be
automatically freed when the AS runs out of refs.

Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
[PMM: dropped check for NULL root as unused; added doc-comment;
 squashed Peter C's reference-counting patch into this one;
 don't compare name string when deciding if we can share ASes;
 read as->malloced before the unref of as->root to avoid possible
 read-after-free if as->root was the owner of as]
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Acked-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
include/exec/memory.h
memory.c