Messages in this thread Patch in this message | | | Date | Sun, 2 Jun 2002 15:44:22 -0700 | From | William Lee Irwin III <> | Subject | remove mixture of non-atomic operations with page->flags which requires atomic operations to access |
| |
page->flags is effectively a lock word as its various bits are updatable and accessible only by atomic operations. This patch removes the update of page->flags in __free_pages_ok() with non-atomic operations in favor of using atomic bit operations to update the bits to be cleared.
Against 2.5.19.
Cheers, Bill
diff -Nru a/include/linux/page-flags.h b/include/linux/page-flags.h --- a/include/linux/page-flags.h Sun Jun 2 15:42:49 2002 +++ b/include/linux/page-flags.h Sun Jun 2 15:42:49 2002 @@ -169,6 +169,7 @@ #define PageChecked(page) test_bit(PG_checked, &(page)->flags) #define SetPageChecked(page) set_bit(PG_checked, &(page)->flags) +#define ClearPageChecked(page) clear_bit(PG_checked, &(page)->flags) #define PageReserved(page) test_bit(PG_reserved, &(page)->flags) #define SetPageReserved(page) set_bit(PG_reserved, &(page)->flags) diff -Nru a/mm/page_alloc.c b/mm/page_alloc.c --- a/mm/page_alloc.c Sun Jun 2 15:42:49 2002 +++ b/mm/page_alloc.c Sun Jun 2 15:42:49 2002 @@ -91,8 +91,12 @@ BUG_ON(PageLRU(page)); BUG_ON(PageActive(page)); BUG_ON(PageWriteback(page)); + ClearPageDirty(page); - page->flags &= ~(1<<PG_referenced); + ClearPageUptodate(page); + ClearPageSlab(page); + ClearPageNosave(page); + ClearPageChecked(page); if (current->flags & PF_FREE_PAGES) goto local_freelist; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |