On Tuesday 08 January 2008 13:43, Yinghai Lu wrote:wonder why free_pages_check mm/page_alloc.c is using bit OR than logical OR
@@ -450,9 +450,9 @@ static inline void __free_one_page(struc
static inline int free_pages_check(struct page *page)
{
- if (unlikely(page_mapcount(page) |
- (page->mapping != NULL) |
- (page_count(page) != 0) |
+ if (unlikely(page_mapcount(page) ||
+ (page->mapping != NULL) ||
+ (page_count(page) != 0) ||
(page->flags & (
1 << PG_lru |
1 << PG_private |
Because the positive case is extremely rare, so there is no benefit (nor
any correctness requirement) for short-circuit evaluation, and we don't
want to have all the branches that it involves. I think it is 3 more
conditional jumps.