]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - arch/arm/kernel/atags_proc.c
procfs: new helper - PDE_DATA(inode)
[mirror_ubuntu-bionic-kernel.git] / arch / arm / kernel / atags_proc.c
index 42a1a1415fa6c37ee96b742d4bb3c1bdc9a6542d..c7ff8073416fb0fc4619f597d17cc738985c0a0f 100644 (file)
@@ -9,24 +9,18 @@ struct buffer {
        char data[];
 };
 
-static int
-read_buffer(char* page, char** start, off_t off, int count,
-       int* eof, void* data)
+static ssize_t atags_read(struct file *file, char __user *buf,
+                         size_t count, loff_t *ppos)
 {
-       struct buffer *buffer = (struct buffer *)data;
-
-       if (off >= buffer->size) {
-               *eof = 1;
-               return 0;
-       }
-
-       count = min((int) (buffer->size - off), count);
-
-       memcpy(page, &buffer->data[off], count);
-
-       return count;
+       struct buffer *b = PDE_DATA(file_inode(file));
+       return simple_read_from_buffer(buf, count, ppos, b->data, b->size);
 }
 
+static const struct file_operations atags_fops = {
+       .read = atags_read,
+       .llseek = default_llseek,
+};
+
 #define BOOT_PARAMS_SIZE 1536
 static char __initdata atags_copy[BOOT_PARAMS_SIZE];
 
@@ -66,9 +60,7 @@ static int __init init_atags_procfs(void)
        b->size = size;
        memcpy(b->data, atags_copy, size);
 
-       tags_entry = create_proc_read_entry("atags", 0400,
-                       NULL, read_buffer, b);
-
+       tags_entry = proc_create_data("atags", 0400, NULL, &atags_fops, b);
        if (!tags_entry)
                goto nomem;