Messages in this thread | | | Date | Tue, 1 Jun 2010 19:17:10 +0200 | From | Richard Zidlicky <> | Subject | Re: schedule inside spin_lock_irqsave? |
| |
On Sun, May 30, 2010 at 05:24:38PM +0200, Jiri Slaby wrote:
Hi,
> > came across following snippet of code (2.6.34:drivers/media/dvb/siano/smscoreapi.c) and
... ... ...
> This should be > wait_event(&coredev->buffer_mng_waitq, cb = get_entry()); > with get_entry like: > struct smscore_buffer_t *get_entry(void) > { > struct smscore_buffer_t *cb = NULL; > spin_lock_irqsave(&coredev->bufferslock, flags); > if (!list_empty(&coredev->buffers)) { > cb = (struct smscore_buffer_t *) coredev->buffers.next; > list_del(&cb->entry); > } > spin_unlock_irqrestore(&coredev->bufferslock, flags); > return cb; > }
... ... ...
> > Looking at the smscore_buffer_t definition, this is really ugly since it > relies on entry being the first in the structure. It should be > list_first_entry(&coredev->buffers, ...) instead, cast-less. > > > list_del(&cb->entry); > > } > > spin_unlock_irqrestore(&coredev->bufferslock, flags); > > return cb; > > }
thanks for the suggestions, is it on anyones TODO list or should I cook up my own patch? Would take a few more days till I can get at it.
BTW does anyone have knowledge how to enable IR receiver code for the smsxxx devices? Looks like its just the matter of setting sms_board_gpio_cfg.ir to the "right" value - which value?
Richard
| |