lkml.org 
[lkml]   [2007]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [16/50] x86: Use macros to modify the PG_arch_1 page flags in change_page_attr
    Date

    Instead of open coding the bit accesses uses standard style
    *PageDeferred* macros.

    Signed-off-by: Andi Kleen <ak@suse.de>

    ---
    arch/i386/mm/pageattr.c | 10 +++++++---
    arch/x86_64/mm/pageattr.c | 11 ++++++++---
    2 files changed, 15 insertions(+), 6 deletions(-)

    Index: linux/arch/x86_64/mm/pageattr.c
    ===================================================================
    --- linux.orig/arch/x86_64/mm/pageattr.c
    +++ linux/arch/x86_64/mm/pageattr.c
    @@ -17,6 +17,11 @@
    #define SetPageFlush(p) set_bit(PG_owner_priv_1, &(p)->flags)
    #define TestClearPageFlush(p) test_and_clear_bit(PG_owner_priv_1, &(p)->flags)

    +#define PageDeferred(p) test_bit(PG_arch_1, &(p)->flags)
    +#define SetPageDeferred(p) set_bit(PG_arch_1, &(p)->flags)
    +#define ClearPageDeferred(p) clear_bit(PG_arch_1, &(p)->flags)
    +#define TestSetPageDeferred(p) test_and_set_bit(PG_arch_1, &(p)->flags)
    +
    pte_t *lookup_address(unsigned long address)
    {
    pgd_t *pgd = pgd_offset_k(address);
    @@ -101,7 +106,7 @@ static inline void save_page(struct page
    {
    if (data && cpu_has_clflush)
    SetPageFlush(fpage);
    - if (test_and_set_bit(PG_arch_1, &fpage->flags))
    + if (TestSetPageDeferred(fpage))
    return;
    if (cpu_has_clflush || !data)
    list_add(&fpage->lru, &deferred_pages);
    @@ -137,7 +142,7 @@ static struct page *flush_page(unsigned
    if (!(pfn_valid(__pa(address) >> PAGE_SHIFT)))
    return NULL;
    p = virt_to_page(address);
    - if ((PageFlush(p) || PageLRU(p)) && !test_bit(PG_arch_1, &p->flags))
    + if ((PageFlush(p) || PageLRU(p)) && !PageDeferred(p))
    return NULL;
    return p;
    }
    @@ -272,7 +277,7 @@ void global_flush_tlb(void)

    list_for_each_entry_safe(pg, next, &arg.l, lru) {
    list_del(&pg->lru);
    - clear_bit(PG_arch_1, &pg->flags);
    + ClearPageDeferred(pg);
    if (TestClearPageFlush(pg))
    continue;
    if (page_private(pg) != 0)
    Index: linux/arch/i386/mm/pageattr.c
    ===================================================================
    --- linux.orig/arch/i386/mm/pageattr.c
    +++ linux/arch/i386/mm/pageattr.c
    @@ -17,6 +17,10 @@
    #define PageFlush(p) test_bit(PG_owner_priv_1, &(p)->flags)
    #define SetPageFlush(p) set_bit(PG_owner_priv_1, &(p)->flags)
    #define TestClearPageFlush(p) test_and_clear_bit(PG_owner_priv_1, &(p)->flags)
    +#define PageDeferred(p) test_bit(PG_arch_1, &(p)->flags)
    +#define SetPageDeferred(p) set_bit(PG_arch_1, &(p)->flags)
    +#define ClearPageDeferred(p) clear_bit(PG_arch_1, &(p)->flags)
    +#define TestSetPageDeferred(p) test_and_set_bit(PG_arch_1, &(p)->flags)

    static DEFINE_SPINLOCK(cpa_lock);
    /* Both protected by cpa_lock */
    @@ -152,7 +156,7 @@ static inline void save_page(struct page
    {
    if (data && cpu_has_clflush)
    SetPageFlush(fpage);
    - if (test_and_set_bit(PG_arch_1, &fpage->flags))
    + if (TestSetPageDeferred(fpage))
    return;
    if (!data || cpu_has_clflush)
    list_add(&fpage->lru, &df_list);
    @@ -164,7 +168,7 @@ static struct page *flush_page(unsigned
    if (!(pfn_valid(__pa(address) >> PAGE_SHIFT)))
    return NULL;
    p = virt_to_page(address);
    - if ((PageFlush(p) || PageLRU(p)) && !test_bit(PG_arch_1, &p->flags))
    + if ((PageFlush(p) || PageLRU(p)) && !PageDeferred(p))
    return NULL;
    return p;
    }
    @@ -282,7 +286,7 @@ void global_flush_tlb(void)
    on_each_cpu(flush_kernel_map, &arg, 1, 1);
    list_for_each_entry_safe(pg, next, &arg.l, lru) {
    list_del(&pg->lru);
    - clear_bit(PG_arch_1, &pg->flags);
    + ClearPageDeferred(pg);
    if (TestClearPageFlush(pg))
    continue;
    if (PageReserved(pg) || !cpu_has_pse || page_private(pg) != 0)
    -
    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/
    \
     
     \ /
      Last update: 2007-09-22 00:41    [W:3.654 / U:0.552 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site