On 2015/6/10 11:06, Kamezawa Hiroyuki wrote: > On 2015/06/09 19:04, Xishi Qiu wrote: >> On 2015/6/9 15:12, Kamezawa Hiroyuki wrote: >> >>> On 2015/06/04 22:04, Xishi Qiu wrote: >>>> Add the buddy system interface for address range mirroring feature. >>>> Allocate mirrored pages in MIGRATE_MIRROR list. If there is no mirrored pages >>>> left, use other types pages. >>>> >>>> Signed-off-by: Xishi Qiu <qiuxishi@xxxxxxxxxx> >>>> --- >>>> mm/page_alloc.c | 40 +++++++++++++++++++++++++++++++++++++++- >>>> 1 file changed, 39 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/mm/page_alloc.c b/mm/page_alloc.c >>>> index d4d2066..0fb55288 100644 >>>> --- a/mm/page_alloc.c >>>> +++ b/mm/page_alloc.c >>>> @@ -599,6 +599,26 @@ static inline bool is_mirror_pfn(unsigned long pfn) >>>> >>>> return false; >>>> } >>>> + >>>> +static inline bool change_to_mirror(gfp_t gfp_flags, int high_zoneidx) >>>> +{ >>>> + /* >>>> + * Do not alloc mirrored memory below 4G, because 0-4G is >>>> + * all mirrored by default, and the list is always empty. >>>> + */ >>>> + if (high_zoneidx < ZONE_NORMAL) >>>> + return false; >>>> + >>>> + /* Alloc mirrored memory for only kernel */ >>>> + if (gfp_flags & __GFP_MIRROR) >>>> + return true; >>> >>> GFP_KERNEL itself should imply mirror, I think. >>> >> >> Hi Kame, >> >> How about like this: #define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_MIRROR) ? >> > > Hm.... it cannot cover GFP_ATOMIC at el. > > I guess, mirrored memory should be allocated if !__GFP_HIGHMEM or !__GFP_MOVABLE Hi Kame, Can we distinguish allocations form user or kernel only by GFP flags? Thanks, Xishi Qiu -- 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>