forked from wolfSSL/wolfssl
linuxkm: add WOLFSSL_COMMERCIAL_LICENSE alternative to kernel_fpu_begin()/kernel_fpu_end() in save_vector_registers_x86()/restore_vector_registers_x86(): allocate wc_linuxkm_fpu_savebufs as a buffer for os_xsave()/os_xrstor(), and use fpregs_lock()/fpregs_unlock() to inhibit softirqs/preemption.
This commit is contained in:
@@ -20,8 +20,12 @@
|
||||
*/
|
||||
|
||||
#ifndef WOLFSSL_LICENSE
|
||||
#ifdef WOLFSSL_COMMERCIAL_LICENSE
|
||||
#define WOLFSSL_LICENSE "wolfSSL Commercial"
|
||||
#else
|
||||
#define WOLFSSL_LICENSE "GPL v2"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define FIPS_NO_WRAPPERS
|
||||
|
||||
@@ -346,6 +350,17 @@ static int my_preempt_count(void) {
|
||||
return preempt_count();
|
||||
}
|
||||
|
||||
/* ditto for fpregs_lock/fpregs_unlock */
|
||||
#ifdef WOLFSSL_LINUXKM_USE_SAVE_VECTOR_REGISTERS
|
||||
static void my_fpregs_lock(void) {
|
||||
fpregs_lock();
|
||||
}
|
||||
|
||||
static void my_fpregs_unlock(void) {
|
||||
fpregs_unlock();
|
||||
}
|
||||
#endif
|
||||
|
||||
static int set_up_wolfssl_linuxkm_pie_redirect_table(void) {
|
||||
memset(
|
||||
&wolfssl_linuxkm_pie_redirect_table,
|
||||
@@ -442,21 +457,28 @@ static int set_up_wolfssl_linuxkm_pie_redirect_table(void) {
|
||||
#endif
|
||||
wolfssl_linuxkm_pie_redirect_table.nr_cpu_ids = &nr_cpu_ids;
|
||||
|
||||
#if defined(CONFIG_SMP) && (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0))
|
||||
#if defined(CONFIG_SMP) && \
|
||||
(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0)) && \
|
||||
!defined(WOLFSSL_COMMERCIAL_LICENSE)
|
||||
wolfssl_linuxkm_pie_redirect_table.migrate_disable = &migrate_disable;
|
||||
wolfssl_linuxkm_pie_redirect_table.migrate_enable = &migrate_enable;
|
||||
#endif
|
||||
|
||||
#ifdef WOLFSSL_LINUXKM_SIMD_X86
|
||||
wolfssl_linuxkm_pie_redirect_table.irq_fpu_usable = irq_fpu_usable;
|
||||
#ifdef kernel_fpu_begin
|
||||
wolfssl_linuxkm_pie_redirect_table.kernel_fpu_begin_mask =
|
||||
kernel_fpu_begin_mask;
|
||||
#else
|
||||
wolfssl_linuxkm_pie_redirect_table.kernel_fpu_begin =
|
||||
kernel_fpu_begin;
|
||||
#endif
|
||||
wolfssl_linuxkm_pie_redirect_table.kernel_fpu_end = kernel_fpu_end;
|
||||
#ifdef WOLFSSL_COMMERCIAL_LICENSE
|
||||
wolfssl_linuxkm_pie_redirect_table.fpregs_lock = my_fpregs_lock;
|
||||
wolfssl_linuxkm_pie_redirect_table.fpregs_unlock = my_fpregs_unlock;
|
||||
#else /* !defined(WOLFSSL_COMMERCIAL_LICENSE) */
|
||||
#ifdef kernel_fpu_begin
|
||||
wolfssl_linuxkm_pie_redirect_table.kernel_fpu_begin_mask =
|
||||
kernel_fpu_begin_mask;
|
||||
#else
|
||||
wolfssl_linuxkm_pie_redirect_table.kernel_fpu_begin =
|
||||
kernel_fpu_begin;
|
||||
#endif
|
||||
wolfssl_linuxkm_pie_redirect_table.kernel_fpu_end = kernel_fpu_end;
|
||||
#endif /* !defined(WOLFSSL_COMMERCIAL_LICENSE) */
|
||||
#endif /* WOLFSSL_LINUXKM_SIMD_X86 */
|
||||
|
||||
#endif /* WOLFSSL_LINUXKM_USE_SAVE_VECTOR_REGISTERS */
|
||||
|
Reference in New Issue
Block a user