[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH V14 10/17] xen: Adds a cap to the number of map cach
From: |
anthony.perard |
Subject: |
[Qemu-devel] [PATCH V14 10/17] xen: Adds a cap to the number of map cache entries. |
Date: |
Wed, 20 Apr 2011 17:41:59 +0100 |
From: John Baboval <address@hidden>
Adds a cap to the number of map cache entries. This prevents the map
cache from overwhelming system memory.
I also removed the bitmap macros and #included bitmap.h instead.
Signed-off-By: John Baboval <address@hidden>
Signed-off-by: Anthony PERARD <address@hidden>
---
xen-mapcache.c | 37 +++++++++++++++----------------------
1 files changed, 15 insertions(+), 22 deletions(-)
diff --git a/xen-mapcache.c b/xen-mapcache.c
index a539358..2ca18ce 100644
--- a/xen-mapcache.c
+++ b/xen-mapcache.c
@@ -12,6 +12,7 @@
#include "hw/xen_backend.h"
#include "blockdev.h"
+#include "bitmap.h"
#include <xen/hvm/params.h>
#include <sys/mman.h>
@@ -32,15 +33,13 @@
#if defined(__i386__)
# define MCACHE_BUCKET_SHIFT 16
+# define MCACHE_MAX_SIZE (1UL<<31) /* 2GB Cap */
#elif defined(__x86_64__)
# define MCACHE_BUCKET_SHIFT 20
+# define MCACHE_MAX_SIZE (1UL<<35) /* 32GB Cap */
#endif
#define MCACHE_BUCKET_SIZE (1UL << MCACHE_BUCKET_SHIFT)
-#define BITS_PER_LONG (sizeof(long) * 8)
-#define BITS_TO_LONGS(bits) (((bits) + BITS_PER_LONG - 1) / BITS_PER_LONG)
-#define DECLARE_BITMAP(name, bits) unsigned long name[BITS_TO_LONGS(bits)]
-
typedef struct MapCacheEntry {
target_phys_addr_t paddr_index;
uint8_t *vaddr_base;
@@ -69,11 +68,6 @@ typedef struct MapCache {
static MapCache *mapcache;
-static inline int test_bit(unsigned int bit, const unsigned long *map)
-{
- return !!((map)[(bit) / BITS_PER_LONG] & (1UL << ((bit) % BITS_PER_LONG)));
-}
-
void qemu_map_cache_init(void)
{
unsigned long size;
@@ -85,9 +79,14 @@ void qemu_map_cache_init(void)
mapcache->last_address_index = -1;
getrlimit(RLIMIT_AS, &rlimit_as);
- rlimit_as.rlim_cur = rlimit_as.rlim_max;
+ if (rlimit_as.rlim_max < MCACHE_MAX_SIZE) {
+ rlimit_as.rlim_cur = rlimit_as.rlim_max;
+ } else {
+ rlimit_as.rlim_cur = MCACHE_MAX_SIZE;
+ }
+
setrlimit(RLIMIT_AS, &rlimit_as);
- mapcache->max_mcache_size = rlimit_as.rlim_max;
+ mapcache->max_mcache_size = rlimit_as.rlim_cur;
mapcache->nr_buckets =
(((mapcache->max_mcache_size >> XC_PAGE_SHIFT) +
@@ -107,7 +106,7 @@ static void qemu_remap_bucket(MapCacheEntry *entry,
uint8_t *vaddr_base;
xen_pfn_t *pfns;
int *err;
- unsigned int i, j;
+ unsigned int i;
target_phys_addr_t nb_pfn = size >> XC_PAGE_SHIFT;
trace_qemu_remap_bucket(address_index);
@@ -136,17 +135,11 @@ static void qemu_remap_bucket(MapCacheEntry *entry,
entry->vaddr_base = vaddr_base;
entry->paddr_index = address_index;
- for (i = 0; i < nb_pfn; i += BITS_PER_LONG) {
- unsigned long word = 0;
- if ((i + BITS_PER_LONG) > nb_pfn) {
- j = nb_pfn % BITS_PER_LONG;
- } else {
- j = BITS_PER_LONG;
- }
- while (j > 0) {
- word = (word << 1) | !err[i + --j];
+ bitmap_zero(entry->valid_mapping, nb_pfn);
+ for (i = 0; i < nb_pfn; i++) {
+ if (!err[i]) {
+ bitmap_set(entry->valid_mapping, i, 1);
}
- entry->valid_mapping[i / BITS_PER_LONG] = word;
}
qemu_free(pfns);
--
1.7.2.5
- [Qemu-devel] [PATCH V14 00/17] Xen device model support, anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 02/17] xen: Make Xen build once., anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 04/17] xen: Add initialisation of Xen, anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 01/17] xen: Replace some tab-indents with spaces (clean-up)., anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 05/17] pc_memory_init: Move memory calculation to the caller., anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 03/17] xen: Support new libxc calls from xen unstable., anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 06/17] xen: Add xenfv machine, anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 07/17] piix_pci: Introduces Xen specific call for irq., anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 08/17] xen: Introduce Xen Interrupt Controller, anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 10/17] xen: Adds a cap to the number of map cache entries.,
anthony.perard <=
- [Qemu-devel] [PATCH V14 11/17] Introduce qemu_put_ram_ptr, anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 12/17] configure: Always use 64bits target physical addresses with xen enabled., anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 09/17] xen: Introduce the Xen mapcache, anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 13/17] pci: Use of qemu_put_ram_ptr in pci_add_option_rom., anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 14/17] vl.c: Introduce getter for shutdown_requested and reset_requested., anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 15/17] xen: Initialize event channels and io rings, anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 16/17] xen: Set running state in xenstore., anthony.perard, 2011/04/20
- [Qemu-devel] [PATCH V14 17/17] xen: Add Xen hypercall for sleep state in the cmos_s3 callback., anthony.perard, 2011/04/20