| .. | .. |
|---|
| 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 | { |
|---|