Can we add a validation case for this bug, Maxim can that be part of this patch set, looks fairly simple to add as a second patch
A very quick google suggests that a test case that calls "hugeadm --explain" or one of the many other options and succeeds might be a good way for the test case to know if it should run. Possibly better is doing that test in automake so that it can set a flag for hugepage which will then modify the list of test cases run. My quick google did not find a more portable way to know if HP was available. Mike On 22 January 2015 at 10:25, Maxim Uvarov <[email protected]> wrote: > On 01/22/2015 06:18 PM, Savolainen, Petri (NSN - FI/Espoo) wrote: > >> -----Original Message----- >>> From: [email protected] [mailto:lng-odp- >>> [email protected]] On Behalf Of ext Maxim Uvarov >>> Sent: Thursday, January 22, 2015 5:01 PM >>> To: [email protected] >>> Subject: [lng-odp] [PATCH] linux-generic: shm fix unmap for hugepages >>> >>> In case of hugepages unmap has to be done with address aligned to >>> page size. Also unmap() has to be done for address returned by mmap(), >>> not for aligned address after that. >>> >>> To reproduce original bug run: >>> echo 4096 > /proc/sys/vm/nr_hugepages >>> make check >>> >>> Signed-off-by: Maxim Uvarov <[email protected]> >>> --- >>> platform/linux-generic/odp_shared_memory.c | 8 +++++++- >>> 1 file changed, 7 insertions(+), 1 deletion(-) >>> >>> diff --git a/platform/linux-generic/odp_shared_memory.c >>> b/platform/linux- >>> generic/odp_shared_memory.c >>> index 99c5b40..51eba02 100644 >>> --- a/platform/linux-generic/odp_shared_memory.c >>> +++ b/platform/linux-generic/odp_shared_memory.c >>> @@ -134,8 +134,14 @@ int odp_shm_free(odp_shm_t shm) >>> odp_spinlock_lock(&odp_shm_tbl->lock); >>> shm_block = &odp_shm_tbl->block[i]; >>> >>> +#ifdef MAP_HUGETLB >>> + /* round up alloc size by page */ >>> + alloc_size = (shm_block->size + (shm_block->page_sz - 1)) >>> + & (-shm_block->page_sz); >>> >> Could you rebase this on top of my two patches. And then move this >> calculation to shm_reserve() side, so that the same size gets allocated, >> saved into block->alloc_size, and the freed here. >> >> -Petri >> > > Ok, I saw your patches after I wrote mine. Will rebase it on top. > > Maxim. > > > >> +#else >>> alloc_size = shm_block->size + shm_block->align; >>> - ret = munmap(shm_block->addr, alloc_size); >>> +#endif >>> + ret = munmap(shm_block->addr_orig, alloc_size); >>> if (0 != ret) { >>> ODP_DBG("odp_shm_free: munmap failed\n"); >>> odp_spinlock_unlock(&odp_shm_tbl->lock); >>> -- >>> 1.8.5.1.163.gd7aced9 >>> >>> >>> _______________________________________________ >>> lng-odp mailing list >>> [email protected] >>> http://lists.linaro.org/mailman/listinfo/lng-odp >>> >> > > _______________________________________________ > lng-odp mailing list > [email protected] > http://lists.linaro.org/mailman/listinfo/lng-odp > -- *Mike Holmes* Linaro Sr Technical Manager LNG - ODP
_______________________________________________ lng-odp mailing list [email protected] http://lists.linaro.org/mailman/listinfo/lng-odp
