From nobody Mon Nov 28 17:27:07 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4NLXTR53xdz4jR0Q; Mon, 28 Nov 2022 17:27:07 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4NLXTR3Wdmz43lH; Mon, 28 Nov 2022 17:27:07 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1669656427; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=UZQcJYJfGfUUQ+jwU0nh9PMwjuBUYBWDCzdMcCHIhyI=; b=wa1r72E6xR+G1e5EY4mTJzhAnlfheCe4BN+FmcR5iGBs27//yRGdVu/sfPtVqmeeWA3EB1 F+rOXHqkJ3i+VGOGo1O61zTnIntygeWhUsWolxJdNz16vzt8rFlG1KVGnZNT9rKTnV6jdG xciXvXylYjduQH2WjY2H44zHex2+aQHL9DiVaItnTGhPDrUxW4wHvPbe/ulD+zl8+/EIo9 7pKr7p7kuIZEpiPGtJPkCJoWrrvrahZ9DphPHcptWxzjcyyEI5AG4ZiO5/lPe34F9TRqNm EQxI/Jw+jNQxMAmwb0nb+wU6KCeOyhjdtraOnwD5zzbuh8eKxMB9siah8Uc9mA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1669656427; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=UZQcJYJfGfUUQ+jwU0nh9PMwjuBUYBWDCzdMcCHIhyI=; b=nf68WsxxlD55BQZCRmH+B18zGz/HLAHiyyY5Fo2tYIV8G1UUL9MwaTqr6l9UqjPFmRMQDT NNgdEIbapNVqPTDouNkabN8Kze/P3Hk3qQuoaB0u+igJswYvAKY+meJILuOXNJxjbAuZGg ASg+enQPAmWafPAOKAx04SMXoG256142H/h6nBIXQJb3HTXeioqyed2G2ubC95I5wjMfGx BwRQImcw9iqB/LXYR0FoVL/dNf+9oKHRVK/i801axFTLBrrMv61SFdOGYGoM0LzoxKM895 OkZLSAPf+XVCSY50QS/72s4xzqMoXBDnRcepbKaO79QCfvXmaiKijKNnXPjtCQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1669656427; a=rsa-sha256; cv=none; b=BkhDSGm8ldgIwRf4UGaOoZbw7d+k838o1g/jQGdRTJIjz/cF68ic2rMV7wY3b2NjlPX0JL jtqmvW91Vk6NWp727oN7T7bie8LIVsz8fD3DKAzauEPFNVmiQ1FEHUnPfKXnELKveU5LCL epZaMvb7vmJ0YSsBuEppfcVZMaboMFGJtS8vdzHHrOs+ObW5N2Ewle4Jo3LKwFogeIMHKQ Ja9Vm7s1wDhtGYPuf8UfBxyboN29oxQ8LKOAArgojvRjF/DHhRAwYcHQDMZmxdwj38xOOL LSSZS3DTneZFFqrXKFtEZGYv36I0T5uSWCxFNkggX6uIe/aeMOS9GVxeoSn6mw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4NLXTR2TJWzm0k; Mon, 28 Nov 2022 17:27:07 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 2ASHR7lJ081308; Mon, 28 Nov 2022 17:27:07 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 2ASHR75A081307; Mon, 28 Nov 2022 17:27:07 GMT (envelope-from git) Date: Mon, 28 Nov 2022 17:27:07 GMT Message-Id: <202211281727.2ASHR75A081307@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: "Bjoern A. Zeeb" Subject: git: 51a1eac57dc0 - stable/13 - LinuxKPI: implement cpumask_of() List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 51a1eac57dc0489be6056634308442189e49f12a Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=51a1eac57dc0489be6056634308442189e49f12a commit 51a1eac57dc0489be6056634308442189e49f12a Author: Bjoern A. Zeeb AuthorDate: 2022-10-31 14:33:58 +0000 Commit: Bjoern A. Zeeb CommitDate: 2022-11-28 16:34:28 +0000 LinuxKPI: implement cpumask_of() Add a static set of cpumasks for all (possible) cpus with only the one indexed cpu enabled in each set. This is needed for cpumask_of(_cpuid) which returns a cpumask (cpuset) with only cpu _cpuid enabled and is used by one wireless driver at least. Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D37223 (cherry picked from commit e2361e04b02aafa927c32c4f5a39e6fd96196082) --- sys/compat/linuxkpi/common/include/linux/cpu.h | 4 ++++ sys/compat/linuxkpi/common/src/linux_compat.c | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/sys/compat/linuxkpi/common/include/linux/cpu.h b/sys/compat/linuxkpi/common/include/linux/cpu.h index 53fa9db424c2..08e59b33e53a 100644 --- a/sys/compat/linuxkpi/common/include/linux/cpu.h +++ b/sys/compat/linuxkpi/common/include/linux/cpu.h @@ -44,6 +44,8 @@ typedef cpuset_t cpumask_t; extern cpumask_t cpu_online_mask; +cpumask_t *lkpi_get_static_single_cpu_mask(int); + static __inline int cpumask_next(int cpuid, cpumask_t mask) { @@ -73,4 +75,6 @@ cpumask_set_cpu(int cpu, cpumask_t *mask) CPU_SET(cpu, mask); } +#define cpumask_of(_cpu) (lkpi_get_static_single_cpu_mask(_cpu)) + #endif /* _LINUXKPI_LINUX_CPU_H */ diff --git a/sys/compat/linuxkpi/common/src/linux_compat.c b/sys/compat/linuxkpi/common/src/linux_compat.c index 2b962d98c968..33da7dd1c8e1 100644 --- a/sys/compat/linuxkpi/common/src/linux_compat.c +++ b/sys/compat/linuxkpi/common/src/linux_compat.c @@ -132,6 +132,7 @@ static void linux_cdev_deref(struct linux_cdev *ldev); static struct vm_area_struct *linux_cdev_handle_find(void *handle); cpumask_t cpu_online_mask; +static cpumask_t static_single_cpu_mask[MAXCPU]; struct kobject linux_class_root; struct device linux_root_device; struct class linux_class_misc; @@ -2736,6 +2737,16 @@ bool linux_cpu_has_clflush; struct cpuinfo_x86 boot_cpu_data; #endif +cpumask_t * +lkpi_get_static_single_cpu_mask(int cpuid) +{ + + KASSERT((cpuid >= 0 && cpuid < MAXCPU), ("%s: invalid cpuid %d\n", + __func__, cpuid)); + + return (&static_single_cpu_mask[cpuid]); +} + static void linux_compat_init(void *arg) { @@ -2773,6 +2784,15 @@ linux_compat_init(void *arg) init_waitqueue_head(&linux_var_waitq); CPU_COPY(&all_cpus, &cpu_online_mask); + /* + * Generate a single-CPU cpumask_t for each CPU (possibly) in the system. + * CPUs are indexed from 0..(MAXCPU-1). The entry for cpuid 0 will only + * have itself in the cpumask, cupid 1 only itself on entry 1, and so on. + * This is used by cpumask_of() (and possibly others in the future) for, + * e.g., drivers to pass hints to irq_set_affinity_hint(). + */ + for (i = 0; i < MAXCPU; i++) + CPU_SET(i, &static_single_cpu_mask[i]); } SYSINIT(linux_compat, SI_SUB_DRIVERS, SI_ORDER_SECOND, linux_compat_init, NULL);