diff options
author | Anthony PERARD <anthony.perard@citrix.com> | 2012-04-13 17:18:56 +0000 |
---|---|---|
committer | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2012-04-13 17:34:50 +0000 |
commit | 09ab48ee6c7ec082f56f85e234b066ed4fd874e2 (patch) | |
tree | 2dbfe17a2b736fde2696f1ab87bb14172ffe622f /xen-mapcache.c | |
parent | 77ba8fef8972854b7fad89d97a14f4f9c3eae7a8 (diff) | |
download | qemu-09ab48ee6c7ec082f56f85e234b066ed4fd874e2.zip qemu-09ab48ee6c7ec082f56f85e234b066ed4fd874e2.tar.gz qemu-09ab48ee6c7ec082f56f85e234b066ed4fd874e2.tar.bz2 |
Xen, mapcache: Fix the compute of the size of bucket.
Because the size of a mapping is wrong when there is an offset and a
size >= bucket_size.
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Diffstat (limited to 'xen-mapcache.c')
-rw-r--r-- | xen-mapcache.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/xen-mapcache.c b/xen-mapcache.c index a456479..75ac313 100644 --- a/xen-mapcache.c +++ b/xen-mapcache.c @@ -216,12 +216,14 @@ tryagain: } /* size is always a multiple of MCACHE_BUCKET_SIZE */ - if ((address_offset + (__size % MCACHE_BUCKET_SIZE)) > MCACHE_BUCKET_SIZE) - __size += MCACHE_BUCKET_SIZE; - if (__size % MCACHE_BUCKET_SIZE) - __size += MCACHE_BUCKET_SIZE - (__size % MCACHE_BUCKET_SIZE); - if (!__size) + if (size) { + __size = size + address_offset; + if (__size % MCACHE_BUCKET_SIZE) { + __size += MCACHE_BUCKET_SIZE - (__size % MCACHE_BUCKET_SIZE); + } + } else { __size = MCACHE_BUCKET_SIZE; + } entry = &mapcache->entry[address_index % mapcache->nr_buckets]; |