• James Hogan's avatar
    [media] rc/ir-raw: use kfifo_rec_ptr_1 instead of kfifo · df1caa58
    James Hogan authored
    Raw IR events are passed to the raw event thread through a kfifo. The
    size of the event struct is 12 bytes, and space for 512 events is
    reserved in the kfifo (6144 bytes), however this is rounded down to 4096
    bytes (the next power of 2) by __kfifo_alloc().
    
    4096 bytes is not divisible by 12 therefore if the fifo fills up a third
    of a record will be written in the end of the kfifo by
    ir_raw_event_store() because the recsize of the fifo is 0 (it doesn't
    have records). When this is read by ir_raw_event_thread() a corrupted or
    partial record will be read, and in the case of a partial record the
    BUG_ON(retval != sizeof(ev)) gets hit too.
    
    According to samples/kfifo/record-example.c struct kfifo_rec_ptr_1 can
    handle records of a length between 0 and 255 bytes, so change struct
    ir_raw_event_ctrl to use that instead of struct kfifo.
    Signed-off-by: default avatarJames Hogan <james.hogan@imgtec.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    df1caa58
rc-core-priv.h 5.4 KB