kernel: add platform_has() infrastructure
Add a simple infrastructure for setting, resetting and querying platform feature flags. Flags can be either global or architecture specific. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> Tested-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> # Arm64 only Reviewed-by: Christoph Hellwig <hch@lst.de> Acked-by: Borislav Petkov <bp@suse.de> Signed-off-by: Juergen Gross <jgross@suse.com>
This commit is contained in:
Родитель
f2906aa863
Коммит
2130a790ca
|
@ -15824,6 +15824,14 @@ S: Maintained
|
|||
F: Documentation/devicetree/bindings/iio/chemical/plantower,pms7003.yaml
|
||||
F: drivers/iio/chemical/pms7003.c
|
||||
|
||||
PLATFORM FEATURE INFRASTRUCTURE
|
||||
M: Juergen Gross <jgross@suse.com>
|
||||
S: Maintained
|
||||
F: arch/*/include/asm/platform-feature.h
|
||||
F: include/asm-generic/platform-feature.h
|
||||
F: include/linux/platform-feature.h
|
||||
F: kernel/platform-feature.c
|
||||
|
||||
PLDMFW LIBRARY
|
||||
M: Jacob Keller <jacob.e.keller@intel.com>
|
||||
S: Maintained
|
||||
|
|
|
@ -44,6 +44,7 @@ mandatory-y += msi.h
|
|||
mandatory-y += pci.h
|
||||
mandatory-y += percpu.h
|
||||
mandatory-y += pgalloc.h
|
||||
mandatory-y += platform-feature.h
|
||||
mandatory-y += preempt.h
|
||||
mandatory-y += rwonce.h
|
||||
mandatory-y += sections.h
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _ASM_GENERIC_PLATFORM_FEATURE_H
|
||||
#define _ASM_GENERIC_PLATFORM_FEATURE_H
|
||||
|
||||
/* Number of arch specific feature flags. */
|
||||
#define PLATFORM_ARCH_FEAT_N 0
|
||||
|
||||
#endif /* _ASM_GENERIC_PLATFORM_FEATURE_H */
|
|
@ -0,0 +1,15 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _PLATFORM_FEATURE_H
|
||||
#define _PLATFORM_FEATURE_H
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <asm/platform-feature.h>
|
||||
|
||||
/* The platform features are starting with the architecture specific ones. */
|
||||
#define PLATFORM_FEAT_N (0 + PLATFORM_ARCH_FEAT_N)
|
||||
|
||||
void platform_set(unsigned int feature);
|
||||
void platform_clear(unsigned int feature);
|
||||
bool platform_has(unsigned int feature);
|
||||
|
||||
#endif /* _PLATFORM_FEATURE_H */
|
|
@ -7,7 +7,7 @@ obj-y = fork.o exec_domain.o panic.o \
|
|||
cpu.o exit.o softirq.o resource.o \
|
||||
sysctl.o capability.o ptrace.o user.o \
|
||||
signal.o sys.o umh.o workqueue.o pid.o task_work.o \
|
||||
extable.o params.o \
|
||||
extable.o params.o platform-feature.o \
|
||||
kthread.o sys_ni.o nsproxy.o \
|
||||
notifier.o ksysfs.o cred.o reboot.o \
|
||||
async.o range.o smpboot.o ucount.o regset.o
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/cache.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/platform-feature.h>
|
||||
|
||||
#define PLATFORM_FEAT_ARRAY_SZ BITS_TO_LONGS(PLATFORM_FEAT_N)
|
||||
static unsigned long __read_mostly platform_features[PLATFORM_FEAT_ARRAY_SZ];
|
||||
|
||||
void platform_set(unsigned int feature)
|
||||
{
|
||||
set_bit(feature, platform_features);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(platform_set);
|
||||
|
||||
void platform_clear(unsigned int feature)
|
||||
{
|
||||
clear_bit(feature, platform_features);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(platform_clear);
|
||||
|
||||
bool platform_has(unsigned int feature)
|
||||
{
|
||||
return test_bit(feature, platform_features);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(platform_has);
|
Загрузка…
Ссылка в новой задаче