FAILED: patch "[PATCH] media: cec: avoid decrementing transmit_queue_sz if it is 0" failed to apply to 4.14-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 4be77174c3fafc450527a0c383bb2034d2db6a2d Mon Sep 17 00:00:00 2001
From: Hans Verkuil <[email protected]>
Date: Sat, 7 Dec 2019 23:48:09 +0100
Subject: [PATCH] media: cec: avoid decrementing transmit_queue_sz if it is 0
WARN if transmit_queue_sz is 0 but do not decrement it. The CEC adapter will become unresponsive if it goes below 0 since then it thinks there are 4 billion messages in the queue.
Obviously this should not happen, but a driver bug could cause this.
drivers/media/cec/cec-adap.c +12 -2
@@ -380,7 +380,8 @@ static void cec_data_cancel(struct cec_data *data, u8 tx_status) }else {list_del_init (&data->list);if (!(data->msg.tx_status &CEC_TX_STATUS_OK )) - data->adap->transmit_queue_sz--; +if (!WARN_ON (!data->adap->transmit_queue_sz)) + data->adap->transmit_queue_sz--; }if (data->msg.tx_status &CEC_TX_STATUS_OK ) {
@@ -432,6 +433,14 @@ static void cec_flush(struct cec_adapter *adap)* need to do anything special in that case. */ } +/* +* If something went wrong and this counter isn't what it should +* be, then this will reset it back to 0. Warn if it is not 0, +* since it indicates a bug, either in this framework or in a +* CEC driver. +*/ +if (WARN_ON (adap->transmit_queue_sz)) + adap->transmit_queue_sz =0 ; }/*
@@ -522,7 +531,8 @@ int cec_thread_func(void *_adap) data =list_first_entry (&adap->transmit_queue, struct cec_data, list);list_del_init (&data->list); - adap->transmit_queue_sz--; +if (!WARN_ON (!data->adap->transmit_queue_sz)) + adap->transmit_queue_sz--;/* Make this the current transmitting message */ adap->transmitting = data;