From nobody Sat Sep 26 06:36:55 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 4hsHt52vhKz6tP7R for ; Sat, 26 Sep 2026 06:37:01 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hsHt45LKFz3Mbc for ; Sat, 26 Sep 2026 06:37:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790404620; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=hBToBQf0mLT/oPA4BcDrxMcLUHMRHWj3GFAQD1BxSgM=; b=qMXy3nDm+M513uRrjda2iMddIy8GEjaTaTLsKmRKIwxp/aBP/K3/ZB9/5aYgVOfl4yDsAY 5F3W/YrUiwsqKQuf6DIkypjr/zp1FJni8TbjIb91dzlSqKqs8U+tRKnhZRxsNh3Fg0LbG7 YXn3QTuAe+S559iDna6RNRmkWCscMRoOahVMucj5r0bOKQ/zGhzJI0lHxIIRf8Lk/EZLlV kSLa7W/iKoVmrZjoT9UMinM5ug6VbznpEuNzw0/ljzicIYcRye8xbmwIIbTexWWERbxf08 H3qaiFzeW5VMsu23uxl2Y5RDOcexK7tGS2tIRlTs0rtrKuJUcFDQ5GjLBhlO+g== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1790404620; b=svj3yUBFTiMdbfEw+0X/kEt8MVu4kRtma6jpXCACTCZn5KIBneMF10nMjdbSiCP5aGNSy3 6nPhEfJkxxBMiJva8sps8h2yjEeX/QhhhEZ37yAa2fHte2cctNo2QoNIRzMnuoQWXmpLy9 Vnh5InjZTHvZB/TFf8RsFIcU45muMHf91+al6/6TRUEFAufeNFn+b6j83GFl3WM4r+twCw rdhEM8tcyF+lX+Qi+vFE1P72itzYd4WdievH9U2n4Jj74goEDjPmiWo/QN0nAuFWGNgcB4 1lVmtrzndKMolfrULBBfF2Ouz0trpmjzS6wC+bly5WpjoJGwOo0/rmH1v4Srig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790404620; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=hBToBQf0mLT/oPA4BcDrxMcLUHMRHWj3GFAQD1BxSgM=; b=Z0Xd1JMHhw2Eh2YGHxxR3NAPVS/m2up0Q0TPMgyhhcHWu26PHyNySNOmNr1nc1wHhretXx EQWTa4uEYnyvm0ofhVA+Z4wB8wBs9M4iigatw4O9HRDFeRiR2rNlBGYySJFp5eWGeIqVlp X7/uRVEYuMbxeSQ1LHLjylbOMc21re//Eseeif1u12KHfW+gf1EjdfBtZa/iJUmEBSp4pN pbo3rqliDCm6qjrJ0K9LmOiHrLAPq4dPyxoYnC+uJEhRRnnCepcjEpJIsUCvXFob3UX8fv v5FNQ9JaRgQRnp2vhjKQrH0nF7PNsQ9eSbElksa3EWb95G/k44FDRoKjbRNo7A== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hsHt43988zmBc for ; Sat, 26 Sep 2026 06:37:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 345db by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 26 Sep 2026 06:36:55 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: 102adf88e6e8 - main - linux: Exposes renderD nodes and chardev in sysfs 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 List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 102adf88e6e8f83a9ab9769732d168c501f8eb6c Auto-Submitted: auto-generated Date: Sat, 26 Sep 2026 06:36:55 +0000 Message-Id: <6ab76807.345db.74f59cdf@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=102adf88e6e8f83a9ab9769732d168c501f8eb6c commit 102adf88e6e8f83a9ab9769732d168c501f8eb6c Author: ShengYi Hung AuthorDate: 2026-08-26 07:02:49 +0000 Commit: ShengYi Hung CommitDate: 2026-09-26 06:36:46 +0000 linux: Exposes renderD nodes and chardev in sysfs To allow normal users to render through the render device, we expose the renderD node. This enables Wayland applications to use hardware acceleration when running under the Linux emulator. Additionally, libdrm and Mesa need to look up /sys/dev/char/: and /drm to identify the corresponding renderer device (e.g., a renderD device). We expose this path as well so that libdrm can locate the renderer. Differential Revision: https://reviews.freebsd.org/D59190 --- sys/compat/linsysfs/linsysfs.c | 58 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/sys/compat/linsysfs/linsysfs.c b/sys/compat/linsysfs/linsysfs.c index 5a41c5193415..0c4bf078415f 100644 --- a/sys/compat/linsysfs/linsysfs.c +++ b/sys/compat/linsysfs/linsysfs.c @@ -200,6 +200,9 @@ linsysfs_fill_uevent_pci(PFS_FILL_ARGS) return (0); } +/* Linux DRM render nodes start at minor 128. */ +#define DRM_RENDER_MINOR_BASE 128 + /* * Filler function for drm uevent file */ @@ -217,6 +220,19 @@ linsysfs_fill_uevent_drm(PFS_FILL_ARGS) return (0); } +static int +linsysfs_fill_uevent_drm_render(PFS_FILL_ARGS) +{ + device_t dev; + int unit; + + dev = (device_t)pn->pn_data; + unit = device_get_unit(dev); + sbuf_printf(sb, "MAJOR=226\nMINOR=%d\nDEVNAME=dri/renderD%d\n", + unit + DRM_RENDER_MINOR_BASE, unit + DRM_RENDER_MINOR_BASE); + return (0); +} + static char * get_full_pfs_path(struct pfs_node *cur) { @@ -259,7 +275,7 @@ linsysfs_run_bus(device_t dev, struct pfs_node *dir, struct pfs_node *scsi, struct pfs_node *chardev, struct pfs_node *drm, char *path, char *prefix) { struct scsi_host_queue *scsi_host; - struct pfs_node *sub_dir, *cur_file; + struct pfs_node *sub_dir, *cur_file, *drm_dir, *drm_minor; int i, nchildren, error; device_t *children, parent; devclass_t devclass; @@ -378,7 +394,7 @@ linsysfs_run_bus(device_t dev, struct pfs_node *dir, struct pfs_node *scsi, device_get_unit(dev) >= 0) { dinfo = device_get_ivars(parent); if (dinfo != NULL && dinfo->cfg.baseclass == PCIC_DISPLAY) { - pfs_create_dir(dir, NULL, "drm", NULL, NULL, + pfs_create_dir(dir, &drm_dir, "drm", NULL, NULL, NULL, 0); sprintf(devname, "226:%d", device_get_unit(dev)); @@ -400,6 +416,44 @@ linsysfs_run_bus(device_t dev, struct pfs_node *dir, struct pfs_node *scsi, &linsysfs_fill_vgapci, NULL, NULL, NULL, PFS_RD); cur_file->pn_data = (void*)dir; + + pfs_create_dir(drm_dir, &drm_minor, devname, + NULL, NULL, NULL, 0); + pfs_create_file(drm_minor, &cur_file, "uevent", + &linsysfs_fill_uevent_drm, NULL, NULL, NULL, + PFS_RD); + cur_file->pn_data = (void *)dev; + + sprintf(devname, "226:%d", + device_get_unit(dev) + + DRM_RENDER_MINOR_BASE); + pfs_create_dir(chardev, &sub_dir, devname, NULL, + NULL, NULL, 0); + pfs_create_link(sub_dir, &cur_file, "device", + &linsysfs_fill_vgapci, NULL, NULL, NULL, + PFS_RD); + cur_file->pn_data = (void *)dir; + pfs_create_file(sub_dir, &cur_file, "uevent", + &linsysfs_fill_uevent_drm_render, NULL, + NULL, NULL, PFS_RD); + cur_file->pn_data = (void *)dev; + + sprintf(devname, "renderD%d", + device_get_unit(dev) + + DRM_RENDER_MINOR_BASE); + pfs_create_dir(drm, &sub_dir, devname, NULL, + NULL, NULL, 0); + pfs_create_link(sub_dir, &cur_file, "device", + &linsysfs_fill_vgapci, NULL, NULL, NULL, + PFS_RD); + cur_file->pn_data = (void *)dir; + + pfs_create_dir(drm_dir, &drm_minor, devname, + NULL, NULL, NULL, 0); + pfs_create_file(drm_minor, &cur_file, "uevent", + &linsysfs_fill_uevent_drm_render, NULL, + NULL, NULL, PFS_RD); + cur_file->pn_data = (void *)dev; } } }