cgroup: Acquire cgroup_rstat_lock with enabled interrupts

There is no need to disable interrupts while cgroup_rstat_lock is
acquired. The lock is never used in-IRQ context so a simple spin_lock()
is enough for synchronisation purpose.

Acquire cgroup_rstat_lock without disabling interrupts and ensure that
cgroup_rstat_cpu_lock is acquired with disabled interrupts (this one is
acquired in-IRQ context).

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
This commit is contained in:
Sebastian Andrzej Siewior 2019-08-16 12:49:36 +02:00 committed by Alibek Omarov
parent 76880e1fa4
commit 95faf05ec7
1 changed files with 8 additions and 8 deletions

View File

@ -151,17 +151,17 @@ static void cgroup_rstat_flush_locked(struct cgroup *cgrp)
cpu);
struct cgroup *pos = NULL;
raw_spin_lock(cpu_lock);
raw_spin_lock_irq(cpu_lock);
while ((pos = cgroup_rstat_cpu_pop_updated(pos, cgrp, cpu)))
cgroup_base_stat_flush(pos, cpu);
raw_spin_unlock(cpu_lock);
raw_spin_unlock_irq(cpu_lock);
if (need_resched() || spin_needbreak(&cgroup_rstat_lock)) {
spin_unlock_irq(&cgroup_rstat_lock);
spin_unlock(&cgroup_rstat_lock);
if (!cond_resched())
cpu_relax();
spin_lock_irq(&cgroup_rstat_lock);
spin_lock(&cgroup_rstat_lock);
}
}
}
@ -183,9 +183,9 @@ void cgroup_rstat_flush(struct cgroup *cgrp)
{
might_sleep();
spin_lock_irq(&cgroup_rstat_lock);
spin_lock(&cgroup_rstat_lock);
cgroup_rstat_flush_locked(cgrp);
spin_unlock_irq(&cgroup_rstat_lock);
spin_unlock(&cgroup_rstat_lock);
}
/**
@ -201,7 +201,7 @@ static void cgroup_rstat_flush_hold(struct cgroup *cgrp)
__acquires(&cgroup_rstat_lock)
{
might_sleep();
spin_lock_irq(&cgroup_rstat_lock);
spin_lock(&cgroup_rstat_lock);
cgroup_rstat_flush_locked(cgrp);
}
@ -211,7 +211,7 @@ static void cgroup_rstat_flush_hold(struct cgroup *cgrp)
static void cgroup_rstat_flush_release(void)
__releases(&cgroup_rstat_lock)
{
spin_unlock_irq(&cgroup_rstat_lock);
spin_unlock(&cgroup_rstat_lock);
}
int cgroup_rstat_init(struct cgroup *cgrp)