proc: introduce proc_create_single{,_data}
Variants of proc_create{,_data} that directly take a seq_file show callback and drastically reduces the boilerplate code in the callers. All trivial callers converted over. Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
@@ -920,18 +920,6 @@ static int proc_palinfo_show(struct seq_file *m, void *v)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int proc_palinfo_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, proc_palinfo_show, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
static const struct file_operations proc_palinfo_fops = {
|
||||
.open = proc_palinfo_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
};
|
||||
|
||||
static int palinfo_add_proc(unsigned int cpu)
|
||||
{
|
||||
pal_func_cpu_u_t f;
|
||||
@@ -948,8 +936,8 @@ static int palinfo_add_proc(unsigned int cpu)
|
||||
|
||||
for (j=0; j < NR_PALINFO_ENTRIES; j++) {
|
||||
f.func_id = j;
|
||||
proc_create_data(palinfo_entries[j].name, 0, cpu_dir,
|
||||
&proc_palinfo_fops, (void *)f.value);
|
||||
proc_create_single_data(palinfo_entries[j].name, 0, cpu_dir,
|
||||
proc_palinfo_show, (void *)f.value);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@@ -54,8 +54,6 @@ MODULE_AUTHOR("Jesse Barnes <jbarnes@sgi.com>");
|
||||
MODULE_DESCRIPTION("/proc interface to IA-64 SAL features");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
static const struct file_operations proc_salinfo_fops;
|
||||
|
||||
typedef struct {
|
||||
const char *name; /* name of the proc entry */
|
||||
unsigned long feature; /* feature bit */
|
||||
@@ -578,6 +576,17 @@ static int salinfo_cpu_pre_down(unsigned int cpu)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* 'data' contains an integer that corresponds to the feature we're
|
||||
* testing
|
||||
*/
|
||||
static int proc_salinfo_show(struct seq_file *m, void *v)
|
||||
{
|
||||
unsigned long data = (unsigned long)v;
|
||||
seq_puts(m, (sal_platform_features & data) ? "1\n" : "0\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init
|
||||
salinfo_init(void)
|
||||
{
|
||||
@@ -593,9 +602,9 @@ salinfo_init(void)
|
||||
|
||||
for (i=0; i < NR_SALINFO_ENTRIES; i++) {
|
||||
/* pass the feature bit in question as misc data */
|
||||
*sdir++ = proc_create_data(salinfo_entries[i].name, 0, salinfo_dir,
|
||||
&proc_salinfo_fops,
|
||||
(void *)salinfo_entries[i].feature);
|
||||
*sdir++ = proc_create_single_data(salinfo_entries[i].name, 0,
|
||||
salinfo_dir, proc_salinfo_show,
|
||||
(void *)salinfo_entries[i].feature);
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(salinfo_log_name); i++) {
|
||||
@@ -633,27 +642,4 @@ salinfo_init(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* 'data' contains an integer that corresponds to the feature we're
|
||||
* testing
|
||||
*/
|
||||
static int proc_salinfo_show(struct seq_file *m, void *v)
|
||||
{
|
||||
unsigned long data = (unsigned long)v;
|
||||
seq_puts(m, (sal_platform_features & data) ? "1\n" : "0\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int proc_salinfo_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, proc_salinfo_show, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
static const struct file_operations proc_salinfo_fops = {
|
||||
.open = proc_salinfo_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
};
|
||||
|
||||
module_init(salinfo_init);
|
||||
|
@@ -140,18 +140,6 @@ static int proc_fit_show(struct seq_file *m, void *v)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int proc_fit_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, proc_fit_show, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
static const struct file_operations proc_fit_fops = {
|
||||
.open = proc_fit_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
};
|
||||
|
||||
static int proc_version_show(struct seq_file *m, void *v)
|
||||
{
|
||||
unsigned long nasid = (unsigned long)m->private;
|
||||
@@ -174,18 +162,6 @@ static int proc_version_show(struct seq_file *m, void *v)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int proc_version_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, proc_version_show, PDE_DATA(inode));
|
||||
}
|
||||
|
||||
static const struct file_operations proc_version_fops = {
|
||||
.open = proc_version_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
};
|
||||
|
||||
/* module entry points */
|
||||
int __init prominfo_init(void);
|
||||
void __exit prominfo_exit(void);
|
||||
@@ -217,10 +193,10 @@ int __init prominfo_init(void)
|
||||
if (!dir)
|
||||
continue;
|
||||
nasid = cnodeid_to_nasid(cnodeid);
|
||||
proc_create_data("fit", 0, dir,
|
||||
&proc_fit_fops, (void *)nasid);
|
||||
proc_create_data("version", 0, dir,
|
||||
&proc_version_fops, (void *)nasid);
|
||||
proc_create_single_data("fit", 0, dir, proc_fit_show,
|
||||
(void *)nasid);
|
||||
proc_create_single_data("version", 0, dir, proc_version_show,
|
||||
(void *)nasid);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@@ -18,33 +18,18 @@ static int partition_id_show(struct seq_file *s, void *p)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int partition_id_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, partition_id_show, NULL);
|
||||
}
|
||||
|
||||
static int system_serial_number_show(struct seq_file *s, void *p)
|
||||
{
|
||||
seq_printf(s, "%s\n", sn_system_serial_number());
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int system_serial_number_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, system_serial_number_show, NULL);
|
||||
}
|
||||
|
||||
static int licenseID_show(struct seq_file *s, void *p)
|
||||
{
|
||||
seq_printf(s, "0x%llx\n", sn_partition_serial_number_val());
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int licenseID_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, licenseID_show, NULL);
|
||||
}
|
||||
|
||||
static int coherence_id_show(struct seq_file *s, void *p)
|
||||
{
|
||||
seq_printf(s, "%d\n", partition_coherence_id());
|
||||
@@ -52,43 +37,10 @@ static int coherence_id_show(struct seq_file *s, void *p)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int coherence_id_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, coherence_id_show, NULL);
|
||||
}
|
||||
|
||||
/* /proc/sgi_sn/sn_topology uses seq_file, see sn_hwperf.c */
|
||||
extern int sn_topology_open(struct inode *, struct file *);
|
||||
extern int sn_topology_release(struct inode *, struct file *);
|
||||
|
||||
static const struct file_operations proc_partition_id_fops = {
|
||||
.open = partition_id_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
};
|
||||
|
||||
static const struct file_operations proc_system_sn_fops = {
|
||||
.open = system_serial_number_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
};
|
||||
|
||||
static const struct file_operations proc_license_id_fops = {
|
||||
.open = licenseID_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
};
|
||||
|
||||
static const struct file_operations proc_coherence_id_fops = {
|
||||
.open = coherence_id_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
};
|
||||
|
||||
static const struct file_operations proc_sn_topo_fops = {
|
||||
.open = sn_topology_open,
|
||||
.read = seq_read,
|
||||
@@ -104,13 +56,13 @@ void register_sn_procfs(void)
|
||||
if (!(sgi_proc_dir = proc_mkdir("sgi_sn", NULL)))
|
||||
return;
|
||||
|
||||
proc_create("partition_id", 0444, sgi_proc_dir,
|
||||
&proc_partition_id_fops);
|
||||
proc_create("system_serial_number", 0444, sgi_proc_dir,
|
||||
&proc_system_sn_fops);
|
||||
proc_create("licenseID", 0444, sgi_proc_dir, &proc_license_id_fops);
|
||||
proc_create("coherence_id", 0444, sgi_proc_dir,
|
||||
&proc_coherence_id_fops);
|
||||
proc_create_single("partition_id", 0444, sgi_proc_dir,
|
||||
partition_id_show);
|
||||
proc_create_single("system_serial_number", 0444, sgi_proc_dir,
|
||||
system_serial_number_show);
|
||||
proc_create_single("licenseID", 0444, sgi_proc_dir, licenseID_show);
|
||||
proc_create_single("coherence_id", 0444, sgi_proc_dir,
|
||||
coherence_id_show);
|
||||
proc_create("sn_topology", 0444, sgi_proc_dir, &proc_sn_topo_fops);
|
||||
}
|
||||
|
||||
|
Viittaa uudesa ongelmassa
Block a user