42 lines
971 B
C
42 lines
971 B
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (C) 2017 Linaro Ltd. <[email protected]>
|
|
*/
|
|
|
|
#ifndef __ASM_SIMD_H
|
|
#define __ASM_SIMD_H
|
|
|
|
#include <linux/compiler.h>
|
|
#include <linux/irqflags.h>
|
|
#include <linux/percpu.h>
|
|
#include <linux/preempt.h>
|
|
#include <linux/types.h>
|
|
|
|
#ifdef CONFIG_KERNEL_MODE_NEON
|
|
|
|
/*
|
|
* may_use_simd - whether it is allowable at this time to issue SIMD
|
|
* instructions or access the SIMD register file
|
|
*
|
|
* Callers must not assume that the result remains true beyond the next
|
|
* preempt_enable() or return from softirq context.
|
|
*/
|
|
static __must_check inline bool may_use_simd(void)
|
|
{
|
|
/*
|
|
* We must make sure that the SVE has been initialized properly
|
|
* before using the SIMD in kernel.
|
|
*/
|
|
return !in_hardirq() && !irqs_disabled() && !in_nmi();
|
|
}
|
|
|
|
#else /* ! CONFIG_KERNEL_MODE_NEON */
|
|
|
|
static __must_check inline bool may_use_simd(void) {
|
|
return false;
|
|
}
|
|
|
|
#endif /* ! CONFIG_KERNEL_MODE_NEON */
|
|
|
|
#endif
|