From nobody Fri Oct 09 22:18:59 2026 X-Original-To: dev-commits-src-branches@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 4j1h8z6N6gz6w9gj for ; Fri, 09 Oct 2026 22:18:59 +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 4j1h8z4rxGz4Pv6 for ; Fri, 09 Oct 2026 22:18:59 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791584339; 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=6uufcgUGI1eJeRhTj+UOC/mxH6oux/JWZ73MHWA2Zno=; b=wrEFXAWrTHjsef+QpgOwPUCwDVZ6eJATsS5PlMzu8FwoWq1wOCPvTOweUXfGUypjaWKG5J oVi22LlwxK1xlMjTIiWBB1zlVZ+L5ytTxxEAP6DZY+W1gOdw1xtdZX1lR9iSWzIMRVx/37 HFXH+s2VAxpRYxC17LbKr7yMZ8vbECvjJvsXnoMq+DxLIZTOE+rlsyyLpqPPQj3PXwjv+5 57muOFNCKZhgiIXI0KGS2wAQla8GKXGwOyb8aSY7uI3BpneHI6RX82+KFClY1f1XyO+/z2 Qn7AJz6G1Qu/un80YIQixb8prXi+3zBsCwMLTNDajfDq86lqFA3JoUmJCJRC+Q== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791584339; b=oosWJsqk0wtuXHDwWfHi+6nPlWi8wZaLhqawC9Ze+OpkV8gRTeULqmn5P31qg5YFkv2mVf KizQOBuhuajKTwxsTOO5sCQPgnNMKlXwkwb5vDskQ1z76CUIXalcPr4E002bmjyJYVEAgQ hg6w/XPkPyVr7tqeEvjBcydv85K4O3/sT6lN9KTOyXFMDcqSEQuZyKFcS8AzHaRUNwpENt hzgo6Wa//OiF2fC76WMun7Cf589d/E/0kLbBtWZpgHVvCT6x0G0WTKN4I4k12KamFwD5SL QnW6Xn5C6IFsn4UNV7lvNGke+qFE9hty0YD5DwdEOfn4X/NhU++EZ6URBEPSvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791584339; 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=6uufcgUGI1eJeRhTj+UOC/mxH6oux/JWZ73MHWA2Zno=; b=YQ4c/WOhZkHd7LqiKrH5W5hqj+sTQFpLTZSX1aSTbvv+IWBxVvCrxGVblJgBRc/x0izyLu tFzFxkCUoAvorlutHHCIGCXuyrwF9AcXt8MtTAz/6whngmsP+E8XzggSpVWelAot9g38hb XQn37AIQRyuWJI9Rhq6KYM/Upwjk02qGI0NARrcUcUD0sFf0N/cAO64nMEsXgTPNOugdoh D+dJ8+r17IVoCckbkbe71lyNppEdLa+h1sPyn8KVkDgyVlMayu/004gKREsT9FGNrc0ZmT DBy+oxGc2Xl6bZ3E0PmC4Zc4vzC1zANvQqQrkyjRAMakg+EB18YkA/2daq4kQA== 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 4j1h8z3FGkzTH7 for ; Fri, 09 Oct 2026 22:18:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 40425 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 09 Oct 2026 22:18:59 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: ShengYi Hung Subject: git: 7ed9a5a696c3 - stable/15 - linux: Exposes renderD nodes and chardev in sysfs List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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/stable/15 X-Git-Reftype: branch X-Git-Commit: 7ed9a5a696c302ca37c3dd500ea4fbbf9c581a3e Auto-Submitted: auto-generated Date: Fri, 09 Oct 2026 22:18:59 +0000 Message-Id: <6ac96853.40425.40ec9ff8@gitrepo.freebsd.org> The branch stable/15 has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=7ed9a5a696c302ca37c3dd500ea4fbbf9c581a3e commit 7ed9a5a696c302ca37c3dd500ea4fbbf9c581a3e Author: ShengYi Hung AuthorDate: 2026-08-26 07:02:49 +0000 Commit: ShengYi Hung CommitDate: 2026-10-09 22:18:54 +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 (cherry picked from commit 102adf88e6e8f83a9ab9769732d168c501f8eb6c) --- 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; } } }