From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 02F6FC4360C for ; Fri, 27 Sep 2019 06:03:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id CCDB320863 for ; Fri, 27 Sep 2019 06:03:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726077AbfI0GDU (ORCPT ); Fri, 27 Sep 2019 02:03:20 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:3165 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725769AbfI0GDU (ORCPT ); Fri, 27 Sep 2019 02:03:20 -0400 Received: from DGGEMS411-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id E193F3365AF5D05ACBFF; Fri, 27 Sep 2019 14:03:15 +0800 (CST) Received: from [127.0.0.1] (10.177.251.225) by DGGEMS411-HUB.china.huawei.com (10.3.19.211) with Microsoft SMTP Server id 14.3.439.0; Fri, 27 Sep 2019 14:03:10 +0800 To: Bart Van Assche , , , "tglx@linutronix.de" , "Alexander Duyck" , , "gregkh@linuxfoundation.org" , David Sterba CC: "linux-kernel@vger.kernel.org" From: Yunfeng Ye Subject: [PATCH v2] async: Let kfree() out of the critical area of the lock Message-ID: Date: Fri, 27 Sep 2019 14:03:04 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.177.251.225] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The async_lock is big global lock, and kfree() is not always cheap, it will increase lock contention. it's better let kfree() outside the lock to keep the critical area as short as possible. Signed-off-by: Yunfeng Ye Reviewed-by: Alexander Duyck Reviewed-by: Bart Van Assche --- v1 -> v2: - update the description - add "Reviewed-by" kernel/async.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/async.c b/kernel/async.c index 4f9c1d6..1de270d 100644 --- a/kernel/async.c +++ b/kernel/async.c @@ -135,12 +135,12 @@ static void async_run_entry_fn(struct work_struct *work) list_del_init(&entry->domain_list); list_del_init(&entry->global_list); - /* 3) free the entry */ - kfree(entry); atomic_dec(&entry_count); - spin_unlock_irqrestore(&async_lock, flags); + /* 3) free the entry */ + kfree(entry); + /* 4) wake up any waiters */ wake_up(&async_done); } -- 2.7.4