Messages in this thread | | | Subject | Re: [PATCH v5 3/3] arm64/fpsimd: Don't disable softirq when touching FPSIMD/SVE state | From | Julien Grall <> | Date | Tue, 4 Jun 2019 11:35:11 +0100 |
| |
Hi Catalin,
On 6/3/19 10:21 PM, Catalin Marinas wrote: > On Mon, Jun 03, 2019 at 05:25:34PM +0100, Catalin Marinas wrote: >> On Tue, May 21, 2019 at 06:21:39PM +0100, Julien Grall wrote: >>> Since a softirq is supposed to check may_use_simd() anyway before >>> attempting to use FPSIMD/SVE, there is limited reason to keep softirq >>> disabled when touching the FPSIMD/SVE context. Instead, we can simply >>> disable preemption and mark the FPSIMD/SVE context as in use by setting >>> CPU's fpsimd_context_busy flag. >> [...] >>> +static void get_cpu_fpsimd_context(void) >>> +{ >>> + preempt_disable(); >>> + __get_cpu_fpsimd_context(); >>> +} >> >> Is there anything that prevents a softirq being invoked between >> preempt_disable() and __get_cpu_fpsimd_context()? > > Actually, it shouldn't matter as the softirq finishes using the fpsimd > before the thread is resumed.
If the softirqs is handled in a thread (i.e ksoftirqd), then preempt_disable() will prevent them to run.
For softirq running on return from interrupt context, they will finish before using fpsimd before the thread is resumed.
Softirq running after __get_cpu_fpsimd_context() is called will not be able to use FPSIMD (may_use_simd() returns false).
Cheers,
-- Julien Grall
| |