.. | .. |
---|
378 | 378 | } |
---|
379 | 379 | EXPORT_SYMBOL_GPL(debugfs_attr_read); |
---|
380 | 380 | |
---|
381 | | -ssize_t debugfs_attr_write(struct file *file, const char __user *buf, |
---|
382 | | - size_t len, loff_t *ppos) |
---|
| 381 | +static ssize_t debugfs_attr_write_xsigned(struct file *file, const char __user *buf, |
---|
| 382 | + size_t len, loff_t *ppos, bool is_signed) |
---|
383 | 383 | { |
---|
384 | 384 | struct dentry *dentry = F_DENTRY(file); |
---|
385 | 385 | ssize_t ret; |
---|
.. | .. |
---|
387 | 387 | ret = debugfs_file_get(dentry); |
---|
388 | 388 | if (unlikely(ret)) |
---|
389 | 389 | return ret; |
---|
390 | | - ret = simple_attr_write(file, buf, len, ppos); |
---|
| 390 | + if (is_signed) |
---|
| 391 | + ret = simple_attr_write_signed(file, buf, len, ppos); |
---|
| 392 | + else |
---|
| 393 | + ret = simple_attr_write(file, buf, len, ppos); |
---|
391 | 394 | debugfs_file_put(dentry); |
---|
392 | 395 | return ret; |
---|
393 | 396 | } |
---|
| 397 | + |
---|
| 398 | +ssize_t debugfs_attr_write(struct file *file, const char __user *buf, |
---|
| 399 | + size_t len, loff_t *ppos) |
---|
| 400 | +{ |
---|
| 401 | + return debugfs_attr_write_xsigned(file, buf, len, ppos, false); |
---|
| 402 | +} |
---|
394 | 403 | EXPORT_SYMBOL_GPL(debugfs_attr_write); |
---|
| 404 | + |
---|
| 405 | +ssize_t debugfs_attr_write_signed(struct file *file, const char __user *buf, |
---|
| 406 | + size_t len, loff_t *ppos) |
---|
| 407 | +{ |
---|
| 408 | + return debugfs_attr_write_xsigned(file, buf, len, ppos, true); |
---|
| 409 | +} |
---|
| 410 | +EXPORT_SYMBOL_GPL(debugfs_attr_write_signed); |
---|
395 | 411 | |
---|
396 | 412 | static struct dentry *debugfs_create_mode_unsafe(const char *name, umode_t mode, |
---|
397 | 413 | struct dentry *parent, void *value, |
---|
.. | .. |
---|
748 | 764 | *val = atomic_read((atomic_t *)data); |
---|
749 | 765 | return 0; |
---|
750 | 766 | } |
---|
751 | | -DEFINE_DEBUGFS_ATTRIBUTE(fops_atomic_t, debugfs_atomic_t_get, |
---|
| 767 | +DEFINE_DEBUGFS_ATTRIBUTE_SIGNED(fops_atomic_t, debugfs_atomic_t_get, |
---|
752 | 768 | debugfs_atomic_t_set, "%lld\n"); |
---|
753 | | -DEFINE_DEBUGFS_ATTRIBUTE(fops_atomic_t_ro, debugfs_atomic_t_get, NULL, |
---|
| 769 | +DEFINE_DEBUGFS_ATTRIBUTE_SIGNED(fops_atomic_t_ro, debugfs_atomic_t_get, NULL, |
---|
754 | 770 | "%lld\n"); |
---|
755 | | -DEFINE_DEBUGFS_ATTRIBUTE(fops_atomic_t_wo, NULL, debugfs_atomic_t_set, |
---|
| 771 | +DEFINE_DEBUGFS_ATTRIBUTE_SIGNED(fops_atomic_t_wo, NULL, debugfs_atomic_t_set, |
---|
756 | 772 | "%lld\n"); |
---|
757 | 773 | |
---|
758 | 774 | /** |
---|