From patchwork Tue Jun 20 21:10:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 106028 Delivered-To: patch@linaro.org Received: by 10.140.91.2 with SMTP id y2csp1601986qgd; Tue, 20 Jun 2017 14:13:09 -0700 (PDT) X-Received: by 10.98.16.220 with SMTP id 89mr32311057pfq.210.1497993189577; Tue, 20 Jun 2017 14:13:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1497993189; cv=none; d=google.com; s=arc-20160816; b=wqVn0QGGf4WF9QIcewrXnxdiALs1sYCa1vl2sceA/kM257uRFDBpc4H45NUQB4I2lm IHNrR5cf+vce2fN5Z9iG/GefO6QqUZoLXE+7LA8pyjJb7iri08HIx8dnqjpaFVASiOy6 jmDj9zps++ONjfjKF51k+a23xOf2naEr3veo4Nk3rXCoVi+/mEUOLBs51caAQ7m2C0WA hf9YbSgoUOTRSGcHpPTWQgflEK1zubhrYGqXYXLchXHKpyRKa7GAdUFT2FZ0i9o5qmN3 A3ymKKNLnmBdYY0O+GVEVEpgiRGek4yykwVcNFpRsCk4jGOOlsVA36nxtCk5aTRnb0uq K8Yg== 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:arc-authentication-results; bh=s5LW8CR4oJGALl28jx1BMVzNZfuPf0/9zTpf5mj39TY=; b=nDHFRdQmiMOlYvZ7go0z7EKQHGSdfhtHFMxPrkMiv46SBbXFY0TtVPXkJcxioen4dU mRa+OyIIiYkPEB8Pr/1MWWHfKXV9vBsI1nNvnccOB0RWErsnJUQx4i7YXVys2rc4FsZ6 57oe84caEyt+GHTG2I0XqmFfZBtbwXPC0+942zz73bGaqJUy3J2qAyOX9bVD2eKpTIoe 1CsShSGc/XVnzXFuK0cM4F/oDIQdJE6zZfdK+hksHf1mhWKYeCk+RQscNG2wkDyCMQ9B bSfdGJM3jTeiQrZlJXaWaFtKlCBlbW3W9JnIsHlD07c+1Yzfw767BIbCyt+9UlA0lXL0 PPZA== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k79si11213715pfk.328.2017.06.20.14.13.09; Tue, 20 Jun 2017 14:13:09 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752559AbdFTVMv (ORCPT + 25 others); Tue, 20 Jun 2017 17:12:51 -0400 Received: from mout.kundenserver.de ([212.227.126.187]:52422 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752477AbdFTVMt (ORCPT ); Tue, 20 Jun 2017 17:12:49 -0400 Received: from wuerfel.lan ([5.56.224.194]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.129]) with ESMTPA (Nemesis) id 0MSDsY-1dD4KR03cg-00THMG; Tue, 20 Jun 2017 23:11:29 +0200 From: Arnd Bergmann To: Greg Kroah-Hartman , Jiri Slaby Cc: Dmitry Torokhov , kasan-dev@googlegroups.com, Dmitry Vyukov , Alexander Potapenko , Andrey Ryabinin , linux-kernel@vger.kernel.org, Samuel Thibault , linux-serial@vger.kernel.org, linux-input@vger.kernel.org, Peter Hurley , Arnd Bergmann , Rob Herring , Andy Shevchenko Subject: [PATCH 2/2] tty: improve tty_insert_flip_char() slow path Date: Tue, 20 Jun 2017 23:10:42 +0200 Message-Id: <20170620211112.1490310-2-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20170620211112.1490310-1-arnd@arndb.de> References: <20170620211112.1490310-1-arnd@arndb.de> X-Provags-ID: V03:K0:p768unSm4pTaCqM1pPoUpe1U4tclsF4qKXLra8y4i7kHkGkjAdl 5hH5eese1L8amegtN1Cew5i4tDi7l33kwirz5LB8dR5d/UC1hnMcRatkzMiKJRon1hy7YVp xUmXRh+AyQrlFqi+ZkScyPRlzz9OzzJ8VMb6dfTDP/wHzs/85j1/Hzx4Mq7bfnSLyrkLszt 860zbxNQVp8kEQ0zCgPFw== X-UI-Out-Filterresults: notjunk:1; V01:K0:eIq/A6mgN28=:1V3Ci8gikueRt25/DAmkGz 6Afq7uAgfrXKiTB4MpP8I4e/ef36auJZYZ7cHkC/GX0NSucnHtma/5DVdcyALnbtssnnplwOv BesnbAyPzZ4TxVWdZZkB4j/ir+m/i19Kzjs16wDuqu2rujGQX550jXAy/278PjbwqHGdMV3Yt Hah89kD6bwTamiAo7dn3A9q14//vC44mqxzspOPk95O5p9knt+awFOiyGSSQ7tDRJAvwY4cBr kDsLw/BmXyc+YGvfh1XrSGRxsEnvEaRC6sjzOMBkcQhU2LVzRsXr8fKv9ZUopGkmNX4iBVU6x 1GEkA7vEEASxgInD1XSJMZ/vwBsvYMw0sq2sjQmP0aV5+iDcW8nf2gkULC/pC8m9XxzM/XMao EBGAl/lmSuWq8196fvwskv5VsGCAP4irkklk/WgckxZemnzVYAs27sWdzIgvtKisGjnQDv3ca Mi20poxdG+pHOUh0cZnhfAcbEZyxNwWv3mav4qHR2kBfVBHvmjypBTK7ZgcqqDmJ3QMRyIc8i LK+qGrYUuzxsjX3d1TEhM13EM1T9Nrrettb9/ka85RDg0Gnmiuakacm6M/xLzgGQA7cPjZUMl atZunZ/GHvruB/l4oyskB60KoQSFnKb4biLFoncxaPIFcrSeRomgd+UJiarRW1qnzCBJK7xAW h8+FKluLiHioaciweD2TRgsrUg6mD7cS+tsPQK3DCETK9O8CZNaqIc7poaMmh+WfE74g= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org While working on improving the fast path of tty_insert_flip_char(), I noticed that by calling tty_buffer_request_room(), we needlessly move to the separate flag buffer mode for the tty, even when all characters use TTY_NORMAL as the flag. This changes the code to call __tty_buffer_request_room() with the correct flag, which will then allocate a regular buffer when it rounds out of space but no special flags have been used. I'm guessing that this is the behavior that Peter Hurley intended when he introduced the compacted flip buffers. Fixes: acc0f67f307f ("tty: Halve flip buffer GFP_ATOMIC memory consumption") Cc: Peter Hurley Signed-off-by: Arnd Bergmann --- This patch is just based on my reading of the source code, it's possible that I missed something and the previous behavior was intentional, so please review carefully. --- drivers/tty/tty_buffer.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) -- 2.9.0 diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c index 2da05fa37aec..6a8563633d4b 100644 --- a/drivers/tty/tty_buffer.c +++ b/drivers/tty/tty_buffer.c @@ -375,10 +375,11 @@ int __tty_insert_flip_char(struct tty_port *port, unsigned char ch, char flag) struct tty_buffer *tb = port->buf.tail; int flags = (flag == TTY_NORMAL) ? TTYB_NORMAL : 0; - if (!tty_buffer_request_room(port, 1)) + if (!__tty_buffer_request_room(port, 1, flags)) return 0; - *flag_buf_ptr(tb, tb->used) = flag; + if (~tb->flags & TTYB_NORMAL) + *flag_buf_ptr(tb, tb->used) = flag; *char_buf_ptr(tb, tb->used++) = ch; return 1;