From nobody Wed Dec 17 08:00:04 2025 Received: from mail-yw1-f178.google.com (mail-yw1-f178.google.com [209.85.128.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3CD46DDBC for ; Sat, 20 Jan 2024 02:51:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705719069; cv=none; b=hyumcpfLMEifibOqBddMvrdE5fLrqWtz9d6nSEbPJYLkt9Q2GIroCmV8EyQkKup3seJ6vxmNQ3xxcHYyixXxa7FAeloYP7VFUXL9Rj74nNB4fWcFuDvV40f6U3dYXNMZd2TqHpqK/UxMDScyV+GGpHPr3AzTzuxpa/VB3jgxupo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705719069; c=relaxed/simple; bh=g4Q/v+BsQEl39aheDnpAa2RdKnHhflblAdg2pabSwXk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=W/Qv5RK+I4jnbl43xkx1SzbaOneNAaTuYiEdml2cEePb+kOhrq2Q+7CmKFlcKLsA2InWvFhbBbzzi3v63nxXp+ZgyywvcCNSK7dYBr3aDUsEsE5QPoClCBU8MfB7PFIk5QiUD7lZAHvkDzCXKfedZrTQAKlFqQNuxv17IbNIKbc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GQFBWkHG; arc=none smtp.client-ip=209.85.128.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GQFBWkHG" Received: by mail-yw1-f178.google.com with SMTP id 00721157ae682-5f0629e67f4so14828157b3.3 for ; Fri, 19 Jan 2024 18:51:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705719067; x=1706323867; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SK3MSQRvDzIpKb0PB7VHqnVj86mu8pY62lcMb7kaIwo=; b=GQFBWkHG27Zh41Z4Aecxi2ktaH5NuzK4VanYBIVwEHbsC/JwS9D48nU3WG2kw4s1wZ hfwqvI9Szud0Sxr27AEA9ML4Wi4petizqqfEzUGW3zyrCLQ018s94ZGBCPhMr5tlVP5Y F6+GgkTBKsKRGg8H6jcKvstn3TAzUR2TTFnfwKn3RUg+iEDZDSTs6+YsSRNsigFSnUDQ ZD5/3WM8aXmvXNK9VxitEOkM68xZBBW3RgLSyBo2xZup2bl8R59o3tObRp3ulvE3tar8 BVA9V7/k5J10Kui7hpL/r7bmp9r4Fr4YOM1sn+NzO3jIOicmkiC+HKTJ2ezvOQ+dxD8h eRYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705719067; x=1706323867; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SK3MSQRvDzIpKb0PB7VHqnVj86mu8pY62lcMb7kaIwo=; b=TnOgrPLWvC8dpbvwBp4FiBCqce8S/TooqTY2gNe1bwEZO0rLGtGxk5sDp5NGfqZuLC 7ahUiisfFIW9ZXMKH4I2Rq6Yfl8gGUzyXWpO1OmxnCQYrCQGLYnGOz2ZMOGh1h5h39DC 5q5lwPL9EPQcKb18sWzA172vbkn4SoR2wgzShV++DzEq7uP/JgU8CwAyhhGiO2K3Oxey oeJZrNeW6Rbs8ABnI+tBN1zhaWzCoCz6jwmGBYaO8fzhqqpdkhaX9NmIzlOQ3tIf2kLC 6/tSYOVR4/SJTXruKVgmR3sEDF46l1xAniauOT3b6lY/kwpeEPCgNZhKV4YCuFAG0pax xCjA== X-Gm-Message-State: AOJu0Yz5HC/HlShwXp7He67BQG4CLHJgNr0I4Q2AXupPgmd5VOjQIwYT CbK+nItoZ6Hzs7D4lkczInooFo4U0bPOxcSVHomlmiQDUmxkNauM X-Google-Smtp-Source: AGHT+IEwbvhpM0763THgchq4r36P/ykWzE2VFrUoLccf/V/oLviZzmPeNmVu64oa+SGSzgCqwCIfXw== X-Received: by 2002:a0d:e811:0:b0:5fa:ea54:f413 with SMTP id r17-20020a0de811000000b005faea54f413mr796695ywe.1.1705719067174; Fri, 19 Jan 2024 18:51:07 -0800 (PST) Received: from localhost ([2601:344:8301:57f0:2288:782e:a717:678d]) by smtp.gmail.com with ESMTPSA id r74-20020a819a4d000000b005ff8179bbfesm1926501ywg.104.2024.01.19.18.51.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Jan 2024 18:51:06 -0800 (PST) From: Yury Norov To: Andrew Morton , Thomas Gleixner , Ming Lei , linux-kernel@vger.kernel.org Cc: Yury Norov , Andy Shevchenko , Breno Leitao , Nathan Chancellor , Rasmus Villemoes , Zi Yan Subject: [PATCH 8/9] lib/group_cpus: rework group_cpus_evenly() Date: Fri, 19 Jan 2024 18:50:52 -0800 Message-Id: <20240120025053.684838-9-yury.norov@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240120025053.684838-1-yury.norov@gmail.com> References: <20240120025053.684838-1-yury.norov@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Leverage cleanup machinery and drop most of housekeeping code. Particularly, drop unneeded and erroneously initialized with -ENOMEM variable ret. Signed-off-by: Yury Norov --- lib/group_cpus.c | 79 +++++++++++++++--------------------------------- 1 file changed, 25 insertions(+), 54 deletions(-) diff --git a/lib/group_cpus.c b/lib/group_cpus.c index b8c0c3ae2bbd..4c09df9eb886 100644 --- a/lib/group_cpus.c +++ b/lib/group_cpus.c @@ -76,6 +76,8 @@ static void free_node_to_cpumask(cpumask_var_t *masks) kfree(masks); } =20 +DEFINE_FREE(free_node_to_cpumask, cpumask_var_t *, if (_T) free_node_to_cp= umask(_T)); + static void build_node_to_cpumask(cpumask_var_t *masks) { int cpu; @@ -345,26 +347,16 @@ static int __group_cpus_evenly(unsigned int startgrp,= unsigned int numgrps, */ struct cpumask *group_cpus_evenly(unsigned int numgrps) { - unsigned int curgrp =3D 0, nr_present =3D 0, nr_others =3D 0; - cpumask_var_t *node_to_cpumask; - cpumask_var_t nmsk, npresmsk; - int ret =3D -ENOMEM; - struct cpumask *masks =3D NULL; - - if (!alloc_cpumask_var(&nmsk, GFP_KERNEL)) + cpumask_var_t *node_to_cpumask __free(free_node_to_cpumask) =3D alloc_nod= e_to_cpumask(); + struct cpumask *masks __free(kfree) =3D kcalloc(numgrps, sizeof(*masks), = GFP_KERNEL); + cpumask_var_t npresmsk __free(free_cpumask_var) =3D CPUMASK_NULL; + cpumask_var_t nmsk __free(free_cpumask_var) =3D CPUMASK_NULL; + int curgrp, nr_present, nr_others; + + if (!masks || !node_to_cpumask || !alloc_cpumask_var(&nmsk, GFP_KERNEL) + || !alloc_cpumask_var(&npresmsk, GFP_KERNEL)) return NULL; =20 - if (!alloc_cpumask_var(&npresmsk, GFP_KERNEL)) - goto fail_nmsk; - - node_to_cpumask =3D alloc_node_to_cpumask(); - if (!node_to_cpumask) - goto fail_npresmsk; - - masks =3D kcalloc(numgrps, sizeof(*masks), GFP_KERNEL); - if (!masks) - goto fail_node_to_cpumask; - build_node_to_cpumask(node_to_cpumask); =20 /* @@ -382,11 +374,15 @@ struct cpumask *group_cpus_evenly(unsigned int numgrp= s) cpumask_copy(npresmsk, data_race(cpu_present_mask)); =20 /* grouping present CPUs first */ - ret =3D __group_cpus_evenly(curgrp, numgrps, node_to_cpumask, - npresmsk, nmsk, masks); - if (ret < 0) - goto fail_build_affinity; - nr_present =3D ret; + nr_present =3D __group_cpus_evenly(0, numgrps, node_to_cpumask, npresmsk,= nmsk, masks); + if (nr_present < 0) + return NULL; + + /* If npresmsk is empty */ + if (!cpumask_andnot(npresmsk, cpu_possible_mask, npresmsk)) + return_ptr(masks); + + curgrp =3D nr_present < numgrps ? nr_present : 0; =20 /* * Allocate non present CPUs starting from the next group to be @@ -394,38 +390,13 @@ struct cpumask *group_cpus_evenly(unsigned int numgrp= s) * group space, assign the non present CPUs to the already * allocated out groups. */ - if (nr_present >=3D numgrps) - curgrp =3D 0; - else - curgrp =3D nr_present; - - if (cpumask_andnot(npresmsk, cpu_possible_mask, npresmsk)) - /* If npresmsk is not empty */ - ret =3D __group_cpus_evenly(curgrp, numgrps, node_to_cpumask, - npresmsk, nmsk, masks); - else - ret =3D 0; - - if (ret >=3D 0) - nr_others =3D ret; - - fail_build_affinity: - if (ret >=3D 0) - WARN_ON(nr_present + nr_others < numgrps); - - fail_node_to_cpumask: - free_node_to_cpumask(node_to_cpumask); - - fail_npresmsk: - free_cpumask_var(npresmsk); - - fail_nmsk: - free_cpumask_var(nmsk); - if (ret < 0) { - kfree(masks); + nr_others =3D __group_cpus_evenly(curgrp, numgrps, node_to_cpumask, + npresmsk, nmsk, masks); + if (nr_others < 0) return NULL; - } - return masks; + + WARN_ON(nr_present + nr_others < numgrps); + return_ptr(masks); } #else /* CONFIG_SMP */ struct cpumask *group_cpus_evenly(unsigned int numgrps) --=20 2.40.1