lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20180423030349.GB2308@bombadil.infradead.org> Date: Sun, 22 Apr 2018 20:03:49 -0700 From: Matthew Wilcox <willy@...radead.org> To: Naoya Horiguchi <n-horiguchi@...jp.nec.com> Cc: Michal Hocko <mhocko@...nel.org>, "Kirill A. Shutemov" <kirill@...temov.name>, Zi Yan <zi.yan@...t.com>, "linux-mm@...ck.org" <linux-mm@...ck.org>, Andrew Morton <akpm@...ux-foundation.org>, Vlastimil Babka <vbabka@...e.cz>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org> Subject: Re: [PATCH] mm: shmem: enable thp migration (Re: [PATCH v1] mm: consider non-anonymous thp as unmovable page) On Fri, Apr 06, 2018 at 03:07:11AM +0000, Naoya Horiguchi wrote: > Subject: [PATCH] mm: enable thp migration for shmem thp This patch is buggy, but not in a significant way: > @@ -524,13 +524,26 @@ int migrate_page_move_mapping(struct address_space *mapping, > } > > radix_tree_replace_slot(&mapping->i_pages, pslot, newpage); ^^^ this line should have been deleted > + if (PageTransHuge(page)) { > + int i; > + int index = page_index(page); > + > + for (i = 0; i < HPAGE_PMD_NR; i++) { ^^^ or this iteration should start at 1 > + pslot = radix_tree_lookup_slot(&mapping->i_pages, > + index + i); > + radix_tree_replace_slot(&mapping->i_pages, pslot, > + newpage + i); > + } > + } else { > + radix_tree_replace_slot(&mapping->i_pages, pslot, newpage); ^^^ and if the second option, then we don't need this line > + } So either this: - radix_tree_replace_slot(&mapping->i_pages, pslot, newpage); + if (PageTransHuge(page)) { + int i; + int index = page_index(page); + + for (i = 0; i < HPAGE_PMD_NR; i++) { + pslot = radix_tree_lookup_slot(&mapping->i_pages, + index + i); + radix_tree_replace_slot(&mapping->i_pages, pslot, + newpage + i); + } + } else { + radix_tree_replace_slot(&mapping->i_pages, pslot, newpage); + } Or this: radix_tree_replace_slot(&mapping->i_pages, pslot, newpage); + if (PageTransHuge(page)) { + int i; + int index = page_index(page); + + for (i = 1; i < HPAGE_PMD_NR; i++) { + pslot = radix_tree_lookup_slot(&mapping->i_pages, + index + i); + radix_tree_replace_slot(&mapping->i_pages, pslot, + newpage + i); + } + } The second one is shorter and involves fewer lookups ...
Powered by blists - more mailing lists