Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F98605018
D45615.id139907.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D45615.id139907.diff
View Options
diff --git a/sys/compat/linuxkpi/common/include/linux/debugfs.h b/sys/compat/linuxkpi/common/include/linux/debugfs.h
--- a/sys/compat/linuxkpi/common/include/linux/debugfs.h
+++ b/sys/compat/linuxkpi/common/include/linux/debugfs.h
@@ -88,6 +88,8 @@
#define DEFINE_DEBUGFS_ATTRIBUTE(__fops, __get, __set, __fmt) \
DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt)
+#define DEFINE_DEBUGFS_ATTRIBUTE_SIGNED(__fops, __get, __set, __fmt) \
+ DEFINE_SIMPLE_ATTRIBUTE_SIGNED(__fops, __get, __set, __fmt)
void debugfs_create_bool(const char *name, umode_t mode, struct dentry *parent,
bool *value);
diff --git a/sys/compat/linuxkpi/common/include/linux/fs.h b/sys/compat/linuxkpi/common/include/linux/fs.h
--- a/sys/compat/linuxkpi/common/include/linux/fs.h
+++ b/sys/compat/linuxkpi/common/include/linux/fs.h
@@ -374,7 +374,7 @@
MALLOC_DECLARE(M_LSATTR);
-#define DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) \
+#define __DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt, __wrfunc)\
static inline int \
__fops ## _open(struct inode *inode, struct file *filp) \
{ \
@@ -385,10 +385,15 @@
.open = __fops ## _open, \
.release = simple_attr_release, \
.read = simple_attr_read, \
- .write = simple_attr_write, \
+ .write = __wrfunc, \
.llseek = no_llseek \
}
+#define DEFINE_SIMPLE_ATTRIBUTE(fops, get, set, fmt) \
+ __DEFINE_SIMPLE_ATTRIBUTE(fops, get, set, fmt, simple_attr_write)
+#define DEFINE_SIMPLE_ATTRIBUTE_SIGNED(fops, get, set, fmt) \
+ __DEFINE_SIMPLE_ATTRIBUTE(fops, get, set, fmt, simple_attr_write_signed)
+
int simple_attr_open(struct inode *inode, struct file *filp,
int (*get)(void *, uint64_t *), int (*set)(void *, uint64_t),
const char *fmt);
@@ -399,4 +404,7 @@
ssize_t simple_attr_write(struct file *filp, const char *buf, size_t write_size, loff_t *ppos);
+ssize_t simple_attr_write_signed(struct file *filp, const char *buf,
+ size_t write_size, loff_t *ppos);
+
#endif /* _LINUXKPI_LINUX_FS_H_ */
diff --git a/sys/compat/linuxkpi/common/src/linux_simple_attr.c b/sys/compat/linuxkpi/common/src/linux_simple_attr.c
--- a/sys/compat/linuxkpi/common/src/linux_simple_attr.c
+++ b/sys/compat/linuxkpi/common/src/linux_simple_attr.c
@@ -138,12 +138,13 @@
}
/*
- * simple_attr_write: write contents of buffer into simple attribute file
+ * simple_attr_write_common: write contents of buffer into simple attribute file
*
* @filp: file pointer
* @buf: kernel space buffer
* @write_size: number bytes to be transferred
* @ppos: starting pointer position for transfer
+ * @is_signed: signedness of data in @buf
*
* The simple_attr structure is stored in filp->private_data.
* Convert the @buf string to unsigned long long.
@@ -153,8 +154,9 @@
* On success, number of bytes written to simple attr
* On failure, negative signed ERRNO
*/
-ssize_t
-simple_attr_write(struct file *filp, const char *buf, size_t write_size, loff_t *ppos)
+static ssize_t
+simple_attr_write_common(struct file *filp, const char *buf, size_t write_size,
+ loff_t *ppos, bool is_signed)
{
struct simple_attr *sattr;
unsigned long long data;
@@ -172,7 +174,10 @@
mutex_lock(&sattr->mutex);
- ret = kstrtoull(buf + *ppos, 0, &data);
+ if (is_signed)
+ ret = kstrtoll(buf + *ppos, 0, &data);
+ else
+ ret = kstrtoull(buf + *ppos, 0, &data);
if (ret)
goto unlock;
@@ -186,3 +191,17 @@
mutex_unlock(&sattr->mutex);
return (ret);
}
+
+ssize_t
+simple_attr_write(struct file *filp, const char *buf, size_t write_size,
+ loff_t *ppos)
+{
+ return (simple_attr_write_common(filp, buf, write_size, ppos, false));
+}
+
+ssize_t
+simple_attr_write_signed(struct file *filp, const char *buf, size_t write_size,
+ loff_t *ppos)
+{
+ return (simple_attr_write_common(filp, buf, write_size, ppos, true));
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Oct 5, 12:47 AM (21 h, 24 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13461528
Default Alt Text
D45615.id139907.diff (3 KB)
Attached To
Mode
D45615: LinuxKPI: Add DEFINE_DEBUGFS_ATTRIBUTE_SIGNED to linux/debugfs.h
Attached
Detach File
Event Timeline
Log In to Comment