Commit e22f6283 authored by Alexey Dobriyan's avatar Alexey Dobriyan Committed by Benjamin Herrenschmidt
Browse files

Convert /proc/device-tree/ to seq_file

parent 5a1eb5c4
Loading
Loading
Loading
Loading
+21 −20
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
#include <linux/init.h>
#include <linux/time.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/stat.h>
#include <linux/string.h>
#include <asm/prom.h>
@@ -25,26 +26,27 @@ static struct proc_dir_entry *proc_device_tree;
/*
 * Supply data on a read from /proc/device-tree/node/property.
 */
static int property_read_proc(char *page, char **start, off_t off,
			      int count, int *eof, void *data)
static int property_proc_show(struct seq_file *m, void *v)
{
	struct property *pp = data;
	int n;
	struct property *pp = m->private;

	if (off >= pp->length) {
		*eof = 1;
	seq_write(m, pp->value, pp->length);
	return 0;
}
	n = pp->length - off;
	if (n > count)
		n = count;
	else
		*eof = 1;
	memcpy(page, (char *)pp->value + off, n);
	*start = page;
	return n;

static int property_proc_open(struct inode *inode, struct file *file)
{
	return single_open(file, property_proc_show, PDE(inode)->data);
}

static const struct file_operations property_proc_fops = {
	.owner		= THIS_MODULE,
	.open		= property_proc_open,
	.read		= seq_read,
	.llseek		= seq_lseek,
	.release	= single_release,
};

/*
 * For a node with a name like "gc@10", we make symlinks called "gc"
 * and "@10" to it.
@@ -63,10 +65,9 @@ __proc_device_tree_add_prop(struct proc_dir_entry *de, struct property *pp,
	 * Unfortunately proc_register puts each new entry
	 * at the beginning of the list.  So we rearrange them.
	 */
	ent = create_proc_read_entry(name,
				     strncmp(name, "security-", 9)
				     ? S_IRUGO : S_IRUSR, de,
				     property_read_proc, pp);
	ent = proc_create_data(name,
			       strncmp(name, "security-", 9) ? S_IRUGO : S_IRUSR,
			       de, &property_proc_fops, pp);
	if (ent == NULL)
		return NULL;