Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp5295808rdb; Wed, 13 Dec 2023 05:02:10 -0800 (PST) X-Google-Smtp-Source: AGHT+IGSwUcoTUU//S4sdi7NZB8PgHj2vBF/g7I/KGfqTFcAzgADO3q7atYevnE2afPWv9A+uRIu X-Received: by 2002:a05:6a20:734f:b0:17b:1f76:86ee with SMTP id v15-20020a056a20734f00b0017b1f7686eemr9072554pzc.16.1702472530206; Wed, 13 Dec 2023 05:02:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702472530; cv=none; d=google.com; s=arc-20160816; b=YsRc+yeX6FnX9ERmlkb0Rf/lQj2koH/QJH5EKrnJujEkgMVxiCyUZKyzGVP0LnfwLc LGhgD9GQta1n9im7UOz/xjTeXMYvtqAiCnjAdTb0xWHQfTEAfgW39zMyM6NAWW80bjzh aM1MLKSOz79Q1Wi8X5GhBkw5j4/8V+ABVF7ExZPxCtCrhyr5ezOPXjDplPMjPdptSO0r HwW04EYbJhNwY+NJrq/LHAQIQBTOUfD80bfZRANDU4/gKBdN3VVca8p529ZTzgEGgh+M fvbLJvjxJRZGkK2G59XV/9xH/F3QJO/fvGxsdBiknU2juDqM+mN6dvqQuQRhUYJiSpTq LIxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version; bh=92zCieCK2tehGPx9GtOb+vV/uupaUvqzuYKAf8Zavms=; fh=1qeGCfbWZV4N2xAlIkWNCbq/syzsYiOV8r94u6dtrj4=; b=ZzGnJ2toIlPctdqI8mT5nynKStvFAh2C2z3j3hThcnmIY92ihuTivNmOZBypMn6j0w pDQ3bHgWt063fSDLRXLExWBF6zZybkVl1v6jI7PA2owHM6yMsT94ezP2b2nnqn683b8O UJsd0E1a6/fKyGrP6wIfdCApqNk1+HZlrt3hunevtBLE3oNBZ6DO+1TpTn3c4ruLrzq7 MFXK/ujRaG9nMWBSJEN6du4TqE6qNj3cEgPG7omHz+ZvhhVf3oZMPM80SII/zUYkFQme 9sTQ4lF2a+QiacNMithXxRniDGVwWeD4GUKHL9c2KA02lgjYoiJniMaqQI9nUBTN9ELk YE7w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 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 morse.vger.email (morse.vger.email. [23.128.96.31]) by mx.google.com with ESMTPS id 6-20020a630d46000000b005c662419214si9523249pgn.229.2023.12.13.05.02.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Dec 2023 05:02:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) client-ip=23.128.96.31; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 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 (depot.vger.email [IPv6:2620:137:e000::3:0]) by morse.vger.email (Postfix) with ESMTP id EF6018221115; Wed, 13 Dec 2023 05:02:01 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at morse.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379027AbjLMNBm convert rfc822-to-8bit (ORCPT + 99 others); Wed, 13 Dec 2023 08:01:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57948 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379012AbjLMNBl (ORCPT ); Wed, 13 Dec 2023 08:01:41 -0500 Received: from mail-oa1-f42.google.com (mail-oa1-f42.google.com [209.85.160.42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DC046F2; Wed, 13 Dec 2023 05:01:47 -0800 (PST) Received: by mail-oa1-f42.google.com with SMTP id 586e51a60fabf-2033578d5e0so6200fac.0; Wed, 13 Dec 2023 05:01:47 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702472507; x=1703077307; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Jg66vlrCUJ5caH3ipTFUdmcb6mbPBA/2vfEVtGjIuXI=; b=CQuRlJ0DBv3/8dPCNf72jH9yZJLQnawyrQteUJOqA4OjmbyvpZBoxiHiJc4YIS+KPo 1nz7WfDIAqaVsec/dArJRK2uHu4JtwIhkw+Ruz6WXbAGjpr7lq7ukhi5ZXz44pb6xNY2 Eq0wP9JtLcuEDjaWza+bDscOPtjEibeOE++StqXITAL6dTxbAyUCbkephqMsHValGZrh oahpBwVQ32eo5CzD5MxluCRjgMTEladxlS1WoayD635C6caBG1RJ1qLPQJsaxXFfxCcT 4RCQ0f3SmFzVnZA6l+TOjjmiPM5lASWjFoOWFTYbt29297xclShTQ2NxSbNPm2hPeaGe L6aw== X-Gm-Message-State: AOJu0YwkWFTH6JB139dsGDxNSps5iAVP5cOLng9rzoZDUtuv4W4PfvTX 0PYMz5FrhmDx0KJlUa2q2xVQhs79z4DbdCFF93A= X-Received: by 2002:a05:6870:9a8a:b0:203:36fc:6c8a with SMTP id hp10-20020a0568709a8a00b0020336fc6c8amr153643oab.4.1702472507203; Wed, 13 Dec 2023 05:01:47 -0800 (PST) MIME-Version: 1.0 References: <20231213003614.1648343-1-imammedo@redhat.com> <20231213003614.1648343-2-imammedo@redhat.com> In-Reply-To: <20231213003614.1648343-2-imammedo@redhat.com> From: "Rafael J. Wysocki" Date: Wed, 13 Dec 2023 14:01:36 +0100 Message-ID: Subject: Re: [RFC 1/2] PCI: acpiphp: enable slot only if it hasn't been enabled already To: Igor Mammedov Cc: linux-kernel@vger.kernel.org, Dongli Zhang , linux-acpi@vger.kernel.org, linux-pci@vger.kernel.org, mst@redhat.com, rafael@kernel.org, lenb@kernel.org, bhelgaas@google.com, mika.westerberg@linux.intel.com, boris.ostrovsky@oracle.com, joe.jin@oracle.com, stable@vger.kernel.org, Fiona Ebner , Thomas Lamprecht Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on morse.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (morse.vger.email [0.0.0.0]); Wed, 13 Dec 2023 05:02:02 -0800 (PST) On Wed, Dec 13, 2023 at 1:36 AM Igor Mammedov wrote: > > When SCSI_SCAN_ASYNC is enabled (either via config or via cmd line), > adding device to bus and enabling it will kick in async host scan > > scsi_scan_host+0x21/0x1f0 > virtscsi_probe+0x2dd/0x350 > .. > driver_probe_device+0x19/0x80 > ... > driver_probe_device+0x19/0x80 > pci_bus_add_device+0x53/0x80 > pci_bus_add_devices+0x2b/0x70 > ... > > which will schedule a job for async scan. That however breaks > if there are more than one SCSI host behind bridge, since > acpiphp_check_bridge() will walk over all slots and try to > enable each of them regardless of whether they were already > enabled. > As result the bridge might be reconfigured several times > and trigger following sequence: > > [cpu 0] acpiphp_check_bridge() > [cpu 0] enable_slot(a) > [cpu 0] configure bridge > [cpu 0] pci_bus_add_devices() -> scsi_scan_host(a1) > [cpu 0] enable_slot(b) > ... > [cpu 1] do_scsi_scan_host(a1) <- async jib scheduled for slot a > ... > [cpu 0] configure bridge <- temporaly disables bridge > > and cause do_scsi_scan_host() failure. > The same race affects SHPC (but it manages to avoid hitting the race due to > 1sec delay when enabling slot). > To cover case of single device hotplug (at a time) do not attempt to > enable slot that have already been enabled. > > Fixes: 40613da52b13 ("PCI: acpiphp: Reassign resources on bridge if necessary") > Reported-by: Dongli Zhang > Reported-by: iona Ebner > Signed-off-by: Igor Mammedov > --- > drivers/pci/hotplug/acpiphp_glue.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c > index 601129772b2d..6b11609927d6 100644 > --- a/drivers/pci/hotplug/acpiphp_glue.c > +++ b/drivers/pci/hotplug/acpiphp_glue.c > @@ -722,7 +722,9 @@ static void acpiphp_check_bridge(struct acpiphp_bridge *bridge) > trim_stale_devices(dev); > > /* configure all functions */ > - enable_slot(slot, true); > + if (slot->flags != SLOT_ENABLED) { > + enable_slot(slot, true); > + } Shouldn't this be following the acpiphp_enable_slot() pattern, that is if (!(slot->flags & SLOT_ENABLED)) enable_slot(slot, true); Also the braces are redundant. > } else { > disable_slot(slot); > } > --