lkml.org 
[lkml]   [2005]   [Nov]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 18/37] dvb: let other frontends support FE_DISHNETWORK_SEND_LEGACY_CMD
    Michael Krufky <mkrufky@m1k.net> wrote:
    >
    > +s32 timeval_usec_diff(struct timeval lasttime, struct timeval curtime)
    > +{
    > + return ((curtime.tv_usec < lasttime.tv_usec) ?
    > + 1000000 - lasttime.tv_usec + curtime.tv_usec :
    > + curtime.tv_usec - lasttime.tv_usec);
    > +}
    > +EXPORT_SYMBOL(timeval_usec_diff);
    > +
    > +static inline void timeval_usec_add(struct timeval *curtime, u32 add_usec)
    > +{
    > + curtime->tv_usec += add_usec;
    > + if (curtime->tv_usec >= 1000000) {
    > + curtime->tv_usec -= 1000000;
    > + curtime->tv_sec++;
    > + }
    > +}

    timeval arithmetic like this really shouldn't be hidden in a dvb driver -
    it's generic code.

    > +/*
    > + * Sleep until gettimeofday() > waketime + add_usec
    > + * This needs to be as precise as possible, but as the delay is
    > + * usually between 2ms and 32ms, it is done using a scheduled msleep
    > + * followed by usleep (normally a busy-wait loop) for the remainder
    > + */
    > +void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec)
    > +{
    > + struct timeval lasttime;
    > + s32 delta, newdelta;
    > +
    > + timeval_usec_add(waketime, add_usec);
    > +
    > + do_gettimeofday(&lasttime);
    > + delta = timeval_usec_diff(lasttime, *waketime);
    > + if (delta > 2500) {
    > + msleep((delta - 1500) / 1000);
    > + do_gettimeofday(&lasttime);
    > + newdelta = timeval_usec_diff(lasttime, *waketime);
    > + delta = (newdelta > delta) ? 0 : newdelta;
    > + }
    > + if (delta > 0)
    > + udelay(delta);
    > +}
    > +EXPORT_SYMBOL(dvb_frontend_sleep_until);

    However I don't believe that the driver should be using timevals and
    do_gettimeofday() at all. Why not use jiffies-based timing like so
    many other parts of the kernel?
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-11-03 04:55    [W:0.024 / U:0.332 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site