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: <20130111101745.GD7286@dhcp22.suse.cz> Date: Fri, 11 Jan 2013 11:17:45 +0100 From: Michal Hocko <mhocko@...e.cz> To: Andrew Morton <akpm@...ux-foundation.org> Cc: Wen Congyang <wency@...fujitsu.com>, Yasuaki Ishimatsu <isimatu.yasuaki@...fujitsu.com>, Tang Chen <tangchen@...fujitsu.com>, Wu Jianguo <wujianguo@...wei.com>, KOSAKI Motohiro <kosaki.motohiro@...fujitsu.com>, Jiang Liu <jiang.liu@...wei.com>, Kamezawa Hiroyuki <kamezawa.hiroyu@...fujitsu.com>, Lai Jiangshan <laijs@...fujitsu.com>, Ingo Molnar <mingo@...e.hu>, Thomas Gleixner <tglx@...utronix.de>, "H. Peter Anvin" <hpa@...or.com>, linux-mm@...ck.org, LKML <linux-kernel@...r.kernel.org> Subject: Re: mmots: memory-hotplug: implement register_page_bootmem_info_section of sparse-vmemmap fix On Fri 11-01-13 10:56:58, Michal Hocko wrote: [...] > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index be2b90c..1501d25 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -91,7 +91,6 @@ static void release_memory_resource(struct resource *res) > return; > } > > -#ifdef CONFIG_MEMORY_HOTPLUG_SPARSE > void get_page_bootmem(unsigned long info, struct page *page, > unsigned long type) > { > @@ -101,6 +100,7 @@ void get_page_bootmem(unsigned long info, struct page *page, > atomic_inc(&page->_count); > } > > +#ifdef CONFIG_MEMORY_HOTPLUG_SPARSE > /* reference to __meminit __free_pages_bootmem is valid > * so use __ref to tell modpost not to generate a warning */ > void __ref put_page_bootmem(struct page *page) Ups this slipped through and it is unnecessary. --- Defconfig for x86_64 complains arch/x86/mm/init_64.c: In function ‘register_page_bootmem_memmap’: arch/x86/mm/init_64.c:1340: error: implicit declaration of function ‘get_page_bootmem’ arch/x86/mm/init_64.c:1340: error: ‘MIX_SECTION_INFO’ undeclared (first use in this function) arch/x86/mm/init_64.c:1340: error: (Each undeclared identifier is reported only once arch/x86/mm/init_64.c:1340: error: for each function it appears in.) arch/x86/mm/init_64.c:1361: error: ‘SECTION_INFO’ undeclared (first use in this function) move register_page_bootmem_memmap to memory_hotplug where it is used and where it has all required symbols Signed-off-by: Michal Hocko <mhocko@...e.cz> --- arch/x86/mm/init_64.c | 58 ------------------------------------------------- include/linux/mm.h | 2 -- mm/memory_hotplug.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 60 deletions(-) diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index ddd3b58..a6a7494 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -1317,64 +1317,6 @@ vmemmap_populate(struct page *start_page, unsigned long size, int node) return 0; } -void register_page_bootmem_memmap(unsigned long section_nr, - struct page *start_page, unsigned long size) -{ - unsigned long addr = (unsigned long)start_page; - unsigned long end = (unsigned long)(start_page + size); - unsigned long next; - pgd_t *pgd; - pud_t *pud; - pmd_t *pmd; - unsigned int nr_pages; - struct page *page; - - for (; addr < end; addr = next) { - pte_t *pte = NULL; - - pgd = pgd_offset_k(addr); - if (pgd_none(*pgd)) { - next = (addr + PAGE_SIZE) & PAGE_MASK; - continue; - } - get_page_bootmem(section_nr, pgd_page(*pgd), MIX_SECTION_INFO); - - pud = pud_offset(pgd, addr); - if (pud_none(*pud)) { - next = (addr + PAGE_SIZE) & PAGE_MASK; - continue; - } - get_page_bootmem(section_nr, pud_page(*pud), MIX_SECTION_INFO); - - if (!cpu_has_pse) { - next = (addr + PAGE_SIZE) & PAGE_MASK; - pmd = pmd_offset(pud, addr); - if (pmd_none(*pmd)) - continue; - get_page_bootmem(section_nr, pmd_page(*pmd), - MIX_SECTION_INFO); - - pte = pte_offset_kernel(pmd, addr); - if (pte_none(*pte)) - continue; - get_page_bootmem(section_nr, pte_page(*pte), - SECTION_INFO); - } else { - next = pmd_addr_end(addr, end); - - pmd = pmd_offset(pud, addr); - if (pmd_none(*pmd)) - continue; - - nr_pages = 1 << (get_order(PMD_SIZE)); - page = pmd_page(*pmd); - while (nr_pages--) - get_page_bootmem(section_nr, page++, - SECTION_INFO); - } - } -} - void __meminit vmemmap_populate_print_last(void) { if (p_start) { diff --git a/include/linux/mm.h b/include/linux/mm.h index 7c57bd0..1fea1b23 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1724,8 +1724,6 @@ void vmemmap_populate_print_last(void); #ifdef CONFIG_MEMORY_HOTPLUG void vmemmap_free(struct page *memmap, unsigned long nr_pages); #endif -void register_page_bootmem_memmap(unsigned long section_nr, struct page *map, - unsigned long size); enum mf_flags { MF_COUNT_INCREASED = 1 << 0, diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index be2b90c..59eddff 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -128,6 +128,64 @@ void __ref put_page_bootmem(struct page *page) } +void register_page_bootmem_memmap(unsigned long section_nr, + struct page *start_page, unsigned long size) +{ + unsigned long addr = (unsigned long)start_page; + unsigned long end = (unsigned long)(start_page + size); + unsigned long next; + pgd_t *pgd; + pud_t *pud; + pmd_t *pmd; + unsigned int nr_pages; + struct page *page; + + for (; addr < end; addr = next) { + pte_t *pte = NULL; + + pgd = pgd_offset_k(addr); + if (pgd_none(*pgd)) { + next = (addr + PAGE_SIZE) & PAGE_MASK; + continue; + } + get_page_bootmem(section_nr, pgd_page(*pgd), MIX_SECTION_INFO); + + pud = pud_offset(pgd, addr); + if (pud_none(*pud)) { + next = (addr + PAGE_SIZE) & PAGE_MASK; + continue; + } + get_page_bootmem(section_nr, pud_page(*pud), MIX_SECTION_INFO); + + if (!cpu_has_pse) { + next = (addr + PAGE_SIZE) & PAGE_MASK; + pmd = pmd_offset(pud, addr); + if (pmd_none(*pmd)) + continue; + get_page_bootmem(section_nr, pmd_page(*pmd), + MIX_SECTION_INFO); + + pte = pte_offset_kernel(pmd, addr); + if (pte_none(*pte)) + continue; + get_page_bootmem(section_nr, pte_page(*pte), + SECTION_INFO); + } else { + next = pmd_addr_end(addr, end); + + pmd = pmd_offset(pud, addr); + if (pmd_none(*pmd)) + continue; + + nr_pages = 1 << (get_order(PMD_SIZE)); + page = pmd_page(*pmd); + while (nr_pages--) + get_page_bootmem(section_nr, page++, + SECTION_INFO); + } + } +} + #ifndef CONFIG_SPARSEMEM_VMEMMAP static void register_page_bootmem_info_section(unsigned long start_pfn) { -- 1.7.10.4 -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists