From nobody Mon Aug 18 09:46:10 2025 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 4c57Bq1TFnz64vPg; Mon, 18 Aug 2025 09:46:11 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4c57Bp6HMVz3d5y; Mon, 18 Aug 2025 09:46:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1755510370; 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=1W0vFOSBCfCapKkgto1WMvdyoPn7HyL1kYEGkrG7Jwc=; b=Ule4x6NqjjTkp3OdXqorF2zYkDY2sZgEAvU7AguxXxWsUES9/eQt2aHANwxkBROfixNkpS 2qx66o6+xbFAwN4yHwBZs7iCE5Q3LVhGx/6dFkIy+tDx8d0OAbWqmRhLL/N4BEMKdGhZeM x8YyfZ+R3LeWoL8F5M5oI5h0f+UqS1V0RyhEwljCNnGam3Bs4X3VYWHeMa0tSa7EjIRnZd UB9CF2uIrAA77yELzEEp5+wF0pY6/qpWSiSOB5Whfq4MVHh8ePH+OTrnf6mMR5++BUi0Uj 3pmHVxNNbV6y5lFr9LYc00emv9J/pYN5cGXjeNBKZOfCyh9x03iiSrDMDVuWwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1755510370; 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=1W0vFOSBCfCapKkgto1WMvdyoPn7HyL1kYEGkrG7Jwc=; b=ocQsz5js99BqqI5dFOWKgZcoozQzTV9PQHqvAkxsO6xVd1odeahKmoHwyx7lMlfAGFDz1R tV8HXQVuTBnRyXJW3JC/mmt8sRhnOU4Jq3Wa94ZmeK8e7fZrWbbtIvX1c5i8X7PZBh8r7u G6zYVa8Pmfr0NOzDDdN6EVaEx11W0WfSEm4tu18AZW8risI3LdpEA6grr0/W3luKLFH8Jl nk77bfAiJmBzCJz8P4WbLBsKQxsTDQ8XVsCwmC442MIms32NYvZb3qLiDR9+Z3vHQGQfUF iqqLK95ICPJGQe4PwOYqF752kqE8fu7768cyPYWAN0Hol+Djqo7UvzFsGXKRmg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1755510370; a=rsa-sha256; cv=none; b=byAxUYBeMNzCG1z4896zfbsShmxSpKUzIQFIzGzp/xBz55ziUT1/Pc57TgA3OY3PmL4lBW h6qLX1fpDwj8Dr/Y8dsg1TWcdiT7TI3M1QlGLFep/f2jUcvXyVLpDj2mLlKvs1KfBajAuF p8oVblXN8M4skmdjNKl7PEPSfqCMje8BLJLoh5v4M4AWqkxAIGUMTE9Ok5bIv8fRd6SPrp Z9puZfp8oLQd/h8sHtJqF0MIMiQpvc9dNbbvRVi5oMGJlPnlU28ocnrXRDoWdQNDK8eJX4 SKbiCGUUQrer7Pn2CYjFhEtJMw3q4wrtZY9hVxTvQx/uj2d+a8dL81tc+vSfqg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4c57Bp4lTpzrdQ; Mon, 18 Aug 2025 09:46:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 57I9kAVn017224; Mon, 18 Aug 2025 09:46:10 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 57I9kATM017221; Mon, 18 Aug 2025 09:46:10 GMT (envelope-from git) Date: Mon, 18 Aug 2025 09:46:10 GMT Message-Id: <202508180946.57I9kATM017221@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: a2e28ba79238 - main - kboot: Support reading the smbios vis 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a2e28ba79238ef5842db7e4581ed85c2fb63c317 Auto-Submitted: auto-generated The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=a2e28ba79238ef5842db7e4581ed85c2fb63c317 commit a2e28ba79238ef5842db7e4581ed85c2fb63c317 Author: Andrew Turner AuthorDate: 2025-07-25 02:07:17 +0000 Commit: Andrew Turner CommitDate: 2025-07-30 18:35:29 +0000 kboot: Support reading the smbios vis sysfs When reading the smbios on Linux we try to access it via /dev/mem. On some systems we can't do this as /dev/mem is locked down. To handle this try reading the sysfs file first, and if that fails fall back to /dev/mem. Reviewed by: imp Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D51413 --- stand/kboot/kboot/main.c | 49 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/stand/kboot/kboot/main.c b/stand/kboot/kboot/main.c index a8c725a514be..4a136b42a4a1 100644 --- a/stand/kboot/kboot/main.c +++ b/stand/kboot/kboot/main.c @@ -229,6 +229,7 @@ static struct mapping uintptr_t pa; caddr_t va; } map[MAX_MAP]; +static bool smbios_mmap_file; static int smbios_fd; static int nmap; @@ -238,12 +239,17 @@ caddr_t ptov(uintptr_t pa) uintptr_t pa2; struct mapping *m = map; - pa2 = rounddown(pa, PAGE); + if (smbios_mmap_file) + pa2 = rounddown(pa, PAGE); + else + pa2 = pa; for (int i = 0; i < nmap; i++, m++) { if (m->pa == pa2) { return (m->va + pa - m->pa); } } + if (!smbios_mmap_file) + panic("Out of bounds smbios access"); if (nmap == MAX_MAP) panic("Too many maps for smbios"); @@ -298,6 +304,7 @@ static void find_smbios(void) { char buf[40]; + void *dmi_data; uintptr_t pa; caddr_t va; @@ -306,17 +313,47 @@ find_smbios(void) if (pa == 0) return; + dmi_data = NULL; + smbios_fd = host_open("/sys/firmware/dmi/tables/DMI", O_RDONLY, 0); + if (smbios_fd >= 0) { + struct host_kstat sb; + struct mapping *m; + + if (host_fstat(smbios_fd, &sb) < 0) { + host_close(smbios_fd); + goto try_dev_mem; + } + + dmi_data = malloc(sb.st_size); + if (dmi_data == NULL) { + host_close(smbios_fd); + goto try_dev_mem; + } + + host_read(smbios_fd, dmi_data, sb.st_size); + + m = &map[nmap++]; + m->pa = pa; + m->va = dmi_data; + smbios_mmap_file = false; + } else { +try_dev_mem: + smbios_fd = host_open("/dev/mem", O_RDONLY, 0); + if (smbios_fd < 0) { + printf("Can't open /sys/firmware/dmi/tables/DMI or " + "/dev/mem to read smbios\n"); + return; + } + smbios_mmap_file = true; + } snprintf(buf, sizeof(buf), "%#jx", (uintmax_t)pa); setenv("hint.smbios.0.mem", buf, 1); - smbios_fd = host_open("/dev/mem", O_RDONLY, 0); - if (smbios_fd < 0) { - printf("Can't open /dev/mem to read smbios\n"); - return; - } + va = ptov(pa); printf("Start of smbios at pa %p va %p\n", (void *)pa, va); smbios_detect(va); smbios_cleanup(); + free(dmi_data); host_close(smbios_fd); }