Skip to content

Commit 8ad018d

Browse files
ptesariktehcaster
authored andcommitted
slab: use new API for remaining command line parameters
Use core_param() and __core_param_cb() instead of __setup() or __setup_param() to improve syntax checking and error messages. Replace get_option() with kstrtouint(), because: * the latter accepts a pointer to const char, * these parameters should not accept ranges, * error value can be passed directly to parser. There is one more change apart from the parsing of numeric parameters: slab_strict_numa parameter name must match exactly. Before this patch the kernel would silently accept any option that starts with the name as an undocumented alias. Signed-off-by: Petr Tesarik <ptesarik@suse.com> Link: https://patch.msgid.link/6ae7e0ddc72b7619203c07dd5103a598e12f713b.1761324765.git.ptesarik@suse.com Reviewed-by: Harry Yoo <harry.yoo@oracle.com> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
1 parent aed760d commit 8ad018d

1 file changed

Lines changed: 34 additions & 23 deletions

File tree

mm/slub.c

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8131,46 +8131,53 @@ void __kmem_obj_info(struct kmem_obj_info *kpp, void *object, struct slab *slab)
81318131
* Kmalloc subsystem
81328132
*******************************************************************/
81338133

8134-
static int __init setup_slub_min_order(char *str)
8134+
static int __init setup_slub_min_order(const char *str, const struct kernel_param *kp)
81358135
{
8136-
get_option(&str, (int *)&slub_min_order);
8136+
int ret;
8137+
8138+
ret = kstrtouint(str, 0, &slub_min_order);
8139+
if (ret)
8140+
return ret;
81378141

81388142
if (slub_min_order > slub_max_order)
81398143
slub_max_order = slub_min_order;
81408144

8141-
return 1;
8145+
return 0;
81428146
}
81438147

8144-
__setup("slab_min_order=", setup_slub_min_order);
8145-
__setup_param("slub_min_order=", slub_min_order, setup_slub_min_order, 0);
8146-
8148+
static const struct kernel_param_ops param_ops_slab_min_order __initconst = {
8149+
.set = setup_slub_min_order,
8150+
};
8151+
__core_param_cb(slab_min_order, &param_ops_slab_min_order, &slub_min_order, 0);
8152+
__core_param_cb(slub_min_order, &param_ops_slab_min_order, &slub_min_order, 0);
81478153

8148-
static int __init setup_slub_max_order(char *str)
8154+
static int __init setup_slub_max_order(const char *str, const struct kernel_param *kp)
81498155
{
8150-
get_option(&str, (int *)&slub_max_order);
8156+
int ret;
8157+
8158+
ret = kstrtouint(str, 0, &slub_max_order);
8159+
if (ret)
8160+
return ret;
8161+
81518162
slub_max_order = min_t(unsigned int, slub_max_order, MAX_PAGE_ORDER);
81528163

81538164
if (slub_min_order > slub_max_order)
81548165
slub_min_order = slub_max_order;
81558166

8156-
return 1;
8167+
return 0;
81578168
}
81588169

8159-
__setup("slab_max_order=", setup_slub_max_order);
8160-
__setup_param("slub_max_order=", slub_max_order, setup_slub_max_order, 0);
8161-
8162-
static int __init setup_slub_min_objects(char *str)
8163-
{
8164-
get_option(&str, (int *)&slub_min_objects);
8165-
8166-
return 1;
8167-
}
8170+
static const struct kernel_param_ops param_ops_slab_max_order __initconst = {
8171+
.set = setup_slub_max_order,
8172+
};
8173+
__core_param_cb(slab_max_order, &param_ops_slab_max_order, &slub_max_order, 0);
8174+
__core_param_cb(slub_max_order, &param_ops_slab_max_order, &slub_max_order, 0);
81688175

8169-
__setup("slab_min_objects=", setup_slub_min_objects);
8170-
__setup_param("slub_min_objects=", slub_min_objects, setup_slub_min_objects, 0);
8176+
core_param(slab_min_objects, slub_min_objects, uint, 0);
8177+
core_param(slub_min_objects, slub_min_objects, uint, 0);
81718178

81728179
#ifdef CONFIG_NUMA
8173-
static int __init setup_slab_strict_numa(char *str)
8180+
static int __init setup_slab_strict_numa(const char *str, const struct kernel_param *kp)
81748181
{
81758182
if (nr_node_ids > 1) {
81768183
static_branch_enable(&strict_numa);
@@ -8179,10 +8186,14 @@ static int __init setup_slab_strict_numa(char *str)
81798186
pr_warn("slab_strict_numa parameter set on non NUMA system.\n");
81808187
}
81818188

8182-
return 1;
8189+
return 0;
81838190
}
81848191

8185-
__setup("slab_strict_numa", setup_slab_strict_numa);
8192+
static const struct kernel_param_ops param_ops_slab_strict_numa __initconst = {
8193+
.flags = KERNEL_PARAM_OPS_FL_NOARG,
8194+
.set = setup_slab_strict_numa,
8195+
};
8196+
__core_param_cb(slab_strict_numa, &param_ops_slab_strict_numa, NULL, 0);
81868197
#endif
81878198

81888199

0 commit comments

Comments
 (0)