Messages in this thread | | | From | Nick Piggin <> | Subject | Re: free_pages_check | Date | Tue, 8 Jan 2008 14:34:14 +1100 |
| |
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.
| |