• Heiner Kallweit's avatar
    [media] rc: refactor raw handler kthread · 74d47d75
    Heiner Kallweit authored
    I think we can get rid of the spinlock protecting the kthread from being
    interrupted by a wakeup in certain parts.
    Even with the current implementation of the kthread the only lost wakeup
    scenario could happen if the wakeup occurs between the kfifo_len check
    and setting the state to TASK_INTERRUPTIBLE.
    
    In the changed version we could lose a wakeup if it occurs between
    processing the fifo content and setting the state to TASK_INTERRUPTIBLE.
    This scenario is covered by an additional check for available events in
    the fifo and setting the state to TASK_RUNNING in this case.
    
    In addition the changed version flushes the kfifo before ending
    when the kthread is stopped.
    
    With this patch we gain:
    - Get rid of the spinlock
    - Simplify code
    - Don't grep / release the mutex for each individual event but just once
      for the complete fifo content. This reduces overhead if a driver e.g.
      triggers processing after writing the content of a hw fifo to the kfifo.
    Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
    Signed-off-by: default avatarSean Young <sean@mess.org>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
    74d47d75
rc-core-priv.h 4.01 KB