efirtc: Don't use create_proc_read_entry()
authorDavid Howells <dhowells@redhat.com>
Wed, 10 Apr 2013 15:21:08 +0000 (16:21 +0100)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 29 Apr 2013 19:41:55 +0000 (15:41 -0400)
Don't use create_proc_read_entry() as that is deprecated, but rather use
proc_create_data() and seq_file instead.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Arnd Bergmann <arnd@arndb.de>
cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/char/efirtc.c

index a082d00b0f115f0c0d9dfcca07ade43c9f15070e..ea54a6e3f5adfa5311eaccb03d09571961beeee9 100644 (file)
@@ -34,6 +34,7 @@
 #include <linux/init.h>
 #include <linux/rtc.h>
 #include <linux/proc_fs.h>
+#include <linux/seq_file.h>
 #include <linux/efi.h>
 #include <linux/uaccess.h>
 
@@ -296,12 +297,10 @@ static struct miscdevice efi_rtc_dev= {
 /*
  *     We export RAW EFI information to /proc/driver/efirtc
  */
-static int
-efi_rtc_get_status(char *buf)
+static int efi_rtc_proc_show(struct seq_file *m, void *v)
 {
        efi_time_t      eft, alm;
        efi_time_cap_t  cap;
-       char            *p = buf;
        efi_bool_t      enabled, pending;       
        unsigned long   flags;
 
@@ -316,64 +315,63 @@ efi_rtc_get_status(char *buf)
 
        spin_unlock_irqrestore(&efi_rtc_lock,flags);
 
-       p += sprintf(p,
-                    "Time           : %u:%u:%u.%09u\n"
-                    "Date           : %u-%u-%u\n"
-                    "Daylight       : %u\n",
-                    eft.hour, eft.minute, eft.second, eft.nanosecond, 
-                    eft.year, eft.month, eft.day,
-                    eft.daylight);
+       seq_printf(m,
+                  "Time           : %u:%u:%u.%09u\n"
+                  "Date           : %u-%u-%u\n"
+                  "Daylight       : %u\n",
+                  eft.hour, eft.minute, eft.second, eft.nanosecond, 
+                  eft.year, eft.month, eft.day,
+                  eft.daylight);
 
        if (eft.timezone == EFI_UNSPECIFIED_TIMEZONE)
-               p += sprintf(p, "Timezone       : unspecified\n");
+               seq_puts(m, "Timezone       : unspecified\n");
        else
                /* XXX fixme: convert to string? */
-               p += sprintf(p, "Timezone       : %u\n", eft.timezone);
+               seq_printf(m, "Timezone       : %u\n", eft.timezone);
                
 
-       p += sprintf(p,
-                    "Alarm Time     : %u:%u:%u.%09u\n"
-                    "Alarm Date     : %u-%u-%u\n"
-                    "Alarm Daylight : %u\n"
-                    "Enabled        : %s\n"
-                    "Pending        : %s\n",
-                    alm.hour, alm.minute, alm.second, alm.nanosecond, 
-                    alm.year, alm.month, alm.day, 
-                    alm.daylight,
-                    enabled == 1 ? "yes" : "no",
-                    pending == 1 ? "yes" : "no");
+       seq_printf(m,
+                  "Alarm Time     : %u:%u:%u.%09u\n"
+                  "Alarm Date     : %u-%u-%u\n"
+                  "Alarm Daylight : %u\n"
+                  "Enabled        : %s\n"
+                  "Pending        : %s\n",
+                  alm.hour, alm.minute, alm.second, alm.nanosecond, 
+                  alm.year, alm.month, alm.day, 
+                  alm.daylight,
+                  enabled == 1 ? "yes" : "no",
+                  pending == 1 ? "yes" : "no");
 
        if (eft.timezone == EFI_UNSPECIFIED_TIMEZONE)
-               p += sprintf(p, "Timezone       : unspecified\n");
+               seq_puts(m, "Timezone       : unspecified\n");
        else
                /* XXX fixme: convert to string? */
-               p += sprintf(p, "Timezone       : %u\n", alm.timezone);
+               seq_printf(m, "Timezone       : %u\n", alm.timezone);
 
        /*
         * now prints the capabilities
         */
-       p += sprintf(p,
-                    "Resolution     : %u\n"
-                    "Accuracy       : %u\n"
-                    "SetstoZero     : %u\n",
-                     cap.resolution, cap.accuracy, cap.sets_to_zero);
+       seq_printf(m,
+                  "Resolution     : %u\n"
+                  "Accuracy       : %u\n"
+                  "SetstoZero     : %u\n",
+                  cap.resolution, cap.accuracy, cap.sets_to_zero);
 
-       return  p - buf;
+       return 0;
 }
 
-static int
-efi_rtc_read_proc(char *page, char **start, off_t off,
-                                 int count, int *eof, void *data)
+static int efi_rtc_proc_open(struct inode *inode, struct file *file)
 {
-        int len = efi_rtc_get_status(page);
-        if (len <= off+count) *eof = 1;
-        *start = page + off;
-        len -= off;
-        if (len>count) len = count;
-        if (len<0) len = 0;
-        return len;
+       return single_open(file, efi_rtc_proc_show, NULL);
 }
 
+static const struct file_operations efi_rtc_proc_fops = {
+       .open           = efi_rtc_proc_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = seq_release,
+};
+
 static int __init 
 efi_rtc_init(void)
 {
@@ -389,8 +387,7 @@ efi_rtc_init(void)
                return ret;
        }
 
-       dir = create_proc_read_entry ("driver/efirtc", 0, NULL,
-                                     efi_rtc_read_proc, NULL);
+       dir = proc_create("driver/efirtc", 0, NULL, &efi_rtc_proc_fops);
        if (dir == NULL) {
                printk(KERN_ERR "efirtc: can't create /proc/driver/efirtc.\n");
                misc_deregister(&efi_rtc_dev);