From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792514718; b=HixewWB9cVf7NiZSzfZ11khHjp/Gt/0gxqrOiypHNbpBz1TcG1UWOhy9Q1lmeck9wT1U fuujvNs0w6XaXhwHDuxTpTfc15HX7AMg/T+mtYMWYaH29E6iOz2UWFjVt9iO3LpHO+8Dc dhRQkVzwT1YBGemNjLUsM59MleloZohE2QSq+UrNmtjIZdEvQD9SCF2r3FQ3Vuagonq64 KiaHQWWiKhDj4x/tYu3mbigVmlJUZkXyCWyxmmF7xtk3OoRRaQ1J1e8LIPYNiurtO/NBz Y8YXxEt0PvkcLQKIlHsaj8pzsA602vMLtMdvjg8kSV7V3YIGjXGAiRwVxZiU8KlxgyA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792514718; h=DMARC-Filter:DKIM-Signature:Received:X-MC-Unique: X-Mimecast-MFC-AGG-ID:Received:Received:From:To:Cc:Subject:Date: Message-ID:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding:X-Scanned-By; bh=6CVM95O8nJA2j5PntuVbYrjGyYXMZc4AlBaFKMW1Qic=; b=rt12A7wQf+fNJxhoXX9sbV37AG6oWxx66LHzEQ6yNAwiUJg48+Vnjkmo94juCo/xn86f goi7ialT7VROmtSClVkXj93OkDVCbEuuoemtv6mXBX6LqJIYEcBzwYRG2/8iP3M+/HV+d tGsWJGgOwFdptxdF/un6VRcuoOIekmp7Shq9bcwpSXGLKTcEVu8FbKY9+aQC0xcrmOiMw mAq4SFsMbtv9o635MQ+Wh6WGu4xb45uflIL7l4qdxOF2KnG6KCCw3d+v5ikKcEA8lXkH4 De7yArbRgipQdNJyNqgPfG9s/CJC2zPz/kOGGZx2/rrIKe1tvQxu85WxUS0Rg7kUycg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=EZGqUZAT; arc=none smtp.remote-ip=170.10.129.124 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A46760A4AFF for ; Tue, 20 Oct 2026 16:45:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 2A46760A4AFF Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=EZGqUZAT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1792514717; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6CVM95O8nJA2j5PntuVbYrjGyYXMZc4AlBaFKMW1Qic=; b=EZGqUZATkaJWLIovzhm0RmcX6NIuWugkNacFlp+vt8XvN5wps3zsue3KJfAEcrKH52qQfC ydw9u5L+7qlI4uH/q6+LMRAIaK+U/T89N+cr2gcCkROAsjPilXtXfLnocdMNYXs3/jn6VF aAq5jqHZdS42YTS+zBpCTNOVrT+7g4w= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-349-ujwPqpUtPIa42pYUcohVfw-1; Tue, 20 Oct 2026 16:45:13 +0000 X-MC-Unique: ujwPqpUtPIa42pYUcohVfw-1 X-Mimecast-MFC-AGG-ID: ujwPqpUtPIa42pYUcohVfw_1792514711 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (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 mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8A2F51945CB3; Tue, 20 Oct 2026 16:45:11 +0000 (UTC) Received: from djeffery-thinkpadp1gen3.redhat.corp (headnet04.pony-001.prod.iad2.dc.redhat.com [10.2.32.116]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 604D13000617; Tue, 20 Oct 2026 16:45:07 +0000 (UTC) From: David Jeffery To: driver-core@lists.linux.dev, Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich Cc: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-scsi@vger.kernel.org, Tarun Sahu , Stuart Hayes , Laurence Oberman , Bjorn Helgaas , kexec@lists.infradead.org, "Ewan Milne" , "John Meneghini" , "Lombardi, Maurizio" , "Bart Van Assche" , "John Garry" , "Jeremy Allison" , "Martin K . Petersen" , "Pasha Tatashin" , David Jeffery , Bjorn Helgaas Subject: [PATCH 7/9] PCI: Link a virtual function to its physical function Date: Tue, 20 Oct 2026 12:44:33 -0400 Message-ID: <20261020164435.80499-8-djeffery@redhat.com> In-Reply-To: <20261020164435.80499-1-djeffery@redhat.com> References: <20261020164435.80499-1-djeffery@redhat.com> X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 With a PCI virtual function having the same bus for its parent as the physical function it is associated with, there is no explicit dependency between the two in the device tree. With async shutdown, this can result in the PF being shutdown before the VF has an opportunity to shutdown. Link the VF as a consumer of the PF to note its dependency and ensure clean shutdown ordering. Signed-off-by: Tarun Sahu Signed-off-by: David Jeffery Tested-by: Laurence Oberman Reviewed-by: Bjorn Helgaas --- drivers/pci/iov.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index 9d408fb8ac25..9b74211c6ab4 100644 --- a/drivers/pci/iov.c +++ b/drivers/pci/iov.c @@ -382,14 +382,20 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id) } pci_device_add(virtfn, virtfn->bus); + if (!device_link_add(&virtfn->dev, &dev->dev, DL_FLAG_STATELESS)) { + rc = -ENOMEM; + goto failed1; + } + rc = pci_iov_sysfs_link(dev, virtfn, id); if (rc) - goto failed1; + goto unlink; pci_bus_add_device(virtfn); return 0; - +unlink: + device_link_remove(&virtfn->dev, &dev->dev); failed1: pci_stop_and_remove_bus_device(virtfn); pci_dev_put(dev); @@ -421,6 +427,7 @@ void pci_iov_remove_virtfn(struct pci_dev *dev, int id) if (virtfn->dev.kobj.sd) sysfs_remove_link(&virtfn->dev.kobj, "physfn"); + device_link_remove(&virtfn->dev, &dev->dev); pci_stop_and_remove_bus_device(virtfn); virtfn_remove_bus(dev->bus, virtfn->bus); -- 2.55.0