diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-07-08 01:47:47 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-08 01:47:47 -0400 |
commit | 93022136fff9e6130aa128a5ed8a599e93ac813c (patch) | |
tree | 185390fb75a3d7423cc508610b76637c957205b9 /mm/nommu.c | |
parent | c49c412a47b5102516d3313d4eba38cb1e968721 (diff) | |
parent | b7279469d66b55119784b8b9529c99c1955fe747 (diff) |
Merge commit 'v2.6.26-rc9' into x86/cpu
Diffstat (limited to 'mm/nommu.c')
-rw-r--r-- | mm/nommu.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/mm/nommu.c b/mm/nommu.c index dca93fcb8b7a..4462b6a3fcb9 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
@@ -109,16 +109,23 @@ unsigned int kobjsize(const void *objp) | |||
109 | * If the object we have should not have ksize performed on it, | 109 | * If the object we have should not have ksize performed on it, |
110 | * return size of 0 | 110 | * return size of 0 |
111 | */ | 111 | */ |
112 | if (!objp || (unsigned long)objp >= memory_end || !((page = virt_to_page(objp)))) | 112 | if (!objp || !virt_addr_valid(objp)) |
113 | return 0; | 113 | return 0; |
114 | 114 | ||
115 | page = virt_to_head_page(objp); | ||
116 | |||
117 | /* | ||
118 | * If the allocator sets PageSlab, we know the pointer came from | ||
119 | * kmalloc(). | ||
120 | */ | ||
115 | if (PageSlab(page)) | 121 | if (PageSlab(page)) |
116 | return ksize(objp); | 122 | return ksize(objp); |
117 | 123 | ||
118 | BUG_ON(page->index < 0); | 124 | /* |
119 | BUG_ON(page->index >= MAX_ORDER); | 125 | * The ksize() function is only guaranteed to work for pointers |
120 | 126 | * returned by kmalloc(). So handle arbitrary pointers here. | |
121 | return (PAGE_SIZE << page->index); | 127 | */ |
128 | return PAGE_SIZE << compound_order(page); | ||
122 | } | 129 | } |
123 | 130 | ||
124 | /* | 131 | /* |