Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp1835426ybl; Wed, 28 Aug 2019 22:51:06 -0700 (PDT) X-Google-Smtp-Source: APXvYqwmaUjjO74qF+bFwr24lHkmVcg9mSdPqlTEYkhTZ12dOzUavs7CrMCMQGY1vvVC51zAWAk6 X-Received: by 2002:a63:6d6:: with SMTP id 205mr6926132pgg.262.1567057866029; Wed, 28 Aug 2019 22:51:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1567057866; cv=none; d=google.com; s=arc-20160816; b=OWw5Eh6Qk9orZXJC+pWUFZhugvIGchlDx0BgzKKXDm9OLdD0+ovjES39eQVBU7UF4E /NHlEHR0uMyMBUkl05bI78xa1RWHggUqm0ZChnTrfrcVllkaNLID4E2QX7+anU0li9ud VsMe4rITumEhD46R/XdveJm5BjorZSiBryVKr3nTDhESCOwwl21WxKQw35811LGnpkYL juLTqry4EcLMsaqJsAOgXpj6dL1hs+6ViK/mikMi1pBWdeqzmU9Ry+jDYjzgsi7RncyX IFevqAJOnHNmAWO/Kwvf+2V6+m3QlhNw4GqnDQHy27gj0IsYwzk+H4Rmc1KgOTYuNdgd po3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:content-disposition :mime-version:message-id:subject:cc:to:from:date:dkim-signature; bh=sn18T6uMLTeD/3sTDPtUsx+jMMfL+K1l3kGQTvhv0uI=; b=nlWRqVBSP6oKAvSeNTVI7/jkNfK7lPFlYw0/NcorxEWe68mTVYg6aTNKU9nNR1/BXd qaeH3QhrUg0CMTxWjUEeivNgUIdNQNurXJWOYR99c5s171ao1GmzbGL9BzoXeeNR2PRC m+6lUrZBe95CR7P5q7nzHAj6iFyN0TbyLaO6LUO1ttze1QM39753AZeAeslZVoCcbbbm b7CoigDW0eXLCmPcOXRjzDv6/p1a7zrjBpospWtWAIcJcHAoAGA3itGPmHj0eHgB/Y06 Gxz7iZUOC9rT0Fd5E3/aVgWOQZUt/NhPtoVD5CiPCB33/fSWL2bKaBWnCyZeVupUtj5o 39Zw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=P8bPwDes; 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=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h5si930463pls.280.2019.08.28.22.50.48; Wed, 28 Aug 2019 22:51:06 -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; dkim=pass header.i=@gmail.com header.s=20161025 header.b=P8bPwDes; 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=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727267AbfH2Ft6 (ORCPT + 99 others); Thu, 29 Aug 2019 01:49:58 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:41390 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725855AbfH2Ft6 (ORCPT ); Thu, 29 Aug 2019 01:49:58 -0400 Received: by mail-pf1-f196.google.com with SMTP id 196so1288782pfz.8 for ; Wed, 28 Aug 2019 22:49:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:mime-version:content-disposition :user-agent; bh=sn18T6uMLTeD/3sTDPtUsx+jMMfL+K1l3kGQTvhv0uI=; b=P8bPwDesXfZFakhgCIpWD7/icUFb4CELeLHTllKMNRPA/vHH+3GDVdMhh4HSp/2D0P t5P+tMbua+DbBxFOzjP1i6KkM5eNnGgvCMgV0OT7oqmcGhUDoF9paKSso+LQj3aKu62f NlKQeA6M/h+LzKU5RIeskY3pZSbQ8IUZGo1gaOGzGmB8dKLeWJwWx+QwK+IJ1VpfGq/f 56zxQLfuPtKEL2pH0brnbyoZvMw/t8CJ4oOxn3UuuO1V+wSm84TLXVAWLd4u9QsAn6/D CPSzBvqoroYOgtL/HRDW3h51ZV+SVx2Q3b6+r/xQ/LpYhCGBsm7g8q+CdgQg7Gh7FQL4 rMYg== 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:mime-version :content-disposition:user-agent; bh=sn18T6uMLTeD/3sTDPtUsx+jMMfL+K1l3kGQTvhv0uI=; b=JWnfC5Slu7ifDn1ROVs8BH5rnmSY1eNw9rM1HMwDmh+2QUXT4Ds5nQAmsqt3mkGrPW gEdIXMs3G5qU4d0Wk2ElpwtEbK4D9fE8JFFcpcHME2Bd8lmrKeUJshN0xL3cTqtky1d6 Q7MPQJ7YJVCf5iboVR3JiPA3TQG00C/QXbHuut4qekxHk7C0wQxPIUmanHF1EJTNpCRO VI8hwe2Xc46syzxpFAEcHXwPj9ZVuQOO1wfbALEuoz2Szcevmfd1eUboRTXXdItFh39p +BM6TadVFNJvwsKzhCyTyaXyTBjYzDz7zWD7KFqX9b+yCP7AQ/jbmIACwCb6qt122Uo8 RXnA== X-Gm-Message-State: APjAAAUZ0q+yn8Jz6SHk53JMoC9o7k3zOMWwSF+Oqf3exYqOo5dk2FB0 HNr0DVWgV5dPpMokfP2b4g== X-Received: by 2002:a63:3c5:: with SMTP id 188mr6567335pgd.394.1567057797661; Wed, 28 Aug 2019 22:49:57 -0700 (PDT) Received: from mark-All-Series (114-32-231-59.HINET-IP.hinet.net. [114.32.231.59]) by smtp.gmail.com with ESMTPSA id v7sm1324033pff.87.2019.08.28.22.49.55 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 28 Aug 2019 22:49:57 -0700 (PDT) Date: Thu, 29 Aug 2019 13:49:53 +0800 From: Peikan Tsai To: gregkh@linuxfoundation.org, arve@android.com, tkjos@android.com, maco@android.com, joel@joelfernandes.org, christian@brauner.io Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org Subject: [PATCH] binder: Use kmem_cache for binder_thread Message-ID: <20190829054953.GA18328@mark-All-Series> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, The allocated size for each binder_thread is 512 bytes by kzalloc. Because the size of binder_thread is fixed and it's only 304 bytes. It will save 208 bytes per binder_thread when use create a kmem_cache for the binder_thread. Signed-off-by: Peikan Tsai --- drivers/android/binder.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index dc1c83eafc22..043e0ebd0fe7 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -87,6 +87,8 @@ static struct dentry *binder_debugfs_dir_entry_root; static struct dentry *binder_debugfs_dir_entry_proc; static atomic_t binder_last_id; +static struct kmem_cache *binder_thread_cachep; + static int proc_show(struct seq_file *m, void *unused); DEFINE_SHOW_ATTRIBUTE(proc); @@ -4696,14 +4698,15 @@ static struct binder_thread *binder_get_thread(struct binder_proc *proc) thread = binder_get_thread_ilocked(proc, NULL); binder_inner_proc_unlock(proc); if (!thread) { - new_thread = kzalloc(sizeof(*thread), GFP_KERNEL); + new_thread = kmem_cache_zalloc(binder_thread_cachep, + GFP_KERNEL); if (new_thread == NULL) return NULL; binder_inner_proc_lock(proc); thread = binder_get_thread_ilocked(proc, new_thread); binder_inner_proc_unlock(proc); if (thread != new_thread) - kfree(new_thread); + kmem_cache_free(binder_thread_cachep, new_thread); } return thread; } @@ -4723,7 +4726,7 @@ static void binder_free_thread(struct binder_thread *thread) BUG_ON(!list_empty(&thread->todo)); binder_stats_deleted(BINDER_STAT_THREAD); binder_proc_dec_tmpref(thread->proc); - kfree(thread); + kmem_cache_free(binder_thread_cachep, thread); } static int binder_thread_release(struct binder_proc *proc, @@ -6095,6 +6098,12 @@ static int __init binder_init(void) if (ret) return ret; + binder_thread_cachep = kmem_cache_create("binder_thread", + sizeof(struct binder_thread), + 0, 0, NULL); + if (!binder_thread_cachep) + return -ENOMEM; + atomic_set(&binder_transaction_log.cur, ~0U); atomic_set(&binder_transaction_log_failed.cur, ~0U); @@ -6167,6 +6176,7 @@ static int __init binder_init(void) err_alloc_device_names_failed: debugfs_remove_recursive(binder_debugfs_dir_entry_root); + kmem_cache_destroy(binder_thread_cachep); return ret; } -- 2.17.1