From patchwork Thu Feb 9 13:23:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 5183 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp334342wrn; Thu, 9 Feb 2023 05:32:15 -0800 (PST) X-Google-Smtp-Source: AK7set8eJowA2LqiA8SXyHMKesHhuoOnc7BAe4uxHYL1P5OR2vHQrRGsHous7yHY4xIECYqALzj9 X-Received: by 2002:a17:902:e2d1:b0:199:54af:f1fa with SMTP id l17-20020a170902e2d100b0019954aff1famr2894817plc.14.1675949535127; Thu, 09 Feb 2023 05:32:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675949535; cv=none; d=google.com; s=arc-20160816; b=nnl/76McxXYE0/X11nbx9AzRu51rl70+sBxCWUp5mSsFbmjjbw1ST2dO1mAx9hI+WQ 2dKf35EZtvBiinBOWd/Bv0TmgnV2Gr+eFkPZwFAuGI8gtACS9Jdd3m+0VB7Cov9upY2B SpnGwqIYxB6QEmp0AdUtAD3LXMN1Qb5h9TzbGwlt31jJ6A+MZygN2YgYffEkdw+yuWpi rV2VUtnzXPOhdpGAyM8Wx0xpa5MplBwYVlTHd4kIeBLDu2CK4YnbhMkoG01xFqZikV/Z oIdbCjx9Ec9ghPoWAD9BS70tStZKBRu31Z6ywQKXX5XPfGANbAaWaISVTa9jzkZlyA71 cI4g== 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=7tMVH69Y/Um6jej+WgHhJuyu4R+lEBTNtoxTKrb5fvU=; b=v4MakbN+UvhpBd5hFh06jLvdVtkZDeUurocJ107lzxd+j33wM4EBFoKbRxjdKD5XCq /K0pFZ9ANU0dIabuaAil2ssFYvi4pakXn7vFkD8n9dGzaQ9VWOQTvZaxumvgnBfOxBLt Mo6GJVBVdzk4a/T9uafyPQ4XexMh7dGHfvw5+aeMTkEVageaWikF7Rf3xPpslKTH5KVr pLoE5iaAhwLJSPqmYLfw6vY/IGI8zSvxG1rWxnAaJgXVwXOGBv2HGCCGQMNIiPN6AJeP 8G+duBPhABJ1ze/6Fx5OLdR+M3BW2+TliYl66ZNtLzLdVzHEiu+kbIGmteFDmM/FpSTh 59Pw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Ui9Agq8E; 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=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n18-20020a639712000000b004e2968fe1fcsi1997362pge.211.2023.02.09.05.32.01; Thu, 09 Feb 2023 05:32:15 -0800 (PST) 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=@kernel.org header.s=k20201202 header.b=Ui9Agq8E; 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=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229612AbjBINbZ (ORCPT + 99 others); Thu, 9 Feb 2023 08:31:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56794 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230207AbjBINaq (ORCPT ); Thu, 9 Feb 2023 08:30:46 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9D8BE23C66; Thu, 9 Feb 2023 05:30:45 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 25A4EB8212D; Thu, 9 Feb 2023 13:30:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id AECFFC433D2; Thu, 9 Feb 2023 13:30:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1675949442; bh=ZXuSjWIj3uDvd8CX7vRwjMmFnZyGhqGjPSsai6Ql/Ws=; h=From:To:Cc:Subject:Date:From; b=Ui9Agq8EjxGpxpsLEAVyUwjzwSOxBtorTPgisj1DadHSCFz9ytQnRm7J5WlxMKHlN cJ09OUcdFwQiUFBsRmu+DemvX/L143kPWpE2qBVJkatp7Pe6h/G76SH/akZw/DgIqv FONte1k/Ij+QDroWyCvBiAXowSAM3qlyobUTwHjmvNOJbybOPIscfAw6/fv/xsrEon ag1UJ+E4MseLR74BRXw3qFjtAauMj7JxuLVRdcxzO/Duk5yG2AUJj4Pcgw3ovdCfDH oIWQH6Wnmj70WhjUuDMFxIEisqt5G/jGrlEeWIINX1HP82Twe0w9hPSRI3+UYeGdDA JOPU1cAjoQn+g== Received: from johan by xi.lan with local (Exim 4.94.2) (envelope-from ) id 1pQ71F-0001Kf-Ai; Thu, 09 Feb 2023 14:31:22 +0100 From: Johan Hovold To: Marc Zyngier , Thomas Gleixner Cc: x86@kernel.org, platform-driver-x86@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH v5 00/19] irqdomain: fix mapping race and clean up locking Date: Thu, 9 Feb 2023 14:23:04 +0100 Message-Id: <20230209132323.4599-1-johan+linaro@kernel.org> X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1757360459609554265?= X-GMAIL-MSGID: =?utf-8?q?1757360459609554265?= Parallel probing (e.g. due to asynchronous probing) of devices that share interrupts can currently result in two mappings for the same hardware interrupt to be created. This series fixes this mapping race and clean up the irqdomain locking so that in the end the global irq_domain_mutex is only used for managing the likewise global irq_domain_list, while domain operations (e.g. IRQ allocations) use per-domain (hierarchy) locking. Johan Changes in v5 - reorder patches (since we do care about stable after all) - tweak commit messages and add stable tags - use '__locked' suffix for new helper functions - drop a line break from an argument list (11/19) Changes in v4 - add a comment to __irq_domain_add() as further documentation of the domain lock and root pointer (19/19) - add a comment documenting that the lockdep assertion in irq_domain_set_mapping() also verifies that the domains in a hierarchy point to the same root (19/19) Changes in v3 - drop dead and bogus code (1--3/19, new) - fix racy mapcount accesses (5/19, new) - drop revmap mutex (6/19, new) - use irq_domain_mutex to address mapping race (9/19) - clean up irq_domain_push/pop_irq() (10/19, new) - use irq_domain_create_hierarchy() to construct hierarchies (11--18/19, new) - switch to per-domain locking (19/19, new) Changes in v2 - split out redundant-lookup cleanup (1/4) - use a per-domain mutex to address mapping race (2/4) - move kernel-doc to exported function (2/4) - fix association race (3/4, new) - use per-domain mutex for associations (4/4, new) Johan Hovold (19): irqdomain: Fix association race irqdomain: Fix disassociation race irqdomain: Drop bogus fwspec-mapping error handling irqdomain: Look for existing mapping only once irqdomain: Refactor __irq_domain_alloc_irqs() irqdomain: Fix mapping-creation race irqdomain: Drop revmap mutex irqdomain: Drop dead domain-name assignment irqdomain: Drop leftover brackets irqdomain: Clean up irq_domain_push/pop_irq() x86/ioapic: Use irq_domain_create_hierarchy() x86/apic: Use irq_domain_create_hierarchy() irqchip/alpine-msi: Use irq_domain_add_hierarchy() irqchip/gic-v2m: Use irq_domain_create_hierarchy() irqchip/gic-v3-its: Use irq_domain_create_hierarchy() irqchip/gic-v3-mbi: Use irq_domain_create_hierarchy() irqchip/loongson-pch-msi: Use irq_domain_create_hierarchy() irqchip/mvebu-odmi: Use irq_domain_create_hierarchy() irqdomain: Switch to per-domain locking arch/x86/kernel/apic/io_apic.c | 7 +- arch/x86/platform/uv/uv_irq.c | 7 +- drivers/irqchip/irq-alpine-msi.c | 8 +- drivers/irqchip/irq-gic-v2m.c | 5 +- drivers/irqchip/irq-gic-v3-its.c | 13 +- drivers/irqchip/irq-gic-v3-mbi.c | 5 +- drivers/irqchip/irq-loongson-pch-msi.c | 9 +- drivers/irqchip/irq-mvebu-odmi.c | 13 +- include/linux/irqdomain.h | 6 +- kernel/irq/irqdomain.c | 341 ++++++++++++++----------- 10 files changed, 232 insertions(+), 182 deletions(-)