From 7f088f28b97058c83edf71e91e68d6a90d5fd7cc Mon Sep 17 00:00:00 2001 From: Algea Cao Date: Mon, 25 Dec 2017 17:53:12 +0800 Subject: [PATCH] UPSTREAM: [media] cec: improve cec_transmit_msg_fh logging Several error paths didn't log why an error was returned. Add this. Also handle the corner case of "adapter is unconfigured AND the message is from Unregistered to TV AND reply is non-zero" separately and return EINVAL in that case, since it really is an invalid value and not an unconfigured CEC device. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab (cherry picked from commit 25c2107896c5094318f04af8f975266e57d15528) Change-Id: Ief000a37ccab5cc2936abd9d10dd14871737fc47 Signed-off-by: Algea Cao --- drivers/media/cec/cec-adap.c | 17 +++++++++++++---- drivers/media/cec/cec-api.c | 2 +- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/media/cec/cec-adap.c b/drivers/media/cec/cec-adap.c index 4f1e571d10b7..9e25ba20f4d1 100644 --- a/drivers/media/cec/cec-adap.c +++ b/drivers/media/cec/cec-adap.c @@ -646,12 +646,21 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg, __func__, cec_msg_initiator(msg)); return -EINVAL; } - if (!adap->is_configured && !adap->is_configuring && - (msg->msg[0] != 0xf0 || msg->reply)) - return -ENONET; + if (!adap->is_configured && !adap->is_configuring) { + if (msg->msg[0] != 0xf0) { + dprintk(1, "%s: adapter is unconfigured\n", __func__); + return -ENONET; + } + if (msg->reply) { + dprintk(1, "%s: invalid msg->reply\n", __func__); + return -EINVAL; + } + } - if (adap->transmit_queue_sz >= CEC_MAX_MSG_TX_QUEUE_SZ) + if (adap->transmit_queue_sz >= CEC_MAX_MSG_TX_QUEUE_SZ) { + dprintk(1, "%s: transmit queue full\n", __func__); return -EBUSY; + } data = kzalloc(sizeof(*data), GFP_KERNEL); if (!data) diff --git a/drivers/media/cec/cec-api.c b/drivers/media/cec/cec-api.c index cea350ea2a52..0860fb458757 100644 --- a/drivers/media/cec/cec-api.c +++ b/drivers/media/cec/cec-api.c @@ -202,7 +202,7 @@ static long cec_transmit(struct cec_adapter *adap, struct cec_fh *fh, err = -EPERM; else if (adap->is_configuring) err = -ENONET; - else if (!adap->is_configured && (msg.msg[0] != 0xf0 || msg.reply)) + else if (!adap->is_configured && msg.msg[0] != 0xf0) err = -ENONET; else if (cec_is_busy(adap, fh)) err = -EBUSY;