From nobody Sat Sep 26 06:36:55 2026 X-Original-To: dev-commits-src-main@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 4hsHsz3JJnz6tPPJ for ; Sat, 26 Sep 2026 06:36: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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hsHsz1tBjz3MVS for ; Sat, 26 Sep 2026 06:36:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790404615; 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=SyQ2hSximSW3AswR4sSw8GKecNiU2GYho7G0di1WTe89bx53hgN5kTvBDgsVHM9t3+LR62 VqQ6wUioZVojW2imqAexG4dGYJ5iovgKah7oD1ZTz0R61mxade41tCU+17plK3qtfF8kr1 HtAg0C807zq67fmxivzM8ejROrOADlxo1BOO4wvDlp/EfgcHX/LiqYuVaQYE7BKMBPp2OX AjMcngmUyF0VZPdfRKWbez5MBQ2Mdocp9p8ItRld2UPBjjWaLZOvtkIpsPO6q7QgaKXAuq 1l45GQEWbiV/XnSKVqTB5deRj//gLbE1/Iy4rHj9B4l4qR0IAkCw6za2hgFzKw== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1790404615; b=Y66szctEZrRGlPYiHOlr19WQFL/3WpsvPs+aM7ELgY6XCeMHvFq9U+y8pxb5xYDJok4lRM ijaFbNTSKnyhFIjoBzZfrt97gVV0qXpqBL5OgJlOmE7Ohs6+tAYVRwT8rANGOJQhxHGFqt PRAzjsC5h450kdITfTQQFNtLcWUrWaHhokmYrStOlm0EbtnGxyI61bBU8vWxh5ID+700ka tON/SmNZQfjDifJSuRZW3d/ToRktqovUMuIcoG8jHowi/6jnrzjXYgCCr5hVC0x0b/x9uD LXlW+9bbLWkLETxBZlpk3B5X9Z6uIdfXv8+lLs5k/ApvXeFK+gQRNiThCm3AXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790404615; 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=KW3/gJFaWxbGEtoOjXIHbqnZ471sBTTUZDXvROt8YUWoz0p7Z2Okl7aiUmjtXHHxzXO0U0 EO6xgm+dxPuEiCx8JNcBhYfF04QRYSg1JZknX+vmA+tBPdlMLmIuD6EABZrYqCAzl0FhSr 6FHLPDNXC8Ez8Zb7ykYe/57gr/9pHsq/gOWZLu7LoKjNtxnM5IITRnU06EwjKf61OicaoU 4gUHNSBouW55ncIPuWm/ytm5xC46ZEQa1ZO/iyf9OQ4k2kaBd600inkSfyp56UI/PHXyR4 XnIVh9XtEVoq+coBq0flK4RG8WEw7vE+a7wQfHg7s/b/lmZ7FvNniZEe9OXkyg== 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 4hsHsz0xQDzm5m for ; Sat, 26 Sep 2026 06:36:55 +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 the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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; } } }