Received: by 10.213.65.68 with SMTP id h4csp1066665imn; Tue, 27 Mar 2018 14:08:50 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/lS64WQWjXD0AjuoUOdFj8AgtniWKdfl8v8tG50D4ZA7TpjuSrj4Cr1z9PmAQgSL4rGVAR X-Received: by 2002:a17:902:b20f:: with SMTP id t15-v6mr843876plr.349.1522184930364; Tue, 27 Mar 2018 14:08:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522184930; cv=none; d=google.com; s=arc-20160816; b=n3GmkXFzhfG7n3Rm5xnr8APgatkODp5bQdsUPy5uo/kBm0X/vR6tu4TIDsmSJaIrKm 0asIJW2mdXfR3ZuAI9KDsKdQgFvpfidMnkv95GRbZ772hYaNFKF1cJfsmJvEVlGwQ++h juIlkSf/oJ5Yjolr6TCTQr7s5Yl3SzQ9JYRehWdd2Ht3Hi1P3FUrtoC7QqPRrD/esgrh 3pNt16GuCHhW1Futi5MkTog0ovaIAOhdkX55j5lPAbyUm0jC4wHboP+M3bCudx3I3LcW kYeICORrnnvcWwI3wljL3yUxau7l/ByI1+alJPRbPIoHHG56kjrw93NXR6pdnLAuW/9z R/NA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=TH/q6BAZLzjlPk3UuRME7yjXjX/7VZb/z437mW1+0JA=; b=JyMK3r9t7JqQw6TLlSO4cQK1UKRm0+WyRzDnI4o6I+skXf+DIvHwBM72pH0hBsbvvM 7snZkqty0kfBwTpJN4Rl4tEYeXtqvAZVlNLjqwy7uSCLF7PBe20LT6Ybk8fZkMmEqkqv sUsSgM7fFMY2vXmiCw6BfXmNCH8cvPdC9QUj2TwwJ2bY03WQtQzLdlI8kvH32ai7c3eR Yp+46uhyEmlWHZONeM2JEpnbmYVkmBIyocidZKQR+QHp3jzD3HVhEibkGFL2sB2efGti cZQwXa9dBgc6S6JB2qcbcZd57osKE8BKdv5s1wBSyIcAm+h2YCJ6MaFXbZso0XrZknO0 2gYw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Kaw66EQ9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f6-v6si2088623plf.70.2018.03.27.14.08.36; Tue, 27 Mar 2018 14:08:50 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Kaw66EQ9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752213AbeC0VHK (ORCPT + 99 others); Tue, 27 Mar 2018 17:07:10 -0400 Received: from mail-pl0-f66.google.com ([209.85.160.66]:34966 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752457AbeC0VGv (ORCPT ); Tue, 27 Mar 2018 17:06:51 -0400 Received: by mail-pl0-f66.google.com with SMTP id p9-v6so194900pls.2 for ; Tue, 27 Mar 2018 14:06:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=TH/q6BAZLzjlPk3UuRME7yjXjX/7VZb/z437mW1+0JA=; b=Kaw66EQ9fudFCqk6ZoSaBufbvFBrQAq2I1SOZcoGxDQaZcgAjp+v8DbEB01euIKM51 o+iqkvoVUbUjRmbc3g1FRUits8skpMtQz1Mq9EhCpKvqIRp6fHz8wgoxBsQ9xangwAk2 xGwsE9O0s/RBvt3tl8IL5Zaq1RD7X5MfdI9+8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=TH/q6BAZLzjlPk3UuRME7yjXjX/7VZb/z437mW1+0JA=; b=dgFzplMvgvFPxfPl/HCnc21ezZ0cmgPfOxyuPTL/xeDEPsswrpt/dLuiHj9UkD/UjO MbpAyWuOZ3UD8gASQD8OjpoJjtW1nUJA4HkZ3Y1XtS24R2MNaVP4pKXQfrXCBNF/EqKM 2a/x9Rfi+bNX8DqOMN6A+ZYi8fhvlPNSgjuUH8T5AJETvhfjCQda9VDFtO1JLATmD3aS uIGV8v6X5h5maJlXj3VOeoHN7gDdfNwX+auscq/V6chqUW+e9Sf7dT/tCNw/KcyzC0Dm VA/kxCEnvt9p9MGLfV6Xlqkc7bPOQE00BfWEt7oZtvE70nQNtz06u1rz3jJa9wf+Yp1A katQ== X-Gm-Message-State: AElRT7GeQ5PwYkIPgTa9EpAthSncfJNC8jw13FMEyvCyyvPbZkk6d/xA gutXIDuglBGoTop3jaR/uBXRHw== X-Received: by 2002:a17:902:28a4:: with SMTP id f33-v6mr837851plb.115.1522184810307; Tue, 27 Mar 2018 14:06:50 -0700 (PDT) Received: from localhost.localdomain (104-188-17-28.lightspeed.sndgca.sbcglobal.net. [104.188.17.28]) by smtp.gmail.com with ESMTPSA id b64sm4661907pfl.148.2018.03.27.14.06.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 27 Mar 2018 14:06:49 -0700 (PDT) From: Bjorn Andersson To: Ohad Ben-Cohen , Bjorn Andersson Cc: linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org Subject: [PATCH 3/3] rpmsg: smd: Use announce_create to process any receive work Date: Tue, 27 Mar 2018 14:06:43 -0700 Message-Id: <20180327210643.3436-4-bjorn.andersson@linaro.org> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180327210643.3436-1-bjorn.andersson@linaro.org> References: <20180327210643.3436-1-bjorn.andersson@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It is possible that incoming data arrives before the client driver has reached a point in the probe method where adequate context for handling the incoming message has been established. In the event that the client's callback function returns an error the message will be left on the FIFO and by invoking the receive handler after the device has been probed the message will be picked off the FIFO and the callback invoked again. Signed-off-by: Bjorn Andersson --- drivers/rpmsg/qcom_smd.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd.c index 6bb9d21be6bc..4f6b216522a8 100644 --- a/drivers/rpmsg/qcom_smd.c +++ b/drivers/rpmsg/qcom_smd.c @@ -996,8 +996,26 @@ static struct device_node *qcom_smd_match_channel(struct device_node *edge_node, return NULL; } +static int qcom_smd_announce_create(struct rpmsg_device *rpdev) +{ + struct qcom_smd_endpoint *qept = to_smd_endpoint(rpdev->ept); + struct qcom_smd_channel *channel = qept->qsch; + unsigned long flags; + bool kick_state; + + spin_lock_irqsave(&channel->recv_lock, flags); + kick_state = qcom_smd_channel_intr(channel); + spin_unlock_irqrestore(&channel->recv_lock, flags); + + if (kick_state) + schedule_work(&channel->edge->state_work); + + return 0; +} + static const struct rpmsg_device_ops qcom_smd_device_ops = { .create_ept = qcom_smd_create_ept, + .announce_create = qcom_smd_announce_create, }; static const struct rpmsg_endpoint_ops qcom_smd_endpoint_ops = { -- 2.16.2