| .. | .. | 
|---|
| 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 |  /** | 
|---|