From patchwork Tue Dec 30 05:33:57 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anshul@vger.kernel.org, Garg@vger.kernel.org X-Patchwork-Id: 5551511 Return-Path: X-Original-To: patchwork-linux-input@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 0D6A19F1BF for ; Tue, 30 Dec 2014 05:34:45 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 37A052012E for ; Tue, 30 Dec 2014 05:34:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 344D6200ED for ; Tue, 30 Dec 2014 05:34:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751744AbaL3Fem (ORCPT ); Tue, 30 Dec 2014 00:34:42 -0500 Received: from mailout2.samsung.com ([203.254.224.25]:37711 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751683AbaL3Fem (ORCPT ); Tue, 30 Dec 2014 00:34:42 -0500 Received: from epcpsbgm2.samsung.com (epcpsbgm2 [203.254.230.27]) by mailout2.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NHD00LD0RHS4GD0@mailout2.samsung.com> for linux-input@vger.kernel.org; Tue, 30 Dec 2014 14:34:40 +0900 (KST) X-AuditID: cbfee61b-f79d76d0000024d6-fc-54a2397004e8 Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id D6.6B.09430.07932A45; Tue, 30 Dec 2014 14:34:40 +0900 (KST) Received: from srin.p4 ([107.108.168.37]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0NHD002L0RGMAQM0@mmp1.samsung.com>; Tue, 30 Dec 2014 14:34:40 +0900 (KST) From: Anshul@vger.kernel.org, Garg@vger.kernel.org To: dmitry.torokhov@gmail.com, dtor@mail.ru, linux-input@vger.kernel.org Cc: aksgarg1989@gmail.com, anshul.g@samsung.com, p.shailesh@samsung.com Subject: [PATCH] Input: Optimize input_to_handler and input_pass_values function Date: Tue, 30 Dec 2014 11:03:57 +0530 Message-id: <1419917637-14744-1-git-send-email-a.mathur@samsung.com> X-Mailer: git-send-email 1.7.9.5 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrPJMWRmVeSWpSXmKPExsVy+t9jAd0Cy0UhBpP/aFgseZln8enHORaL w4teMFo83P6C1eLmp2+sFjumtLI4sHnsnHWX3WPK3COsHn1bVjF6fN4kF8ASxWWTkpqTWZZa pG+XwJXx/ug2toLtIhXft/eyNzA+4+9i5OSQEDCROHbpBRuELSZx4d56IJuLQ0hgEaPEzKPT mCCcn4wSm+b1s4BUsQkISmx5u5IZxBYR8JCYPXsXmM0s4C5xf/dPsBphgQCJ1Xe6gWwODhYB VYnmHieQMK+Ai8TnmUeZQMISAgoScybZTGDkXsDIsIpRNLUguaA4KT3XSK84Mbe4NC9dLzk/ dxMjOBieSe9gXNVgcYhRgINRiYd3w/uFIUKsiWXFlbmHGCU4mJVEeBsNFoUI8aYkVlalFuXH F5XmpBYfYpTmYFES51WybwsREkhPLEnNTk0tSC2CyTJxcEo1MNayaz4V7C9U/X/84F7VpQmS tSe1q9JeNrWd9tnRPMFy+cym7os6uYxPLrM8dUtq5/qgf7Bb7+7fzsmbC7QvODUsP3/6dNOx jmbn/azyk6NYdnNkvHJk+d2RtlmyUTWFo/q5nmic99lbTRm3p/Od2ObK8nrV+UZ9Rocjzlu1 r1/4UaPm09AnqsRSnJFoqMVcVJwIAO20CikCAgAA Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Anshul Garg As input_pass_values function is called everytime when EV_SYN is sent from input driver or input event buffer becomes full. 1. In case of regular handler, event filter code should not run so added check whether handler supports filter or not. 2. If input device doesn't support EV_KEY event type avoid running auto repeat code. Signed-off-by: Anshul Garg --- drivers/input/input.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/drivers/input/input.c b/drivers/input/input.c index bbec2dc..9d6609b 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -100,23 +100,24 @@ static unsigned int input_to_handler(struct input_handle *handle, struct input_value *end = vals; struct input_value *v; - for (v = vals; v != vals + count; v++) { - if (handler->filter && - handler->filter(handle, v->type, v->code, v->value)) - continue; - if (end != v) - *end = *v; - end++; + if (handler->filter) { + for (v = vals; v != vals + count; v++) { + if (handler->filter(handle, v->type, v->code, v->value)) + continue; + if (end != v) + *end = *v; + end++; + } + count = end - vals; } - count = end - vals; if (!count) return 0; if (handler->events) handler->events(handle, vals, count); else if (handler->event) - for (v = vals; v != end; v++) + for (v = vals; v != vals + count; v++) handler->event(handle, v->type, v->code, v->value); return count; @@ -143,8 +144,10 @@ static void input_pass_values(struct input_dev *dev, count = input_to_handler(handle, vals, count); } else { list_for_each_entry_rcu(handle, &dev->h_list, d_node) - if (handle->open) + if (handle->open && count) count = input_to_handler(handle, vals, count); + else + break; } rcu_read_unlock(); @@ -152,12 +155,14 @@ static void input_pass_values(struct input_dev *dev, add_input_randomness(vals->type, vals->code, vals->value); /* trigger auto repeat for key events */ - for (v = vals; v != vals + count; v++) { - if (v->type == EV_KEY && v->value != 2) { - if (v->value) - input_start_autorepeat(dev, v->code); - else - input_stop_autorepeat(dev); + if (test_bit(EV_KEY, dev->evbit)) { + for (v = vals; v != vals + count; v++) { + if (v->type == EV_KEY && v->value != 2) { + if (v->value) + input_start_autorepeat(dev, v->code); + else + input_stop_autorepeat(dev); + } } } }