.. | .. |
---|
45 | 45 | |
---|
46 | 46 | extern struct dentry *arch_debugfs_dir; |
---|
47 | 47 | |
---|
48 | | -#define DEFINE_DEBUGFS_ATTRIBUTE(__fops, __get, __set, __fmt) \ |
---|
| 48 | +#define DEFINE_DEBUGFS_ATTRIBUTE_XSIGNED(__fops, __get, __set, __fmt, __is_signed) \ |
---|
49 | 49 | static int __fops ## _open(struct inode *inode, struct file *file) \ |
---|
50 | 50 | { \ |
---|
51 | 51 | __simple_attr_check_format(__fmt, 0ull); \ |
---|
.. | .. |
---|
56 | 56 | .open = __fops ## _open, \ |
---|
57 | 57 | .release = simple_attr_release, \ |
---|
58 | 58 | .read = debugfs_attr_read, \ |
---|
59 | | - .write = debugfs_attr_write, \ |
---|
| 59 | + .write = (__is_signed) ? debugfs_attr_write_signed : debugfs_attr_write, \ |
---|
60 | 60 | .llseek = no_llseek, \ |
---|
61 | 61 | } |
---|
| 62 | + |
---|
| 63 | +#define DEFINE_DEBUGFS_ATTRIBUTE(__fops, __get, __set, __fmt) \ |
---|
| 64 | + DEFINE_DEBUGFS_ATTRIBUTE_XSIGNED(__fops, __get, __set, __fmt, false) |
---|
| 65 | + |
---|
| 66 | +#define DEFINE_DEBUGFS_ATTRIBUTE_SIGNED(__fops, __get, __set, __fmt) \ |
---|
| 67 | + DEFINE_DEBUGFS_ATTRIBUTE_XSIGNED(__fops, __get, __set, __fmt, true) |
---|
62 | 68 | |
---|
63 | 69 | typedef struct vfsmount *(*debugfs_automount_t)(struct dentry *, void *); |
---|
64 | 70 | |
---|
.. | .. |
---|
101 | 107 | ssize_t debugfs_attr_read(struct file *file, char __user *buf, |
---|
102 | 108 | size_t len, loff_t *ppos); |
---|
103 | 109 | ssize_t debugfs_attr_write(struct file *file, const char __user *buf, |
---|
| 110 | + size_t len, loff_t *ppos); |
---|
| 111 | +ssize_t debugfs_attr_write_signed(struct file *file, const char __user *buf, |
---|
104 | 112 | size_t len, loff_t *ppos); |
---|
105 | 113 | |
---|
106 | 114 | struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry, |
---|
.. | .. |
---|
249 | 257 | return -ENODEV; |
---|
250 | 258 | } |
---|
251 | 259 | |
---|
| 260 | +static inline ssize_t debugfs_attr_write_signed(struct file *file, |
---|
| 261 | + const char __user *buf, |
---|
| 262 | + size_t len, loff_t *ppos) |
---|
| 263 | +{ |
---|
| 264 | + return -ENODEV; |
---|
| 265 | +} |
---|
| 266 | + |
---|
252 | 267 | static inline struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry, |
---|
253 | 268 | struct dentry *new_dir, char *new_name) |
---|
254 | 269 | { |
---|