X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=mm%2Fswap.c;h=45fdbfb6b2a608857165d6efc625c01b4ab92438;hb=97c60869dbf351d7d9a7dbdeeebdcdd53418c706;hp=26fc9b5f1b6c1b4ad67226c19b1166c62616a9af;hpb=4b4bb99b6246007eccbc0731eae0b6742c24efa5;p=platform%2Fkernel%2Flinux-rpi.git diff --git a/mm/swap.c b/mm/swap.c index 26fc9b5..45fdbfb 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -321,11 +321,6 @@ static inline void activate_page_drain(int cpu) { } -static bool need_activate_page_drain(int cpu) -{ - return false; -} - void activate_page(struct page *page) { struct zone *zone = page_zone(page); @@ -654,13 +649,15 @@ void lru_add_drain(void) put_cpu(); } +#ifdef CONFIG_SMP + +static DEFINE_PER_CPU(struct work_struct, lru_add_drain_work); + static void lru_add_drain_per_cpu(struct work_struct *dummy) { lru_add_drain(); } -static DEFINE_PER_CPU(struct work_struct, lru_add_drain_work); - /* * Doesn't need any cpu hotplug locking because we do rely on per-cpu * kworkers being shut down before our page_alloc_cpu_dead callback is @@ -703,6 +700,12 @@ void lru_add_drain_all(void) mutex_unlock(&lock); } +#else +void lru_add_drain_all(void) +{ + lru_add_drain(); +} +#endif /** * release_pages - batched put_page() @@ -737,15 +740,20 @@ void release_pages(struct page **pages, int nr) if (is_huge_zero_page(page)) continue; - /* Device public page can not be huge page */ - if (is_device_public_page(page)) { + if (is_zone_device_page(page)) { if (locked_pgdat) { spin_unlock_irqrestore(&locked_pgdat->lru_lock, flags); locked_pgdat = NULL; } - put_devmap_managed_page(page); - continue; + /* + * ZONE_DEVICE pages that return 'false' from + * put_devmap_managed_page() do not require special + * processing, and instead, expect a call to + * put_page_testzero(). + */ + if (put_devmap_managed_page(page)) + continue; } page = compound_head(page);