From patchwork Fri Jan 6 16:26:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Herring X-Patchwork-Id: 90195 Delivered-To: patch@linaro.org Received: by 10.140.20.101 with SMTP id 92csp9519428qgi; Fri, 6 Jan 2017 08:26:51 -0800 (PST) X-Received: by 10.84.210.8 with SMTP id z8mr154688725plh.94.1483720011060; Fri, 06 Jan 2017 08:26:51 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u22si55141244plj.6.2017.01.06.08.26.50 for ; Fri, 06 Jan 2017 08:26:51 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-bluetooth-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-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751492AbdAFQ0t (ORCPT ); Fri, 6 Jan 2017 11:26:49 -0500 Received: from mail-oi0-f65.google.com ([209.85.218.65]:33208 "EHLO mail-oi0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751149AbdAFQ0p (ORCPT ); Fri, 6 Jan 2017 11:26:45 -0500 Received: by mail-oi0-f65.google.com with SMTP id j15so2241781oih.0; Fri, 06 Jan 2017 08:26:45 -0800 (PST) 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=3kdhan76cQELTsteHYFJoCOqwBSjGyPuwen2FOuFqHw=; b=HDLbWSvuiFr7xGGGYyHRKB76IipGudd61mrUfVFCpQKohqJMMul7ayKOtNJMXxNUvf H7wgmknjHIX3j5DFr5yn0nuPBCBZYyaZ7mPthnjdNNTeJAo6kJdffJcGluybv4fsZ5GV mLmg7DIsvWKVTBfU7qCofxJODJXVOP27kwZ9zMv/m9mNwki+DUwqfvmU/jX+7ymVAWKg zHTXVToOrlbMI0ufdRrZHhHSPjZ8ZZBTtmvQI7GgxcqKsTxIrz5jeiD+8Pqf6nkNmCo2 qYvXb3k4QNC/DJyq+b/cIO9MxROMdjBbXFufcxyW06pIyYVFHF0dkiF7v6QJz5PaFpO1 V8cA== X-Gm-Message-State: AIkVDXKMWdbpwvytDHEViPsK1WcgqWsWJ7PjPnFxRGnWWbwhqOyMclA+Ku7mBCb6AyUp1g== X-Received: by 10.202.199.19 with SMTP id x19mr30331409oif.161.1483720004744; Fri, 06 Jan 2017 08:26:44 -0800 (PST) Received: from rob-hp-laptop.herring.priv (50-233-148-156-static.hfc.comcastbusiness.net. [50.233.148.156]) by smtp.googlemail.com with ESMTPSA id i135sm5245809oib.18.2017.01.06.08.26.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Jan 2017 08:26:44 -0800 (PST) From: Rob Herring To: Greg Kroah-Hartman , Marcel Holtmann , Jiri Slaby , Sebastian Reichel , Arnd Bergmann , "Dr . H . Nikolaus Schaller" , Peter Hurley , Andy Shevchenko , Alan Cox Cc: Loic Poulain , Pavel Machek , NeilBrown , Linus Walleij , linux-bluetooth@vger.kernel.org, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, Alan Cox Subject: [PATCH 2/9] tty_port: allow a port to be opened with a tty that has no file handle Date: Fri, 6 Jan 2017 10:26:28 -0600 Message-Id: <20170106162635.19677-3-robh@kernel.org> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170106162635.19677-1-robh@kernel.org> References: <20170106162635.19677-1-robh@kernel.org> Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Alan Cox Let us create tty objects entirely in kernel space. Untested proposal to show why all the ideas around rewriting half the uart stack are not needed. With this a kernel created non file backed tty object could be used to handle data, and set terminal modes. Not all ldiscs can cope with this as N_TTY in particular has to work back to the fs/tty layer. The tty_port code is however otherwise clean of file handles as far as I can tell as is the low level tty port write path used by the ldisc, the configuration low level interfaces and most of the ldiscs. Currently you don't have any exposure to see tty hangups because those are built around the file layer. However a) it's a fixed port so you probably don't care about that b) if you do we can add a callback and c) you almost certainly don't want the userspace tear down/rebuild behaviour anyway. This should however be sufficient if we wanted for example to enumerate all the bluetooth bound fixed ports via ACPI and make them directly available. It doesn't deal with the case of a user opening a port that's also kernel opened and that would need some locking out (so it returned EBUSY if bound to a kernel device of some kind). That needs resolving along with how you "up" or "down" your new bluetooth device, or enumerate it while providing the existing tty API to avoid regressions (and to debug). Alan --- Alan, I need a proper patch with your S-O-B for this one. drivers/tty/tty_io.c | 2 +- drivers/tty/tty_port.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) -- 2.10.1 -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index 5ebc090ec47f..928a70ed9175 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -855,7 +855,7 @@ static void tty_vhangup_session(struct tty_struct *tty) int tty_hung_up_p(struct file *filp) { - return (filp->f_op == &hung_up_tty_fops); + return (filp && filp->f_op == &hung_up_tty_fops); } EXPORT_SYMBOL(tty_hung_up_p); diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c index c3f9d93ba227..606d9e5bf28f 100644 --- a/drivers/tty/tty_port.c +++ b/drivers/tty/tty_port.c @@ -335,7 +335,7 @@ EXPORT_SYMBOL(tty_port_lower_dtr_rts); * tty_port_block_til_ready - Waiting logic for tty open * @port: the tty port being opened * @tty: the tty device being bound - * @filp: the file pointer of the opener + * @filp: the file pointer of the opener or NULL * * Implement the core POSIX/SuS tty behaviour when opening a tty device. * Handles: @@ -369,7 +369,7 @@ int tty_port_block_til_ready(struct tty_port *port, tty_port_set_active(port, 1); return 0; } - if (filp->f_flags & O_NONBLOCK) { + if (filp == NULL || (filp->f_flags & O_NONBLOCK)) { /* Indicate we are open */ if (C_BAUD(tty)) tty_port_raise_dtr_rts(port);