Re: [PATCH 18/37] dvb: let other frontends support FE_DISHNETWORK_SEND_LEGACY_CMD

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Michael Krufky <[email protected]> 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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux