Re: RT-friendly IRQ management in USB

Steven Rostedt <[email protected]>
Newsgroups gmane.linux.usb.devel
Message-ID <[email protected]>
Alan Stern wrote:
> On Tue, 3 Jul 2007, Steven Rostedt wrote:
> 

> You never answered my second question.  Is this sort of thing
> acceptable?

Doh! I never noticed your second question. Sorry about that.

> 
> DECLARE_SPINLOCK(lock);
> 
> static void irq_handler()
> {
> 	spin_lock_irqsave(&lock, flags);
> 	...
> 	internal_func();
> 	...
> 	spin_lock_irqrestore(&lock, flags);
> }
> 
> static void internal_func()
> {
> 	...
> 	spin_unlock(&lock);
> 	invoke_callback();
> 	spin_lock(&lock);
> 	...
> }

Perfectly fine! No problems, we do it too.

> 
> For that matter, would it be okay to use spin_lock_irq() rather than
> spin_lock_irqsave() in the IRQ handler?  Assume the handler was
> registered without IRQF_DISABLED.

If it works on vanilla, it should work with RT.  That is, if you use all 
the spin_lock variants.  In RT, spin_lock(), spin_lock_irqsave(), and 
spin_lock_irq() are simply all the same. No difference.


from -rt patch include/linux/spinlock.h:

#ifdef CONFIG_PREEMPT_RT
# define _spin_lock(l)			rt_spin_lock(l)
# define _spin_lock_nested(l, s)	rt_spin_lock_nested(l, s)
# define _spin_lock_bh(l)		rt_spin_lock(l)
# define _spin_lock_irq(l)		rt_spin_lock(l)
# define _spin_unlock(l)		rt_spin_unlock(l)
# define _spin_unlock_no_resched(l)	rt_spin_unlock(l)
# define _spin_unlock_bh(l)		rt_spin_unlock(l)
# define _spin_unlock_irq(l)		rt_spin_unlock(l)
# define _spin_unlock_irqrestore(l, f)	rt_spin_unlock(l)
static inline unsigned long __lockfunc _spin_lock_irqsave(spinlock_t *lock)
{
	rt_spin_lock(lock);
	return 0;
}
static inline unsigned long __lockfunc
_spin_lock_irqsave_nested(spinlock_t *lock, int subclass)
{
	rt_spin_lock_nested(lock, subclass);
	return 0;
}
#else

The nesting is for lockdep.

:-)

-- Steve


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.