int scull_read_p_mem(char *buf, char **start, off_t offset, int count, int *eof, void *data) { int i, len; 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; i<scull_p_nr_devs && len <= LIMIT; i++) { p = &scull_p_devices[i]; if (down_interruptible (&p->sem)) 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; }
int scullp_read_procmem(char *buf, char **start, off_t offset, int count, int *eof, void *data) { int i, j, order, qset, len = 0; int limit = count - 80; /* Don't print more than this */ ScullP_Dev *d; *start = buf; for(i=0; i<scullp_devs; i++) { d=&scullp_devices[i]; if (down_interruptible (&d->sem)) return -ERESTARTSYS; qset=d->qset; /* retrieve the features of each device */ order=d->order; len += sprintf(buf+len,"\nDevice %i: qset %i, order %i, sz %li\n", i, qset, order, (long)(d->size)); for (; d; d=d->next) { /* scan the list */ len += sprintf(buf+len," item at %p, qset at %p\n",d,d->data); scullp_proc_offset (buf, start, &offset, &len); if (len > limit) { up (&scullp_devices[i].sem); return len; } if (d->data && !d->next) /* dump only the last item - save space */ for (j=0; j<qset; j++) { if (d->data[j]) len += sprintf(buf+len," % 4i:%8p\n",j,d->data[j]); scullp_proc_offset (buf, start, &offset, &len); if (len > limit) { up (&scullp_devices[i].sem); return len; } } } up (&scullp_devices[i].sem); } *eof = 1; return len; }