diff options
author | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2014-02-08 07:34:09 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-02-18 15:38:37 -0500 |
commit | 67bad2fdb754dbef14596c0b5d28b3a12c8dfe84 (patch) | |
tree | 05c3cd5f809618319346f9642549460f95149f02 /include/linux/mod_devicetable.h | |
parent | 91219a3b20325689eb80f7598cce2dc745db171d (diff) |
cpu: add generic support for CPU feature based module autoloading
This patch adds support for advertising optional CPU features over udev
using the modalias, and for declaring compatibility with/dependency upon
such a feature in a module.
The mapping between feature numbers and actual features should be provided
by the architecture in a file called <asm/cpufeature.h> which exports the
following functions/macros:
- cpu_feature(FEAT), a preprocessor macro that maps token FEAT to a
numeric index;
- bool cpu_have_feature(n), returning whether this CPU has support for
feature #n;
- MAX_CPU_FEATURES, an upper bound for 'n' in the previous function.
The feature can then be enabled by setting CONFIG_GENERIC_CPU_AUTOPROBE
for the architecture.
For instance, a module that registers its module init function using
module_cpu_feature_match(FEAT_X, module_init_function)
will be probed automatically when the CPU's support for the 'FEAT_X'
feature is advertised over udev, and will only allow the module to be
loaded by hand if the 'FEAT_X' feature is supported.
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include/linux/mod_devicetable.h')
-rw-r--r-- | include/linux/mod_devicetable.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 45e921401b06..f2ac87c613a5 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
@@ -564,6 +564,15 @@ struct x86_cpu_id { | |||
564 | #define X86_MODEL_ANY 0 | 564 | #define X86_MODEL_ANY 0 |
565 | #define X86_FEATURE_ANY 0 /* Same as FPU, you can't test for that */ | 565 | #define X86_FEATURE_ANY 0 /* Same as FPU, you can't test for that */ |
566 | 566 | ||
567 | /* | ||
568 | * Generic table type for matching CPU features. | ||
569 | * @feature: the bit number of the feature (0 - 65535) | ||
570 | */ | ||
571 | |||
572 | struct cpu_feature { | ||
573 | __u16 feature; | ||
574 | }; | ||
575 | |||
567 | #define IPACK_ANY_FORMAT 0xff | 576 | #define IPACK_ANY_FORMAT 0xff |
568 | #define IPACK_ANY_ID (~0) | 577 | #define IPACK_ANY_ID (~0) |
569 | struct ipack_device_id { | 578 | struct ipack_device_id { |