Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp2910348pxb; Tue, 24 Aug 2021 10:23:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwdl329aMNh7DxWyepnnFRItITPC8PTZsC9mS+ARU0NefnomiIEv2ZSC17qMvXgwzJN9bfk X-Received: by 2002:a05:6e02:134e:: with SMTP id k14mr29155807ilr.31.1629825822043; Tue, 24 Aug 2021 10:23:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629825822; cv=none; d=google.com; s=arc-20160816; b=V5rVsY9NkxWl+kBWvFGyBGQgumknP1DqDdo+5dYuFckHKoiduxvweFHbxsOPw0MXZr WeFyNxD5vIWt49olMRDRP38MYSrYchoujPDG1s0q7zXE4T80VPHU15U2v+n5MTBSww9W ynjHGRF9/AyHoSJ9Az9zDvHAaDe1eI76JA38nE+3OmjSnn31v+ZERyt8R2Rcv4nH0FFe IIo13IigngSKgWLQ3aWzBVGnjprEaycALg05PjFe97iSo4GzKraNoZMu1j16B0NnrpQX xE4QRz0fnFoj63UPxhve0NvE7YZ7Q2ltle7LoRfyjh1wQeqIs1AFWsTKELB21HUEOfbS b4xg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=2VnW5IptrJzkWRr8F76QEU1heGNMUWDpN/xYsMUepNY=; b=p3WPPCIGJdBRZ2kPyze+fCXuKxGIjIejqhrH0QN7gCGRmhrCjcwY6tc0kXUap3SsOR 7NK+NgfNrN97jHvkprGKDOm/ZJ0b/wkPWjp56AeVkmoyMimK2fZPC5xTPst8sbbySMWU BdoMC+wsdxLjOS/d1AIYAoahp4/tc9AWTwC6PwU2DKJTJeVRiSpbyvt1ePCsPv5+3hFQ zQGEIy+QAeNnCMKVbIMO3DY9Y3VJTRKPuW/8oZokNH2QBdPr6iCEUW0JsHrePJTqBGGP V0WQI87OfnVtEYPWhxmhLYcP2z48ERsCgFaSw5Y5B3A7/5m/Ib7dbSl3ZPQSqNDZKXxK UUog== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=p+AsrKcE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k8si19751521jad.90.2021.08.24.10.23.20; Tue, 24 Aug 2021 10:23:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=p+AsrKcE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S239856AbhHXRXU (ORCPT + 99 others); Tue, 24 Aug 2021 13:23:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:59084 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240250AbhHXRUN (ORCPT ); Tue, 24 Aug 2021 13:20:13 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 927B461AFD; Tue, 24 Aug 2021 17:03:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1629824597; bh=Q/28ZS93KaRlbEVAh/XUGgNS2sIDTQDCvgH4WiumsYE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=p+AsrKcEHEgPLRrmsJD93u4arwiKhQmB+YY767m/9pu8QWahCtWo53b4naWbLh8gF bSHu5RjTckdMMc7GqHhCYddo3mYjynn1jGlNkI1BXttK8N72VeHZH0iATHi14XEzbQ cVtO8eTTCkbhax7+i3SZqKvnlf9fFYEuTAZqabHQ5Dt/eW+Bv93klNkC7jUM0GH1cb VLhGpTs8VVJ0YuWRmKFM5vRdzR/0+k29kUjjVBTUPrRnMydjMttZdRAUKmLZ/0yBF8 vYECIHIgOOoXtoqqgc0lzqa+uw92fsRFAGM3hK3HQ6XrJYdiqlkxK6jI9h++64q02j b4+h94Ot9jS2Q== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Thomas Gleixner , Marc Zyngier , Greg Kroah-Hartman Subject: [PATCH 4.19 26/84] genirq: Provide IRQCHIP_AFFINITY_PRE_STARTUP Date: Tue, 24 Aug 2021 13:01:52 -0400 Message-Id: <20210824170250.710392-27-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210824170250.710392-1-sashal@kernel.org> References: <20210824170250.710392-1-sashal@kernel.org> MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.19.205-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-4.19.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 4.19.205-rc1 X-KernelTest-Deadline: 2021-08-26T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Thomas Gleixner commit 826da771291fc25a428e871f9e7fb465e390f852 upstream. X86 IO/APIC and MSI interrupts (when used without interrupts remapping) require that the affinity setup on startup is done before the interrupt is enabled for the first time as the non-remapped operation mode cannot safely migrate enabled interrupts from arbitrary contexts. Provide a new irq chip flag which allows affected hardware to request this. This has to be opt-in because there have been reports in the past that some interrupt chips cannot handle affinity setting before startup. Fixes: 18404756765c ("genirq: Expose default irq affinity mask (take 3)") Signed-off-by: Thomas Gleixner Tested-by: Marc Zyngier Reviewed-by: Marc Zyngier Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20210729222542.779791738@linutronix.de Signed-off-by: Greg Kroah-Hartman --- include/linux/irq.h | 2 ++ kernel/irq/chip.c | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/linux/irq.h b/include/linux/irq.h index a042faefb9b7..9504267414a4 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -535,6 +535,7 @@ struct irq_chip { * IRQCHIP_ONESHOT_SAFE: One shot does not require mask/unmask * IRQCHIP_EOI_THREADED: Chip requires eoi() on unmask in threaded mode * IRQCHIP_SUPPORTS_LEVEL_MSI Chip can provide two doorbells for Level MSIs + * IRQCHIP_AFFINITY_PRE_STARTUP: Default affinity update before startup */ enum { IRQCHIP_SET_TYPE_MASKED = (1 << 0), @@ -545,6 +546,7 @@ enum { IRQCHIP_ONESHOT_SAFE = (1 << 5), IRQCHIP_EOI_THREADED = (1 << 6), IRQCHIP_SUPPORTS_LEVEL_MSI = (1 << 7), + IRQCHIP_AFFINITY_PRE_STARTUP = (1 << 10), }; #include diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 09d914e486a2..9afbd89b6096 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -265,8 +265,11 @@ int irq_startup(struct irq_desc *desc, bool resend, bool force) } else { switch (__irq_startup_managed(desc, aff, force)) { case IRQ_STARTUP_NORMAL: + if (d->chip->flags & IRQCHIP_AFFINITY_PRE_STARTUP) + irq_setup_affinity(desc); ret = __irq_startup(desc); - irq_setup_affinity(desc); + if (!(d->chip->flags & IRQCHIP_AFFINITY_PRE_STARTUP)) + irq_setup_affinity(desc); break; case IRQ_STARTUP_MANAGED: irq_do_set_affinity(d, aff, false); -- 2.30.2