Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932676AbbELM3U (ORCPT ); Tue, 12 May 2015 08:29:20 -0400 Received: from cn.fujitsu.com ([59.151.112.132]:27584 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S932617AbbELM3O (ORCPT ); Tue, 12 May 2015 08:29:14 -0400 X-IronPort-AV: E=Sophos;i="5.04,848,1406563200"; d="scan'208";a="92042603" From: Lai Jiangshan To: CC: Lai Jiangshan , Tejun Heo Subject: [PATCH 6/7 V2] workqueue: reuse wq_update_unbound_numa_attrs_buf as temporary attrs Date: Tue, 12 May 2015 20:32:34 +0800 Message-ID: <1431433955-3173-7-git-send-email-laijs@cn.fujitsu.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1431433955-3173-1-git-send-email-laijs@cn.fujitsu.com> References: <1431433955-3173-1-git-send-email-laijs@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.167.226.103] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2545 Lines: 72 tmp_attrs is just temporary attrs, we can use wq_update_unbound_numa_attrs_buf for it like wq_update_unbound_numa(); This change also avoids frequently alloc/free the tmp_attrs when the low level cpumask is being updated. Signed-off-by: Lai Jiangshan --- kernel/workqueue.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 61f8ace..6426d6e 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -295,7 +295,7 @@ module_param_named(power_efficient, wq_power_efficient, bool, 0444); static bool wq_numa_enabled; /* unbound NUMA affinity enabled */ -/* buf for wq_update_unbound_numa_attrs(), protected by CPU hotplug exclusion */ +/* PL: buf for apply_wqattrs_prepare() and wq_update_unbound_numa() */ static struct workqueue_attrs *wq_update_unbound_numa_attrs_buf; static DEFINE_MUTEX(wq_pool_mutex); /* protects pools and workqueues list */ @@ -3561,11 +3561,16 @@ apply_wqattrs_prepare(struct workqueue_struct *wq, GFP_KERNEL); new_attrs = alloc_workqueue_attrs(GFP_KERNEL); - tmp_attrs = alloc_workqueue_attrs(GFP_KERNEL); - if (!ctx || !new_attrs || !tmp_attrs) + if (!ctx || !new_attrs) goto out_free; /* + * We don't need to alloc/free temporary attrs. Let's use a + * preallocated one. The following buf is protected by wq_pool_mutex. + */ + tmp_attrs = wq_update_unbound_numa_attrs_buf; + + /* * Calculate the attrs of the default pwq. * If the user configured cpumask doesn't overlap with the * wq_unbound_cpumask, we fallback to the wq_unbound_cpumask. @@ -3615,11 +3620,9 @@ apply_wqattrs_prepare(struct workqueue_struct *wq, ctx->attrs = new_attrs; ctx->wq = wq; - free_workqueue_attrs(tmp_attrs); return ctx; out_free: - free_workqueue_attrs(tmp_attrs); free_workqueue_attrs(new_attrs); apply_wqattrs_cleanup(ctx); return NULL; @@ -3741,7 +3744,7 @@ static void wq_update_unbound_numa(struct workqueue_struct *wq, int cpu, /* * We don't wanna alloc/free wq_attrs for each wq for each CPU. * Let's use a preallocated one. The following buf is protected by - * CPU hotplug exclusion. + * wq_pool_mutex. */ target_attrs = wq_update_unbound_numa_attrs_buf; cpumask = target_attrs->cpumask; -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/