On Wed, Oct 16, 2019 at 09:56:19AM +0200, David Hildenbrand wrote: > On 16.10.19 09:09, Naoya Horiguchi wrote: > > Hi, > > > > I wrote a simple cleanup for parameter of soft_offline_page(), > > based on thread https://lkml.org/lkml/2019/10/11/57. > > > > I know that we need more cleanup on hwpoison-inject, but I think > > that will be mentioned in re-write patchset Oscar is preparing now. > > So let me shared only this part as a separate one now. ... > > I think you should rebase that patch on linux-next (where the > pfn_to_online_page() check is in place). I assume you'll want to move the > pfn_to_online_page() check into soft_offline_page() then as well? I rebased to next-20191016. And yes, we will move pfn_to_online_page() into soft offline code. It seems that we can also move pfn_valid(), but is simply moving like below good enough for you? @@ -1877,11 +1877,17 @@ static int soft_offline_free_page(struct page *page) * This is not a 100% solution for all memory, but tries to be * ``good enough'' for the majority of memory. */ -int soft_offline_page(struct page *page, int flags) +int soft_offline_page(unsigned long pfn, int flags) { int ret; - unsigned long pfn = page_to_pfn(page); + struct page *page; + if (!pfn_valid(pfn)) + return -ENXIO; + /* Only online pages can be soft-offlined (esp., not ZONE_DEVICE). */ + if (!pfn_to_online_page(pfn)) + return -EIO; + page = pfn_to_page(pfn); if (is_zone_device_page(page)) { pr_debug_ratelimited("soft_offline: %#lx page is device page\n", pfn); -- Or we might have an option to do as memory_failure() does like below: int memory_failure(unsigned long pfn, int flags) { .... p = pfn_to_online_page(pfn); if (!p) { if (pfn_valid(pfn)) { pgmap = get_dev_pagemap(pfn, NULL); if (pgmap) return memory_failure_dev_pagemap(pfn, flags, pgmap); } pr_err("Memory failure: %#lx: memory outside kernel control\n", pfn); return -ENXIO; } Thanks, Naoya Horiguchi