• Tarun Sahu's avatar
    dax/kmem: Pass valid argument to memory_group_register_static · 46e66dab
    Tarun Sahu authored
    memory_group_register_static takes maximum number of pages as the argument
    while dev_dax_kmem_probe passes total_len (in bytes) as the argument.
    
    IIUC, I don't see any crash/panic impact as such. As,
    memory_group_register_static just set the max_pages limit which is used in
    auto_movable_zone_for_pfn to determine the zone.
    
    which might cause these condition to behave differently,
    
    This will be true always so jump will happen to kernel_zone
        ...
        if (!auto_movable_can_online_movable(NUMA_NO_NODE, group, nr_pages))
            goto kernel_zone;
    
        ...
        kernel_zone:
            return default_kernel_zone_for_pfn(nid, pfn, nr_pages);
    
    Here, In below, zone_intersects compare range will be larger as nr_pages
    will be higher (derived from total_len passed in dev_dax_kmem_probe).
    
        ...
        static struct zone *default_kernel_zone_for_pfn(int nid, unsigned long start_pfn,
        		unsigned long nr_pages)
        {
        	struct pglist_data *pgdat = NODE_DATA(nid);
        	int zid;
    
        	for (zid = 0; zid < ZONE_NORMAL; zid++) {
        		struct zone *zone = &pgdat->node_zones[zid];
    
        		if (zone_intersects(zone, start_pfn, nr_pages))
        			return zone;
        	}
    
        	return &pgdat->node_zones[ZONE_NORMAL];
        }
    
    Incorrect zone will be returned here, which in later time might cause bigger
    problem.
    
    Fixes: eedf634a ("dax/kmem: use a single static memory group for a single probed unit")
    Signed-off-by: default avatarTarun Sahu <tsahu@linux.ibm.com>
    Link: https://lore.kernel.org/r/20230621155025.370672-1-tsahu@linux.ibm.comReviewed-by: default avatarVishal Verma <vishal.l.verma@intel.com>
    Signed-off-by: default avatarVishal Verma <vishal.l.verma@intel.com>
    46e66dab
kmem.c 7.28 KB