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:
parent
76880e1fa4
commit
95faf05ec7
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue