From nobody Wed Apr 22 00:25:54 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4g0g4M0wQdz6Zy89 for ; Wed, 22 Apr 2026 00:25:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g0g4L3sfmz3gDn for ; Wed, 22 Apr 2026 00:25:54 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776817554; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=9uXirDYJ9nXKhr6x1F+gmEkMwL17QV6f6b56YRWghbk=; b=DvfSuAoXL5OWD7h9kkQjJNtDzXg7f4NsDPY7gvklkpalUVFNLX5cVNowoc2NfGc5YkhbKi EUSPphVZf/TUBVmsSh2B04kVqw3UMwALstwIZozfzS7+64JwQt9s5KwoayHqVfaZgYbTF5 QBo8Nd1bfvqPuv1ExBKMLZYa8v80rDZrx17igC8Lx3NzhFeVvfcd+rxAbdSUf5VRY0P60Z e6Z0MJrJF78Mj2DTEX1Bi1V+7OdBuHAuNXCr23xctmcElr5H2usqHjApeZrd81IoGJOEwp 3IsL4CCafaagZFZa4GLXYK0QB55z0wCfjSAa9QrkTJeVYjyEbBCt340Jrln5mQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776817554; a=rsa-sha256; cv=none; b=qmeHJe9J7wHDMAPKZDoKySE2IgNN2fWoNJ7dX8ZVZ452Hn2Gq2MdFPs+kTzkwa8jSNzT3P ra6r1JvxT4aDsydaeELPnJPDambU6WDTqb2MGFAWXcbzRbWuthDd8SqBdLMDp8y6KRa9cU JiixCs+Zv97CowwDJEwDQxr6+aC+6j0SaBQLTvnW4gBn/swhjwM1dvSC9NGVp+oREUPAAz Ve+Mr0NFdRUg5THz+0BeiS9Pbgz5n0oPkuYBKMbKHHKAWDLOrd5bkfXYVsiVG+CkP4KYiM ifUQbYoHcQ9M0tPqEdH9+zEsAt0jndYOOBPZ6vvQ9yOIN2t21eCLmBgS+leMmg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776817554; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=9uXirDYJ9nXKhr6x1F+gmEkMwL17QV6f6b56YRWghbk=; b=KLkNXDx8GtjFM0ukNbybvFSz1FOh5SbAq1f53YZAaoKfNhB6WxzhxrHV3aeG+QJjygqIJD cHNpfweFi/XXhJsbNLwmeImHvF4XM2pM7D7G0yXIIx6aIev7TubEHZ9/I4AljK86OAPE+d NkiC7tWq1r33IQVDnEUNG9pygMpwPuX/ju94Rc3/o3CXWw65j000O2RDm+n67HdHrQ3G5y LnbemigW37CzXVvr04y2vYdtKQe8qEtde5GuyG0j2VnxbSFhDy/F1tV1YkTeCpqEyQXWtn RzfdAUrXUR6/uxj/+5vakAxiSOcbs7p6Z1hYImHLFSF7Yb3FMes+XQRUibAkCQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g0g4L3G2Zz16Ns for ; Wed, 22 Apr 2026 00:25:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1d56b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 22 Apr 2026 00:25:54 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Jean-=?utf-8?Q?S=C3=A9bast?==?utf-8?Q?ien P=C3=A9?=dron From: Ed Maste Subject: git: 901aec0a855b - stable/15 - linuxkpi: Handle bin attributes in sysfs attribute groups List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 901aec0a855b5c69b327e423558fbcc001781805 Auto-Submitted: auto-generated Date: Wed, 22 Apr 2026 00:25:54 +0000 Message-Id: <69e81592.1d56b.77724fe1@gitrepo.freebsd.org> The branch stable/15 has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=901aec0a855b5c69b327e423558fbcc001781805 commit 901aec0a855b5c69b327e423558fbcc001781805 Author: Jean-Sébastien Pédron AuthorDate: 2026-02-08 10:11:39 +0000 Commit: Ed Maste CommitDate: 2026-04-22 00:25:27 +0000 linuxkpi: Handle bin attributes in sysfs attribute groups For instance, this is used by DRM drivers to declare the EDID property of an GPU output connector: sysctl -b sys.device.drmn1.card0.card0-DP-1.edid | edid-decode ... Block 0, Base EDID: EDID Structure Version & Revision: 1.4 Vendor & Product Identification: Manufacturer: SAM Model: 29814 Serial Number: 810635354 (0x3051505a) Made in: week 15 of 2025 ... Reviewed by: bz, emaste, wulf Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D55176 (cherry picked from commit 5bb0f63020669bd3675c651ba7745fc4356edc1a) --- sys/compat/linuxkpi/common/include/linux/sysfs.h | 34 +++++++++++++++++------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/sys/compat/linuxkpi/common/include/linux/sysfs.h b/sys/compat/linuxkpi/common/include/linux/sysfs.h index 470c224a9778..7c8c4e2e32b9 100644 --- a/sys/compat/linuxkpi/common/include/linux/sysfs.h +++ b/sys/compat/linuxkpi/common/include/linux/sysfs.h @@ -43,13 +43,6 @@ struct sysfs_ops { size_t); }; -struct attribute_group { - const char *name; - mode_t (*is_visible)(struct kobject *, - struct attribute *, int); - struct attribute **attrs; -}; - struct bin_attribute { struct attribute attr; size_t size; @@ -59,6 +52,14 @@ struct bin_attribute { struct bin_attribute *, char *, loff_t, size_t); }; +struct attribute_group { + const char *name; + mode_t (*is_visible)(struct kobject *, + struct attribute *, int); + struct attribute **attrs; + struct bin_attribute **bin_attrs; +}; + #define __ATTR(_name, _mode, _show, _store) { \ .attr = { .name = __stringify(_name), .mode = _mode }, \ .show = _show, .store = _store, \ @@ -370,6 +371,7 @@ static inline int sysfs_create_group(struct kobject *kobj, const struct attribute_group *grp) { struct attribute **attr; + struct bin_attribute **bin_attr; struct sysctl_oid *oidp; /* Don't create the group node if grp->name is undefined. */ @@ -378,11 +380,19 @@ sysfs_create_group(struct kobject *kobj, const struct attribute_group *grp) OID_AUTO, grp->name, CTLFLAG_RD|CTLFLAG_MPSAFE, NULL, grp->name); else oidp = kobj->oidp; - for (attr = grp->attrs; *attr != NULL; attr++) { + for (attr = grp->attrs; attr != NULL && *attr != NULL; attr++) { SYSCTL_ADD_OID(NULL, SYSCTL_CHILDREN(oidp), OID_AUTO, (*attr)->name, CTLTYPE_STRING|CTLFLAG_RW|CTLFLAG_MPSAFE, kobj, (uintptr_t)*attr, sysctl_handle_attr, "A", ""); } + for (bin_attr = grp->bin_attrs; + bin_attr != NULL && *bin_attr != NULL; + bin_attr++) { + SYSCTL_ADD_OID(NULL, SYSCTL_CHILDREN(oidp), OID_AUTO, + (*bin_attr)->attr.name, + CTLTYPE_OPAQUE|CTLFLAG_RW|CTLFLAG_MPSAFE, + kobj, (uintptr_t)*bin_attr, sysctl_handle_bin_attr, "", ""); + } return (0); } @@ -434,14 +444,20 @@ static inline void sysfs_unmerge_group(struct kobject *kobj, const struct attribute_group *grp) { struct attribute **attr; + struct bin_attribute **bin_attr; struct sysctl_oid *oidp; SYSCTL_FOREACH(oidp, SYSCTL_CHILDREN(kobj->oidp)) { if (strcmp(oidp->oid_name, grp->name) != 0) continue; - for (attr = grp->attrs; *attr != NULL; attr++) { + for (attr = grp->attrs; attr != NULL && *attr != NULL; attr++) { sysctl_remove_name(oidp, (*attr)->name, 1, 1); } + for (bin_attr = grp->bin_attrs; + bin_attr != NULL && *bin_attr != NULL; + bin_attr++) { + sysctl_remove_name(oidp, (*bin_attr)->attr.name, 1, 1); + } } }