Exemple #1
0
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;
}
Exemple #2
0
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;
}