kernels/ksysfs.c: export kernel address bits
authorThomas Weißschuh <linux@weissschuh.net>
Wed, 21 Dec 2022 16:17:52 +0000 (16:17 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 20 Jan 2023 13:30:45 +0000 (14:30 +0100)
This can be used by userspace to determine the address size of the
running kernel.
It frees userspace from having to interpret this information from the
UTS machine field.

Userspace implementation:
https://github.com/util-linux/util-linux/pull/1966

Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
Link: https://lore.kernel.org/r/20221221-address-bits-v1-1-8446b13244ac@weissschuh.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Documentation/ABI/testing/sysfs-kernel-address_bits [new file with mode: 0644]
kernel/ksysfs.c

diff --git a/Documentation/ABI/testing/sysfs-kernel-address_bits b/Documentation/ABI/testing/sysfs-kernel-address_bits
new file mode 100644 (file)
index 0000000..5d09ff8
--- /dev/null
@@ -0,0 +1,10 @@
+What:          /sys/kernel/address_bit
+Date:          May 2023
+KernelVersion: 6.3
+Contact:       Thomas Weißschuh <linux@weissschuh.net>
+Description:
+               The address size of the running kernel in bits.
+
+               Access: Read
+
+Users:         util-linux
index 2df00b789b907c4a4e15a388bf2f582a6a020753..0408aab80941b683aa1416de0975a13414e7af50 100644 (file)
@@ -51,6 +51,14 @@ static ssize_t cpu_byteorder_show(struct kobject *kobj,
 }
 KERNEL_ATTR_RO(cpu_byteorder);
 
+/* address bits */
+static ssize_t address_bits_show(struct kobject *kobj,
+                                struct kobj_attribute *attr, char *buf)
+{
+       return sysfs_emit(buf, "%zu\n", sizeof(void *) * 8 /* CHAR_BIT */);
+}
+KERNEL_ATTR_RO(address_bits);
+
 #ifdef CONFIG_UEVENT_HELPER
 /* uevent helper program, used during early boot */
 static ssize_t uevent_helper_show(struct kobject *kobj,
@@ -233,6 +241,7 @@ static struct attribute * kernel_attrs[] = {
        &fscaps_attr.attr,
        &uevent_seqnum_attr.attr,
        &cpu_byteorder_attr.attr,
+       &address_bits_attr.attr,
 #ifdef CONFIG_UEVENT_HELPER
        &uevent_helper_attr.attr,
 #endif