From a3143d5fd454559bb1e1ad8aac86e25430b56ac7 Mon Sep 17 00:00:00 2001 From: Luis Ortega Perez de Villar Date: Thu, 18 Jul 2013 23:04:51 +0200 Subject: scull: Makefile: Declare LDDINC variable earlier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the definition of LDDINC earlier into the file. This prevents the following compile time error: implicit declaration of function ‘KBUILD_STR’. --- scull/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scull/Makefile b/scull/Makefile index ac6383a..34b90e9 100644 --- a/scull/Makefile +++ b/scull/Makefile @@ -9,6 +9,8 @@ else DEBFLAGS = -O2 endif +LDDINC=$(PWD)/../include + EXTRA_CFLAGS += $(DEBFLAGS) EXTRA_CFLAGS += -I$(LDDINC) @@ -25,7 +27,7 @@ KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) modules: - $(MAKE) -C $(KERNELDIR) M=$(PWD) LDDINC=$(PWD)/../include modules + $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif -- cgit v1.2.1-18-gbd029 From 542aeada0dd544b751c689a8a530e5c915cd7e4e Mon Sep 17 00:00:00 2001 From: Luis Ortega Perez de Villar Date: Fri, 19 Jul 2013 13:17:35 +0200 Subject: Don't use create_proc_entry() and create_proc_read_entry() Don't use create_proc_entry() and create_proc_read_entry() as they are deprecated, but rather use proc_create() and proc_create_data() respectively and seq_file instead. --- scull/main.c | 89 +++++++++++++++++++++++++++++++----------------------------- scull/pipe.c | 66 +++++++++++++++++++++----------------------- 2 files changed, 77 insertions(+), 78 deletions(-) diff --git a/scull/main.c b/scull/main.c index 791ab21..3946c8e 100644 --- a/scull/main.c +++ b/scull/main.c @@ -85,41 +85,34 @@ int scull_trim(struct scull_dev *dev) * The proc filesystem: function to read and entry */ -int scull_read_procmem(char *buf, char **start, off_t offset, - int count, int *eof, void *data) +int scull_read_procmem(struct seq_file *s, void *v) { - int i, j, len = 0; - int limit = count - 80; /* Don't print more than this */ - - for (i = 0; i < scull_nr_devs && len <= limit; i++) { - struct scull_dev *d = &scull_devices[i]; - struct scull_qset *qs = d->data; - if (down_interruptible(&d->sem)) - return -ERESTARTSYS; - len += sprintf(buf+len,"\nDevice %i: qset %i, q %i, sz %li\n", - i, d->qset, d->quantum, d->size); - for (; qs && len <= limit; qs = qs->next) { /* scan the list */ - len += sprintf(buf + len, " item at %p, qset at %p\n", - qs, qs->data); - if (qs->data && !qs->next) /* dump only the last item */ - for (j = 0; j < d->qset; j++) { - if (qs->data[j]) - len += sprintf(buf + len, - " % 4i: %8p\n", - j, qs->data[j]); - } - } - up(&scull_devices[i].sem); - } - *eof = 1; - return len; + int i, j; + int limit = s->size - 80; /* Don't print more than this */ + + for (i = 0; i < scull_nr_devs && s->count <= limit; i++) { + struct scull_dev *d = &scull_devices[i]; + struct scull_qset *qs = d->data; + if (down_interruptible(&d->sem)) + return -ERESTARTSYS; + seq_printf(s,"\nDevice %i: qset %i, q %i, sz %li\n", + i, d->qset, d->quantum, d->size); + for (; qs && s->count <= limit; qs = qs->next) { /* scan the list */ + seq_printf(s, " item at %p, qset at %p\n", + qs, qs->data); + if (qs->data && !qs->next) /* dump only the last item */ + for (j = 0; j < d->qset; j++) { + if (qs->data[j]) + seq_printf(s, " % 4i: %8p\n", + j, qs->data[j]); + } + } + up(&scull_devices[i].sem); + } + return 0; } -/* - * For now, the seq_file implementation will exist in parallel. The - * older read_procmem function should maybe go away, though. - */ /* * Here are our sequence iteration methods. Our "position" is @@ -180,20 +173,33 @@ static struct seq_operations scull_seq_ops = { }; /* - * Now to implement the /proc file we need only make an open + * Now to implement the /proc files we need only make an open * method which sets up the sequence operators. */ -static int scull_proc_open(struct inode *inode, struct file *file) +static int scullmem_proc_open(struct inode *inode, struct file *file) +{ + return single_open(file, scull_read_procmem, NULL); +} + +static int scullseq_proc_open(struct inode *inode, struct file *file) { return seq_open(file, &scull_seq_ops); } /* - * Create a set of file operations for our proc file. + * Create a set of file operations for our proc files. */ -static struct file_operations scull_proc_ops = { +static struct file_operations scullmem_proc_ops = { + .owner = THIS_MODULE, + .open = scullmem_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release +}; + +static struct file_operations scullseq_proc_ops = { .owner = THIS_MODULE, - .open = scull_proc_open, + .open = scullseq_proc_open, .read = seq_read, .llseek = seq_lseek, .release = seq_release @@ -206,13 +212,10 @@ static struct file_operations scull_proc_ops = { static void scull_create_proc(void) { - struct proc_dir_entry *entry; - create_proc_read_entry("scullmem", 0 /* default mode */, - NULL /* parent dir */, scull_read_procmem, - NULL /* client data */); - entry = create_proc_entry("scullseq", 0, NULL); - if (entry) - entry->proc_fops = &scull_proc_ops; + proc_create_data("scullmem", 0 /* default mode */, + NULL /* parent dir */, &scullmem_proc_ops, + NULL /* client data */); + proc_create("scullseq", 0, NULL, &scullseq_proc_ops); } static void scull_remove_proc(void) diff --git a/scull/pipe.c b/scull/pipe.c index cba06a3..3e7b8cd 100644 --- a/scull/pipe.c +++ b/scull/pipe.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "scull.h" /* local definitions */ @@ -262,46 +263,40 @@ static int scull_p_fasync(int fd, struct file *filp, int mode) /* FIXME this should use seq_file */ #ifdef SCULL_DEBUG -static void scullp_proc_offset(char *buf, char **start, off_t *offset, int *len) + +static int scull_read_p_mem(struct seq_file *s, void *v) { - if (*offset == 0) - return; - if (*offset >= *len) { /* Not there yet */ - *offset -= *len; - *len = 0; - } - else { /* We're into the interesting stuff now */ - *start = buf + *offset; - *offset = 0; - } + int i; + struct scull_pipe *p; + +#define LIMIT (PAGE_SIZE-200) /* don't print any more after this size */ + seq_printf(s, "Default buffersize is %i\n", scull_p_buffer); + for(i = 0; icount <= LIMIT; i++) { + p = &scull_p_devices[i]; + if (down_interruptible(&p->sem)) + return -ERESTARTSYS; + seq_printf(s, "\nDevice %i: %p\n", i, p); +/* seq_printf(s, " Queues: %p %p\n", p->inq, p->outq);*/ + seq_printf(s, " Buffer: %p to %p (%i bytes)\n", p->buffer, p->end, p->buffersize); + seq_printf(s, " rp %p wp %p\n", p->rp, p->wp); + seq_printf(s, " readers %i writers %i\n", p->nreaders, p->nwriters); + up(&p->sem); + } + return 0; } - -static int scull_read_p_mem(char *buf, char **start, off_t offset, int count, - int *eof, void *data) +static int scullpipe_proc_open(struct inode *inode, struct file *file) { - int i, len; - struct scull_pipe *p; - -#define LIMIT (PAGE_SIZE-200) /* don't print any more after this size */ - *start = buf; - len = sprintf(buf, "Default buffersize is %i\n", scull_p_buffer); - for(i = 0; isem)) - return -ERESTARTSYS; - len += sprintf(buf+len, "\nDevice %i: %p\n", i, p); -/* len += sprintf(buf+len, " Queues: %p %p\n", p->inq, p->outq);*/ - len += sprintf(buf+len, " Buffer: %p to %p (%i bytes)\n", p->buffer, p->end, p->buffersize); - len += sprintf(buf+len, " rp %p wp %p\n", p->rp, p->wp); - len += sprintf(buf+len, " readers %i writers %i\n", p->nreaders, p->nwriters); - up(&p->sem); - scullp_proc_offset(buf, start, &offset, &len); - } - *eof = (len <= LIMIT); - return len; + return single_open(file, scull_read_p_mem, NULL); } +static struct file_operations scullpipe_proc_ops = { + .owner = THIS_MODULE, + .open = scullpipe_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release +}; #endif @@ -367,7 +362,8 @@ int scull_p_init(dev_t firstdev) scull_p_setup_cdev(scull_p_devices + i, i); } #ifdef SCULL_DEBUG - create_proc_read_entry("scullpipe", 0, NULL, scull_read_p_mem, NULL); + //create_proc_read_entry("scullpipe", 0, NULL, scull_read_p_mem, NULL); + proc_create("scullpipe", 0, NULL, &scullpipe_proc_ops); #endif return scull_p_nr_devs; } -- cgit v1.2.1-18-gbd029 From b39bcf923ae57a40dade8f5d16d3dcd084ec881a Mon Sep 17 00:00:00 2001 From: Luis Ortega Perez de Villar Date: Fri, 19 Jul 2013 13:34:06 +0200 Subject: scull: pipe: Remove unused commented line Remove commented line with deprecated create_proc_read_entry call that was forgotten to remove. --- scull/pipe.c | 1 - 1 file changed, 1 deletion(-) diff --git a/scull/pipe.c b/scull/pipe.c index 3e7b8cd..b278d4e 100644 --- a/scull/pipe.c +++ b/scull/pipe.c @@ -362,7 +362,6 @@ int scull_p_init(dev_t firstdev) scull_p_setup_cdev(scull_p_devices + i, i); } #ifdef SCULL_DEBUG - //create_proc_read_entry("scullpipe", 0, NULL, scull_read_p_mem, NULL); proc_create("scullpipe", 0, NULL, &scullpipe_proc_ops); #endif return scull_p_nr_devs; -- cgit v1.2.1-18-gbd029 From cbfbcb953aa0f1d004f3bce5d8c83400cbfbdc7c Mon Sep 17 00:00:00 2001 From: Luis Ortega Perez de Villar Date: Fri, 19 Jul 2013 22:05:41 +0200 Subject: scull: main | pipe : Fix coding style Replace white space indentation introduced with the previous patch with 8 characters width TABs to comply with the kernel coding style. --- scull/main.c | 20 ++++++++++---------- scull/pipe.c | 44 ++++++++++++++++++++++---------------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/scull/main.c b/scull/main.c index 3946c8e..d0eef18 100644 --- a/scull/main.c +++ b/scull/main.c @@ -178,7 +178,7 @@ static struct seq_operations scull_seq_ops = { */ static int scullmem_proc_open(struct inode *inode, struct file *file) { - return single_open(file, scull_read_procmem, NULL); + return single_open(file, scull_read_procmem, NULL); } static int scullseq_proc_open(struct inode *inode, struct file *file) @@ -190,11 +190,11 @@ static int scullseq_proc_open(struct inode *inode, struct file *file) * Create a set of file operations for our proc files. */ static struct file_operations scullmem_proc_ops = { - .owner = THIS_MODULE, - .open = scullmem_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release + .owner = THIS_MODULE, + .open = scullmem_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release }; static struct file_operations scullseq_proc_ops = { @@ -212,10 +212,10 @@ static struct file_operations scullseq_proc_ops = { static void scull_create_proc(void) { - proc_create_data("scullmem", 0 /* default mode */, - NULL /* parent dir */, &scullmem_proc_ops, - NULL /* client data */); - proc_create("scullseq", 0, NULL, &scullseq_proc_ops); + proc_create_data("scullmem", 0 /* default mode */, + NULL /* parent dir */, &scullmem_proc_ops, + NULL /* client data */); + proc_create("scullseq", 0, NULL, &scullseq_proc_ops); } static void scull_remove_proc(void) diff --git a/scull/pipe.c b/scull/pipe.c index b278d4e..fe19e6a 100644 --- a/scull/pipe.c +++ b/scull/pipe.c @@ -266,36 +266,36 @@ static int scull_p_fasync(int fd, struct file *filp, int mode) static int scull_read_p_mem(struct seq_file *s, void *v) { - int i; - struct scull_pipe *p; + int i; + struct scull_pipe *p; #define LIMIT (PAGE_SIZE-200) /* don't print any more after this size */ - seq_printf(s, "Default buffersize is %i\n", scull_p_buffer); - for(i = 0; icount <= LIMIT; i++) { - p = &scull_p_devices[i]; - if (down_interruptible(&p->sem)) - return -ERESTARTSYS; - seq_printf(s, "\nDevice %i: %p\n", i, p); -/* seq_printf(s, " Queues: %p %p\n", p->inq, p->outq);*/ - seq_printf(s, " Buffer: %p to %p (%i bytes)\n", p->buffer, p->end, p->buffersize); - seq_printf(s, " rp %p wp %p\n", p->rp, p->wp); - seq_printf(s, " readers %i writers %i\n", p->nreaders, p->nwriters); - up(&p->sem); - } - return 0; + seq_printf(s, "Default buffersize is %i\n", scull_p_buffer); + for(i = 0; icount <= LIMIT; i++) { + p = &scull_p_devices[i]; + if (down_interruptible(&p->sem)) + return -ERESTARTSYS; + seq_printf(s, "\nDevice %i: %p\n", i, p); +/* seq_printf(s, " Queues: %p %p\n", p->inq, p->outq);*/ + seq_printf(s, " Buffer: %p to %p (%i bytes)\n", p->buffer, p->end, p->buffersize); + seq_printf(s, " rp %p wp %p\n", p->rp, p->wp); + seq_printf(s, " readers %i writers %i\n", p->nreaders, p->nwriters); + up(&p->sem); + } + return 0; } static int scullpipe_proc_open(struct inode *inode, struct file *file) { - return single_open(file, scull_read_p_mem, NULL); + return single_open(file, scull_read_p_mem, NULL); } static struct file_operations scullpipe_proc_ops = { - .owner = THIS_MODULE, - .open = scullpipe_proc_open, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release + .owner = THIS_MODULE, + .open = scullpipe_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release }; #endif @@ -362,7 +362,7 @@ int scull_p_init(dev_t firstdev) scull_p_setup_cdev(scull_p_devices + i, i); } #ifdef SCULL_DEBUG - proc_create("scullpipe", 0, NULL, &scullpipe_proc_ops); + proc_create("scullpipe", 0, NULL, &scullpipe_proc_ops); #endif return scull_p_nr_devs; } -- cgit v1.2.1-18-gbd029