diff --git a/configure.d/1_preempt_model.conf b/configure.d/1_preempt_model.conf new file mode 100644 index 0000000..8a89a04 --- /dev/null +++ b/configure.d/1_preempt_model.conf @@ -0,0 +1,52 @@ +#!/bin/bash +# +# Copyright(c) 2025 Huawei Technologies +# SPDX-License-Identifier: BSD-3-Clause +# + +. $(dirname $3)/conf_framework.sh + +check() { + cur_name=$(basename $2) + config_file_path=$1 + if compile_module $cur_name "preempt_model_voluntary();" "linux/preempt.h" && + compile_module $cur_name "preempt_model_none();" "linux/preempt.h" + then + echo $cur_name "1" >> $config_file_path + else + echo $cur_name "2" >> $config_file_path + fi +} + +apply() { + case "$1" in + "1") + add_function " + static inline int cas_preempt_model_voluntary(void) + { + return preempt_model_voluntary(); + }" + add_function " + static inline int cas_preempt_model_none(void) + { + return preempt_model_none(); + }" ;; + + "2") + add_function " + static inline int cas_preempt_model_voluntary(void) + { + return IS_ENABLED(CONFIG_PREEMPT_VOLUNTARY); + }" + add_function " + static inline int cas_preempt_model_none(void) + { + return IS_ENABLED(CONFIG_PREEMPT_NONE); + }" ;; + + *) + exit 1 + esac +} + +conf_run $@ diff --git a/modules/cas_cache/main.c b/modules/cas_cache/main.c index 1305ca9..30c8437 100644 --- a/modules/cas_cache/main.c +++ b/modules/cas_cache/main.c @@ -65,9 +65,6 @@ static inline uint32_t involuntary_preemption_enabled(void) } #ifdef CONFIG_PREEMPT_DYNAMIC - /* preempt_model_none() or preempt_model_voluntary() are not defined if - * the kernel has been compiled without PREEMPT_DYNAMIC - */ printk(KERN_WARNING OCF_PREFIX_SHORT "The kernel has been compiled with preemption configurable\n" "at boot time (PREEMPT_DYNAMIC=y). Open CAS doesn't support\n" @@ -75,7 +72,7 @@ static inline uint32_t involuntary_preemption_enabled(void) "\"preempt=\" to \"none\" or \"voluntary\" in the kernel" " command line\n"); - if (!preempt_model_none() && !preempt_model_voluntary()) { + if (!cas_preempt_model_none() && !cas_preempt_model_voluntary()) { printk(KERN_ERR OCF_PREFIX_SHORT "The kernel has been booted with involuntary " "preemption enabled.\nFailed to load Open CAS kernel "