@@ -1505,13 +1505,14 @@ static void memory_region_finalize(Object *obj)
* and cause an infinite loop.
*/
mr->enabled = false;
- memory_region_transaction_begin();
- while (!QTAILQ_EMPTY(&mr->subregions)) {
- MemoryRegion *subregion = QTAILQ_FIRST(&mr->subregions);
- memory_region_del_subregion(mr, subregion);
+ if (!mr->subpage) {
+ memory_region_transaction_begin();
+ while (!QTAILQ_EMPTY(&mr->subregions)) {
+ MemoryRegion *subregion = QTAILQ_FIRST(&mr->subregions);
+ memory_region_del_subregion(mr, subregion);
+ }
+ memory_region_transaction_commit();
}
- memory_region_transaction_commit();
-
mr->destructor(mr);
memory_region_clear_coalescing(mr);
g_free((char *)mr->name);
There is no need to delete subregion and do memory begin/commit for subpage in memory_region_finalize(). This patch is from Anthony Xu <anthony.xu@intel.com>. Signed-off-by: Yang Zhong <yang.zhong@intel.com> --- memory.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)