* Re: [PATCH v3 1/2] mm: shmem: refactor thpsize_shmem_enabled_store() with sysfs_match_string() [not found] ` <20260518123238.56344-2-ranxiaokai627@163.com> @ 2026-05-19 2:22 ` Baolin Wang 2026-05-21 13:17 ` Lance Yang ` (2 subsequent siblings) 3 siblings, 0 replies; 12+ messages in thread From: Baolin Wang @ 2026-05-19 2:22 UTC (permalink / raw) To: ranxiaokai627, hughd, akpm Cc: leitao, ljs, ziy, liam, npache, ryan.roberts, dev.jain, baohua, lance.yang, david, linux-mm, linux-kernel, ran.xiaokai On 5/18/26 8:32 PM, ranxiaokai627@163.com wrote: > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > Inspired by commit 82d9ff648c6c ("mm: huge_memory: refactor > anon_enabled_store() with set_anon_enabled_mode()"), refactor > thpsize_shmem_enabled_store() using sysfs_match_string(). > This eliminates the duplicated spin_lock/unlock(), set/clear_bit(), > calls across all branches, reducing code duplication. > > Behavioral change: > Call start_stop_khugepaged() only when the mode actually changes. > If unchanged, call set_recommended_min_free_kbytes() to preserve > legacy watermark behavior. This avoids unnecessary khugepaged restarts. > > Tested with selftests ./run_kselftest.sh -t mm:ksft_thp.sh, > all test cases passed. > > Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn> > --- Please keep my tags unless there are major logic changes. Thanks. Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com> Tested-by: Baolin Wang <baolin.wang@linux.alibaba.com> > mm/shmem.c | 107 ++++++++++++++++++++++++++++++----------------------- > 1 file changed, 60 insertions(+), 47 deletions(-) > > diff --git a/mm/shmem.c b/mm/shmem.c > index 3b5dc21b323c..46d2cfc30823 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -5526,6 +5526,29 @@ static ssize_t shmem_enabled_store(struct kobject *kobj, > struct kobj_attribute shmem_enabled_attr = __ATTR_RW(shmem_enabled); > static DEFINE_SPINLOCK(huge_shmem_orders_lock); > > +enum huge_shmem_enabled_mode { > + HUGE_SHMEM_ENABLED_ALWAYS = 0, > + HUGE_SHMEM_ENABLED_INHERIT, > + HUGE_SHMEM_ENABLED_WITHIN_SIZE, > + HUGE_SHMEM_ENABLED_ADVISE, > + HUGE_SHMEM_ENABLED_NEVER, > +}; > + > +static const char * const huge_shmem_enabled_mode_strings[] = { > + [HUGE_SHMEM_ENABLED_ALWAYS] = "always", > + [HUGE_SHMEM_ENABLED_INHERIT] = "inherit", > + [HUGE_SHMEM_ENABLED_WITHIN_SIZE] = "within_size", > + [HUGE_SHMEM_ENABLED_ADVISE] = "advise", > + [HUGE_SHMEM_ENABLED_NEVER] = "never", > +}; > + > +static unsigned long * const huge_shmem_orders_by_mode[] = { Nit: the name feels a bit verbose, how about huge_shmem_enabled_orders? (Perhaps David or Lorenzo has a better suggestion:)) ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] mm: shmem: refactor thpsize_shmem_enabled_store() with sysfs_match_string() [not found] ` <20260518123238.56344-2-ranxiaokai627@163.com> 2026-05-19 2:22 ` [PATCH v3 1/2] mm: shmem: refactor thpsize_shmem_enabled_store() with sysfs_match_string() Baolin Wang @ 2026-05-21 13:17 ` Lance Yang 2026-05-22 8:07 ` Barry Song 2026-05-22 10:39 ` Lorenzo Stoakes 3 siblings, 0 replies; 12+ messages in thread From: Lance Yang @ 2026-05-21 13:17 UTC (permalink / raw) To: ranxiaokai627 Cc: leitao, ljs, ziy, liam, npache, ryan.roberts, dev.jain, hughd, baohua, david, linux-mm, linux-kernel, ran.xiaokai, baolin.wang, akpm On 2026/5/18 20:32, ranxiaokai627@163.com wrote: > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > Inspired by commit 82d9ff648c6c ("mm: huge_memory: refactor > anon_enabled_store() with set_anon_enabled_mode()"), refactor > thpsize_shmem_enabled_store() using sysfs_match_string(). > This eliminates the duplicated spin_lock/unlock(), set/clear_bit(), > calls across all branches, reducing code duplication. > > Behavioral change: > Call start_stop_khugepaged() only when the mode actually changes. > If unchanged, call set_recommended_min_free_kbytes() to preserve > legacy watermark behavior. This avoids unnecessary khugepaged restarts. > > Tested with selftests ./run_kselftest.sh -t mm:ksft_thp.sh, > all test cases passed. > > Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn> > --- Thanks. Tested-by: Lance Yang <lance.yang@linux.dev> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] mm: shmem: refactor thpsize_shmem_enabled_store() with sysfs_match_string() [not found] ` <20260518123238.56344-2-ranxiaokai627@163.com> 2026-05-19 2:22 ` [PATCH v3 1/2] mm: shmem: refactor thpsize_shmem_enabled_store() with sysfs_match_string() Baolin Wang 2026-05-21 13:17 ` Lance Yang @ 2026-05-22 8:07 ` Barry Song 2026-05-22 10:39 ` Lorenzo Stoakes 3 siblings, 0 replies; 12+ messages in thread From: Barry Song @ 2026-05-22 8:07 UTC (permalink / raw) To: ranxiaokai627 Cc: hughd, baolin.wang, akpm, leitao, ljs, ziy, liam, npache, ryan.roberts, dev.jain, lance.yang, david, linux-mm, linux-kernel, ran.xiaokai On Mon, May 18, 2026 at 8:33 PM <ranxiaokai627@163.com> wrote: > > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > Inspired by commit 82d9ff648c6c ("mm: huge_memory: refactor > anon_enabled_store() with set_anon_enabled_mode()"), refactor > thpsize_shmem_enabled_store() using sysfs_match_string(). > This eliminates the duplicated spin_lock/unlock(), set/clear_bit(), > calls across all branches, reducing code duplication. > > Behavioral change: > Call start_stop_khugepaged() only when the mode actually changes. > If unchanged, call set_recommended_min_free_kbytes() to preserve > legacy watermark behavior. This avoids unnecessary khugepaged restarts. > > Tested with selftests ./run_kselftest.sh -t mm:ksft_thp.sh, > all test cases passed. > > Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn> Reviewed-by: Barry Song <baohua@kernel.org> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] mm: shmem: refactor thpsize_shmem_enabled_store() with sysfs_match_string() [not found] ` <20260518123238.56344-2-ranxiaokai627@163.com> ` (2 preceding siblings ...) 2026-05-22 8:07 ` Barry Song @ 2026-05-22 10:39 ` Lorenzo Stoakes 2026-05-22 10:55 ` Lorenzo Stoakes 2026-05-25 7:52 ` ranxiaokai627 3 siblings, 2 replies; 12+ messages in thread From: Lorenzo Stoakes @ 2026-05-22 10:39 UTC (permalink / raw) To: ranxiaokai627 Cc: hughd, baolin.wang, akpm, leitao, ziy, liam, npache, ryan.roberts, dev.jain, baohua, lance.yang, david, linux-mm, linux-kernel, ran.xiaokai On Mon, May 18, 2026 at 12:32:37PM +0000, ranxiaokai627@163.com wrote: > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > Inspired by commit 82d9ff648c6c ("mm: huge_memory: refactor > anon_enabled_store() with set_anon_enabled_mode()"), refactor > thpsize_shmem_enabled_store() using sysfs_match_string(). > This eliminates the duplicated spin_lock/unlock(), set/clear_bit(), > calls across all branches, reducing code duplication. > > Behavioral change: > Call start_stop_khugepaged() only when the mode actually changes. > If unchanged, call set_recommended_min_free_kbytes() to preserve > legacy watermark behavior. This avoids unnecessary khugepaged restarts. > > Tested with selftests ./run_kselftest.sh -t mm:ksft_thp.sh, > all test cases passed. > > Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn> Your From: and Signed-off-by: differs. As per my mail to the 2/2 this violates kernel process rules. Please either update the signed-off-by to your @163.com address or resend from your zte.com.cn address. Logic generally looks good, but you need to fix your From/Signed-off-by and the rename suggested below would be good. Thanks, Lorenzo > --- > mm/shmem.c | 107 ++++++++++++++++++++++++++++++----------------------- > 1 file changed, 60 insertions(+), 47 deletions(-) > > diff --git a/mm/shmem.c b/mm/shmem.c > index 3b5dc21b323c..46d2cfc30823 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -5526,6 +5526,29 @@ static ssize_t shmem_enabled_store(struct kobject *kobj, > struct kobj_attribute shmem_enabled_attr = __ATTR_RW(shmem_enabled); > static DEFINE_SPINLOCK(huge_shmem_orders_lock); > > +enum huge_shmem_enabled_mode { > + HUGE_SHMEM_ENABLED_ALWAYS = 0, > + HUGE_SHMEM_ENABLED_INHERIT, > + HUGE_SHMEM_ENABLED_WITHIN_SIZE, > + HUGE_SHMEM_ENABLED_ADVISE, > + HUGE_SHMEM_ENABLED_NEVER, > +}; > + > +static const char * const huge_shmem_enabled_mode_strings[] = { > + [HUGE_SHMEM_ENABLED_ALWAYS] = "always", > + [HUGE_SHMEM_ENABLED_INHERIT] = "inherit", > + [HUGE_SHMEM_ENABLED_WITHIN_SIZE] = "within_size", > + [HUGE_SHMEM_ENABLED_ADVISE] = "advise", > + [HUGE_SHMEM_ENABLED_NEVER] = "never", > +}; > + > +static unsigned long * const huge_shmem_orders_by_mode[] = { > + [HUGE_SHMEM_ENABLED_ALWAYS] = &huge_shmem_orders_always, > + [HUGE_SHMEM_ENABLED_INHERIT] = &huge_shmem_orders_inherit, > + [HUGE_SHMEM_ENABLED_WITHIN_SIZE] = &huge_shmem_orders_within_size, > + [HUGE_SHMEM_ENABLED_ADVISE] = &huge_shmem_orders_madvise, > +}; As Baolin suggested, we can probably rename these for bervity. We know it's shmem, as it's in shmem.c :) so drop that. huge_mode, huge_mode_strings, huge_mode_orders seems good to me? > + > static ssize_t thpsize_shmem_enabled_show(struct kobject *kobj, > struct kobj_attribute *attr, char *buf) > { > @@ -5546,63 +5569,53 @@ static ssize_t thpsize_shmem_enabled_show(struct kobject *kobj, > return sysfs_emit(buf, "%s\n", output); > } > > +static bool set_shmem_enabled_mode(int order, enum huge_shmem_enabled_mode mode) > +{ > + bool changed = false; > + enum huge_shmem_enabled_mode idx; > + > + spin_lock(&huge_shmem_orders_lock); > + for (idx = 0; idx < ARRAY_SIZE(huge_shmem_orders_by_mode); idx++) { > + if (idx == mode) > + changed |= !__test_and_set_bit(order, huge_shmem_orders_by_mode[idx]); > + else > + changed |= __test_and_clear_bit(order, huge_shmem_orders_by_mode[idx]); > + } > + spin_unlock(&huge_shmem_orders_lock); > + > + return changed; > +} > + Thanks for separating this out! :) > static ssize_t thpsize_shmem_enabled_store(struct kobject *kobj, > struct kobj_attribute *attr, > const char *buf, size_t count) > { > int order = to_thpsize(kobj)->order; > - ssize_t ret = count; > - > - if (sysfs_streq(buf, "always")) { > - spin_lock(&huge_shmem_orders_lock); > - clear_bit(order, &huge_shmem_orders_inherit); > - clear_bit(order, &huge_shmem_orders_madvise); > - clear_bit(order, &huge_shmem_orders_within_size); > - set_bit(order, &huge_shmem_orders_always); > - spin_unlock(&huge_shmem_orders_lock); > - } else if (sysfs_streq(buf, "inherit")) { > - /* Do not override huge allocation policy with non-PMD sized mTHP */ > - if (shmem_huge == SHMEM_HUGE_FORCE && !is_pmd_order(order)) > - return -EINVAL; > + int mode; > > - spin_lock(&huge_shmem_orders_lock); > - clear_bit(order, &huge_shmem_orders_always); > - clear_bit(order, &huge_shmem_orders_madvise); > - clear_bit(order, &huge_shmem_orders_within_size); > - set_bit(order, &huge_shmem_orders_inherit); > - spin_unlock(&huge_shmem_orders_lock); > - } else if (sysfs_streq(buf, "within_size")) { > - spin_lock(&huge_shmem_orders_lock); > - clear_bit(order, &huge_shmem_orders_always); > - clear_bit(order, &huge_shmem_orders_inherit); > - clear_bit(order, &huge_shmem_orders_madvise); > - set_bit(order, &huge_shmem_orders_within_size); > - spin_unlock(&huge_shmem_orders_lock); > - } else if (sysfs_streq(buf, "advise")) { > - spin_lock(&huge_shmem_orders_lock); > - clear_bit(order, &huge_shmem_orders_always); > - clear_bit(order, &huge_shmem_orders_inherit); > - clear_bit(order, &huge_shmem_orders_within_size); > - set_bit(order, &huge_shmem_orders_madvise); > - spin_unlock(&huge_shmem_orders_lock); > - } else if (sysfs_streq(buf, "never")) { > - spin_lock(&huge_shmem_orders_lock); > - clear_bit(order, &huge_shmem_orders_always); > - clear_bit(order, &huge_shmem_orders_inherit); > - clear_bit(order, &huge_shmem_orders_within_size); > - clear_bit(order, &huge_shmem_orders_madvise); > - spin_unlock(&huge_shmem_orders_lock); > - } else { > - ret = -EINVAL; > - } > + mode = sysfs_match_string(huge_shmem_enabled_mode_strings, buf); > + if (mode < 0) > + return mode; > > - if (ret > 0) { > - int err = start_stop_khugepaged(); > + /* Do not override huge allocation policy with non-PMD sized mTHP */ > + if (mode == HUGE_SHMEM_ENABLED_INHERIT && > + shmem_huge == SHMEM_HUGE_FORCE && !is_pmd_order(order)) > + return -EINVAL; > > + if (set_shmem_enabled_mode(order, mode)) { > + int err = start_stop_khugepaged(); > if (err) > - ret = err; > + return err; > + } else { > + /* > + * Recalculate watermarks even when the mode hasn't changed > + * to preserve the legacy behavior, as this is always called > + * inside start_stop_khugepaged(). > + */ > + set_recommended_min_free_kbytes(); > } > - return ret; > + > + return count; > } > > struct kobj_attribute thpsize_shmem_enabled_attr = > -- > 2.25.1 > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] mm: shmem: refactor thpsize_shmem_enabled_store() with sysfs_match_string() 2026-05-22 10:39 ` Lorenzo Stoakes @ 2026-05-22 10:55 ` Lorenzo Stoakes 2026-05-25 7:52 ` ranxiaokai627 1 sibling, 0 replies; 12+ messages in thread From: Lorenzo Stoakes @ 2026-05-22 10:55 UTC (permalink / raw) To: ranxiaokai627 Cc: hughd, baolin.wang, akpm, leitao, ziy, liam, npache, ryan.roberts, dev.jain, baohua, lance.yang, david, linux-mm, linux-kernel, ran.xiaokai On Fri, May 22, 2026 at 11:39:45AM +0100, Lorenzo Stoakes wrote: > On Mon, May 18, 2026 at 12:32:37PM +0000, ranxiaokai627@163.com wrote: > > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > > > Inspired by commit 82d9ff648c6c ("mm: huge_memory: refactor > > anon_enabled_store() with set_anon_enabled_mode()"), refactor > > thpsize_shmem_enabled_store() using sysfs_match_string(). > > This eliminates the duplicated spin_lock/unlock(), set/clear_bit(), > > calls across all branches, reducing code duplication. > > > > Behavioral change: > > Call start_stop_khugepaged() only when the mode actually changes. > > If unchanged, call set_recommended_min_free_kbytes() to preserve > > legacy watermark behavior. This avoids unnecessary khugepaged restarts. > > > > Tested with selftests ./run_kselftest.sh -t mm:ksft_thp.sh, > > all test cases passed. > > > > Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > Your From: and Signed-off-by: differs. As per my mail to the 2/2 this violates > kernel process rules. Please either update the signed-off-by to your @163.com > address or resend from your zte.com.cn address. Apologies, again I (somehow) missed the in-body From: :P You're good, ignore this. But do please look at the suggest below re: naming! Thanks :) > > Logic generally looks good, but you need to fix your From/Signed-off-by and the > rename suggested below would be good. > > Thanks, Lorenzo > > > --- > > mm/shmem.c | 107 ++++++++++++++++++++++++++++++----------------------- > > 1 file changed, 60 insertions(+), 47 deletions(-) > > > > diff --git a/mm/shmem.c b/mm/shmem.c > > index 3b5dc21b323c..46d2cfc30823 100644 > > --- a/mm/shmem.c > > +++ b/mm/shmem.c > > @@ -5526,6 +5526,29 @@ static ssize_t shmem_enabled_store(struct kobject *kobj, > > struct kobj_attribute shmem_enabled_attr = __ATTR_RW(shmem_enabled); > > static DEFINE_SPINLOCK(huge_shmem_orders_lock); > > > > +enum huge_shmem_enabled_mode { > > + HUGE_SHMEM_ENABLED_ALWAYS = 0, > > + HUGE_SHMEM_ENABLED_INHERIT, > > + HUGE_SHMEM_ENABLED_WITHIN_SIZE, > > + HUGE_SHMEM_ENABLED_ADVISE, > > + HUGE_SHMEM_ENABLED_NEVER, > > +}; > > + > > +static const char * const huge_shmem_enabled_mode_strings[] = { > > + [HUGE_SHMEM_ENABLED_ALWAYS] = "always", > > + [HUGE_SHMEM_ENABLED_INHERIT] = "inherit", > > + [HUGE_SHMEM_ENABLED_WITHIN_SIZE] = "within_size", > > + [HUGE_SHMEM_ENABLED_ADVISE] = "advise", > > + [HUGE_SHMEM_ENABLED_NEVER] = "never", > > +}; > > + > > +static unsigned long * const huge_shmem_orders_by_mode[] = { > > + [HUGE_SHMEM_ENABLED_ALWAYS] = &huge_shmem_orders_always, > > + [HUGE_SHMEM_ENABLED_INHERIT] = &huge_shmem_orders_inherit, > > + [HUGE_SHMEM_ENABLED_WITHIN_SIZE] = &huge_shmem_orders_within_size, > > + [HUGE_SHMEM_ENABLED_ADVISE] = &huge_shmem_orders_madvise, > > +}; > > As Baolin suggested, we can probably rename these for bervity. > > We know it's shmem, as it's in shmem.c :) so drop that. > > huge_mode, huge_mode_strings, huge_mode_orders seems good to me? > > > + > > static ssize_t thpsize_shmem_enabled_show(struct kobject *kobj, > > struct kobj_attribute *attr, char *buf) > > { > > @@ -5546,63 +5569,53 @@ static ssize_t thpsize_shmem_enabled_show(struct kobject *kobj, > > return sysfs_emit(buf, "%s\n", output); > > } > > > > +static bool set_shmem_enabled_mode(int order, enum huge_shmem_enabled_mode mode) > > +{ > > + bool changed = false; > > + enum huge_shmem_enabled_mode idx; > > + > > + spin_lock(&huge_shmem_orders_lock); > > + for (idx = 0; idx < ARRAY_SIZE(huge_shmem_orders_by_mode); idx++) { > > + if (idx == mode) > > + changed |= !__test_and_set_bit(order, huge_shmem_orders_by_mode[idx]); > > + else > > + changed |= __test_and_clear_bit(order, huge_shmem_orders_by_mode[idx]); > > + } > > + spin_unlock(&huge_shmem_orders_lock); > > + > > + return changed; > > +} > > + > > Thanks for separating this out! :) > > > static ssize_t thpsize_shmem_enabled_store(struct kobject *kobj, > > struct kobj_attribute *attr, > > const char *buf, size_t count) > > { > > int order = to_thpsize(kobj)->order; > > - ssize_t ret = count; > > - > > - if (sysfs_streq(buf, "always")) { > > - spin_lock(&huge_shmem_orders_lock); > > - clear_bit(order, &huge_shmem_orders_inherit); > > - clear_bit(order, &huge_shmem_orders_madvise); > > - clear_bit(order, &huge_shmem_orders_within_size); > > - set_bit(order, &huge_shmem_orders_always); > > - spin_unlock(&huge_shmem_orders_lock); > > - } else if (sysfs_streq(buf, "inherit")) { > > - /* Do not override huge allocation policy with non-PMD sized mTHP */ > > - if (shmem_huge == SHMEM_HUGE_FORCE && !is_pmd_order(order)) > > - return -EINVAL; > > + int mode; > > > > - spin_lock(&huge_shmem_orders_lock); > > - clear_bit(order, &huge_shmem_orders_always); > > - clear_bit(order, &huge_shmem_orders_madvise); > > - clear_bit(order, &huge_shmem_orders_within_size); > > - set_bit(order, &huge_shmem_orders_inherit); > > - spin_unlock(&huge_shmem_orders_lock); > > - } else if (sysfs_streq(buf, "within_size")) { > > - spin_lock(&huge_shmem_orders_lock); > > - clear_bit(order, &huge_shmem_orders_always); > > - clear_bit(order, &huge_shmem_orders_inherit); > > - clear_bit(order, &huge_shmem_orders_madvise); > > - set_bit(order, &huge_shmem_orders_within_size); > > - spin_unlock(&huge_shmem_orders_lock); > > - } else if (sysfs_streq(buf, "advise")) { > > - spin_lock(&huge_shmem_orders_lock); > > - clear_bit(order, &huge_shmem_orders_always); > > - clear_bit(order, &huge_shmem_orders_inherit); > > - clear_bit(order, &huge_shmem_orders_within_size); > > - set_bit(order, &huge_shmem_orders_madvise); > > - spin_unlock(&huge_shmem_orders_lock); > > - } else if (sysfs_streq(buf, "never")) { > > - spin_lock(&huge_shmem_orders_lock); > > - clear_bit(order, &huge_shmem_orders_always); > > - clear_bit(order, &huge_shmem_orders_inherit); > > - clear_bit(order, &huge_shmem_orders_within_size); > > - clear_bit(order, &huge_shmem_orders_madvise); > > - spin_unlock(&huge_shmem_orders_lock); > > - } else { > > - ret = -EINVAL; > > - } > > + mode = sysfs_match_string(huge_shmem_enabled_mode_strings, buf); > > + if (mode < 0) > > + return mode; > > > > - if (ret > 0) { > > - int err = start_stop_khugepaged(); > > + /* Do not override huge allocation policy with non-PMD sized mTHP */ > > + if (mode == HUGE_SHMEM_ENABLED_INHERIT && > > + shmem_huge == SHMEM_HUGE_FORCE && !is_pmd_order(order)) > > + return -EINVAL; > > > > + if (set_shmem_enabled_mode(order, mode)) { > > + int err = start_stop_khugepaged(); > > if (err) > > - ret = err; > > + return err; > > + } else { > > + /* > > + * Recalculate watermarks even when the mode hasn't changed > > + * to preserve the legacy behavior, as this is always called > > + * inside start_stop_khugepaged(). > > + */ > > + set_recommended_min_free_kbytes(); > > } > > - return ret; > > + > > + return count; > > } > > > > struct kobj_attribute thpsize_shmem_enabled_attr = > > -- > > 2.25.1 > > > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/2] mm: shmem: refactor thpsize_shmem_enabled_store() with sysfs_match_string() 2026-05-22 10:39 ` Lorenzo Stoakes 2026-05-22 10:55 ` Lorenzo Stoakes @ 2026-05-25 7:52 ` ranxiaokai627 1 sibling, 0 replies; 12+ messages in thread From: ranxiaokai627 @ 2026-05-25 7:52 UTC (permalink / raw) To: ljs Cc: akpm, baohua, baolin.wang, david, dev.jain, hughd, lance.yang, leitao, liam, linux-kernel, linux-mm, npache, ran.xiaokai, ranxiaokai627, ryan.roberts, ziy >On Mon, May 18, 2026 at 12:32:37PM +0000, ranxiaokai627@163.com wrote: >> From: Ran Xiaokai <ran.xiaokai@zte.com.cn> >> --- >> mm/shmem.c | 107 ++++++++++++++++++++++++++++++----------------------- >> 1 file changed, 60 insertions(+), 47 deletions(-) >> >> diff --git a/mm/shmem.c b/mm/shmem.c >> index 3b5dc21b323c..46d2cfc30823 100644 >> --- a/mm/shmem.c >> +++ b/mm/shmem.c >> @@ -5526,6 +5526,29 @@ static ssize_t shmem_enabled_store(struct kobject *kobj, >> struct kobj_attribute shmem_enabled_attr = __ATTR_RW(shmem_enabled); >> static DEFINE_SPINLOCK(huge_shmem_orders_lock); >> >> +enum huge_shmem_enabled_mode { >> + HUGE_SHMEM_ENABLED_ALWAYS = 0, >> + HUGE_SHMEM_ENABLED_INHERIT, >> + HUGE_SHMEM_ENABLED_WITHIN_SIZE, >> + HUGE_SHMEM_ENABLED_ADVISE, >> + HUGE_SHMEM_ENABLED_NEVER, >> +}; >> + >> +static const char * const huge_shmem_enabled_mode_strings[] = { >> + [HUGE_SHMEM_ENABLED_ALWAYS] = "always", >> + [HUGE_SHMEM_ENABLED_INHERIT] = "inherit", >> + [HUGE_SHMEM_ENABLED_WITHIN_SIZE] = "within_size", >> + [HUGE_SHMEM_ENABLED_ADVISE] = "advise", >> + [HUGE_SHMEM_ENABLED_NEVER] = "never", >> +}; >> + >> +static unsigned long * const huge_shmem_orders_by_mode[] = { >> + [HUGE_SHMEM_ENABLED_ALWAYS] = &huge_shmem_orders_always, >> + [HUGE_SHMEM_ENABLED_INHERIT] = &huge_shmem_orders_inherit, >> + [HUGE_SHMEM_ENABLED_WITHIN_SIZE] = &huge_shmem_orders_within_size, >> + [HUGE_SHMEM_ENABLED_ADVISE] = &huge_shmem_orders_madvise, >> +}; > >As Baolin suggested, we can probably rename these for bervity. > >We know it's shmem, as it's in shmem.c :) so drop that. > >huge_mode, huge_mode_strings, huge_mode_orders seems good to me? The old naming is indeed a bit verbose. I will send a new version based on Baolin and your suggestion. >> + >> static ssize_t thpsize_shmem_enabled_show(struct kobject *kobj, >> struct kobj_attribute *attr, char *buf) >> { >> @@ -5546,63 +5569,53 @@ static ssize_t thpsize_shmem_enabled_show(struct kobject *kobj, >> return sysfs_emit(buf, "%s\n", output); >> } >> >> +static bool set_shmem_enabled_mode(int order, enum huge_shmem_enabled_mode mode) >> +{ >> + bool changed = false; >> + enum huge_shmem_enabled_mode idx; >> + >> + spin_lock(&huge_shmem_orders_lock); >> + for (idx = 0; idx < ARRAY_SIZE(huge_shmem_orders_by_mode); idx++) { >> + if (idx == mode) >> + changed |= !__test_and_set_bit(order, huge_shmem_orders_by_mode[idx]); >> + else >> + changed |= __test_and_clear_bit(order, huge_shmem_orders_by_mode[idx]); >> + } >> + spin_unlock(&huge_shmem_orders_lock); >> + >> + return changed; >> +} >> + > >Thanks for separating this out! :) ^ permalink raw reply [flat|nested] 12+ messages in thread
[parent not found: <20260518123238.56344-3-ranxiaokai627@163.com>]
* Re: [PATCH v3 2/2] mm: shmem: refactor thpsize_shmem_enabled_show() with helper arrays [not found] ` <20260518123238.56344-3-ranxiaokai627@163.com> @ 2026-05-21 13:18 ` Lance Yang 2026-05-22 10:34 ` Lorenzo Stoakes 2026-05-22 11:36 ` Barry Song 2 siblings, 0 replies; 12+ messages in thread From: Lance Yang @ 2026-05-21 13:18 UTC (permalink / raw) To: ranxiaokai627 Cc: leitao, ljs, ziy, liam, npache, ryan.roberts, dev.jain, akpm, baohua, david, linux-mm, linux-kernel, ran.xiaokai, hughd, baolin.wang On 2026/5/18 20:32, ranxiaokai627@163.com wrote: > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > Replace the hardcoded if/else chain of test_bit() calls and string > literals in thpsize_shmem_enabled_show() with a loop over > huge_shmem_orders_by_mode[] and huge_shmem_enabled_mode_strings[] arrays. > > This makes thpsize_shmem_enabled_show() consistent with > thpsize_shmem_enabled_store() and eliminates duplicated mode name strings. > > Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn> > Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com> > Tested-by: Baolin Wang <baolin.wang@linux.alibaba.com> > Reviewed-by: Breno Leitao <leitao@debian.org> > Reviewed-by: Lorenzo Stoakes <ljs@kernel.org> > --- Thanks. Tested-by: Lance Yang <lance.yang@linux.dev> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 2/2] mm: shmem: refactor thpsize_shmem_enabled_show() with helper arrays [not found] ` <20260518123238.56344-3-ranxiaokai627@163.com> 2026-05-21 13:18 ` [PATCH v3 2/2] mm: shmem: refactor thpsize_shmem_enabled_show() with helper arrays Lance Yang @ 2026-05-22 10:34 ` Lorenzo Stoakes 2026-05-22 10:44 ` Barry Song 2026-05-22 10:54 ` Lorenzo Stoakes 2026-05-22 11:36 ` Barry Song 2 siblings, 2 replies; 12+ messages in thread From: Lorenzo Stoakes @ 2026-05-22 10:34 UTC (permalink / raw) To: ranxiaokai627 Cc: hughd, baolin.wang, akpm, leitao, ziy, liam, npache, ryan.roberts, dev.jain, baohua, lance.yang, david, linux-mm, linux-kernel, ran.xiaokai On Mon, May 18, 2026 at 12:32:38PM +0000, ranxiaokai627@163.com wrote: > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > Replace the hardcoded if/else chain of test_bit() calls and string > literals in thpsize_shmem_enabled_show() with a loop over > huge_shmem_orders_by_mode[] and huge_shmem_enabled_mode_strings[] arrays. > > This makes thpsize_shmem_enabled_show() consistent with > thpsize_shmem_enabled_store() and eliminates duplicated mode name strings. > > Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn> From: ranxiaokai627@163.com This does not match the From: field of the email. This is violating kernel process. See https://docs.kernel.org/process/submitting-patches.html Please either update this to your 163 email account or resend from your zte.com.cn address, otherwise we can't take this. Cheers, Lorenzo > Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com> > Tested-by: Baolin Wang <baolin.wang@linux.alibaba.com> > Reviewed-by: Breno Leitao <leitao@debian.org> > Reviewed-by: Lorenzo Stoakes <ljs@kernel.org> > --- > mm/shmem.c | 36 +++++++++++++++++++++++------------- > 1 file changed, 23 insertions(+), 13 deletions(-) > > diff --git a/mm/shmem.c b/mm/shmem.c > index 46d2cfc30823..197c9cc314c5 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -5553,20 +5553,30 @@ static ssize_t thpsize_shmem_enabled_show(struct kobject *kobj, > struct kobj_attribute *attr, char *buf) > { > int order = to_thpsize(kobj)->order; > - const char *output; > - > - if (test_bit(order, &huge_shmem_orders_always)) > - output = "[always] inherit within_size advise never"; > - else if (test_bit(order, &huge_shmem_orders_inherit)) > - output = "always [inherit] within_size advise never"; > - else if (test_bit(order, &huge_shmem_orders_within_size)) > - output = "always inherit [within_size] advise never"; > - else if (test_bit(order, &huge_shmem_orders_madvise)) > - output = "always inherit within_size [advise] never"; > - else > - output = "always inherit within_size advise [never]"; > + int active = HUGE_SHMEM_ENABLED_NEVER; > + int len = 0; > + int i; > + > + for (i = 0; i < ARRAY_SIZE(huge_shmem_orders_by_mode); i++) { > + if (test_bit(order, huge_shmem_orders_by_mode[i])) { > + active = i; > + break; > + } > + } > + > + for (i = 0; i < ARRAY_SIZE(huge_shmem_enabled_mode_strings); i++) { > + if (i == active) > + len += sysfs_emit_at(buf, len, "[%s] ", > + huge_shmem_enabled_mode_strings[i]); > + else > + len += sysfs_emit_at(buf, len, "%s ", > + huge_shmem_enabled_mode_strings[i]); > + } > + > + /* Replace trailing space with newline */ > + buf[len - 1] = '\n'; > > - return sysfs_emit(buf, "%s\n", output); > + return len; > } > > static bool set_shmem_enabled_mode(int order, enum huge_shmem_enabled_mode mode) > -- > 2.25.1 > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 2/2] mm: shmem: refactor thpsize_shmem_enabled_show() with helper arrays 2026-05-22 10:34 ` Lorenzo Stoakes @ 2026-05-22 10:44 ` Barry Song 2026-05-22 10:56 ` Lorenzo Stoakes 2026-05-22 10:54 ` Lorenzo Stoakes 1 sibling, 1 reply; 12+ messages in thread From: Barry Song @ 2026-05-22 10:44 UTC (permalink / raw) To: Lorenzo Stoakes Cc: ranxiaokai627, hughd, baolin.wang, akpm, leitao, ziy, liam, npache, ryan.roberts, dev.jain, lance.yang, david, linux-mm, linux-kernel, ran.xiaokai On Fri, May 22, 2026 at 6:35 PM Lorenzo Stoakes <ljs@kernel.org> wrote: > > On Mon, May 18, 2026 at 12:32:38PM +0000, ranxiaokai627@163.com wrote: > > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > > > Replace the hardcoded if/else chain of test_bit() calls and string > > literals in thpsize_shmem_enabled_show() with a loop over > > huge_shmem_orders_by_mode[] and huge_shmem_enabled_mode_strings[] arrays. > > > > This makes thpsize_shmem_enabled_show() consistent with > > thpsize_shmem_enabled_store() and eliminates duplicated mode name strings. > > > > Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > From: ranxiaokai627@163.com > > This does not match the From: field of the email. > > This is violating kernel process. See > https://docs.kernel.org/process/submitting-patches.html I’m not aware of this rule, since I usually see From matching Signed-off-by. Do we really have such a rule? Sorry, I might be a bit ignorant about this 🙂 > > Please either update this to your 163 email account or resend from your > zte.com.cn address, otherwise we can't take this. > > Cheers, Lorenzo > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 2/2] mm: shmem: refactor thpsize_shmem_enabled_show() with helper arrays 2026-05-22 10:44 ` Barry Song @ 2026-05-22 10:56 ` Lorenzo Stoakes 0 siblings, 0 replies; 12+ messages in thread From: Lorenzo Stoakes @ 2026-05-22 10:56 UTC (permalink / raw) To: Barry Song Cc: ranxiaokai627, hughd, baolin.wang, akpm, leitao, ziy, liam, npache, ryan.roberts, dev.jain, lance.yang, david, linux-mm, linux-kernel, ran.xiaokai On Fri, May 22, 2026 at 06:44:18PM +0800, Barry Song wrote: > On Fri, May 22, 2026 at 6:35 PM Lorenzo Stoakes <ljs@kernel.org> wrote: > > > > On Mon, May 18, 2026 at 12:32:38PM +0000, ranxiaokai627@163.com wrote: > > > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > > > > > Replace the hardcoded if/else chain of test_bit() calls and string > > > literals in thpsize_shmem_enabled_show() with a loop over > > > huge_shmem_orders_by_mode[] and huge_shmem_enabled_mode_strings[] arrays. > > > > > > This makes thpsize_shmem_enabled_show() consistent with > > > thpsize_shmem_enabled_store() and eliminates duplicated mode name strings. > > > > > > Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > > > From: ranxiaokai627@163.com > > > > This does not match the From: field of the email. > > > > This is violating kernel process. See > > https://docs.kernel.org/process/submitting-patches.html > > I’m not aware of this rule, since I usually see From matching > Signed-off-by. Do we really have such a rule? Sorry, I might be a > bit ignorant about this 🙂 We do yes. But I was wrong here, as the From: field was provided inline (doing that and including the From: field in the To/Cc I think suffices). > > > > > Please either update this to your 163 email account or resend from your > > zte.com.cn address, otherwise we can't take this. > > > > Cheers, Lorenzo > > Cheers, Lorenzo ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 2/2] mm: shmem: refactor thpsize_shmem_enabled_show() with helper arrays 2026-05-22 10:34 ` Lorenzo Stoakes 2026-05-22 10:44 ` Barry Song @ 2026-05-22 10:54 ` Lorenzo Stoakes 1 sibling, 0 replies; 12+ messages in thread From: Lorenzo Stoakes @ 2026-05-22 10:54 UTC (permalink / raw) To: ranxiaokai627 Cc: hughd, baolin.wang, akpm, leitao, ziy, liam, npache, ryan.roberts, dev.jain, baohua, lance.yang, david, linux-mm, linux-kernel, ran.xiaokai On Fri, May 22, 2026 at 11:35:01AM +0100, Lorenzo Stoakes wrote: > On Mon, May 18, 2026 at 12:32:38PM +0000, ranxiaokai627@163.com wrote: > > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > > > Replace the hardcoded if/else chain of test_bit() calls and string > > literals in thpsize_shmem_enabled_show() with a loop over > > huge_shmem_orders_by_mode[] and huge_shmem_enabled_mode_strings[] arrays. > > > > This makes thpsize_shmem_enabled_show() consistent with > > thpsize_shmem_enabled_store() and eliminates duplicated mode name strings. > > > > Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > From: ranxiaokai627@163.com > > This does not match the From: field of the email. > > This is violating kernel process. See > https://docs.kernel.org/process/submitting-patches.html > > Please either update this to your 163 email account or resend from your > zte.com.cn address, otherwise we can't take this. Apologies - I'm apparently blind :) You provided this in-body, there's no issue, ignore this! Thanks, Lorenzo > > Cheers, Lorenzo > > > Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com> > > Tested-by: Baolin Wang <baolin.wang@linux.alibaba.com> > > Reviewed-by: Breno Leitao <leitao@debian.org> > > Reviewed-by: Lorenzo Stoakes <ljs@kernel.org> > > --- > > mm/shmem.c | 36 +++++++++++++++++++++++------------- > > 1 file changed, 23 insertions(+), 13 deletions(-) > > > > diff --git a/mm/shmem.c b/mm/shmem.c > > index 46d2cfc30823..197c9cc314c5 100644 > > --- a/mm/shmem.c > > +++ b/mm/shmem.c > > @@ -5553,20 +5553,30 @@ static ssize_t thpsize_shmem_enabled_show(struct kobject *kobj, > > struct kobj_attribute *attr, char *buf) > > { > > int order = to_thpsize(kobj)->order; > > - const char *output; > > - > > - if (test_bit(order, &huge_shmem_orders_always)) > > - output = "[always] inherit within_size advise never"; > > - else if (test_bit(order, &huge_shmem_orders_inherit)) > > - output = "always [inherit] within_size advise never"; > > - else if (test_bit(order, &huge_shmem_orders_within_size)) > > - output = "always inherit [within_size] advise never"; > > - else if (test_bit(order, &huge_shmem_orders_madvise)) > > - output = "always inherit within_size [advise] never"; > > - else > > - output = "always inherit within_size advise [never]"; > > + int active = HUGE_SHMEM_ENABLED_NEVER; > > + int len = 0; > > + int i; > > + > > + for (i = 0; i < ARRAY_SIZE(huge_shmem_orders_by_mode); i++) { > > + if (test_bit(order, huge_shmem_orders_by_mode[i])) { > > + active = i; > > + break; > > + } > > + } > > + > > + for (i = 0; i < ARRAY_SIZE(huge_shmem_enabled_mode_strings); i++) { > > + if (i == active) > > + len += sysfs_emit_at(buf, len, "[%s] ", > > + huge_shmem_enabled_mode_strings[i]); > > + else > > + len += sysfs_emit_at(buf, len, "%s ", > > + huge_shmem_enabled_mode_strings[i]); > > + } > > + > > + /* Replace trailing space with newline */ > > + buf[len - 1] = '\n'; > > > > - return sysfs_emit(buf, "%s\n", output); > > + return len; > > } > > > > static bool set_shmem_enabled_mode(int order, enum huge_shmem_enabled_mode mode) > > -- > > 2.25.1 > > > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 2/2] mm: shmem: refactor thpsize_shmem_enabled_show() with helper arrays [not found] ` <20260518123238.56344-3-ranxiaokai627@163.com> 2026-05-21 13:18 ` [PATCH v3 2/2] mm: shmem: refactor thpsize_shmem_enabled_show() with helper arrays Lance Yang 2026-05-22 10:34 ` Lorenzo Stoakes @ 2026-05-22 11:36 ` Barry Song 2 siblings, 0 replies; 12+ messages in thread From: Barry Song @ 2026-05-22 11:36 UTC (permalink / raw) To: ranxiaokai627 Cc: hughd, baolin.wang, akpm, leitao, ljs, ziy, liam, npache, ryan.roberts, dev.jain, lance.yang, david, linux-mm, linux-kernel, ran.xiaokai On Mon, May 18, 2026 at 8:33 PM <ranxiaokai627@163.com> wrote: > > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > Replace the hardcoded if/else chain of test_bit() calls and string > literals in thpsize_shmem_enabled_show() with a loop over > huge_shmem_orders_by_mode[] and huge_shmem_enabled_mode_strings[] arrays. > > This makes thpsize_shmem_enabled_show() consistent with > thpsize_shmem_enabled_store() and eliminates duplicated mode name strings. > > Signed-off-by: Ran Xiaokai <ran.xiaokai@zte.com.cn> > Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com> > Tested-by: Baolin Wang <baolin.wang@linux.alibaba.com> > Reviewed-by: Breno Leitao <leitao@debian.org> > Reviewed-by: Lorenzo Stoakes <ljs@kernel.org> Reviewed-by: Barry Song <baohua@kernel.org> ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2026-05-25 7:53 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260518123238.56344-1-ranxiaokai627@163.com>
[not found] ` <20260518123238.56344-2-ranxiaokai627@163.com>
2026-05-19 2:22 ` [PATCH v3 1/2] mm: shmem: refactor thpsize_shmem_enabled_store() with sysfs_match_string() Baolin Wang
2026-05-21 13:17 ` Lance Yang
2026-05-22 8:07 ` Barry Song
2026-05-22 10:39 ` Lorenzo Stoakes
2026-05-22 10:55 ` Lorenzo Stoakes
2026-05-25 7:52 ` ranxiaokai627
[not found] ` <20260518123238.56344-3-ranxiaokai627@163.com>
2026-05-21 13:18 ` [PATCH v3 2/2] mm: shmem: refactor thpsize_shmem_enabled_show() with helper arrays Lance Yang
2026-05-22 10:34 ` Lorenzo Stoakes
2026-05-22 10:44 ` Barry Song
2026-05-22 10:56 ` Lorenzo Stoakes
2026-05-22 10:54 ` Lorenzo Stoakes
2026-05-22 11:36 ` Barry Song
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox