# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Date 1191236103 -32400 # Node ID 6fa9e1c02f08c0d63de08abf191d9111f081c605 # Parent 9e3bba015e60673c48a5e0816de44aecd613b8e8 fix lock_pages()/unlock_pages(). The resion is sometimes wrongly calculated. It results in unexpected hypercall failure. PATCHNAME: fix_lock_unlock_pages Signed-off-by: Isaku Yamahata diff -r 9e3bba015e60 -r 6fa9e1c02f08 tools/libxc/xc_private.c --- a/tools/libxc/xc_private.c Mon Oct 01 18:00:06 2007 +0900 +++ b/tools/libxc/xc_private.c Mon Oct 01 19:55:03 2007 +0900 @@ -130,7 +130,8 @@ int lock_pages(void *addr, size_t len) int e = 0; #ifndef __sun__ void *laddr = (void *)((unsigned long)addr & PAGE_MASK); - size_t llen = (len + PAGE_SIZE - 1) & PAGE_MASK; + size_t llen = (len + ((unsigned long)addr - (unsigned long)laddr) + + PAGE_SIZE - 1) & PAGE_MASK; e = mlock(laddr, llen); #endif return e; @@ -140,7 +141,8 @@ void unlock_pages(void *addr, size_t len { #ifndef __sun__ void *laddr = (void *)((unsigned long)addr & PAGE_MASK); - size_t llen = (len + PAGE_SIZE - 1) & PAGE_MASK; + size_t llen = (len + ((unsigned long)addr - (unsigned long)laddr) + + PAGE_SIZE - 1) & PAGE_MASK; safe_munlock(laddr, llen); #endif }