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 lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4D22AC433EF for ; Sun, 12 Dec 2021 22:55:35 +0000 (UTC) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4JC0NP6Wd1z3cb1 for ; Mon, 13 Dec 2021 09:55:33 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=DpLCPmMg; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2a00:1450:4864:20::12a; helo=mail-lf1-x12a.google.com; envelope-from=digetx@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=DpLCPmMg; dkim-atps=neutral Received: from mail-lf1-x12a.google.com (mail-lf1-x12a.google.com [IPv6:2a00:1450:4864:20::12a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4J9g4V5yY6z3bj9 for ; Sat, 11 Dec 2021 05:52:08 +1100 (AEDT) Received: by mail-lf1-x12a.google.com with SMTP id d10so19696718lfg.6 for ; Fri, 10 Dec 2021 10:52:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=j1hvlB2w2BrWNScbCJyLwX4oBGKG9hr6NJqtvFkNM/U=; b=DpLCPmMgrOty3y0HrpqopSxxp/qGs/dwG/CgN0apuyA6on28PorJtUybksa6iWzXUQ 1nC+svp1ZReaFc8Ho69TZxII0UpyuP8U7xwSjZaJzyMIRrgh64VdMWwWLpT7FD5pRO3K REVQTxyYOO3tzHZOXPhjO1pz+wC6sFrKKUXdbaxaG08xMkm/2y6DNn/B8j1qrJKM7+bp P06T1NhQFOSTeILIcDdZiYIbm1FILYdO04vFRszXD6zy1FhLrwMPIaNrfLI1p4FempaK JIbIyvDEnU7xy4tOpOMAsYn+ngt9JZU69+QjylTYb0y426O41rF96XAtvzhN80gJmNuF j5Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=j1hvlB2w2BrWNScbCJyLwX4oBGKG9hr6NJqtvFkNM/U=; b=hEYWKXa24KUe5gAwc3fvb73KAYsDVfxho6LakX1f9QZ4utPnUWRQvSGkHhjGjSeh2U NAuHDoCJgyosY/j/1pJcWgjgvUOOd1NKZPSTkOXxrUebU258TX1rjbfiG58JJ1ReVIQo Z4QReNGjzg6IWYSWsTsauZLwPewE1gWQh0xZzEUhX8cr2DsBCXpni6Csjjg4cQr824+P YfvSyeWvEq7b1YTsnvw/VQHPGK1DP2KWu8Kyku9Ogqr8wCONHDE3j+AQmeYzbvI91k7o nwORcfi1TKHCVcldH4AqOUZQUaFbNHrTpdZLUuGYoiMlWMTdwz3D571dZh6JdjTpXytT u0/g== X-Gm-Message-State: AOAM533B3I/6Rpoy5LSJ+7yvHpqTaUyqTUhm3vaIaDVmKgmdSSamaZRi rZCpNqkgjHiC7Jzd1fM4i78= X-Google-Smtp-Source: ABdhPJwwyZAuw0wQQ6Dju/0DgEoENSIDq2aqqR4iP7Vldq5bfh8DtMEIrZOS6poEr19ZPeaYgjpDkg== X-Received: by 2002:ac2:58d9:: with SMTP id u25mr14351127lfo.514.1639162324540; Fri, 10 Dec 2021 10:52:04 -0800 (PST) Received: from [192.168.2.145] (94-29-46-111.dynamic.spd-mgts.ru. [94.29.46.111]) by smtp.googlemail.com with ESMTPSA id c21sm387216lfv.29.2021.12.10.10.52.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 10 Dec 2021 10:52:04 -0800 (PST) Subject: Re: [PATCH v4 03/25] notifier: Add atomic/blocking_notifier_has_unique_priority() To: "Rafael J. Wysocki" References: <20211126180101.27818-1-digetx@gmail.com> <20211126180101.27818-4-digetx@gmail.com> From: Dmitry Osipenko Message-ID: Date: Fri, 10 Dec 2021 21:52:01 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-Mailman-Approved-At: Mon, 13 Dec 2021 09:47:48 +1100 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ulf Hansson , Rich Felker , linux-ia64@vger.kernel.org, Santosh Shilimkar , Linux-sh list , Boris Ostrovsky , Linus Walleij , Dave Hansen , Liam Girdwood , "James E.J. Bottomley" , Thierry Reding , Paul Mackerras , Pavel Machek , "H. Peter Anvin" , linux-riscv@lists.infradead.org, Vincent Chen , Will Deacon , Greg Ungerer , Stefano Stabellini , alankao@andestech.com, Yoshinori Sato , Krzysztof Kozlowski , Helge Deller , the arch/x86 maintainers , Russell King , linux-csky@vger.kernel.org, Jonathan Hunter , ACPI Devel Maling List , Ingo Molnar , Geert Uytterhoeven , Catalin Marinas , xen-devel@lists.xenproject.org, linux-mips@vger.kernel.org, Guenter Roeck , Len Brown , Albert Ou , Lee Jones , linux-m68k@lists.linux-m68k.org, Mark Brown , Borislav Petkov , Greentime Hu , Paul Walmsley , linux-tegra , Thomas Gleixner , Andy Shevchenko , Linux ARM , Juergen Gross , Thomas Bogendoerfer , Daniel Lezcano , linux-parisc@vger.kernel.org, Linux PM , Sebastian Reichel , Linux Kernel Mailing List , "K . C . Kuen-Chern Lin" , Palmer Dabbelt , Philipp Zabel , Guo Ren , Andrew Morton , linuxppc-dev , Joshua Thompson Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" 10.12.2021 21:19, Rafael J. Wysocki пишет: ... >> +bool atomic_notifier_has_unique_priority(struct atomic_notifier_head *nh, >> + struct notifier_block *n) >> +{ >> + unsigned long flags; >> + bool ret; >> + >> + spin_lock_irqsave(&nh->lock, flags); >> + ret = notifier_has_unique_priority(&nh->head, n); >> + spin_unlock_irqrestore(&nh->lock, flags); > > This only works if the caller can prevent new entries from being added > to the list at this point or if the caller knows that they cannot be > added for some reason, but the kerneldoc doesn't mention this > limitation. I'll update the comment. .. >> +bool blocking_notifier_has_unique_priority(struct blocking_notifier_head *nh, >> + struct notifier_block *n) >> +{ >> + bool ret; >> + >> + /* >> + * This code gets used during boot-up, when task switching is >> + * not yet working and interrupts must remain disabled. At such >> + * times we must not call down_read(). >> + */ >> + if (system_state != SYSTEM_BOOTING) > > No, please don't do this, it makes the whole thing error-prone. What should I do then? >> + down_read(&nh->rwsem); >> + >> + ret = notifier_has_unique_priority(&nh->head, n); >> + >> + if (system_state != SYSTEM_BOOTING) >> + up_read(&nh->rwsem); > > And still what if a new entry with a non-unique priority is added to > the chain at this point? If entry with a non-unique priority is added after the check, then obviously it won't be detected. I don't understand the question. These down/up_read() are the locks that prevent the race, if that's the question.