From patchwork Tue Dec 30 05:49:53 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: anshul.g@samsung.com X-Patchwork-Id: 5551581 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 964039F2ED for ; Tue, 30 Dec 2014 05:50:44 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id BBEC32012E for ; Tue, 30 Dec 2014 05:50:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 774D62010E for ; Tue, 30 Dec 2014 05:50:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751756AbaL3Ful (ORCPT ); Tue, 30 Dec 2014 00:50:41 -0500 Received: from mailout1.samsung.com ([203.254.224.24]:30687 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751495AbaL3Ful (ORCPT ); Tue, 30 Dec 2014 00:50:41 -0500 Received: from epcpsbgm1.samsung.com (epcpsbgm1 [203.254.230.26]) by mailout1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NHD000INS8G7950@mailout1.samsung.com> for linux-input@vger.kernel.org; Tue, 30 Dec 2014 14:50:40 +0900 (KST) X-AuditID: cbfee61a-f79c06d000004e71-11-54a23d30a84a Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id B8.53.20081.03D32A45; Tue, 30 Dec 2014 14:50:40 +0900 (KST) Received: from srin.p4 ([107.108.168.37]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0NHD003LVS76L620@mmp2.samsung.com>; Tue, 30 Dec 2014 14:50:40 +0900 (KST) From: anshul.g@samsung.com 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:19:53 +0530 Message-id: <1419918593-14976-1-git-send-email-anshul.g@samsung.com> X-Mailer: git-send-email 1.7.9.5 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrAJMWRmVeSWpSXmKPExsVy+t9jQV0D20UhBucucVgseZln8enHORaL w4teMFo83P6C1eLmp2+sFjumtLI4sHnsnHWX3WPK3COsHn1bVjF6fN4kF8ASxWWTkpqTWZZa pG+XwJXx/ug2toLtIhXft/eyNzA+4+9i5OSQEDCRaP/wmgXCFpO4cG89WxcjF4eQwHRGiWev OpggnJ+MEhP/rWMCqWITkJLoePqaHcQWEfCQmD17FzOIzSzgLnF/90+wScICARKr73SD2SwC qhKX/jSD9fIKuEh8PbcbKM4BtE1BYs4kmwmM3AsYGVYxiqYWJBcUJ6XnGuoVJ+YWl+al6yXn 525iBIfDM6kdjCsbLA4xCnAwKvHwbni/MESINbGsuDL3EKMEB7OSCG+jwaIQId6UxMqq1KL8 +KLSnNTiQ4zSHCxK4rxK9m0hQgLpiSWp2ampBalFMFkmDk6pBsZD0QKbT97S1DLex1us0FLx pn2m4XOppzwpWQqB3K84X1yRXHGT+6zEZ8/MBQZMOnOYT6UxSm8TfNT2Me5pfk1FNH/e3c9H vJ5uTv+zif1MxPZnK3878qQemTx97YTU0oOSz6I0usX8507PMJGw/MF7daaMuqHixpbISx+m Weo8ntCnULn8KZcSS3FGoqEWc1FxIgCzfv12AwIAAA== 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); + } } } }