svn commit: r317318 - stable/11/sys/compat/linsysfs
Dmitry Chagin
dchagin at FreeBSD.org
Sun Apr 23 06:45:22 UTC 2017
Author: dchagin
Date: Sun Apr 23 06:45:21 2017
New Revision: 317318
URL: https://svnweb.freebsd.org/changeset/base/317318
Log:
MFC r315506:
Glibc get_nprocs() and get_nprocs_conf() uses the sysfs cpu infrastructure
to get number of processors. Implement /sys/devices/system/cpu/.
Modified:
stable/11/sys/compat/linsysfs/linsysfs.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/compat/linsysfs/linsysfs.c
==============================================================================
--- stable/11/sys/compat/linsysfs/linsysfs.c Sun Apr 23 06:43:52 2017 (r317317)
+++ stable/11/sys/compat/linsysfs/linsysfs.c Sun Apr 23 06:45:21 2017 (r317318)
@@ -221,13 +221,62 @@ linsysfs_run_bus(device_t dev, struct pf
}
/*
+ * Filler function for sys/devices/system/cpu/online
+ */
+static int
+linsysfs_cpuonline(PFS_FILL_ARGS)
+{
+
+ sbuf_printf(sb, "%d-%d\n", CPU_FIRST(), mp_maxid);
+ return (0);
+}
+
+/*
+ * Filler function for sys/devices/system/cpu/cpuX/online
+ */
+static int
+linsysfs_cpuxonline(PFS_FILL_ARGS)
+{
+
+ sbuf_printf(sb, "1\n");
+ return (0);
+}
+
+static void
+linsysfs_listcpus(struct pfs_node *dir)
+{
+ struct pfs_node *cpu;
+ char *name;
+ int i, count, len;
+
+ len = 1;
+ count = mp_maxcpus;
+ while (count > 10) {
+ count /= 10;
+ len++;
+ }
+ len += sizeof("cpu");
+ name = malloc(len, M_TEMP, M_WAITOK);
+
+ for (i = 0; i < mp_ncpus; ++i) {
+ /* /sys/devices/system/cpu/cpuX */
+ sprintf(name, "cpu%d", i);
+ cpu = pfs_create_dir(dir, name, NULL, NULL, NULL, 0);
+
+ pfs_create_file(cpu, "online", &linsysfs_cpuxonline,
+ NULL, NULL, NULL, PFS_RD);
+ }
+ free(name, M_TEMP);
+}
+
+/*
* Constructor
*/
static int
linsysfs_init(PFS_INIT_ARGS)
{
struct pfs_node *root;
- struct pfs_node *dir;
+ struct pfs_node *dir, *sys, *cpu;
struct pfs_node *pci;
struct pfs_node *scsi;
devclass_t devclass;
@@ -241,10 +290,10 @@ linsysfs_init(PFS_INIT_ARGS)
scsi = pfs_create_dir(root, "class", NULL, NULL, NULL, 0);
scsi = pfs_create_dir(scsi, "scsi_host", NULL, NULL, NULL, 0);
- /* /sys/device */
+ /* /sys/devices */
dir = pfs_create_dir(root, "devices", NULL, NULL, NULL, 0);
- /* /sys/device/pci0000:00 */
+ /* /sys/devices/pci0000:00 */
pci = pfs_create_dir(dir, "pci0000:00", NULL, NULL, NULL, 0);
devclass = devclass_find("root");
@@ -254,6 +303,18 @@ linsysfs_init(PFS_INIT_ARGS)
dev = devclass_get_device(devclass, 0);
linsysfs_run_bus(dev, pci, scsi, "/pci0000:00", "0000");
+
+ /* /sys/devices/system */
+ sys = pfs_create_dir(dir, "system", NULL, NULL, NULL, 0);
+
+ /* /sys/devices/system/cpu */
+ cpu = pfs_create_dir(sys, "cpu", NULL, NULL, NULL, 0);
+
+ pfs_create_file(cpu, "online", &linsysfs_cpuonline,
+ NULL, NULL, NULL, PFS_RD);
+
+ linsysfs_listcpus(cpu);
+
return (0);
}
More information about the svn-src-stable-11
mailing list