From: Ville Syrjälä on 26 Feb 2010 14:10 On Fri, Feb 26, 2010 at 06:33:57PM +0100, Rafał Miłecki wrote: > W dniu 26 lutego 2010 17:14 użytkownik Andrew Morton > <akpm(a)linux-foundation.org> napisał: > > On Fri, 26 Feb 2010 11:38:59 +0100 Rafa Miecki <zajec5(a)gmail.com> wrote: > > > >> +#define wait_interruptible_timeout(wq, timeout) > >> \ > >> +({ \ > >> + long ret = timeout; \ > >> + \ > >> + DEFINE_WAIT(wait); \ > >> + prepare_to_wait(&wq, &wait, TASK_INTERRUPTIBLE); \ > >> + if (!signal_pending(current)) \ > >> + ret = schedule_timeout(ret); \ > >> + finish_wait(&wq, &wait); \ > >> + \ > >> + ret; \ > >> +}) > > > > It's often a mistake to use signals in-kernel. Signals are more a > > userspace thing and it's better to use the lower-level kernel-specific > > messaging tools in-kernel. Bear in mind that userspace can > > independently and asynchronously send, accept and block signals. > > Can you point me to something kernel-level please? > > > > Can KMS use wait_event_interruptible_timeout()? > > No. Please check definition of this: > > #define wait_event_interruptible_timeout(wq, condition, timeout) \ > ({ \ > long __ret = timeout; \ > if (!(condition)) \ > __wait_event_interruptible_timeout(wq, condition, __ret); \ > __ret; \ > }) > > It uses condition there, but that's not a big issue. We just need to > pass 0 (false) there and it will work so far. Disabling the condition check doesn't make sense. You could use a completion. init_completion(vbl_irq); enable_vbl_irq(); wait_for_completion(vbl_irq); disable_vbl_irq(); and call complete(vbl_irq) in the interrupt handler. The same would of course work with just some flag or counter and a wait queue. Isn't there already a vbl counter that you could compare in the condition? -- Ville Syrjälä syrjala(a)sci.fi http://www.sci.fi/~syrjala/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|
Pages: 1 Prev: [GIT PULL][RESEND] tracing/core updates Next: [PATCH 0/4] dlm patches for 2.6.34 |