Skip to content

Commit bccaada

Browse files
Sebastian Andrzej Siewiorrafaeljw
authored andcommitted
PM / wakeup: Make events_lock a RAW_SPINLOCK
The `events_lock' is acquired during suspend while interrupts are disabled even on RT. The lock is taken only for a very brief moment. Make it a RAW lock which avoids "sleeping while atomic" warnings on RT. Signed-off-by: Sebastian Andrzej Siewior <[email protected]> Signed-off-by: Rafael J. Wysocki <[email protected]>
1 parent c1a957d commit bccaada

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

drivers/base/power/wakeup.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ static void split_counters(unsigned int *cnt, unsigned int *inpr)
5757
/* A preserved old value of the events counter. */
5858
static unsigned int saved_count;
5959

60-
static DEFINE_SPINLOCK(events_lock);
60+
static DEFINE_RAW_SPINLOCK(events_lock);
6161

6262
static void pm_wakeup_timer_fn(struct timer_list *t);
6363

@@ -185,9 +185,9 @@ void wakeup_source_add(struct wakeup_source *ws)
185185
ws->active = false;
186186
ws->last_time = ktime_get();
187187

188-
spin_lock_irqsave(&events_lock, flags);
188+
raw_spin_lock_irqsave(&events_lock, flags);
189189
list_add_rcu(&ws->entry, &wakeup_sources);
190-
spin_unlock_irqrestore(&events_lock, flags);
190+
raw_spin_unlock_irqrestore(&events_lock, flags);
191191
}
192192
EXPORT_SYMBOL_GPL(wakeup_source_add);
193193

@@ -202,9 +202,9 @@ void wakeup_source_remove(struct wakeup_source *ws)
202202
if (WARN_ON(!ws))
203203
return;
204204

205-
spin_lock_irqsave(&events_lock, flags);
205+
raw_spin_lock_irqsave(&events_lock, flags);
206206
list_del_rcu(&ws->entry);
207-
spin_unlock_irqrestore(&events_lock, flags);
207+
raw_spin_unlock_irqrestore(&events_lock, flags);
208208
synchronize_srcu(&wakeup_srcu);
209209
}
210210
EXPORT_SYMBOL_GPL(wakeup_source_remove);
@@ -843,15 +843,15 @@ bool pm_wakeup_pending(void)
843843
unsigned long flags;
844844
bool ret = false;
845845

846-
spin_lock_irqsave(&events_lock, flags);
846+
raw_spin_lock_irqsave(&events_lock, flags);
847847
if (events_check_enabled) {
848848
unsigned int cnt, inpr;
849849

850850
split_counters(&cnt, &inpr);
851851
ret = (cnt != saved_count || inpr > 0);
852852
events_check_enabled = !ret;
853853
}
854-
spin_unlock_irqrestore(&events_lock, flags);
854+
raw_spin_unlock_irqrestore(&events_lock, flags);
855855

856856
if (ret) {
857857
pr_info("PM: Wakeup pending, aborting suspend\n");
@@ -940,13 +940,13 @@ bool pm_save_wakeup_count(unsigned int count)
940940
unsigned long flags;
941941

942942
events_check_enabled = false;
943-
spin_lock_irqsave(&events_lock, flags);
943+
raw_spin_lock_irqsave(&events_lock, flags);
944944
split_counters(&cnt, &inpr);
945945
if (cnt == count && inpr == 0) {
946946
saved_count = count;
947947
events_check_enabled = true;
948948
}
949-
spin_unlock_irqrestore(&events_lock, flags);
949+
raw_spin_unlock_irqrestore(&events_lock, flags);
950950
return events_check_enabled;
951951
}
952952

0 commit comments

Comments
 (0)