[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 6/8] Don't abort on out of memory when creating page
From: |
Juan Quintela |
Subject: |
[Qemu-devel] [PATCH 6/8] Don't abort on out of memory when creating page cache |
Date: |
Tue, 4 Feb 2014 16:19:43 +0100 |
From: Orit Wasserman <address@hidden>
Signed-off-by: Orit Wasserman <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>
---
arch_init.c | 16 ++++++++++++++--
page_cache.c | 18 ++++++++++++++----
2 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/arch_init.c b/arch_init.c
index 5eff80b..806d096 100644
--- a/arch_init.c
+++ b/arch_init.c
@@ -664,8 +664,20 @@ static int ram_save_setup(QEMUFile *f, void *opaque)
DPRINTF("Error creating cache\n");
return -1;
}
- XBZRLE.encoded_buf = g_malloc0(TARGET_PAGE_SIZE);
- XBZRLE.current_buf = g_malloc(TARGET_PAGE_SIZE);
+
+ /* We prefer not to abort if there is no memory */
+ XBZRLE.encoded_buf = g_try_malloc0(TARGET_PAGE_SIZE);
+ if (!XBZRLE.encoded_buf) {
+ DPRINTF("Error allocating encoded_buf\n");
+ return -1;
+ }
+
+ XBZRLE.current_buf = g_try_malloc(TARGET_PAGE_SIZE);
+ if (!XBZRLE.current_buf) {
+ DPRINTF("Error allocating current_buf\n");
+ return -1;
+ }
+
acct_clear();
}
diff --git a/page_cache.c b/page_cache.c
index a05db64..62a53f8 100644
--- a/page_cache.c
+++ b/page_cache.c
@@ -60,8 +60,12 @@ PageCache *cache_init(int64_t num_pages, unsigned int
page_size)
return NULL;
}
- cache = g_malloc(sizeof(*cache));
-
+ /* We prefer not to abort if there is no memory */
+ cache = g_try_malloc(sizeof(*cache));
+ if (!cache) {
+ DPRINTF("Failed to allocate cache\n");
+ return NULL;
+ }
/* round down to the nearest power of 2 */
if (!is_power_of_2(num_pages)) {
num_pages = pow2floor(num_pages);
@@ -74,8 +78,14 @@ PageCache *cache_init(int64_t num_pages, unsigned int
page_size)
DPRINTF("Setting cache buckets to %" PRId64 "\n", cache->max_num_items);
- cache->page_cache = g_malloc((cache->max_num_items) *
- sizeof(*cache->page_cache));
+ /* We prefer not to abort if there is no memory */
+ cache->page_cache = g_try_malloc((cache->max_num_items) *
+ sizeof(*cache->page_cache));
+ if (!cache->page_cache) {
+ DPRINTF("Failed to allocate cache->page_cache\n");
+ g_free(cache);
+ return NULL;
+ }
for (i = 0; i < cache->max_num_items; i++) {
cache->page_cache[i].it_data = NULL;
--
1.8.5.3
- [Qemu-devel] [PULL 0/8] migration queue, Juan Quintela, 2014/02/04
- [Qemu-devel] [PATCH 8/8] exec: fix ram_list dirty map optimization, Juan Quintela, 2014/02/04
- [Qemu-devel] [PATCH 4/8] migration:fix free XBZRLE decoded_buf wrong, Juan Quintela, 2014/02/04
- [Qemu-devel] [PATCH 6/8] Don't abort on out of memory when creating page cache,
Juan Quintela <=
- [Qemu-devel] [PATCH 7/8] Don't abort on memory allocation error, Juan Quintela, 2014/02/04
- [Qemu-devel] [PATCH 5/8] XBZRLE cache size should not be larger than guest memory size, Juan Quintela, 2014/02/04
- [Qemu-devel] [PATCH 3/8] Add check for cache size smaller than page size, Juan Quintela, 2014/02/04
- [Qemu-devel] [PATCH 1/8] vmstate: Make VMSTATE_STRUCT_POINTER take type, not ptr-to-type, Juan Quintela, 2014/02/04
- [Qemu-devel] [PATCH 2/8] Set xbzrle buffers to NULL after freeing them to avoid double free errors, Juan Quintela, 2014/02/04
- Re: [Qemu-devel] [PULL 0/8] migration queue, Juan Quintela, 2014/02/04