From nobody Wed Sep 04 23:52:04 2024 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 4WzfRW3V3Cz5VwfM; Wed, 04 Sep 2024 23:52:07 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from omta001.cacentral1.a.cloudfilter.net (omta001.cacentral1.a.cloudfilter.net [3.97.99.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4WzfRW0ChDz4bS7; Wed, 4 Sep 2024 23:52:07 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Authentication-Results: mx1.freebsd.org; none Received: from shw-obgw-4002a.ext.cloudfilter.net ([10.228.9.250]) by cmsmtp with ESMTPS id lqO4sRl1n9TOUlznCscCV0; Wed, 04 Sep 2024 23:52:06 +0000 Received: from spqr.komquats.com ([70.66.152.170]) by cmsmtp with ESMTPSA id lznAsOGII2M9qlznBs1Tqz; Wed, 04 Sep 2024 23:52:06 +0000 X-Auth-User: cschuber X-Authority-Analysis: v=2.4 cv=ce5xrWDM c=1 sm=1 tr=0 ts=66d8f2a6 a=y8EK/9tc/U6QY+pUhnbtgQ==:117 a=y8EK/9tc/U6QY+pUhnbtgQ==:17 a=0_lmrure0TmMD5iX:21 a=kj9zAlcOel0A:10 a=EaEq8P2WXUwA:10 a=6I5d2MoRAAAA:8 a=NEAV23lmAAAA:8 a=YxBL1-UpAAAA:8 a=EkcXrb_YAAAA:8 a=L5vLIMzQ0kdiWkzAmtAA:9 a=CjuIK1q_8ugA:10 a=RVmHIydaz68A:10 a=Ia-lj3WSrqcvXOmTRaiG:22 a=LK5xJRSDVpKd5WXXoEvA:22 Received: from slippy.cwsent.com (slippy [10.1.1.91]) by spqr.komquats.com (Postfix) with ESMTP id 483D4CC; Wed, 04 Sep 2024 16:52:04 -0700 (PDT) Received: by slippy.cwsent.com (Postfix, from userid 1000) id 1FCD9C5; Wed, 04 Sep 2024 16:52:04 -0700 (PDT) X-Mailer: exmh version 2.9.0 11/07/2018 with nmh-1.8+dev Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: Konstantin Belousov cc: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: Re: git: 65b133e5d292 - main - x86: allow to have more than one kind of IOMMU In-reply-to: <202409042150.484LoeAq031493@gitrepo.freebsd.org> References: <202409042150.484LoeAq031493@gitrepo.freebsd.org> Comments: In-reply-to Konstantin Belousov message dated "Wed, 04 Sep 2024 21:50:40 +0000." 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=us-ascii Date: Wed, 04 Sep 2024 16:52:04 -0700 Message-Id: <20240904235204.1FCD9C5@slippy.cwsent.com> X-CMAE-Envelope: MS4xfLid89UMQwnY/zRAXa3Od2w2/bZd0pDcYdTLJp4aroWC/gWmRDIIpU92nffrNu4ajKYLvbUkmMoAapVYhp3Sp5DUwyo5+EGVHIEOtFckVuFxNdfLFRVe ktjExF4OktgA18R1bkBewf3j/rB4rmN7mavapOUX3j0vWn/sxBeSfmIN1hD/aqV3EHOwna2N+VF+kI9vgBKvtxL9nyH3sJnhCRm1OTAKZkhsmnvnBnVFvb+E LoY4ZVeFwHM74gZ8dLu/O44uMRER9WoNsNiMNmE11lKdDhxPi6zL0Dwtgz0SU8NS9NTrLkne5OpYgMb1ANLgtwJj3Y4DgLxGoFtPTasD/OY= X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:16509, ipnet:3.96.0.0/15, country:US] X-Rspamd-Queue-Id: 4WzfRW0ChDz4bS7 In message <202409042150.484LoeAq031493@gitrepo.freebsd.org>, Konstantin Belous ov writes: > The branch main has been updated by kib: > > URL: https://cgit.FreeBSD.org/src/commit/?id=65b133e5d292686fe20f11dd39b53812 > 226a8684 > > commit 65b133e5d292686fe20f11dd39b53812226a8684 > Author: Konstantin Belousov > AuthorDate: 2024-05-29 14:38:14 +0000 > Commit: Konstantin Belousov > CommitDate: 2024-09-04 21:50:18 +0000 > > x86: allow to have more than one kind of IOMMU > > Sponsored by: Advanced Micro Devices (AMD) > Sponsored by: The FreeBSD Foundation > MFC after: 1 week > --- > sys/x86/iommu/intel_ctx.c | 22 +++++------ > sys/x86/iommu/intel_dmar.h | 18 ++++++++- > sys/x86/iommu/intel_drv.c | 30 ++++++++++++-- > sys/x86/iommu/intel_intrmap.c | 10 ++--- > sys/x86/iommu/iommu_utils.c | 91 +++++++++++++++++++++++++++++++++++++++++ > +- > sys/x86/iommu/x86_iommu.h | 25 +++++++++++- > 6 files changed, 173 insertions(+), 23 deletions(-) > > diff --git a/sys/x86/iommu/intel_ctx.c b/sys/x86/iommu/intel_ctx.c > index baee0109e5a9..a3ff35dc527e 100644 > --- a/sys/x86/iommu/intel_ctx.c > +++ b/sys/x86/iommu/intel_ctx.c > @@ -75,6 +75,9 @@ static void dmar_unref_domain_locked(struct dmar_unit *dmar > , > struct dmar_domain *domain); > static void dmar_domain_destroy(struct dmar_domain *domain); > > +static void dmar_free_ctx_locked(struct dmar_unit *dmar, struct dmar_ctx *ct > x); > +static void dmar_free_ctx(struct dmar_ctx *ctx); > + > static void > dmar_ensure_ctx_page(struct dmar_unit *dmar, int bus) > { > @@ -745,7 +748,7 @@ dmar_unref_domain_locked(struct dmar_unit *dmar, struct d > mar_domain *domain) > dmar_domain_destroy(domain); > } > > -void > +static void > dmar_free_ctx_locked(struct dmar_unit *dmar, struct dmar_ctx *ctx) > { > struct sf_buf *sf; > @@ -819,7 +822,7 @@ dmar_free_ctx_locked(struct dmar_unit *dmar, struct dmar_ > ctx *ctx) > TD_PINNED_ASSERT; > } > > -void > +static void > dmar_free_ctx(struct dmar_ctx *ctx) > { > struct dmar_unit *dmar; > @@ -867,7 +870,7 @@ dmar_domain_free_entry(struct iommu_map_entry *entry, boo > l free) > * the entry's dmamap_link field. > */ > void > -iommu_domain_unload_entry(struct iommu_map_entry *entry, bool free, > +dmar_domain_unload_entry(struct iommu_map_entry *entry, bool free, > bool cansleep) > { > struct dmar_domain *domain; > @@ -909,7 +912,7 @@ dmar_domain_unload_emit_wait(struct dmar_domain *domain, > } > > void > -iommu_domain_unload(struct iommu_domain *iodom, > +dmar_domain_unload(struct iommu_domain *iodom, > struct iommu_map_entries_tailq *entries, bool cansleep) > { > struct dmar_domain *domain; > @@ -947,37 +950,34 @@ iommu_domain_unload(struct iommu_domain *iodom, > } > > struct iommu_ctx * > -iommu_get_ctx(struct iommu_unit *iommu, device_t dev, uint16_t rid, > +dmar_get_ctx(struct iommu_unit *iommu, device_t dev, uint16_t rid, > bool id_mapped, bool rmrr_init) > { > struct dmar_unit *dmar; > struct dmar_ctx *ret; > > dmar = IOMMU2DMAR(iommu); > - > ret = dmar_get_ctx_for_dev(dmar, dev, rid, id_mapped, rmrr_init); > - > return (CTX2IOCTX(ret)); > } > > void > -iommu_free_ctx_locked(struct iommu_unit *iommu, struct iommu_ctx *context) > +dmar_free_ctx_locked_method(struct iommu_unit *iommu, > + struct iommu_ctx *context) > { > struct dmar_unit *dmar; > struct dmar_ctx *ctx; > > dmar = IOMMU2DMAR(iommu); > ctx = IOCTX2CTX(context); > - > dmar_free_ctx_locked(dmar, ctx); > } > > void > -iommu_free_ctx(struct iommu_ctx *context) > +dmar_free_ctx_method(struct iommu_ctx *context) > { > struct dmar_ctx *ctx; > > ctx = IOCTX2CTX(context); > - > dmar_free_ctx(ctx); > } > diff --git a/sys/x86/iommu/intel_dmar.h b/sys/x86/iommu/intel_dmar.h > index 4ae005238074..0ede955e12b9 100644 > --- a/sys/x86/iommu/intel_dmar.h > +++ b/sys/x86/iommu/intel_dmar.h > @@ -293,10 +293,17 @@ struct dmar_ctx *dmar_get_ctx_for_devpath(struct dmar_u > nit *dmar, uint16_t rid, > int dev_domain, int dev_busno, const void *dev_path, int dev_path_len, > bool id_mapped, bool rmrr_init); > int dmar_move_ctx_to_domain(struct dmar_domain *domain, struct dmar_ctx *ctx > ); > -void dmar_free_ctx_locked(struct dmar_unit *dmar, struct dmar_ctx *ctx); > -void dmar_free_ctx(struct dmar_ctx *ctx); > +void dmar_free_ctx_locked_method(struct iommu_unit *dmar, > + struct iommu_ctx *ctx); > +void dmar_free_ctx_method(struct iommu_ctx *ctx); > struct dmar_ctx *dmar_find_ctx_locked(struct dmar_unit *dmar, uint16_t rid); > +struct iommu_ctx *dmar_get_ctx(struct iommu_unit *iommu, device_t dev, > + uint16_t rid, bool id_mapped, bool rmrr_init); > void dmar_domain_free_entry(struct iommu_map_entry *entry, bool free); > +void dmar_domain_unload_entry(struct iommu_map_entry *entry, bool free, > + bool cansleep); > +void dmar_domain_unload(struct iommu_domain *iodom, > + struct iommu_map_entries_tailq *entries, bool cansleep); > > void dmar_dev_parse_rmrr(struct dmar_domain *domain, int dev_domain, > int dev_busno, const void *dev_path, int dev_path_len, > @@ -308,6 +315,13 @@ void dmar_quirks_pre_use(struct iommu_unit *dmar); > > int dmar_init_irt(struct dmar_unit *unit); > void dmar_fini_irt(struct dmar_unit *unit); > +int dmar_alloc_msi_intr(device_t src, u_int *cookies, u_int count); > +int dmar_map_msi_intr(device_t src, u_int cpu, u_int vector, u_int cookie, > + uint64_t *addr, uint32_t *data); > +int dmar_unmap_msi_intr(device_t src, u_int cookie); > +int dmar_map_ioapic_intr(u_int ioapic_id, u_int cpu, u_int vector, bool edge > , > + bool activehi, int irq, u_int *cookie, uint32_t *hi, uint32_t *lo); > +int dmar_unmap_ioapic_intr(u_int ioapic_id, u_int *cookie); > > extern int haw; > extern int dmar_batch_coalesce; > diff --git a/sys/x86/iommu/intel_drv.c b/sys/x86/iommu/intel_drv.c > index 636534173715..79350358cced 100644 > --- a/sys/x86/iommu/intel_drv.c > +++ b/sys/x86/iommu/intel_drv.c > @@ -64,6 +64,8 @@ > #include > #include > #include > +#include > +#include > #include > #include > #include > @@ -1357,12 +1359,34 @@ DB_SHOW_ALL_COMMAND(dmars, db_show_all_dmars) > } > #endif > > -struct iommu_unit * > -iommu_find(device_t dev, bool verbose) > +static struct iommu_unit * > +dmar_find_method(device_t dev, bool verbose) > { > struct dmar_unit *dmar; > > dmar = dmar_find(dev, verbose); > - > return (&dmar->iommu); > } > + > +static struct x86_iommu dmar_x86_iommu = { > + .domain_unload_entry = dmar_domain_unload_entry, > + .domain_unload = dmar_domain_unload, > + .get_ctx = dmar_get_ctx, > + .free_ctx_locked = dmar_free_ctx_locked_method, > + .free_ctx = dmar_free_ctx_method, > + .find = dmar_find_method, > + .alloc_msi_intr = dmar_alloc_msi_intr, > + .map_msi_intr = dmar_map_msi_intr, > + .unmap_msi_intr = dmar_unmap_msi_intr, > + .map_ioapic_intr = dmar_map_ioapic_intr, > + .unmap_ioapic_intr = dmar_unmap_ioapic_intr, > +}; > + > +static void > +x86_iommu_set_intel(void *arg __unused) > +{ > + if (cpu_vendor_id == CPU_VENDOR_INTEL) > + set_x86_iommu(&dmar_x86_iommu); > +} > + > +SYSINIT(x86_iommu, SI_SUB_TUNABLES, SI_ORDER_ANY, x86_iommu_set_intel, NULL) > ; > diff --git a/sys/x86/iommu/intel_intrmap.c b/sys/x86/iommu/intel_intrmap.c > index 22fd51bc8be9..a6979a9d2501 100644 > --- a/sys/x86/iommu/intel_intrmap.c > +++ b/sys/x86/iommu/intel_intrmap.c > @@ -65,7 +65,7 @@ static void dmar_ir_program_irte(struct dmar_unit *unit, u_ > int idx, > static int dmar_ir_free_irte(struct dmar_unit *unit, u_int cookie); > > int > -iommu_alloc_msi_intr(device_t src, u_int *cookies, u_int count) > +dmar_alloc_msi_intr(device_t src, u_int *cookies, u_int count) > { > struct dmar_unit *unit; > vmem_addr_t vmem_res; > @@ -93,7 +93,7 @@ iommu_alloc_msi_intr(device_t src, u_int *cookies, u_int co > unt) > } > > int > -iommu_map_msi_intr(device_t src, u_int cpu, u_int vector, u_int cookie, > +dmar_map_msi_intr(device_t src, u_int cpu, u_int vector, u_int cookie, > uint64_t *addr, uint32_t *data) > { > struct dmar_unit *unit; > @@ -139,7 +139,7 @@ iommu_map_msi_intr(device_t src, u_int cpu, u_int vector, > u_int cookie, > } > > int > -iommu_unmap_msi_intr(device_t src, u_int cookie) > +dmar_unmap_msi_intr(device_t src, u_int cookie) > { > struct dmar_unit *unit; > > @@ -150,7 +150,7 @@ iommu_unmap_msi_intr(device_t src, u_int cookie) > } > > int > -iommu_map_ioapic_intr(u_int ioapic_id, u_int cpu, u_int vector, bool edge, > +dmar_map_ioapic_intr(u_int ioapic_id, u_int cpu, u_int vector, bool edge, > bool activehi, int irq, u_int *cookie, uint32_t *hi, uint32_t *lo) > { > struct dmar_unit *unit; > @@ -213,7 +213,7 @@ iommu_map_ioapic_intr(u_int ioapic_id, u_int cpu, u_int v > ector, bool edge, > } > > int > -iommu_unmap_ioapic_intr(u_int ioapic_id, u_int *cookie) > +dmar_unmap_ioapic_intr(u_int ioapic_id, u_int *cookie) > { > struct dmar_unit *unit; > u_int idx; > diff --git a/sys/x86/iommu/iommu_utils.c b/sys/x86/iommu/iommu_utils.c > index ffea1cc1a190..ea2c0358e072 100644 > --- a/sys/x86/iommu/iommu_utils.c > +++ b/sys/x86/iommu/iommu_utils.c > @@ -1,7 +1,7 @@ > /*- > * SPDX-License-Identifier: BSD-2-Clause > * > - * Copyright (c) 2013, 2014 The FreeBSD Foundation > + * Copyright (c) 2013, 2014, 2024 The FreeBSD Foundation > * > * This software was developed by Konstantin Belousov > * under sponsorship from the FreeBSD Foundation. > @@ -50,6 +50,7 @@ > #include > #include > #include > +#include > > vm_page_t > iommu_pgalloc(vm_object_t obj, vm_pindex_t idx, int flags) > @@ -162,3 +163,91 @@ SYSCTL_NODE(_hw_iommu, OID_AUTO, dmar, CTLFLAG_RD | CTLF > LAG_MPSAFE, > SYSCTL_INT(_hw_iommu_dmar, OID_AUTO, tbl_pagecnt, CTLFLAG_RD, > &iommu_tbl_pagecnt, 0, > "Count of pages used for DMAR pagetables"); > + > +static struct x86_iommu *x86_iommu; > + > +void > +set_x86_iommu(struct x86_iommu *x) > +{ > + MPASS(x86_iommu == NULL); > + x86_iommu = x; > +} > + > +struct x86_iommu * > +get_x86_iommu(void) > +{ > + return (x86_iommu); > +} > + > +void > +iommu_domain_unload_entry(struct iommu_map_entry *entry, bool free, > + bool cansleep) > +{ > + x86_iommu->domain_unload_entry(entry, free, cansleep); > +} > + > +void > +iommu_domain_unload(struct iommu_domain *iodom, > + struct iommu_map_entries_tailq *entries, bool cansleep) > +{ > + x86_iommu->domain_unload(iodom, entries, cansleep); > +} > + > +struct iommu_ctx * > +iommu_get_ctx(struct iommu_unit *iommu, device_t dev, uint16_t rid, > + bool id_mapped, bool rmrr_init) > +{ > + return (x86_iommu->get_ctx(iommu, dev, rid, id_mapped, rmrr_init)); > +} > + > +void > +iommu_free_ctx_locked(struct iommu_unit *iommu, struct iommu_ctx *context) > +{ > + x86_iommu->free_ctx_locked(iommu, context); > +} > + > +void > +iommu_free_ctx(struct iommu_ctx *context) > +{ > + x86_iommu->free_ctx(context); > +} > + > +struct iommu_unit * > +iommu_find(device_t dev, bool verbose) > +{ > + return (x86_iommu->find(dev, verbose)); > +} > + > +int > +iommu_alloc_msi_intr(device_t src, u_int *cookies, u_int count) > +{ > + return (x86_iommu->alloc_msi_intr(src, cookies, count)); > +} > + > +int > +iommu_map_msi_intr(device_t src, u_int cpu, u_int vector, u_int cookie, > + uint64_t *addr, uint32_t *data) > +{ > + return (x86_iommu->map_msi_intr(src, cpu, vector, cookie, > + addr, data)); > +} > + > +int > +iommu_unmap_msi_intr(device_t src, u_int cookie) > +{ > + return (x86_iommu->unmap_msi_intr(src, cookie)); > +} > + > +int > +iommu_map_ioapic_intr(u_int ioapic_id, u_int cpu, u_int vector, bool edge, > + bool activehi, int irq, u_int *cookie, uint32_t *hi, uint32_t *lo) > +{ > + return (x86_iommu->map_ioapic_intr(ioapic_id, cpu, vector, edge, > + activehi, irq, cookie, hi, lo)); > +} > + > +int > +iommu_unmap_ioapic_intr(u_int ioapic_id, u_int *cookie) > +{ > + return (x86_iommu->unmap_ioapic_intr(ioapic_id, cookie)); > +} > diff --git a/sys/x86/iommu/x86_iommu.h b/sys/x86/iommu/x86_iommu.h > index 3789586f1eaf..8c908964acd0 100644 > --- a/sys/x86/iommu/x86_iommu.h > +++ b/sys/x86/iommu/x86_iommu.h > @@ -1,7 +1,7 @@ > /*- > * SPDX-License-Identifier: BSD-2-Clause > * > - * Copyright (c) 2013-2015 The FreeBSD Foundation > + * Copyright (c) 2013-2015, 2024 The FreeBSD Foundation > * > * This software was developed by Konstantin Belousov > * under sponsorship from the FreeBSD Foundation. > @@ -59,4 +59,27 @@ extern int iommu_tbl_pagecnt; > SYSCTL_DECL(_hw_iommu); > SYSCTL_DECL(_hw_iommu_dmar); > > +struct x86_iommu { > + void (*domain_unload_entry)(struct iommu_map_entry *entry, bool free, > + bool cansleep); > + void (*domain_unload)(struct iommu_domain *iodom, > + struct iommu_map_entries_tailq *entries, bool cansleep); > + struct iommu_ctx *(*get_ctx)(struct iommu_unit *iommu, > + device_t dev, uint16_t rid, bool id_mapped, bool rmrr_init); > + void (*free_ctx_locked)(struct iommu_unit *iommu, > + struct iommu_ctx *context); > + void (*free_ctx)(struct iommu_ctx *context); > + struct iommu_unit *(*find)(device_t dev, bool verbose); > + int (*alloc_msi_intr)(device_t src, u_int *cookies, u_int count); > + int (*map_msi_intr)(device_t src, u_int cpu, u_int vector, > + u_int cookie, uint64_t *addr, uint32_t *data); > + int (*unmap_msi_intr)(device_t src, u_int cookie); > + int (*map_ioapic_intr)(u_int ioapic_id, u_int cpu, u_int vector, > + bool edge, bool activehi, int irq, u_int *cookie, uint32_t *hi, > + uint32_t *lo); > + int (*unmap_ioapic_intr)(u_int ioapic_id, u_int *cookie); > +}; > +void set_x86_iommu(struct x86_iommu *); > +struct x86_iommu *get_x86_iommu(void); > + > #endif > I suspect this commit but could be one of the others that caused this panic during intialization. From a serial console log: Hit [Enter] to boot immediately, or any other key for command prompt. Booting [/boot/kernel/kernel] in 10 seconds... ^MBooting [/boot/kernel/kernel] in 9 seconds... ^MBooting [/boot/kernel/kernel]... ^M \^HGDB: no debug ports present KDB: debugger backends: ddb KDB: current backend: ddb ---<>--- Copyright (c) 1992-2024 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 15.0-CURRENT #60 komquats-n272059-e28ee29d2d13: Wed Sep 4 15:07:36 PDT 2024 root@cwsys:/export/obj/opt/src/git-src/amd64.amd64/sys/BREAK amd64 FreeBSD clang version 18.1.6 (https://github.com/llvm/llvm-project.git llvmorg-18.1.6-0-g1118c2e05e67) VT(vga): text 80x25 CPU: AMD Processor model unknown (3000.06-MHz K8-class CPU) Origin="AuthenticAMD" Id=0x100f43 Family=0x10 Model=0x4 Stepping=3 Features=0x178bfbff Features2=0x802009 AMD Features=0xee500800 AMD Features2=0x37ff SVM: NP,NRIP,NAsids=64 TSC: P-state invariant real memory = 8589934592 (8192 MB) avail memory = 8145883136 (7768 MB) Event timer "LAPIC" quality 100 ACPI APIC Table: FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs FreeBSD/SMP: 1 package(s) x 4 core(s) random: unblocking device. Firmware Warning (ACPI): 32/64X length mismatch in FADT/Pm1aEventBlock: 32/8 (20230628/tbfadt-748) Firmware Warning (ACPI): 32/64X length mismatch in FADT/Pm1aControlBlock: 16/8 (20230628/tbfadt-748) Firmware Warning (ACPI): 32/64X length mismatch in FADT/PmTimerBlock: 32/8 (20230628/tbfadt-748) Firmware Warning (ACPI): 32/64X length mismatch in FADT/Gpe0Block: 64/8 (20230628/tbfadt-748) Firmware Warning (ACPI): Invalid length for FADT/Pm1aEventBlock: 8, using default 32 (20230628/tbfadt-850) Firmware Warning (ACPI): Invalid length for FADT/Pm1aControlBlock: 8, using default 16 (20230628/tbfadt-850) Firmware Warning (ACPI): Invalid length for FADT/PmTimerBlock: 8, using default 32 (20230628/tbfadt-850) ioapic0: MADT APIC ID 4 != hw id 0 kernel trap 12 with interrupts disabled Fatal trap 12: page fault while in kernel mode cpuid = 0; apic id = 00 fault virtual address = 0x78 fault code = supervisor read data, page not present instruction pointer = 0x20:0xffffffff80a2c48b stack pointer = 0x28:0xffffffff81f05e90 frame pointer = 0x28:0xffffffff81f05e90 code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, long 1, def32 0, gran 1 processor eflags = resume, IOPL = 0 current process = 0 (swapper) rdi: 0000000000000004 rsi: 0000000000000000 rdx: 0000000000000000 rcx: 0000000000000001 r8: 0000000000000001 r9: 00000000ffffffff rax: 0000000000000000 rbx: fffff800fec00000 rbp: ffffffff81f05e90 r10: 0000000000000000 r11: 00000000fff5cfdf r12: 0000000000000010 r13: fffff800033aa8ec r14: fffff800033aa8e4 r15: 0000000000000000 trap number = 12 panic: page fault cpuid = 0 time = 1 KDB: stack backtrace: db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xffffffff81f05b80 vpanic() at vpanic+0x13f/frame 0xffffffff81f05cb0 panic() at panic+0x43/frame 0xffffffff81f05d10 trap_fatal() at trap_fatal+0x40b/frame 0xffffffff81f05d70 trap_pfault() at trap_pfault+0x46/frame 0xffffffff81f05dc0 calltrap() at calltrap+0x8/frame 0xffffffff81f05dc0 --- trap 0xc, rip = 0xffffffff80a2c48b, rsp = 0xffffffff81f05e90, rbp = 0xffffffff81f05e90 --- iommu_map_ioapic_intr() at iommu_map_ioapic_intr+0xb/frame 0xffffffff81f05e90 ioapic_create() at ioapic_create+0x460/frame 0xffffffff81f05f20 madt_parse_apics() at madt_parse_apics+0x51/frame 0xffffffff81f05f40 acpi_walk_subtables() at acpi_walk_subtables+0x31/frame 0xffffffff81f05f70 madt_setup_io() at madt_setup_io+0x62/frame 0xffffffff81f05f90 apic_setup_io() at apic_setup_io+0x24/frame 0xffffffff81f05fa0 mi_startup() at mi_startup+0x1c8/frame 0xffffffff81f05ff0 Uptime: 1s Automatic reboot in 15 seconds - press a key on the console to abort --> Press a key on the console to reboot, --> or switch off the system now. Rebooting... -- Cheers, Cy Schubert FreeBSD UNIX: Web: https://FreeBSD.org NTP: Web: https://nwtime.org e^(i*pi)+1=0