lkml.org 
[lkml]   [2009]   [Nov]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH 7/7] kfifo: add record handling functions
    From
    Date

    > > +static inline unsigned int __kfifo_out_rec(struct kfifo *fifo,
    > > + void *to, unsigned int n, unsigned int recsize,
    > > + unsigned int *total)
    > > +{
    > > + unsigned int l;
    > > +
    > > + if (!recsize) {
    > > + l = n;
    > > + if (total)
    > > + *total = l;
    > > + } else {
    > > + l = __kfifo_peek_n(fifo, recsize);
    > > + if (total)
    > > + *total = l;
    > > + if (n < l)
    > > + return l;
    > > + }
    > > +
    > > + return __kfifo_out_n(fifo, to, l, recsize);
    > > +}
    >
    > The amount of inlining in this header is pretty wild. These are large
    > functions! Inlining them will create a large kernel and most likely a
    > slower one, due to the increased instruction cache footprint.
    >
    > So please, let's see a "kfifo: uninline everything" patch?
    >
    > but...
    >
    > > +/**
    > > + * kfifo_out_rec - gets some record data from the FIFO
    > > + * @fifo: the fifo to be used.
    > > + * @to: where the data must be copied.
    > > + * @n: the size of the destination buffer.
    > > + * @recsize: size of record field
    > > + * @total: pointer where the total number of to copied bytes should stored
    > > + *
    > > + * This function copies at most @n bytes from the FIFO to @to and returns the
    > > + * number of bytes which cannot be copied.
    > > + * A returned value greater than the @n value means that the record doesn't
    > > + * fit into the @to buffer.
    > > + *
    > > + * Note that with only one concurrent reader and one concurrent
    > > + * writer, you don't need extra locking to use these functions.
    > > + */
    > > +static inline __must_check unsigned int kfifo_out_rec(struct kfifo *fifo,
    > > + void *to, unsigned int n, unsigned int recsize,
    > > + unsigned int *total)
    > > +
    > > +{
    > > + if (!__builtin_constant_p(recsize))
    > > + return __kfifo_out_generic(fifo, to, n, recsize, total);
    > > + return __kfifo_out_rec(fifo, to, n, recsize, total);
    > > +}
    >
    > OK, so I see that some attention has been paid to the text footprint issue.
    >
    > But how much, and was it successful?
    >

    I analyzed the code and most of them will be optimized away by the
    compiler. The reason for this design decision was that i want no
    performance regression against the old kfifo implementation.

    But if the majority vote for an non inline version i will do it. It will
    make the code more readable and slim down the footprint.




    \
     
     \ /
      Last update: 2009-11-26 17:11    [W:0.029 / U:0.212 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site