mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 05:55:44 +02:00
FROMLIST: arm64: Advertise CPUs capable of running 32-bit applications in sysfs
Since 32-bit applications will be killed if they are caught trying to execute on a 64-bit-only CPU in a mismatched system, advertise the set of 32-bit capable CPUs to userspace in sysfs. Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Will Deacon <will@kernel.org> Bug: 178507149 Link: https://lore.kernel.org/linux-arch/20201208132835.6151-6-will@kernel.org/ Signed-off-by: Will Deacon <willdeacon@google.com> Change-Id: I32991983eab382ccf727f88dc681463950f1c9d3
This commit is contained in:
parent
c7d6ec319b
commit
5ed7a93116
|
|
@ -493,6 +493,15 @@ Description: AArch64 CPU registers
|
|||
'identification' directory exposes the CPU ID registers for
|
||||
identifying model and revision of the CPU.
|
||||
|
||||
What: /sys/devices/system/cpu/aarch32_el0
|
||||
Date: November 2020
|
||||
Contact: Linux ARM Kernel Mailing list <linux-arm-kernel@lists.infradead.org>
|
||||
Description: Identifies the subset of CPUs in the system that can execute
|
||||
AArch32 (32-bit ARM) applications. If present, the same format as
|
||||
/sys/devices/system/cpu/{offline,online,possible,present} is used.
|
||||
If absent, then all or none of the CPUs can execute AArch32
|
||||
applications and execve() will behave accordingly.
|
||||
|
||||
What: /sys/devices/system/cpu/cpu#/cpu_capacity
|
||||
Date: December 2016
|
||||
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@
|
|||
#include <linux/crash_dump.h>
|
||||
#include <linux/sort.h>
|
||||
#include <linux/stop_machine.h>
|
||||
#include <linux/sysfs.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/cpu.h>
|
||||
|
|
@ -1274,6 +1275,24 @@ const struct cpumask *system_32bit_el0_cpumask(void)
|
|||
return cpu_possible_mask;
|
||||
}
|
||||
|
||||
static ssize_t aarch32_el0_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
const struct cpumask *mask = system_32bit_el0_cpumask();
|
||||
|
||||
return sysfs_emit(buf, "%*pbl\n", cpumask_pr_args(mask));
|
||||
}
|
||||
static const DEVICE_ATTR_RO(aarch32_el0);
|
||||
|
||||
static int __init aarch32_el0_sysfs_init(void)
|
||||
{
|
||||
if (!allow_mismatched_32bit_el0)
|
||||
return 0;
|
||||
|
||||
return device_create_file(cpu_subsys.dev_root, &dev_attr_aarch32_el0);
|
||||
}
|
||||
device_initcall(aarch32_el0_sysfs_init);
|
||||
|
||||
static bool has_32bit_el0(const struct arm64_cpu_capabilities *entry, int scope)
|
||||
{
|
||||
if (!has_cpuid_feature(entry, scope))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user