firmware: arm_sdei: Use cpus_read_lock() to avoid races with cpuhp
authorJames Morse <james.morse@arm.com>
Fri, 21 Feb 2020 16:35:08 +0000 (16:35 +0000)
committerCatalin Marinas <catalin.marinas@arm.com>
Thu, 27 Feb 2020 17:14:16 +0000 (17:14 +0000)
commit54f529a6806c9710947a4f2cdc15d6ea54121ccd
tree2487a621af85310767268f4648f568be991e8112
parentc66d52b1026717135c5030c65e344750161d159b
firmware: arm_sdei: Use cpus_read_lock() to avoid races with cpuhp

SDEI has private events that need registering and enabling on each CPU.
CPUs can come and go while we are trying to do this. SDEI tries to avoid
these problems by setting the reregister flag before the register call,
so any CPUs that come online register the event too. Sticking plaster
like this doesn't work, as if the register call fails, a CPU that
subsequently comes online will register the event before reregister
is cleared.

Take cpus_read_lock() around the register and enable calls. We don't
want surprise CPUs to do the wrong thing if they race with these calls
failing.

Signed-off-by: James Morse <james.morse@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
drivers/firmware/arm_sdei.c