memory: bail from page scrubbing when CPU is no longer online

Scrubbing can significantly delay the offlining (parking) of a CPU (e.g.
because of booting into in smt=0 mode), to a degree that the "CPU <n>
still not dead..." messages logged on x86 in 1s intervals can be seen
multiple times. There are no softirqs involved in this process, so
extend the existing preemption check in the scrubbing logic to also exit
when the CPU is no longer observed online.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
master commit: 3c9fd69416
master date: 2021-01-29 11:34:37 +0100
This commit is contained in:
Jan Beulich committed 2021-03-05 15:42:31 +01:00
1 parent c11bd12218
commit ab3770e98f
1 file changed
+4 -2
+4 -2
View File
@@ -1327,9 +1327,11 @@ bool scrub_free_pages(void)
* Scrub a few (8) pages before becoming eligible for
* preemption. But also count non-scrubbing loop iterations
* so that we don't get stuck here with an almost clean
* heap.
* heap. Consider the CPU no longer being seen as online as
* a request to preempt immediately, to not unduly delay
* its offlining.
*/
if ( cnt > 800 && softirq_pending(cpu) )
if ( !cpu_online(cpu) || (cnt > 800 && softirq_pending(cpu)) )
{
preempt = true;
break;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.