From 1ffe7401530294ad404ea3821e0fab4b2037a392 Mon Sep 17 00:00:00 2001 From: NAKAMURA Gou Date: Tue, 26 Jan 2016 17:56:53 +0900 Subject: [PATCH] sysfs sample --- executer/kernel/mcctrl/Makefile.in | 3 +- executer/kernel/mcctrl/mcctrl.h | 4 ++ executer/kernel/mcctrl/sysfs.c | 2 + executer/kernel/mcctrl/sysfs_files.c | 68 ++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 executer/kernel/mcctrl/sysfs_files.c diff --git a/executer/kernel/mcctrl/Makefile.in b/executer/kernel/mcctrl/Makefile.in index 02d94d54..a1af82ea 100644 --- a/executer/kernel/mcctrl/Makefile.in +++ b/executer/kernel/mcctrl/Makefile.in @@ -9,7 +9,8 @@ obj-m += mcctrl.o ccflags-y := -I$(IHK_BASE)/linux/include -I$(IHK_BASE)/ikc/include -I$(IHK_BASE)/include -I$(src)/../../include -mcmodel=kernel -mno-red-zone -DMCEXEC_PATH=\"$(BINDIR)/mcexec\" -mcctrl-y := driver.o control.o ikc.o syscall.o procfs.o binfmt_mcexec.o sysfs.o +mcctrl-y := driver.o control.o ikc.o syscall.o procfs.o binfmt_mcexec.o +mcctrl-y += sysfs.o sysfs_files.o KBUILD_EXTRA_SYMBOLS = @abs_builddir@/../../../../ihk/linux/core/Module.symvers diff --git a/executer/kernel/mcctrl/mcctrl.h b/executer/kernel/mcctrl/mcctrl.h index 84cb033a..abd0d1bc 100644 --- a/executer/kernel/mcctrl/mcctrl.h +++ b/executer/kernel/mcctrl/mcctrl.h @@ -32,6 +32,7 @@ #ifndef HEADER_MCCTRL_H #define HEADER_MCCTRL_H +#include #include #include #include @@ -252,4 +253,7 @@ struct procfs_file { char fname[PROCFS_NAME_MAX]; /* procfs filename (request) */ }; +/* sysfs_files.c */ +void setup_sysfs_files(ihk_os_t os); + #endif diff --git a/executer/kernel/mcctrl/sysfs.c b/executer/kernel/mcctrl/sysfs.c index 4e975cf1..8c083e96 100644 --- a/executer/kernel/mcctrl/sysfs.c +++ b/executer/kernel/mcctrl/sysfs.c @@ -1302,6 +1302,8 @@ sysfsm_setup(ihk_os_t os, void *buf, long buf_pa, size_t bufsize) wmb(); sdp->sysfs_buf = buf; + setup_sysfs_files(os); + error = 0; out: if (error) { diff --git a/executer/kernel/mcctrl/sysfs_files.c b/executer/kernel/mcctrl/sysfs_files.c new file mode 100644 index 00000000..3863cdb2 --- /dev/null +++ b/executer/kernel/mcctrl/sysfs_files.c @@ -0,0 +1,68 @@ +/** + * \file sysfs_files.c + * License details are found in the file LICENSE. + * \brief + * implement McKernel's sysfs files, IHK-Master side + * \author Gou Nakamura \par + * Copyright (C) 2016 RIKEN AICS + */ +/* + * HISTORY: + */ + +#include +#include "mcctrl.h" +#include "sysfs_msg.h" + +#define dprintk(...) do { if (0) printk(KERN_DEBUG __VA_ARGS__); } while (0) +#define wprintk(...) do { if (1) printk(KERN_WARNING __VA_ARGS__); } while (0) +#define eprintk(...) do { if (1) printk(KERN_ERR __VA_ARGS__); } while (0) + +static ssize_t +show_int(struct sysfsm_ops *ops, void *instance, void *buf, size_t size) +{ + int *p = instance; + + return snprintf(buf, size, "%d\n", *p); +} /* show_int() */ + +struct sysfsm_ops show_int_ops = { + .show = &show_int, +}; + +void setup_sysfs_files(ihk_os_t os) +{ + static int a_value = 35; + int error; + struct sysfs_handle handle; + + error = sysfsm_mkdirf(os, NULL, "/sys/test/x.dir"); + if (error) { + panic("sysfsm_mkdir(x.dir)"); + } + + error = sysfsm_createf(os, &show_int_ops, &a_value, 0444, + "/sys/test/a.dir/a_value"); + if (error) { + panic("sysfsm_createf"); + } + + error = sysfsm_lookupf(os, &handle, "/sys/test/%s", "a.dir"); + if (error) { + panic("sysfsm_lookupf(a.dir)"); + } + + error = sysfsm_symlinkf(os, handle, "/sys/test/%c.dir", 'L'); + if (error) { + panic("sysfsm_symlinkf"); + } + + error = sysfsm_unlinkf(os, 0, "/sys/test/%s.dir", "x"); + if (error) { + panic("sysfsm_unlinkf"); + } + + return; +} /* setup_files() */ + +/**** End of File ****/