Patch "dax/kmem: Pass valid argument to memory_group_register_static" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    dax/kmem: Pass valid argument to memory_group_register_static

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     dax-kmem-pass-valid-argument-to-memory_group_registe.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 046f25be51125790a5f109f066228a6eede17a89
Author: Tarun Sahu <tsahu@xxxxxxxxxxxxx>
Date:   Wed Jun 21 21:20:25 2023 +0530

    dax/kmem: Pass valid argument to memory_group_register_static
    
    [ Upstream commit 46e66dab8565f742374e9cc4ff7d35f344d774e2 ]
    
    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: eedf634aac3b ("dax/kmem: use a single static memory group for a single probed unit")
    Signed-off-by: Tarun Sahu <tsahu@xxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20230621155025.370672-1-tsahu@xxxxxxxxxxxxx
    Reviewed-by: Vishal Verma <vishal.l.verma@xxxxxxxxx>
    Signed-off-by: Vishal Verma <vishal.l.verma@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/dax/kmem.c b/drivers/dax/kmem.c
index 04f85f16720c8..97723ee15bc68 100644
--- a/drivers/dax/kmem.c
+++ b/drivers/dax/kmem.c
@@ -88,7 +88,7 @@ static int dev_dax_kmem_probe(struct dev_dax *dev_dax)
 	if (!data->res_name)
 		goto err_res_name;
 
-	rc = memory_group_register_static(numa_node, total_len);
+	rc = memory_group_register_static(numa_node, PFN_UP(total_len));
 	if (rc < 0)
 		goto err_reg_mgid;
 	data->mgid = rc;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux