From nobody Wed Apr 1 20:42:56 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 025D042316D; Wed, 1 Apr 2026 16:31:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775061122; cv=none; b=kJKf2zhu12lYYng4i2TaLNl5WsTXjBI4KUI5g2H0/8xwMfd0RFD/dcS+zJwrOvHrtZgXK8aoxWj0kXy7jGW1FLmefY9SANu1H6UPKKhcUf0dpImQrpfHkzllzA2NfnaXvV1Ska1UVi8ZyPbjXad+YSZjEQzr/9cwQ11WKZ4H4gw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775061122; c=relaxed/simple; bh=vEX2YgnVtzG/kWcq17f0/dxZGqpGdFexUjQZXcgX1Ng=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=BJ2jo8IjokdfKWDO+xjKDRUdNimodsRiYlRrMgV0N+cX5xjm/SlSe0ebntvqittPFpS53APz4QmwmXfuKzA9Zag2dipX0IzIdg9DObRLge1evkz3YEv8bMq1aCz+wli4RpRFWkprasLAs1xEPD/hisFrscSfheFMZNQbaN7fWsI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=Kqf+crcX; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="Kqf+crcX" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 631AHJbf142146; Wed, 1 Apr 2026 16:31:58 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:message-id:mime-version :subject:to; s=pp1; bh=CpOcsvGu0vq9yafPLMd8795CqxepEPd0x1m5IZSMp Aw=; b=Kqf+crcXj71/DxiPlpChF2Xk+0DlWkxo4ZgVzIGZGa7TjHSV2sU8fcqln 3/hHvkwrdeym3eTsF1UtB/kqfgsio0scDifw0goZCXZF6TxUmpog6b9t7o0R156M X0xZ95yQBPM99C1MhDqx82/kopCSOvD4fj4O46jqk/rp2ZL8NiJhXMU0z4gwaFsm CF2Yoo/MIuBQJut/3h5acsw7dw6Y4DjlB7U6NLwXaZrmxccBP1KIxsW2xXDmxq/t PRrD+Sh0U8d3s+WXB19Q0Q9bnLNs+PoHgFrIX4DCFR6pMMBqhO0hS0xO4GIQky0s Dy1sT7C+6HAS/GNjQk0gcnqVLlWCg== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4d64dgrhnm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 01 Apr 2026 16:31:57 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 631F6Sxf022227; Wed, 1 Apr 2026 16:31:57 GMT Received: from smtprelay04.wdc07v.mail.ibm.com ([172.16.1.71]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4d6tan6dr5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 01 Apr 2026 16:31:57 +0000 Received: from smtpav05.wdc07v.mail.ibm.com (smtpav05.wdc07v.mail.ibm.com [10.39.53.232]) by smtprelay04.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 631GVtga56623370 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 1 Apr 2026 16:31:56 GMT Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C9BD458053; Wed, 1 Apr 2026 16:31:55 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0591F58043; Wed, 1 Apr 2026 16:31:55 +0000 (GMT) Received: from IBM-GVXK264.ibm.com (unknown [9.61.241.108]) by smtpav05.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 1 Apr 2026 16:31:54 +0000 (GMT) From: Ramesh Errabolu To: linux-pci@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org, Bjorn Helgaas , Lukas Wunner , Peter Oberparleiter , Matthew Rosato , Gerd Bayer , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Ramesh Errabolu Subject: [PATCH v1] PCI: hotplug: Add 'uevent' sysfs attribute to trigger slot events Date: Wed, 1 Apr 2026 11:31:52 -0500 Message-ID: <20260401163152.632779-1-ramesh@linux.ibm.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAxMDE1MiBTYWx0ZWRfX6d++mW+iZInz fCOLUSe2l5h4ntt3pFJECgGUQxaRLLNeZorhTPRexrB4m3LNDi058oiZdlRJ373s0sYSX37uEx2 n76Zvwz216h7IbzxY5Oh+AAYwgu/mgI1EFzmkGGMFVbdZcOEXM+BghLoI5rXoAdyxa1czOCt9CU 8UxCGHXYUAj1O8/R6hl4RpseelbucL4kYnrvB6M1lejQliPFFqbYidOtS3+t9NTUyn59ZalIyJ6 tZT3h0WIo15FGDJtB0S2zAknOzamTwZPf8r69noHeIz4s5ZuZmhoABMGEvdyAsJS2eK8WZjIAwX K88m76IDwHggU8RwanwH0k4QIM/iJogWQH7OuzvrKO1G2E+CrFNke+BqywvktOxRVr3MAJTUmAU vNtF3YvxtfaHmcDxMhFiiIpLhoovdCPlNrzY244UTPCyVH2tyZFZEEMcWTj+Ceos8aTi9vcieAc AhT2ZdGtzsbFQeSnlsw== X-Authority-Analysis: v=2.4 cv=QKZlhwLL c=1 sm=1 tr=0 ts=69cd487e cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=CMxJa-TJIm8yq2BzSosA:9 X-Proofpoint-GUID: JvoOYIefFRhA2k8Hm_wsU0otZIYYpCEa X-Proofpoint-ORIG-GUID: kEXKnYvKHjwVxmJ7cU6desbN9j5cpPNl X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-01_04,2026-04-01_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 phishscore=0 adultscore=0 impostorscore=0 clxscore=1015 spamscore=0 bulkscore=0 priorityscore=1501 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604010152 Content-Type: text/plain; charset="utf-8" Add a write-only 'uevent' sysfs attribute for synthesizing uevents for a PCI slot. This extends the existing uevent support which emits a KOBJ_ADD uevent in pci_hp_add() with the ability to replay such uevents for cold plugged devices. As such events are only emitted by hotplug capable PCI slots so is the support for synthesizing them. The change was validated by manually triggering 'add' uevent for a specific hotplug PCI slot: $ echo "add $(uuidgen)" | sudo tee \ /sys/bus/pci/slots//uevent Signed-off-by: Ramesh Errabolu --- drivers/pci/hotplug/pci_hotplug_core.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/p= ci_hotplug_core.c index fadcf98a8a66..c3634b1cc7a8 100644 --- a/drivers/pci/hotplug/pci_hotplug_core.c +++ b/drivers/pci/hotplug/pci_hotplug_core.c @@ -176,6 +176,21 @@ static struct pci_slot_attribute hotplug_slot_attr_pre= sence =3D { .show =3D presence_read_file, }; =20 +static ssize_t uevent_write_file(struct pci_slot *slot, + const char *buf, size_t len) +{ + int rc; + + rc =3D kobject_synth_uevent(&slot->kobj, buf, len); + return rc ? rc : len; +} + +static struct pci_slot_attribute hotplug_slot_attr_uevent =3D { + .attr =3D {.name =3D "uevent", .mode =3D S_IFREG | 0200}, + .show =3D NULL, + .store =3D uevent_write_file +}; + static ssize_t test_write_file(struct pci_slot *pci_slot, const char *buf, size_t count) { @@ -254,6 +269,11 @@ static int fs_add_slot(struct hotplug_slot *slot, stru= ct pci_slot *pci_slot) kobject_put(kobj); } =20 + retval =3D sysfs_create_file(&pci_slot->kobj, + &hotplug_slot_attr_uevent.attr); + if (retval) + goto exit_uevent; + if (has_power_file(slot)) { retval =3D sysfs_create_file(&pci_slot->kobj, &hotplug_slot_attr_power.attr); @@ -306,6 +326,9 @@ static int fs_add_slot(struct hotplug_slot *slot, struc= t pci_slot *pci_slot) if (has_power_file(slot)) sysfs_remove_file(&pci_slot->kobj, &hotplug_slot_attr_power.attr); exit_power: + sysfs_remove_file(&pci_slot->kobj, + &hotplug_slot_attr_uevent.attr); +exit_uevent: sysfs_remove_link(&pci_slot->kobj, "module"); exit: return retval; @@ -313,6 +336,8 @@ static int fs_add_slot(struct hotplug_slot *slot, struc= t pci_slot *pci_slot) =20 static void fs_remove_slot(struct hotplug_slot *slot, struct pci_slot *pci= _slot) { + sysfs_remove_file(&pci_slot->kobj, &hotplug_slot_attr_uevent.attr); + if (has_power_file(slot)) sysfs_remove_file(&pci_slot->kobj, &hotplug_slot_attr_power.attr); =20 --=20 2.43.0