diff options
Diffstat (limited to 'arch/ia64/kernel/salinfo.c')
| -rw-r--r-- | arch/ia64/kernel/salinfo.c | 57 | 
1 files changed, 26 insertions, 31 deletions
diff --git a/arch/ia64/kernel/salinfo.c b/arch/ia64/kernel/salinfo.c index aa527d7e91f..5035245cb25 100644 --- a/arch/ia64/kernel/salinfo.c +++ b/arch/ia64/kernel/salinfo.c @@ -40,6 +40,7 @@  #include <linux/cpu.h>  #include <linux/types.h>  #include <linux/proc_fs.h> +#include <linux/seq_file.h>  #include <linux/module.h>  #include <linux/smp.h>  #include <linux/timer.h> @@ -53,7 +54,7 @@ MODULE_AUTHOR("Jesse Barnes <jbarnes@sgi.com>");  MODULE_DESCRIPTION("/proc interface to IA-64 SAL features");  MODULE_LICENSE("GPL"); -static int salinfo_read(char *page, char **start, off_t off, int count, int *eof, void *data); +static const struct file_operations proc_salinfo_fops;  typedef struct {  	const char		*name;		/* name of the proc entry */ @@ -65,7 +66,7 @@ typedef struct {   * List {name,feature} pairs for every entry in /proc/sal/<feature>   * that this module exports   */ -static salinfo_entry_t salinfo_entries[]={ +static const salinfo_entry_t salinfo_entries[]={  	{ "bus_lock",           IA64_SAL_PLATFORM_FEATURE_BUS_LOCK, },  	{ "irq_redirection",	IA64_SAL_PLATFORM_FEATURE_IRQ_REDIR_HINT, },  	{ "ipi_redirection",	IA64_SAL_PLATFORM_FEATURE_IPI_REDIR_HINT, }, @@ -301,9 +302,7 @@ salinfo_event_open(struct inode *inode, struct file *file)  static ssize_t  salinfo_event_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)  { -	struct inode *inode = file_inode(file); -	struct proc_dir_entry *entry = PDE(inode); -	struct salinfo_data *data = entry->data; +	struct salinfo_data *data = PDE_DATA(file_inode(file));  	char cmd[32];  	size_t size;  	int i, n, cpu = -1; @@ -360,8 +359,7 @@ static const struct file_operations salinfo_event_fops = {  static int  salinfo_log_open(struct inode *inode, struct file *file)  { -	struct proc_dir_entry *entry = PDE(inode); -	struct salinfo_data *data = entry->data; +	struct salinfo_data *data = PDE_DATA(inode);  	if (!capable(CAP_SYS_ADMIN))  		return -EPERM; @@ -386,8 +384,7 @@ salinfo_log_open(struct inode *inode, struct file *file)  static int  salinfo_log_release(struct inode *inode, struct file *file)  { -	struct proc_dir_entry *entry = PDE(inode); -	struct salinfo_data *data = entry->data; +	struct salinfo_data *data = PDE_DATA(inode);  	if (data->state == STATE_NO_DATA) {  		vfree(data->log_buffer); @@ -463,9 +460,7 @@ retry:  static ssize_t  salinfo_log_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)  { -	struct inode *inode = file_inode(file); -	struct proc_dir_entry *entry = PDE(inode); -	struct salinfo_data *data = entry->data; +	struct salinfo_data *data = PDE_DATA(file_inode(file));  	u8 *buf;  	u64 bufsize; @@ -524,9 +519,7 @@ salinfo_log_clear(struct salinfo_data *data, int cpu)  static ssize_t  salinfo_log_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)  { -	struct inode *inode = file_inode(file); -	struct proc_dir_entry *entry = PDE(inode); -	struct salinfo_data *data = entry->data; +	struct salinfo_data *data = PDE_DATA(file_inode(file));  	char cmd[32];  	size_t size;  	u32 offset; @@ -637,8 +630,9 @@ salinfo_init(void)  	for (i=0; i < NR_SALINFO_ENTRIES; i++) {  		/* pass the feature bit in question as misc data */ -		*sdir++ = create_proc_read_entry (salinfo_entries[i].name, 0, salinfo_dir, -						  salinfo_read, (void *)salinfo_entries[i].feature); +		*sdir++ = proc_create_data(salinfo_entries[i].name, 0, salinfo_dir, +					   &proc_salinfo_fops, +					   (void *)salinfo_entries[i].feature);  	}  	for (i = 0; i < ARRAY_SIZE(salinfo_log_name); i++) { @@ -684,22 +678,23 @@ salinfo_init(void)   * 'data' contains an integer that corresponds to the feature we're   * testing   */ -static int -salinfo_read(char *page, char **start, off_t off, int count, int *eof, void *data) +static int proc_salinfo_show(struct seq_file *m, void *v)  { -	int len = 0; - -	len = sprintf(page, (sal_platform_features & (unsigned long)data) ? "1\n" : "0\n"); - -	if (len <= off+count) *eof = 1; - -	*start = page + off; -	len   -= off; - -	if (len>count) len = count; -	if (len<0) len = 0; +	unsigned long data = (unsigned long)v; +	seq_puts(m, (sal_platform_features & data) ? "1\n" : "0\n"); +	return 0; +} -	return len; +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	= seq_release, +}; +  module_init(salinfo_init);  |