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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7C1C0C74A5B for ; Wed, 29 Mar 2023 10:14:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 88A1E6B0072; Wed, 29 Mar 2023 06:14:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8395F6B0074; Wed, 29 Mar 2023 06:14:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 701176B0075; Wed, 29 Mar 2023 06:14:56 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 604E96B0072 for ; Wed, 29 Mar 2023 06:14:56 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 2CB9F1C5FBF for ; Wed, 29 Mar 2023 10:14:56 +0000 (UTC) X-FDA: 80621527392.08.66C9C73 Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) by imf12.hostedemail.com (Postfix) with ESMTP id CC5514001C for ; Wed, 29 Mar 2023 10:14:53 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b=XZBBf4Pr; spf=none (imf12.hostedemail.com: domain of peterz@infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=peterz@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1680084894; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=XD6f5bOaCAyYBS+M+TP/wCO7dC9gfBN3tBFXovXbVLc=; b=wU67X2ZV+xpCkFwfJUSLXNhjoxW72y9InJ+6x4EUNoej/SpiOmDvKp6D0mxjwI6HYguZpr HgvCXMA6RvzBX5s5c/w2DU/XCOcr1Po6UjUWV56npIf60sUmHMHlD7pdUc5WDBsgafeyOE GXj+xDKyLg03a5VNCbh8ydSNZ2w5P18= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b=XZBBf4Pr; spf=none (imf12.hostedemail.com: domain of peterz@infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=peterz@infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1680084894; a=rsa-sha256; cv=none; b=cYi/r5h6D1K8PSUFCzLxHOoCXqXnIRfLwijvo/1ToNNZ4uWkqg8g8cPc0Wp8WoU3Gi47B+ /WfHm2q+2GxxLlhOozTE0Httmki+GkeDtgyUZ5TPio5KbN/tl+ncF6grnQXndmhYCch7JL kJOB/yB/eoOoLGKyFECV9qnvOm/FMoc= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=XD6f5bOaCAyYBS+M+TP/wCO7dC9gfBN3tBFXovXbVLc=; b=XZBBf4PrIjHEFWyGER0jptEarY kws9DLGDVI7fOiPMxmdFrTY6RqGGxEfMl4K8jq9s4Sevi/zJkYWjvm2UuUTDZ9nqlHwVgm+leRJVc YwxCPqCnTujlpnNb3RNh3zfoThf4H/c4avmeo9KvfNtvI553TcFKAbacLxteFkPaeY7NYDBDPJeDk PgvLKxUxosd7SXO+5B+Ql4yq1UGreP4xJpzkXP45t8v9VB3EOdFBLZHc42raluYAFREmgC4014Atu 5i/cVms+z0Bosd7TRDmA20Hm34AXO6GZfkEYTMMiclcHK8MkiFO2jtpzh0SSpqgqfDMr1I0YG6Jae G/KO6Ukw==; Received: from j130084.upc-j.chello.nl ([24.132.130.84] helo=noisy.programming.kicks-ass.net) by desiato.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1phSpH-006p42-2e; Wed, 29 Mar 2023 10:14:45 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (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 noisy.programming.kicks-ass.net (Postfix) with ESMTPS id 8CE5C300379; Wed, 29 Mar 2023 12:14:42 +0200 (CEST) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 1000) id 6AA9C2622EC50; Wed, 29 Mar 2023 12:14:42 +0200 (CEST) Date: Wed, 29 Mar 2023 12:14:42 +0200 From: Peter Zijlstra To: Luis Chamberlain Cc: david@redhat.com, patches@lists.linux.dev, linux-modules@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, pmladek@suse.com, petr.pavlu@suse.com, prarit@redhat.com, torvalds@linux-foundation.org, gregkh@linuxfoundation.org, rafael@kernel.org, christophe.leroy@csgroup.eu, tglx@linutronix.de, song@kernel.org, rppt@kernel.org, willy@infradead.org, vbabka@suse.cz, mhocko@suse.com, dave.hansen@linux.intel.com Subject: Re: [PATCH 4/7] sempahore: add a helper for a concurrency limiter Message-ID: <20230329101442.GQ4253@hirez.programming.kicks-ass.net> References: <20230329053149.3976378-1-mcgrof@kernel.org> <20230329053149.3976378-5-mcgrof@kernel.org> <20230329072112.GG4253@hirez.programming.kicks-ass.net> <20230329091935.GP4253@hirez.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: CC5514001C X-Stat-Signature: xihht4hb69s1yxy5cyfxuafddszutgtp X-Rspam-User: X-HE-Tag: 1680084893-993416 X-HE-Meta: U2FsdGVkX1+gqxHd0ya0B3S3GLihgX3kLc1bv4YG4UyK3tAytRN0uPGcLNEUrMXHS8f1nmeffp0CQ7VGOVqhDXxlnV/REajdGnLj3FcBNjoKGrXD+aUVv5nF5mWrpJ/FKeWrCke1MhqhP8mM2dE4tz5RCFVbjJEJMjKZyTwL7shcE7ret5mBCDyzG0V27vIah5CRkPOi56EInCy+QoL9eBT7ZohAGonzaapt7agEzzwPiDrl8HDBeO18Bh3YHiIGMGAeZoa0XLFckBKjEdH4jsFDQ4gsqYWI6eoFXvP8qc7aDksmlU8Tv1QNc9na3CgN+PVovVC5h3k60hdXYMAx9b9pdfAwbOBMiLL0qFkXMizKNKdz4pq8ObOb0MGsPoy9qRCiSURYfnyPECpanmKBEqtYvbXp8hifpiFfN7XZQFYbeC3YXUQw5qjqueHfn8cVyXb7X/Q8NeF+Le/9ucYMCvGId9FzwHiwVmN6LrxO9RL1oHy9SjqLEDXmyIBMhnFJPDWpzflQJT3nFYkXSpOFoddRkoPCbr+Q8aWNV3HVHo5Aei2/6PkyZHrh9RBmofMXMEabyg+SAW8R6lkRvEJXd7ursjxUlnX1SFGnGuzq2cV2gyEjwnO4dIsy22Hdlk1Ys5WcZ6V99gd6P8NSMa8Sfr9tK1jNBeTLn5bChP/IYC5z94jOWDacV8PkuM3oSp+VZ2UC4L4/jTEBkvyyYJxL++gvalkw/fYIgelEe8h0BaF8GsHauu6FNEghcIs6XA1Tmqb9wbz6MQP62gq9wILR0DPs84y+CExuCWHo6vdU5KPBvWpPgHom4A/FiOVFfP9zzwC8zW6tSvkdatZvpxX9xWbCT18VYFPqC2zpmXl5YD2N346JQ0f0DEliXmUDV/n45F9TPNCaCkuQLrlUhcYoqm3mAImRH1LB5IHcV3WjB61oQJkGuFI12iwglNZdRgCEMBeB375y92dVr6dr5x8 im4SsGDI 2WuXomFwUgJjRd5mT9VycyiXzrnhlzIXvg0s+86kicycnyfrbKuxfjBEVslKYcaBF+uGv4pCJyIkTkfbe7pldVnI5oODsZSCJ3oUHpE5xgc2Ogs4GixDq3YZcrIq52sXiN2xtZ99jkAIz/z+vEtIwjuzmyeIEz+mx7gGExe7ovheQKES6WhQT5qusYnoTR86a4Vqm7s8A/CqT0HGbEpM00xk9ZA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, Mar 29, 2023 at 02:49:43AM -0700, Luis Chamberlain wrote: > Seems OK to me. Either way works. Should I carry a patch from you for this > series? Sure, here goes (still not even compile tested, but what can go wrong, right :-) --- Subject: semaphore: Change DEFINE_SEMAPHORE() to take a number argument From: Peter Zijlstra Date: Wed Mar 29 12:06:08 CEST 2023 Fundamentally semaphores are a counted primitive, but DEFINE_SEMAPHORE() does not expose this and explicitly creates a binary semaphore. Provide DEFINE_BINARY_SEMAPHORE() for this case and change DEFINE_SEMAPHORE() to take a number argument and use that in the few places that open-coded it using __SEMAPHORE_INITIALIZER(). Signed-off-by: Peter Zijlstra (Intel) --- arch/mips/cavium-octeon/setup.c | 2 +- arch/x86/kernel/cpu/intel.c | 2 +- drivers/firmware/efi/runtime-wrappers.c | 2 +- drivers/firmware/efi/vars.c | 2 +- drivers/macintosh/adb.c | 2 +- drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 2 +- drivers/platform/x86/intel/ifs/sysfs.c | 2 +- drivers/scsi/esas2r/esas2r_ioctl.c | 2 +- drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 2 +- include/linux/semaphore.h | 7 +++++-- kernel/printk/printk.c | 2 +- net/rxrpc/call_object.c | 6 ++---- 12 files changed, 17 insertions(+), 16 deletions(-) --- a/arch/mips/cavium-octeon/setup.c +++ b/arch/mips/cavium-octeon/setup.c @@ -72,7 +72,7 @@ extern void pci_console_init(const char static unsigned long long max_memory = ULLONG_MAX; static unsigned long long reserve_low_mem; -DEFINE_SEMAPHORE(octeon_bootbus_sem); +DEFINE_BINARY_SEMAPHORE(octeon_bootbus_sem); EXPORT_SYMBOL(octeon_bootbus_sem); static struct octeon_boot_descriptor *octeon_boot_desc_ptr; --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c @@ -1177,7 +1177,7 @@ static const struct { static struct ratelimit_state bld_ratelimit; static unsigned int sysctl_sld_mitigate = 1; -static DEFINE_SEMAPHORE(buslock_sem); +static DEFINE_BINARY_SEMAPHORE(buslock_sem); #ifdef CONFIG_PROC_SYSCTL static struct ctl_table sld_sysctls[] = { --- a/drivers/firmware/efi/runtime-wrappers.c +++ b/drivers/firmware/efi/runtime-wrappers.c @@ -158,7 +158,7 @@ void efi_call_virt_check_flags(unsigned * none of the remaining functions are actually ever called at runtime. * So let's just use a single lock to serialize all Runtime Services calls. */ -static DEFINE_SEMAPHORE(efi_runtime_lock); +static DEFINE_BINARY_SEMAPHORE(efi_runtime_lock); /* * Expose the EFI runtime lock to the UV platform --- a/drivers/firmware/efi/vars.c +++ b/drivers/firmware/efi/vars.c @@ -21,7 +21,7 @@ /* Private pointer to registered efivars */ static struct efivars *__efivars; -static DEFINE_SEMAPHORE(efivars_lock); +static DEFINE_BINARY_SEMAPHORE(efivars_lock); static efi_status_t check_var_size(bool nonblocking, u32 attributes, unsigned long size) --- a/drivers/macintosh/adb.c +++ b/drivers/macintosh/adb.c @@ -80,7 +80,7 @@ static struct adb_driver *adb_controller BLOCKING_NOTIFIER_HEAD(adb_client_list); static int adb_got_sleep; static int adb_inited; -static DEFINE_SEMAPHORE(adb_probe_mutex); +static DEFINE_BINARY_SEMAPHORE(adb_probe_mutex); static int sleepy_trackpad; static int autopoll_devs; int __adb_probe_sync; --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c @@ -298,7 +298,7 @@ const u32 dmae_reg_go_c[] = { /* Global resources for unloading a previously loaded device */ #define BNX2X_PREV_WAIT_NEEDED 1 -static DEFINE_SEMAPHORE(bnx2x_prev_sem); +static DEFINE_BINARY_SEMAPHORE(bnx2x_prev_sem); static LIST_HEAD(bnx2x_prev_list); /* Forward declaration */ --- a/drivers/platform/x86/intel/ifs/sysfs.c +++ b/drivers/platform/x86/intel/ifs/sysfs.c @@ -13,7 +13,7 @@ * Protects against simultaneous tests on multiple cores, or * reloading can file while a test is in progress */ -static DEFINE_SEMAPHORE(ifs_sem); +static DEFINE_BINARY_SEMAPHORE(ifs_sem); /* * The sysfs interface to check additional details of last test --- a/drivers/scsi/esas2r/esas2r_ioctl.c +++ b/drivers/scsi/esas2r/esas2r_ioctl.c @@ -56,7 +56,7 @@ dma_addr_t esas2r_buffered_ioctl_addr; u32 esas2r_buffered_ioctl_size; struct pci_dev *esas2r_buffered_ioctl_pcid; -static DEFINE_SEMAPHORE(buffered_ioctl_semaphore); +static DEFINE_BINARY_SEMAPHORE(buffered_ioctl_semaphore); typedef int (*BUFFERED_IOCTL_CALLBACK)(struct esas2r_adapter *, struct esas2r_request *, struct esas2r_sg_context *, --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c @@ -149,7 +149,7 @@ static char *g_fragments_base; static char *g_free_fragments; static struct semaphore g_free_fragments_sema; -static DEFINE_SEMAPHORE(g_free_fragments_mutex); +static DEFINE_BINARY_SEMAPHORE(g_free_fragments_mutex); static int vchiq_blocking_bulk_transfer(struct vchiq_instance *instance, unsigned int handle, void *data, --- a/include/linux/semaphore.h +++ b/include/linux/semaphore.h @@ -25,8 +25,11 @@ struct semaphore { .wait_list = LIST_HEAD_INIT((name).wait_list), \ } -#define DEFINE_SEMAPHORE(name) \ - struct semaphore name = __SEMAPHORE_INITIALIZER(name, 1) +#define DEFINE_SEMAPHORE(_name, _n) \ + struct semaphore _name = __SEMAPHORE_INITIALIZER(_name, _n) + +#define DEFINE_BINARY_SEMAPHORE(_name) \ + DEFINE_SEMAPHORE(_name, 1) static inline void sema_init(struct semaphore *sem, int val) { --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -89,7 +89,7 @@ static DEFINE_MUTEX(console_mutex); * console_sem protects updates to console->seq and console_suspended, * and also provides serialization for console printing. */ -static DEFINE_SEMAPHORE(console_sem); +static DEFINE_BINARY_SEMAPHORE(console_sem); HLIST_HEAD(console_list); EXPORT_SYMBOL_GPL(console_list); DEFINE_STATIC_SRCU(console_srcu); --- a/net/rxrpc/call_object.c +++ b/net/rxrpc/call_object.c @@ -40,10 +40,8 @@ const char *const rxrpc_call_completions struct kmem_cache *rxrpc_call_jar; -static struct semaphore rxrpc_call_limiter = - __SEMAPHORE_INITIALIZER(rxrpc_call_limiter, 1000); -static struct semaphore rxrpc_kernel_call_limiter = - __SEMAPHORE_INITIALIZER(rxrpc_kernel_call_limiter, 1000); +static DEFINE_SEMAPHORE(rxrpc_call_limiter, 1000); +static DEFINE_SEMAPHORE(rxrpc_kernel_call_limiter, 1000); void rxrpc_poke_call(struct rxrpc_call *call, enum rxrpc_call_poke_trace what) {