On Tue 25-01-22 17:43:34, Sebastian Andrzej Siewior wrote: > During the integration of PREEMPT_RT support, the code flow around > memcg_check_events() resulted in `twisted code'. Moving the code around > and avoiding then would then lead to an additional local-irq-save > section within memcg_check_events(). While looking better, it adds a > local-irq-save section to code flow which is usually within an > local-irq-off block on non-PREEMPT_RT configurations. > > The threshold event handler is a deprecated memcg v1 feature. Instead of > trying to get it to work under PREEMPT_RT just disable it. There should > be no users on PREEMPT_RT. From that perspective it makes even less > sense to get it to work under PREEMPT_RT while having zero users. > > Make memory.soft_limit_in_bytes and cgroup.event_control return > -EOPNOTSUPP on PREEMPT_RT. Make an empty memcg_check_events() and > memcg_write_event_control() which return only -EOPNOTSUPP on PREEMPT_RT. > Document that the two knobs are disabled on PREEMPT_RT. Shuffle the code around > so that all unused function are in on #ifdef block. > > Suggested-by: Michal Hocko <mhocko@xxxxxxxxxx> > Suggested-by: Michal Koutný <mkoutny@xxxxxxxx> > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> I still support this approach but the patch is much larger than necessary. The code moving shouldn't be really necessary and a simple "do not allow" to set any thresholds or soft limit should be good enough. While in general it is better to disable the unreachable code I do not think this is worth the code churn here. > --- > .../admin-guide/cgroup-v1/memory.rst | 2 + > mm/memcontrol.c | 788 +++++++++--------- > 2 files changed, 404 insertions(+), 386 deletions(-) -- Michal Hocko SUSE Labs