diff mbox

[1/2] Compatibility layer for hrtimer API

Message ID 20090703224652.339a63e7@hyperion.delvare (mailing list archive)
State Superseded
Headers show

Commit Message

Jean Delvare July 3, 2009, 8:46 p.m. UTC
Kernels 2.6.22 to 2.6.24 (inclusive) need some compatibility quirks
for the hrtimer API. For older kernels, some required functions were
not exported so there's nothing we can do. This means that drivers
using the hrtimer infrastructure will no longer work for kernels older
than 2.6.22.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
---
 v4l/compat.h |   18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

Comments

Trent Piepho July 5, 2009, 8:13 a.m. UTC | #1
On Fri, 3 Jul 2009, Jean Delvare wrote:
> Kernels 2.6.22 to 2.6.24 (inclusive) need some compatibility quirks
> for the hrtimer API. For older kernels, some required functions were
> not exported so there's nothing we can do. This means that drivers
> using the hrtimer infrastructure will no longer work for kernels older
> than 2.6.22.
>
> Signed-off-by: Jean Delvare <khali@linux-fr.org>
> ---
>  v4l/compat.h |   18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> --- a/v4l/compat.h
> +++ b/v4l/compat.h
> @@ -480,4 +480,22 @@ static inline unsigned long v4l_compat_f
>  }
>  #endif
>
> +/*
> + * Compatibility code for hrtimer API
> + * This will make hrtimer usable for kernels 2.6.22 and later.
> + * For earlier kernels, not all required functions are exported
> + * so there's nothing we can do.
> + */
> +
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25) && \
> +	LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)
> +#include <linux/hrtimer.h>

Instead of including hrtimer.h from compat.h it's better if you check if it
has already been included and only enable the compat code in that case.
That way hrtimer doesn't get included for files that don't need it and
might define something that conflicts with something from hrtimer.  And it
prevents someone from forgetting to include hrtimer when they needed it,
but having the error masked because compat.h is doing it for them.

> +/* Forward a hrtimer so it expires after the hrtimer's current now */
> +static inline unsigned long hrtimer_forward_now(struct hrtimer *timer,
> +						ktime_t interval)
> +{
> +	return hrtimer_forward(timer, timer->base->get_time(), interval);
> +}
> +#endif
> +
>  #endif /*  _COMPAT_H */
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jean Delvare July 5, 2009, 8:27 a.m. UTC | #2
Hi Trent,

On Sun, 5 Jul 2009 01:13:14 -0700 (PDT), Trent Piepho wrote:
> On Fri, 3 Jul 2009, Jean Delvare wrote:
> > Kernels 2.6.22 to 2.6.24 (inclusive) need some compatibility quirks
> > for the hrtimer API. For older kernels, some required functions were
> > not exported so there's nothing we can do. This means that drivers
> > using the hrtimer infrastructure will no longer work for kernels older
> > than 2.6.22.
> >
> > Signed-off-by: Jean Delvare <khali@linux-fr.org>
> > ---
> >  v4l/compat.h |   18 ++++++++++++++++++
> >  1 file changed, 18 insertions(+)
> >
> > --- a/v4l/compat.h
> > +++ b/v4l/compat.h
> > @@ -480,4 +480,22 @@ static inline unsigned long v4l_compat_f
> >  }
> >  #endif
> >
> > +/*
> > + * Compatibility code for hrtimer API
> > + * This will make hrtimer usable for kernels 2.6.22 and later.
> > + * For earlier kernels, not all required functions are exported
> > + * so there's nothing we can do.
> > + */
> > +
> > +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25) && \
> > +	LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)
> > +#include <linux/hrtimer.h>
> 
> Instead of including hrtimer.h from compat.h it's better if you check if it
> has already been included and only enable the compat code in that case.
> That way hrtimer doesn't get included for files that don't need it and
> might define something that conflicts with something from hrtimer.  And it
> prevents someone from forgetting to include hrtimer when they needed it,
> but having the error masked because compat.h is doing it for them.

I see. But this will only work if compat.h is included after all
headers. If it always the case? I see for example that cx88-input
includes <media/ir-common.h> after "compat.h".

> > +/* Forward a hrtimer so it expires after the hrtimer's current now */
> > +static inline unsigned long hrtimer_forward_now(struct hrtimer *timer,
> > +						ktime_t interval)
> > +{
> > +	return hrtimer_forward(timer, timer->base->get_time(), interval);
> > +}
> > +#endif
> > +
> >  #endif /*  _COMPAT_H */
Trent Piepho July 5, 2009, 8:32 a.m. UTC | #3
On Sun, 5 Jul 2009, Jean Delvare wrote:

> Hi Trent,
>
> On Sun, 5 Jul 2009 01:13:14 -0700 (PDT), Trent Piepho wrote:
> > On Fri, 3 Jul 2009, Jean Delvare wrote:
> > > Kernels 2.6.22 to 2.6.24 (inclusive) need some compatibility quirks
> > > for the hrtimer API. For older kernels, some required functions were
> > > not exported so there's nothing we can do. This means that drivers
> > > using the hrtimer infrastructure will no longer work for kernels older
> > > than 2.6.22.
> > >
> > > Signed-off-by: Jean Delvare <khali@linux-fr.org>
> > > ---
> > >  v4l/compat.h |   18 ++++++++++++++++++
> > >  1 file changed, 18 insertions(+)
> > >
> > > --- a/v4l/compat.h
> > > +++ b/v4l/compat.h
> > > @@ -480,4 +480,22 @@ static inline unsigned long v4l_compat_f
> > >  }
> > >  #endif
> > >
> > > +/*
> > > + * Compatibility code for hrtimer API
> > > + * This will make hrtimer usable for kernels 2.6.22 and later.
> > > + * For earlier kernels, not all required functions are exported
> > > + * so there's nothing we can do.
> > > + */
> > > +
> > > +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25) && \
> > > +	LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)
> > > +#include <linux/hrtimer.h>
> >
> > Instead of including hrtimer.h from compat.h it's better if you check if it
> > has already been included and only enable the compat code in that case.
> > That way hrtimer doesn't get included for files that don't need it and
> > might define something that conflicts with something from hrtimer.  And it
> > prevents someone from forgetting to include hrtimer when they needed it,
> > but having the error masked because compat.h is doing it for them.
>
> I see. But this will only work if compat.h is included after all
> headers. If it always the case? I see for example that cx88-input
> includes <media/ir-common.h> after "compat.h".

Headers that come from the kernel come before compat.h and headers that
come from the v4l-dvb tree come after compat.h.
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jean Delvare July 5, 2009, 8:35 a.m. UTC | #4
On Sun, 5 Jul 2009 01:32:42 -0700 (PDT), Trent Piepho wrote:
> On Sun, 5 Jul 2009, Jean Delvare wrote:
> 
> > Hi Trent,
> >
> > On Sun, 5 Jul 2009 01:13:14 -0700 (PDT), Trent Piepho wrote:
> > > On Fri, 3 Jul 2009, Jean Delvare wrote:
> > > > Kernels 2.6.22 to 2.6.24 (inclusive) need some compatibility quirks
> > > > for the hrtimer API. For older kernels, some required functions were
> > > > not exported so there's nothing we can do. This means that drivers
> > > > using the hrtimer infrastructure will no longer work for kernels older
> > > > than 2.6.22.
> > > >
> > > > Signed-off-by: Jean Delvare <khali@linux-fr.org>
> > > > ---
> > > >  v4l/compat.h |   18 ++++++++++++++++++
> > > >  1 file changed, 18 insertions(+)
> > > >
> > > > --- a/v4l/compat.h
> > > > +++ b/v4l/compat.h
> > > > @@ -480,4 +480,22 @@ static inline unsigned long v4l_compat_f
> > > >  }
> > > >  #endif
> > > >
> > > > +/*
> > > > + * Compatibility code for hrtimer API
> > > > + * This will make hrtimer usable for kernels 2.6.22 and later.
> > > > + * For earlier kernels, not all required functions are exported
> > > > + * so there's nothing we can do.
> > > > + */
> > > > +
> > > > +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25) && \
> > > > +	LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)
> > > > +#include <linux/hrtimer.h>
> > >
> > > Instead of including hrtimer.h from compat.h it's better if you check if it
> > > has already been included and only enable the compat code in that case.
> > > That way hrtimer doesn't get included for files that don't need it and
> > > might define something that conflicts with something from hrtimer.  And it
> > > prevents someone from forgetting to include hrtimer when they needed it,
> > > but having the error masked because compat.h is doing it for them.
> >
> > I see. But this will only work if compat.h is included after all
> > headers. If it always the case? I see for example that cx88-input
> > includes <media/ir-common.h> after "compat.h".
> 
> Headers that come from the kernel come before compat.h and headers that
> come from the v4l-dvb tree come after compat.h.

Ah, OK. I'll send an updated patch as soon as I am done with testing it.

Thanks,
diff mbox

Patch

--- a/v4l/compat.h
+++ b/v4l/compat.h
@@ -480,4 +480,22 @@  static inline unsigned long v4l_compat_f
 }
 #endif
 
+/*
+ * Compatibility code for hrtimer API
+ * This will make hrtimer usable for kernels 2.6.22 and later.
+ * For earlier kernels, not all required functions are exported
+ * so there's nothing we can do.
+ */
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25) && \
+	LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)
+#include <linux/hrtimer.h>
+/* Forward a hrtimer so it expires after the hrtimer's current now */
+static inline unsigned long hrtimer_forward_now(struct hrtimer *timer,
+						ktime_t interval)
+{
+	return hrtimer_forward(timer, timer->base->get_time(), interval);
+}
+#endif
+
 #endif /*  _COMPAT_H */