mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 10:04:12 +08:00
4e43d779e5
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license version 2 as published by the free software foundation this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details the full gnu general public license is included in this distribution in the file called copying extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 39 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Alexios Zavras <alexios.zavras@intel.com> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190529141901.397680977@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
92 lines
1.7 KiB
C
92 lines
1.7 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Intel MIC Platform Software Stack (MPSS)
|
|
*
|
|
* Copyright(c) 2013 Intel Corporation.
|
|
*
|
|
* Intel MIC User Space Tools.
|
|
*/
|
|
|
|
#include "mpssd.h"
|
|
|
|
#define PAGE_SIZE 4096
|
|
|
|
char *
|
|
readsysfs(char *dir, char *entry)
|
|
{
|
|
char filename[PATH_MAX];
|
|
char value[PAGE_SIZE];
|
|
char *string = NULL;
|
|
int fd;
|
|
int len;
|
|
|
|
if (dir == NULL)
|
|
snprintf(filename, PATH_MAX, "%s/%s", MICSYSFSDIR, entry);
|
|
else
|
|
snprintf(filename, PATH_MAX,
|
|
"%s/%s/%s", MICSYSFSDIR, dir, entry);
|
|
|
|
fd = open(filename, O_RDONLY);
|
|
if (fd < 0) {
|
|
mpsslog("Failed to open sysfs entry '%s': %s\n",
|
|
filename, strerror(errno));
|
|
return NULL;
|
|
}
|
|
|
|
len = read(fd, value, sizeof(value));
|
|
if (len < 0) {
|
|
mpsslog("Failed to read sysfs entry '%s': %s\n",
|
|
filename, strerror(errno));
|
|
goto readsys_ret;
|
|
}
|
|
if (len == 0)
|
|
goto readsys_ret;
|
|
|
|
value[len - 1] = '\0';
|
|
|
|
string = malloc(strlen(value) + 1);
|
|
if (string)
|
|
strcpy(string, value);
|
|
|
|
readsys_ret:
|
|
close(fd);
|
|
return string;
|
|
}
|
|
|
|
int
|
|
setsysfs(char *dir, char *entry, char *value)
|
|
{
|
|
char filename[PATH_MAX];
|
|
char *oldvalue;
|
|
int fd, ret = 0;
|
|
|
|
if (dir == NULL)
|
|
snprintf(filename, PATH_MAX, "%s/%s", MICSYSFSDIR, entry);
|
|
else
|
|
snprintf(filename, PATH_MAX, "%s/%s/%s",
|
|
MICSYSFSDIR, dir, entry);
|
|
|
|
oldvalue = readsysfs(dir, entry);
|
|
|
|
fd = open(filename, O_RDWR);
|
|
if (fd < 0) {
|
|
ret = errno;
|
|
mpsslog("Failed to open sysfs entry '%s': %s\n",
|
|
filename, strerror(errno));
|
|
goto done;
|
|
}
|
|
|
|
if (!oldvalue || strcmp(value, oldvalue)) {
|
|
if (write(fd, value, strlen(value)) < 0) {
|
|
ret = errno;
|
|
mpsslog("Failed to write new sysfs entry '%s': %s\n",
|
|
filename, strerror(errno));
|
|
}
|
|
}
|
|
close(fd);
|
|
done:
|
|
if (oldvalue)
|
|
free(oldvalue);
|
|
return ret;
|
|
}
|