Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp2128039yba; Wed, 3 Apr 2019 01:45:16 -0700 (PDT) X-Google-Smtp-Source: APXvYqy0B3ezhPBH/k04bFDkcC2PzxcQ7S1LSVPV36nJaqmx3qmR5yYvbut5gsb5eB/EPsrYpQnH X-Received: by 2002:a62:1d94:: with SMTP id d142mr43517463pfd.83.1554281116029; Wed, 03 Apr 2019 01:45:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554281116; cv=none; d=google.com; s=arc-20160816; b=zUC6NqGKKssHbnCBbfUgwR6QzVfC2017dHT2O7SLlFzWMSfseFWD8mvvgkknuWaIte 2jEuPxQlJdCI89xf6lwNS/EACs2GtmZqmT0RtqIvNssB22VkD0KrnhirWgaSoj38YJAk VDXFMFXzTaZpjp8mEYwHSmn4d5FOAcFGFl7wfipNyvc4hIGFFAEO3mAlxl4E7WTSqEop T4ojo7VWuRUXkiSjmrLs8hEbBHvgKec4a+iyDj7/aZUn1GNSso0tEwnteLm6WkkkijNc qZzY5B4F2auAuFQRZ2Nz6L1u7U0ja0xLtlm+j+mxmx5U3GpDNsNu3fwzmD+eWRiUdE5r us/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=EbCew/WSzhbEM/eiMyTtaND34Yc3ob4fWHrPq1t/bBI=; b=C+J+YwIuFYRrknSNTz+7cI7kARUJJPA571v63zgHRsWcugbSvfSwUJ9szDp+uFcgox WBndfKAnXvQgvo5tofVRFwHb+wVtxJoGGgR/98Yt+cvgkDubX+Si/dRSUvwAAt6JOcZG z7fUh6LKbnQc/X2ktsK90eH9QqrT7bIEUs+jtPSzZoD3U9HQOTL3xNHGHrnQW3BOwxAg arE5VCvmeebJKbJ3KeOldn9cauQuztgEHQbPGkqh+Iyd4uAV4VWWVucicVVZl7MfBm+1 bgZMu8SGi17UlM5EVKQXm12fe2Z1dG5Y8E0ZufW3yUHW+pxqDt10Lo73Gwp4fzwU9FwR bhQA== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x5si7165519pfa.41.2019.04.03.01.45.01; Wed, 03 Apr 2019 01:45:16 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729120AbfDCIoD (ORCPT + 99 others); Wed, 3 Apr 2019 04:44:03 -0400 Received: from mail-lf1-f66.google.com ([209.85.167.66]:34337 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728934AbfDCIoD (ORCPT ); Wed, 3 Apr 2019 04:44:03 -0400 Received: by mail-lf1-f66.google.com with SMTP id y18so11082331lfe.1; Wed, 03 Apr 2019 01:44:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=EbCew/WSzhbEM/eiMyTtaND34Yc3ob4fWHrPq1t/bBI=; b=PLtNoq6iJrPh8Evqrs/Ul321aqxOZ7cuTuY7DALUCiEZteoMoHzrfubmnw0rQREF7o nb+yc7obM8UUnFk0+fs81lVTFluia0xPwOjeCEJYtdoue97OrbRCP2j+fpIruisqYQs1 OboeJiIHG5ZUSgFXBKIZEFtqNAg9dJ3GzMNo+eFpVit8sGhAX8G3QJ4GWcaKIlBb7BNz Aq6G1JNJ7ET1ACPFeGxhlu8UF1rNWYo5ea78i1eYEjTye3a3/Qq8vsrwhNFCvSwzl2ue v5EahAlJZirRIfLmr7BQhLxkkQfyYaLgqEvqud8XeAEun2m5HaVwzUUsr//Oevw0bkIb ij+A== X-Gm-Message-State: APjAAAVtXTyRWO61zswa+JhhzGDjp5wKyTPYsJTV+2QOsqtKInCR2+9k eIF4BsuyDQryWPlL+Zrw15CD3KNB X-Received: by 2002:a19:f707:: with SMTP id z7mr5904080lfe.61.1554281040491; Wed, 03 Apr 2019 01:44:00 -0700 (PDT) Received: from xi.terra (c-74bee655.07-184-6d6c6d4.bbcust.telenor.se. [85.230.190.116]) by smtp.gmail.com with ESMTPSA id a7sm2832903lfo.8.2019.04.03.01.43.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Apr 2019 01:43:59 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.91) (envelope-from ) id 1hBbVM-0004gK-QR; Wed, 03 Apr 2019 10:44:20 +0200 Date: Wed, 3 Apr 2019 10:44:20 +0200 From: Johan Hovold To: Fabien Dessenne Cc: Ohad Ben-Cohen , Bjorn Andersson , Greg Kroah-Hartman , Jiri Slaby , linux-kernel@vger.kernel.org, linux-remoteproc@vger.kernel.org, Benjamin Gaignard , Arnaud Pouliquen Subject: Re: [PATCH 2/2] tty: add rpmsg driver Message-ID: <20190403084420.GH6734@localhost> References: <1553183239-13253-1-git-send-email-fabien.dessenne@st.com> <1553183239-13253-3-git-send-email-fabien.dessenne@st.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1553183239-13253-3-git-send-email-fabien.dessenne@st.com> User-Agent: Mutt/1.11.4 (2019-03-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Mar 21, 2019 at 04:47:19PM +0100, Fabien Dessenne wrote: > This driver exposes a standard tty interface on top of the rpmsg > framework through the "rpmsg-tty-channel" rpmsg service. > > This driver supports multi-instances, offering a /dev/ttyRPMSGx entry > per rpmsg endpoint. > > Signed-off-by: Arnaud Pouliquen > Signed-off-by: Fabien Dessenne > --- > drivers/tty/Kconfig | 9 ++ > drivers/tty/Makefile | 1 + > drivers/tty/rpmsg_tty.c | 309 ++++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 319 insertions(+) > create mode 100644 drivers/tty/rpmsg_tty.c > +static int rpmsg_tty_write(struct tty_struct *tty, const unsigned char *buf, > + int total) > +{ > + int count, ret = 0; > + const unsigned char *tbuf; > + struct rpmsg_tty_port *cport = idr_find(&tty_idr, tty->index); > + struct rpmsg_device *rpdev; > + int msg_size; > + > + if (!cport) { > + dev_err(tty->dev, "cannot get cport\n"); > + return -ENODEV; > + } > + > + rpdev = cport->rpdev; > + > + dev_dbg(&rpdev->dev, "%s: send message from tty->index = %d\n", > + __func__, tty->index); > + > + if (!buf) { > + dev_err(&rpdev->dev, "buf shouldn't be null.\n"); > + return -ENOMEM; > + } > + > + msg_size = rpmsg_get_buf_payload_size(rpdev->ept); > + if (msg_size < 0) > + return msg_size; > + > + count = total; > + tbuf = buf; > + do { > + /* send a message to our remote processor */ > + ret = rpmsg_send(rpdev->ept, (void *)tbuf, > + min(count, msg_size)); Just a drive-by comment; it looks like rpmsg_send() may block, but the tty-driver write() callback must never sleep. > + if (ret) { > + dev_err(&rpdev->dev, "rpmsg_send failed: %d\n", ret); > + return ret; > + } > + > + if (count > msg_size) { > + count -= msg_size; > + tbuf += msg_size; > + } else { > + count = 0; > + } > + } while (count > 0); > + > + return total; > +} Johan