RFBI_CMD_FIFO_LEN_BYTES might not be a power-of-two, but kfifo() allocates the size up to the next power of two, which makes (RFBI_CMD_FIFO_LEN_BYTES - kfifo_len()) look very dubious (possibly a negative value!). Notes: [1] Not tested nor compiled here [2] The removed code compares int with a size_t. It looks buggy, because if the full allocated size of the fifo is used, the integer comparison leads to "always empty space in the fifo". Fortunately, the code can never go there, because available == 0 will come before negative integer values. [3] Do we want to use the whole allocated space? In that case the change should be: - available = RFBI_CMD_FIFO_LEN_BYTES - - __kfifo_len(rfbi.cmd_fifo); + available = rfbi.cmd_fifo->size - __kfifo_len(rfbi.cmd_fifo); Signed-off-by: Heikki Orsila <heikki.orsila@xxxxxx> --- drivers/video/omap2/dss/rfbi.c | 5 +---- 1 files changed, 1 insertions(+), 4 deletions(-) diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c index d0b3006..1dbe993 100644 --- a/drivers/video/omap2/dss/rfbi.c +++ b/drivers/video/omap2/dss/rfbi.c @@ -1050,14 +1050,11 @@ static void rfbi_push_cmd(struct update_param *p) while (1) { unsigned long flags; - int available; spin_lock_irqsave(rfbi.cmd_fifo->lock, flags); - available = RFBI_CMD_FIFO_LEN_BYTES - - __kfifo_len(rfbi.cmd_fifo); /* DSSDBG("%d bytes left in fifo\n", available); */ - if (available < sizeof(struct update_param)) { + if (__kfifo_len(rfbi.cmd_fifo) >= RFBI_CMD_FIFO_LEN_BYTES) { DSSDBG("Going to wait because FIFO FULL..\n"); spin_unlock_irqrestore(rfbi.cmd_fifo->lock, flags); atomic_inc(&rfbi.cmd_fifo_full); -- 1.6.4.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html