FAILED: patch "[PATCH] KVM: selftests: Always run vCPU thread with blocked SIG_IPI" failed to apply to 5.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From bf1e15a82e3b74ee86bb119d6038b41e1ed2b319 Mon Sep 17 00:00:00 2001
From: Paolo Bonzini <[email protected]>
Date: Tue, 20 Apr 2021 04:13:03 -0400
Subject: [PATCH] KVM: selftests: Always run vCPU thread with blocked SIG_IPI
The main thread could start to send SIG_IPI at any time, even before signal blocked on vcpu thread. Therefore, start the vcpu thread with the signal blocked.
Without this patch, on very busy cores the dirty_log_test could fail directly on receiving a SIGUSR1 without a handler (when vcpu runs far slower than main).
tools/testing/selftests/kvm/dirty_log_test.c +7 -2
@@ -527,9 +527,8 @@ static void *vcpu_worker(void *data)*/ sigmask->len =8 ;pthread_sigmask (0 ,NULL , sigset); +sigdelset (sigset,SIG_IPI );vcpu_ioctl (vm,VCPU_ID ,KVM_SET_SIGNAL_MASK , sigmask); -sigaddset (sigset,SIG_IPI ); -pthread_sigmask (SIG_BLOCK , sigset,NULL );sigemptyset (sigset);sigaddset (sigset,SIG_IPI );
@@ -858,6 +857,7 @@ int main(int argc, char *argv[]) .interval = TEST_HOST_LOOP_INTERVAL, };int opt, i; +sigset_t sigset;sem_init (&sem_vcpu_stop,0 ,0 );sem_init (&sem_vcpu_cont,0 ,0 );
@@ -916,6 +916,11 @@ int main(int argc, char *argv[])srandom (time (0 )); +/* Ensure that vCPU threads start with SIG_IPI blocked. */ +sigemptyset (&sigset); +sigaddset (&sigset,SIG_IPI ); +pthread_sigmask (SIG_BLOCK , &sigset,NULL ); +if (host_log_mode_option ==LOG_MODE_ALL ) {/* Run each log mode */ for (i =0 ; i <LOG_MODE_NUM ; i++) {