Received: by 2002:a05:6358:45e:b0:b5:b6eb:e1f9 with SMTP id 30csp911841rwe; Thu, 25 Aug 2022 11:21:49 -0700 (PDT) X-Google-Smtp-Source: AA6agR7WbqPS5bmjs++WsHd/xmhlkExTiITIk8ZNqZ+EP+Qahqjsuyf1yNODFRsPcPQ6AiVkUX18 X-Received: by 2002:a17:90a:f698:b0:1fb:b605:df71 with SMTP id cl24-20020a17090af69800b001fbb605df71mr417271pjb.134.1661451708622; Thu, 25 Aug 2022 11:21:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661451708; cv=none; d=google.com; s=arc-20160816; b=cDRnRNy5QQ4wJiShftZhF8h9yF/omXkKfQhjdtfpyFSGX5IK2qQgc+D9B5hHwXEPFG XczHtmtNLVfDeOtPSqV1mBukJ78ic8/TEkwKjieSt+3e2TZPu1zpHAVnUVbusHOAZKsj zM5bJ6Q/RDxQS0y/X/bgmWC3aeN0GiEm0F02kmvJHGZ/Fsh/ZBg9RiHT26Vz5GUDpCtJ e4XWdZHdykauqefQdjlsUuvBWxV03vMPhVkd1iRuYA0C3SeC8sWwogEaVIjUycm5b6jz 320te/NRoDQaUC+1aGfM7V0V/UaZjp4FPnMrvrVF4oUzuWFeTiF1Od83MM/Bj83HrgvY WI2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=KiSNPKBlPRcccx1lRe0Q2eNIt6M0VYiwkWljd6A0lLc=; b=la48WQ0ICupY5KITxJsh7I/ltpF4i4Vb+GkFnABRzcyhnOWTcnmxnhhyGUiTUvhqvX dN8BQlL8/IpOl937Pd8lIApVaJ6+tUQdXphsZpExo8adEJnjHdLhtj+d2Zo2/5NyMJj4 5YYb0U1/O3J3oIxu8buBt7VYYVDkvOLPItRp90/mej8yPSRxp6xyryQc87KoN/T+hd9H 7LmrbHKDuSzhItI4P3E9rqD+vSxDRtkCEFJeqHCNbTi3mqoJ886JbR54cn2pe19HOWIW ACvkNsEnrB0ZYnTuSE5wR1cIlTqkOdQ577d6ntTeiNoWObB+PxrDPJlYhQ9FpvrjKwHM /UTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Ta3W0kHV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b14-20020a170903228e00b00171345701dbsi22204840plh.526.2022.08.25.11.21.37; Thu, 25 Aug 2022 11:21:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Ta3W0kHV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243303AbiHYSMy (ORCPT + 99 others); Thu, 25 Aug 2022 14:12:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40612 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241497AbiHYSMp (ORCPT ); Thu, 25 Aug 2022 14:12:45 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C4DE8BCCE7 for ; Thu, 25 Aug 2022 11:12:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661451162; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=KiSNPKBlPRcccx1lRe0Q2eNIt6M0VYiwkWljd6A0lLc=; b=Ta3W0kHVfFZFRQ4OU1HaxBhNOLVnBsqa001E9/PTBg6tpa4Qo6fF420lxogg52zuVOlhyp UnM5hSadHivO6CNvePbIkfwyXCEm7LJMYq6UpJgD9JyiUWGbdkh56oBPFubTA+8h05sLYp Lv6Obr7DZnLiXTfjXWwh3vGrQKBjGL0= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-336-b65jcT-bPZOlTqI2l1r7QA-1; Thu, 25 Aug 2022 14:12:40 -0400 X-MC-Unique: b65jcT-bPZOlTqI2l1r7QA-1 Received: by mail-wr1-f69.google.com with SMTP id w2-20020adfbac2000000b00225688186e5so1682370wrg.8 for ; Thu, 25 Aug 2022 11:12:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc; bh=KiSNPKBlPRcccx1lRe0Q2eNIt6M0VYiwkWljd6A0lLc=; b=RaQLGvWZzVcADo9T+MuZXmUTIVsP3zKxZCpbk2Nq0WaWAeOdE46MPjgPEXjqYZ5hN2 BnokPVn6jF+X1UHdPG9MGbDo7kit2wcMn6g5j8+Y1mqCZ4b3W4qhnFhR684HELAROM97 29eeBzRVXF3I6PYn1pDSOcip/v9Pse1SM53jdNxuft6KOTbsTQep3KngKNbVT4ejUfk9 MUtlV4uJPsBfdXivoxibVs0dPP1fV6t9RCy+tscCYeE/6BW1ksWBMx6AkzLdQgQLrOWN bqQ/uovwX4FFH0HGj8GbPlBUgYvgNDuSA1IaUlnFB+TUjFoM3iVnTGR339f8Mkv9ETHX 0kpw== X-Gm-Message-State: ACgBeo2Xe5x5fJmIXhwICSGDDvqfCQ5QRLsXfmri4U7PLQ2Sg51HSm9h HYW9G7iZWvr9cPRrP8vzhHCefCPFyJlDXphn59baDk8Tlf7fKk/rJIQY3XHtRLwoWErjRnpUzKH l8/FjmAOnsK2xdW3mSgpjVnYc X-Received: by 2002:a05:6000:1f19:b0:225:6e25:aa01 with SMTP id bv25-20020a0560001f1900b002256e25aa01mr2885509wrb.236.1661451159112; Thu, 25 Aug 2022 11:12:39 -0700 (PDT) X-Received: by 2002:a05:6000:1f19:b0:225:6e25:aa01 with SMTP id bv25-20020a0560001f1900b002256e25aa01mr2885493wrb.236.1661451158813; Thu, 25 Aug 2022 11:12:38 -0700 (PDT) Received: from vschneid.remote.csb ([185.11.37.247]) by smtp.gmail.com with ESMTPSA id w1-20020a05600018c100b00225250f2d1bsm20371622wrq.94.2022.08.25.11.12.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Aug 2022 11:12:38 -0700 (PDT) From: Valentin Schneider To: netdev@vger.kernel.org, linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Saeed Mahameed , Leon Romanovsky , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Yury Norov , Andy Shevchenko , Rasmus Villemoes , Ingo Molnar , Peter Zijlstra , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Mel Gorman , Greg Kroah-Hartman , Heiko Carstens , Tony Luck , Jonathan Cameron , Gal Pressman , Tariq Toukan , Jesse Brandeburg Subject: [PATCH v3 0/9] sched, net: NUMA-aware CPU spreading interface Date: Thu, 25 Aug 2022 19:12:01 +0100 Message-Id: <20220825181210.284283-1-vschneid@redhat.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi folks, Tariq pointed out in [1] that drivers allocating IRQ vectors would benefit from having smarter NUMA-awareness (cpumask_local_spread() doesn't quite cut it). The proposed interface involved an array of CPUs and a temporary cpumask, and being my difficult self what I'm proposing here is an interface that doesn't require any temporary storage other than some stack variables (at the cost of one wild macro). Patch 9/9 is just there to showcase how the thing would be used. If this doesn't get hated on, I'll let Tariq pick this up and push it with his networking driver changes (with actual changelogs). [1]: https://lore.kernel.org/all/20220728191203.4055-1-tariqt@nvidia.com/ A note on treewide use of for_each_cpu_andnot() =============================================== I've used the below coccinelle script to find places that could be patched (I couldn't figure out the valid syntax to patch from coccinelle itself): ,----- @tmpandnot@ expression tmpmask; iterator for_each_cpu; position p; statement S; @@ cpumask_andnot(tmpmask, ...); ... ( for_each_cpu@p(..., tmpmask, ...) S | for_each_cpu@p(..., tmpmask, ...) { ... } ) @script:python depends on tmpandnot@ p << tmpandnot.p; @@ coccilib.report.print_report(p[0], "andnot loop here") '----- Which yields (against c40e8341e3b3): .//arch/powerpc/kernel/smp.c:1587:1-13: andnot loop here .//arch/powerpc/kernel/smp.c:1530:1-13: andnot loop here .//arch/powerpc/kernel/smp.c:1440:1-13: andnot loop here .//arch/powerpc/platforms/powernv/subcore.c:306:2-14: andnot loop here .//arch/x86/kernel/apic/x2apic_cluster.c:62:1-13: andnot loop here .//drivers/acpi/acpi_pad.c:110:1-13: andnot loop here .//drivers/cpufreq/armada-8k-cpufreq.c:148:1-13: andnot loop here .//drivers/cpufreq/powernv-cpufreq.c:931:1-13: andnot loop here .//drivers/net/ethernet/sfc/efx_channels.c:73:1-13: andnot loop here .//drivers/net/ethernet/sfc/siena/efx_channels.c:73:1-13: andnot loop here .//kernel/sched/core.c:345:1-13: andnot loop here .//kernel/sched/core.c:366:1-13: andnot loop here .//net/core/dev.c:3058:1-13: andnot loop here A lot of those are actually of the shape for_each_cpu(cpu, mask) { ... cpumask_andnot(mask, ...); } I think *some* of the powerpc ones would be a match for for_each_cpu_andnot(), but I decided to just stick to the one obvious one in __sched_core_flip(). Revisions ========= v2 -> v3 ++++++++ o Added for_each_cpu_and() and for_each_cpu_andnot() tests (Yury) o New patches to fix issues raised by running the above o New patch to use for_each_cpu_andnot() in sched/core.c (Yury) v1 -> v2 ++++++++ o Split _find_next_bit() @invert into @invert1 and @invert2 (Yury) o Rebase onto v6.0-rc1 Cheers, Valentin Valentin Schneider (9): cpumask: Make cpumask_full() check for nr_cpu_ids bits lib/test_cpumask: Make test_cpumask_last check for nr_cpu_ids bits bitops: Introduce find_next_andnot_bit() cpumask: Introduce for_each_cpu_andnot() lib/test_cpumask: Add for_each_cpu_and(not) tests sched/core: Merge cpumask_andnot()+for_each_cpu() into for_each_cpu_andnot() sched/topology: Introduce sched_numa_hop_mask() sched/topology: Introduce for_each_numa_hop_cpu() SHOWCASE: net/mlx5e: Leverage for_each_numa_hop_cpu() drivers/net/ethernet/mellanox/mlx5/core/eq.c | 12 ++++- include/linux/cpumask.h | 41 ++++++++++++++++- include/linux/find.h | 44 ++++++++++++++++--- include/linux/topology.h | 46 ++++++++++++++++++++ kernel/sched/core.c | 5 +-- kernel/sched/topology.c | 28 ++++++++++++ lib/find_bit.c | 23 +++++----- lib/test_cpumask.c | 23 +++++++++- 8 files changed, 196 insertions(+), 26 deletions(-) -- 2.31.1