diff options
Diffstat (limited to 'arch/blackfin/kernel/cplbinfo.c')
-rw-r--r-- | arch/blackfin/kernel/cplbinfo.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/arch/blackfin/kernel/cplbinfo.c b/arch/blackfin/kernel/cplbinfo.c index 26d181943001..0bdaa517a501 100644 --- a/arch/blackfin/kernel/cplbinfo.c +++ b/arch/blackfin/kernel/cplbinfo.c | |||
@@ -112,24 +112,21 @@ static const struct seq_operations cplbinfo_sops = { | |||
112 | .show = cplbinfo_show, | 112 | .show = cplbinfo_show, |
113 | }; | 113 | }; |
114 | 114 | ||
115 | #define CPLBINFO_DCPLB_FLAG 0x80000000 | ||
116 | |||
115 | static int cplbinfo_open(struct inode *inode, struct file *file) | 117 | static int cplbinfo_open(struct inode *inode, struct file *file) |
116 | { | 118 | { |
117 | char buf[256], *path, *p; | 119 | struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode); |
120 | char cplb_type; | ||
118 | unsigned int cpu; | 121 | unsigned int cpu; |
119 | char *s_cpu, *s_cplb; | ||
120 | int ret; | 122 | int ret; |
121 | struct seq_file *m; | 123 | struct seq_file *m; |
122 | struct cplbinfo_data *cdata; | 124 | struct cplbinfo_data *cdata; |
123 | 125 | ||
124 | path = d_path(&file->f_path, buf, sizeof(buf)); | 126 | cpu = (unsigned int)pde->data; |
125 | if (IS_ERR(path)) | 127 | cplb_type = cpu & CPLBINFO_DCPLB_FLAG ? 'D' : 'I'; |
126 | return PTR_ERR(path); | 128 | cpu &= ~CPLBINFO_DCPLB_FLAG; |
127 | s_cpu = strstr(path, "/cpu"); | ||
128 | s_cplb = strrchr(path, '/'); | ||
129 | if (!s_cpu || !s_cplb) | ||
130 | return -EINVAL; | ||
131 | 129 | ||
132 | cpu = simple_strtoul(s_cpu + 4, &p, 10); | ||
133 | if (!cpu_online(cpu)) | 130 | if (!cpu_online(cpu)) |
134 | return -ENODEV; | 131 | return -ENODEV; |
135 | 132 | ||
@@ -140,7 +137,7 @@ static int cplbinfo_open(struct inode *inode, struct file *file) | |||
140 | cdata = m->private; | 137 | cdata = m->private; |
141 | 138 | ||
142 | cdata->pos = 0; | 139 | cdata->pos = 0; |
143 | cdata->cplb_type = toupper(s_cplb[1]); | 140 | cdata->cplb_type = cplb_type; |
144 | cplbinfo_seq_init(cdata, cpu); | 141 | cplbinfo_seq_init(cdata, cpu); |
145 | 142 | ||
146 | return 0; | 143 | return 0; |
@@ -169,8 +166,10 @@ static int __init cplbinfo_init(void) | |||
169 | if (!cpu_dir) | 166 | if (!cpu_dir) |
170 | return -ENOMEM; | 167 | return -ENOMEM; |
171 | 168 | ||
172 | proc_create("icplb", S_IRUGO, cpu_dir, &cplbinfo_fops); | 169 | proc_create_data("icplb", S_IRUGO, cpu_dir, &cplbinfo_fops, |
173 | proc_create("dcplb", S_IRUGO, cpu_dir, &cplbinfo_fops); | 170 | (void *)cpu); |
171 | proc_create_data("dcplb", S_IRUGO, cpu_dir, &cplbinfo_fops, | ||
172 | (void *)(cpu | CPLBINFO_DCPLB_FLAG)); | ||
174 | } | 173 | } |
175 | 174 | ||
176 | return 0; | 175 | return 0; |