hi Robert, On 2016/12/14 17:45, Robert Richter wrote: > On 12.12.16 17:53:02, Yisheng Xie wrote: >> It seems that memblock_is_memory() is also too strict for early_pfn_valid, >> so what about this patch, which use common pfn_valid as early_pfn_valid >> when CONFIG_HAVE_ARCH_PFN_VALID=y: >> ------------ >> diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h >> index 0f088f3..9d596f3 100644 >> --- a/include/linux/mmzone.h >> +++ b/include/linux/mmzone.h >> @@ -1200,7 +1200,17 @@ static inline int pfn_present(unsigned long pfn) >> #define pfn_to_nid(pfn) (0) >> #endif >> >> +#ifdef CONFIG_HAVE_ARCH_PFN_VALID >> +static inline int early_pfn_valid(unsigned long pfn) >> +{ >> + if (pfn_to_section_nr(pfn) >= NR_MEM_SECTIONS) >> + return 0; >> + return valid_section(__nr_to_section(pfn_to_section_nr(pfn))); >> +} > > I sent a V2 patch that uses pfn_present(). This only initilizes > sections with memory. hmm, maybe I do not quite catch what your mean, but I do not think pfn_present is right for this case. IMO, The valid_section() means the section with mem_map, not section with memory. And: pfn_present -> present_section which means the section is present but may not have mem_map, so it may not have page struct at all for that section. Please let me know, if I miss anything. Thanks, Yisheng Xie. > > -Robert > >> +#define early_pfn_valid early_pfn_valid >> +#else >> #define early_pfn_valid(pfn) pfn_valid(pfn) >> +#endif >> void sparse_init(void); >> #else >> #define sparse_init() do {} while (0) >> >> >> > > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>