Re: git: 871b33ad65ba - main - pci: Consistently use pci_vf_* for suballocated VF memory resources

From: Cy Schubert <Cy.Schubert_at_cschubert.com>
Date: Wed, 05 Jun 2024 03:47:33 UTC
In message <202406042352.454NqFVj061328@gitrepo.freebsd.org>, John Baldwin writ
es:
> The branch main has been updated by jhb:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=871b33ad65baf07c92cce120a4fc1978
> c2ed7b3b
>
> commit 871b33ad65baf07c92cce120a4fc1978c2ed7b3b
> Author:     John Baldwin <jhb@FreeBSD.org>
> AuthorDate: 2024-06-04 23:51:37 +0000
> Commit:     John Baldwin <jhb@FreeBSD.org>
> CommitDate: 2024-06-04 23:51:37 +0000
>
>     pci: Consistently use pci_vf_* for suballocated VF memory resources
>     
>     Some of the bus resource methods were passing these up to the parent
>     which triggered rman mismatch assertions in INVARIANTS kernels.
>     
>     Reported by:    kp
>     Reviewed by:    imp
>     Tested by:      kp (earlier version)
>     Differential Revision:  https://reviews.freebsd.org/D45406
> ---
>  sys/dev/pci/pci.c         | 118 ++++++++++++++++++++++++++++++++++--
>  sys/dev/pci/pci_iov.c     | 151 ++++++++++++++++++++++++++++++++++++++++++++
> ++
>  sys/dev/pci/pci_private.h |  19 ++++++
>  3 files changed, 284 insertions(+), 4 deletions(-)
>
> diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
> index 2cb8b4ce9fcc..2093d6a8b5ef 100644
> --- a/sys/dev/pci/pci.c
> +++ b/sys/dev/pci/pci.c
> @@ -164,10 +164,18 @@ static device_method_t pci_methods[] = {
>  	DEVMETHOD(bus_get_resource,	bus_generic_rl_get_resource),
>  	DEVMETHOD(bus_delete_resource,	pci_delete_resource),
>  	DEVMETHOD(bus_alloc_resource,	pci_alloc_resource),
> +#ifdef PCI_IOV
> +	DEVMETHOD(bus_adjust_resource,	pci_adjust_resource),
> +#else
>  	DEVMETHOD(bus_adjust_resource,	bus_generic_adjust_resource),
> +#endif
>  	DEVMETHOD(bus_release_resource,	pci_release_resource),
>  	DEVMETHOD(bus_activate_resource, pci_activate_resource),
>  	DEVMETHOD(bus_deactivate_resource, pci_deactivate_resource),
> +#ifdef PCI_IOV
> +	DEVMETHOD(bus_map_resource,	pci_map_resource),
> +	DEVMETHOD(bus_unmap_resource,	pci_unmap_resource),
> +#endif
>  	DEVMETHOD(bus_child_deleted,	pci_child_deleted),
>  	DEVMETHOD(bus_child_detached,	pci_child_detached),
>  	DEVMETHOD(bus_child_pnpinfo,	pci_child_pnpinfo_method),
> @@ -5687,14 +5695,30 @@ pci_activate_resource(device_t dev, device_t child, s
> truct resource *r)
>  	struct pci_devinfo *dinfo;
>  	int error, rid, type;
>  
> -	error = bus_generic_activate_resource(dev, child, r);
> +	dinfo = device_get_ivars(child);
> +#ifdef PCI_IOV
> +	if (dinfo->cfg.flags & PCICFG_VF) {
> +		switch (rman_get_type(r)) {
> +		/* VFs can't have I/O BARs. */
> +		case SYS_RES_IOPORT:
> +			error = EINVAL;
> +			break;
> +		case SYS_RES_MEMORY:
> +			error = pci_vf_activate_mem_resource(dev, child, r);
> +			break;
> +		default:
> +			error = bus_generic_activate_resource(dev, child, r);
> +			break;
> +		}
> +	} else
> +#endif
> +		error = bus_generic_activate_resource(dev, child, r);
>  	if (error)
>  		return (error);
>  
>  	/* Enable decoding in the command register when activating BARs. */
>  	if (device_get_parent(child) == dev) {
>  		/* Device ROMs need their decoding explicitly enabled. */
> -		dinfo = device_get_ivars(child);
>  		rid = rman_get_rid(r);
>  		type = rman_get_type(r);
>  		if (type == SYS_RES_MEMORY && PCIR_IS_BIOS(&dinfo->cfg, rid))
> @@ -5716,13 +5740,29 @@ pci_deactivate_resource(device_t dev, device_t child,
>  struct resource *r)
>  	struct pci_devinfo *dinfo;
>  	int error, rid, type;
>  
> -	error = bus_generic_deactivate_resource(dev, child, r);
> +	dinfo = device_get_ivars(child);
> +#ifdef PCI_IOV
> +	if (dinfo->cfg.flags & PCICFG_VF) {
> +		switch (rman_get_type(r)) {
> +		/* VFs can't have I/O BARs. */
> +		case SYS_RES_IOPORT:
> +			error = EINVAL;
> +			break;
> +		case SYS_RES_MEMORY:
> +			error = pci_vf_deactivate_mem_resource(dev, child, r);
> +			break;
> +		default:
> +			error = bus_generic_deactivate_resource(dev, child, r);
> +			break;
> +		}
> +	} else
> +#endif
> +		error = bus_generic_deactivate_resource(dev, child, r);
>  	if (error)
>  		return (error);
>  
>  	/* Disable decoding for device ROMs. */
>  	if (device_get_parent(child) == dev) {
> -		dinfo = device_get_ivars(child);
>  		rid = rman_get_rid(r);
>  		type = rman_get_type(r);
>  		if (type == SYS_RES_MEMORY && PCIR_IS_BIOS(&dinfo->cfg, rid))
> @@ -5732,6 +5772,76 @@ pci_deactivate_resource(device_t dev, device_t child, 
> struct resource *r)
>  	return (0);
>  }
>  
> +#ifdef PCI_IOV
> +int
> +pci_adjust_resource(device_t dev, device_t child, struct resource *r,
> +    rman_res_t start, rman_res_t end)
> +{
> +	struct pci_devinfo *dinfo;
> +
> +	dinfo = device_get_ivars(child);
> +	if (dinfo->cfg.flags & PCICFG_VF) {
> +		switch (rman_get_type(r)) {
> +		/* VFs can't have I/O BARs. */
> +		case SYS_RES_IOPORT:
> +			return (EINVAL);
> +		case SYS_RES_MEMORY:
> +			return (pci_vf_adjust_mem_resource(dev, child, r,
> +			    start, end));
> +		}
> +
> +		/* Fall through for other types of resource allocations. */
> +	}
> +
> +	return (bus_generic_adjust_resource(dev, child, r, start, end));
> +}
> +
> +int
> +pci_map_resource(device_t dev, device_t child, struct resource *r,
> +    struct resource_map_request *argsp, struct resource_map *map)
> +{
> +	struct pci_devinfo *dinfo;
> +
> +	dinfo = device_get_ivars(child);
> +	if (dinfo->cfg.flags & PCICFG_VF) {
> +		switch (rman_get_type(r)) {
> +		/* VFs can't have I/O BARs. */
> +		case SYS_RES_IOPORT:
> +			return (EINVAL);
> +		case SYS_RES_MEMORY:
> +			return (pci_vf_map_mem_resource(dev, child, r, argsp,
> +			    map));
> +		}
> +
> +		/* Fall through for other types of resource allocations. */
> +	}
> +
> +	return (bus_generic_map_resource(dev, child, r, argsp, map));
> +}
> +
> +int
> +pci_unmap_resource(device_t dev, device_t child, struct resource *r,
> +    struct resource_map *map)
> +{
> +	struct pci_devinfo *dinfo;
> +
> +	dinfo = device_get_ivars(child);
> +	if (dinfo->cfg.flags & PCICFG_VF) {
> +		switch (rman_get_type(r)) {
> +		/* VFs can't have I/O BARs. */
> +		case SYS_RES_IOPORT:
> +			return (EINVAL);
> +		case SYS_RES_MEMORY:
> +			return (pci_vf_unmap_mem_resource(dev, child, r, map));
> +		}
> +
> +		/* Fall through for other types of resource allocations. */
> +	}
> +
> +	return (bus_generic_unmap_resource(dev, child, r, map));
> +}
> +#endif
> +
>  void
>  pci_child_deleted(device_t dev, device_t child)
>  {
> diff --git a/sys/dev/pci/pci_iov.c b/sys/dev/pci/pci_iov.c
> index c8e139f043c9..1f1138b2d336 100644
> --- a/sys/dev/pci/pci_iov.c
> +++ b/sys/dev/pci/pci_iov.c
> @@ -1070,6 +1070,12 @@ pci_vf_release_mem_resource(device_t dev, device_t chi
> ld, struct resource *r)
>  
>  	dinfo = device_get_ivars(child);
>  
> +	KASSERT(rman_get_type(r) == SYS_RES_MEMORY,
> +	    ("%s: invalid resource %p", __func__, r));
> +	KASSERT(rman_is_region_manager(r, &dinfo->cfg.iov->rman),
> +	    ("%s: rman %p doesn't match for resource %p", __func__,
> +	    &dinfo->cfg.iov->rman, r));
> +
>  	if (rman_get_flags(r) & RF_ACTIVE) {
>  		error = bus_deactivate_resource(child, r);
>  		if (error != 0)
> @@ -1086,3 +1092,148 @@ pci_vf_release_mem_resource(device_t dev, device_t ch
> ild, struct resource *r)
>  
>  	return (rman_release_resource(r));
>  }
> +
> +int
> +pci_vf_activate_mem_resource(device_t dev, device_t child, struct resource *
> r)
> +{
> +#ifdef INVARIANTS
> +	struct pci_devinfo *dinfo = device_get_ivars(child);
> +#endif
> +	struct resource_map map;
> +	int error;
> +
> +	KASSERT(rman_get_type(r) == SYS_RES_MEMORY,
> +	    ("%s: invalid resource %p", __func__, r));
> +	KASSERT(rman_is_region_manager(r, &dinfo->cfg.iov->rman),
> +	    ("%s: rman %p doesn't match for resource %p", __func__,
> +	    &dinfo->cfg.iov->rman, r));
> +
> +	error = rman_activate_resource(r);
> +	if (error != 0)
> +		return (error);
> +
> +	if ((rman_get_flags(r) & RF_UNMAPPED) == 0) {
> +		error = BUS_MAP_RESOURCE(dev, child, r, NULL, &map);
> +		if (error != 0) {
> +			rman_deactivate_resource(r);
> +			return (error);
> +		}
> +
> +		rman_set_mapping(r, &map);
> +	}
> +	return (0);
> +}
> +
> +int
> +pci_vf_deactivate_mem_resource(device_t dev, device_t child, struct resource
>  *r)
> +{
> +#ifdef INVARIANTS
> +	struct pci_devinfo *dinfo = device_get_ivars(child);
> +#endif
> +	struct resource_map map;
> +	int error;
> +
> +	KASSERT(rman_get_type(r) == SYS_RES_MEMORY,
> +	    ("%s: invalid resource %p", __func__, r));
> +	KASSERT(rman_is_region_manager(r, &dinfo->cfg.iov->rman),
> +	    ("%s: rman %p doesn't match for resource %p", __func__,
> +	    &dinfo->cfg.iov->rman, r));
> +
> +	error = rman_deactivate_resource(r);
> +	if (error != 0)
> +		return (error);
> +
> +	if ((rman_get_flags(r) & RF_UNMAPPED) == 0) {
> +		rman_get_mapping(r, &map);
> +		BUS_UNMAP_RESOURCE(dev, child, r, &map);
> +	}
> +	return (0);
> +}
> +
> +int
> +pci_vf_adjust_mem_resource(device_t dev, device_t child, struct resource *r,
> +    rman_res_t start, rman_res_t end)
> +{
> +#ifdef INVARIANTS
> +	struct pci_devinfo *dinfo = device_get_ivars(child);
> +#endif
> +
> +	KASSERT(rman_get_type(r) == SYS_RES_MEMORY,
> +	    ("%s: invalid resource %p", __func__, r));
> +	KASSERT(rman_is_region_manager(r, &dinfo->cfg.iov->rman),
> +	    ("%s: rman %p doesn't match for resource %p", __func__,
> +	    &dinfo->cfg.iov->rman, r));
> +
> +	return (rman_adjust_resource(r, start, end));
> +}
> +
> +static struct resource *
> +pci_vf_find_parent_resource(struct pcicfg_iov *iov, struct resource *r)
> +{
> +	struct resource *pres;
> +
> +	for (u_int i = 0; i <= PCIR_MAX_BAR_0; i++) {
> +		pres = iov->iov_bar[i].res;
> +		if (pres != NULL) {
> +			if (rman_get_start(pres) <= rman_get_start(r) &&
> +			    rman_get_end(pres) >= rman_get_end(r))
> +				return (pres);
> +		}
> +	}
> +	return (NULL);
> +}
> +
> +int
> +pci_vf_map_mem_resource(device_t dev, device_t child, struct resource *r,
> +    struct resource_map_request *argsp, struct resource_map *map)
> +{
> +	struct pci_devinfo *dinfo = device_get_ivars(child);
> +	struct pcicfg_iov *iov = dinfo->cfg.iov;
> +	struct resource_map_request args;
> +	struct resource *pres;
> +	rman_res_t length, start;
> +	int error;
> +
> +	KASSERT(rman_get_type(r) == SYS_RES_MEMORY,
> +	    ("%s: invalid resource %p", __func__, r));
> +	KASSERT(rman_is_region_manager(r, &iov->rman),
> +	    ("%s: rman %p doesn't match for resource %p", __func__,
> +	    &dinfo->cfg.iov->rman, r));
> +
> +	/* Resources must be active to be mapped. */
> +	if (!(rman_get_flags(r) & RF_ACTIVE))
> +		return (ENXIO);
> +
> +	resource_init_map_request(&args);
> +	error = resource_validate_map_request(r, argsp, &args, &start, &length)
> ;
> +	if (error)
> +		return (error);
> +
> +	pres = pci_vf_find_parent_resource(dinfo->cfg.iov, r);
> +	if (pres == NULL)
> +		return (ENOENT);
> +
> +	args.offset = start - rman_get_start(pres);
> +	args.length = length;
> +	return (bus_map_resource(iov->iov_pf, pres, &args, map));
> +}
> +
> +int
> +pci_vf_unmap_mem_resource(device_t dev, device_t child, struct resource *r,
> +    struct resource_map *map)
> +{
> +	struct pci_devinfo *dinfo = device_get_ivars(child);
> +	struct pcicfg_iov *iov = dinfo->cfg.iov;
> +	struct resource *pres;
> +
> +	KASSERT(rman_get_type(r) == SYS_RES_MEMORY,
> +	    ("%s: invalid resource %p", __func__, r));
> +	KASSERT(rman_is_region_manager(r, &iov->rman),
> +	    ("%s: rman %p doesn't match for resource %p", __func__,
> +	    &dinfo->cfg.iov->rman, r));
> +
> +	pres = pci_vf_find_parent_resource(iov, r);
> +	if (pres == NULL)
> +		return (ENOENT);
> +	return (bus_unmap_resource(iov->iov_pf, pres, map));
> +}
> diff --git a/sys/dev/pci/pci_private.h b/sys/dev/pci/pci_private.h
> index f97a4df5471b..6dc7e3c505d1 100644
> --- a/sys/dev/pci/pci_private.h
> +++ b/sys/dev/pci/pci_private.h
> @@ -65,9 +65,16 @@ bus_get_dma_tag_t	pci_get_dma_tag;
>  bus_get_resource_list_t	pci_get_resource_list;
>  bus_delete_resource_t	pci_delete_resource;
>  bus_alloc_resource_t	pci_alloc_resource;
> +#ifdef PCI_IOV
> +bus_adjust_resource_t	pci_adjust_resource;
> +#endif
>  bus_release_resource_t	pci_release_resource;
>  bus_activate_resource_t	pci_activate_resource;
>  bus_deactivate_resource_t pci_deactivate_resource;
> +#ifdef PCI_IOV
> +bus_map_resource_t	pci_map_resource;
> +bus_unmap_resource_t	pci_unmap_resource;
> +#endif
>  bus_child_deleted_t	pci_child_deleted;
>  bus_child_detached_t	pci_child_detached;
>  bus_child_pnpinfo_t	pci_child_pnpinfo_method;
> @@ -158,4 +165,16 @@ struct resource *pci_vf_alloc_mem_resource(device_t dev,
>  device_t child,
>  		    rman_res_t count, u_int flags);
>  int		pci_vf_release_mem_resource(device_t dev, device_t child,
>  		    struct resource *r);
> +int		pci_vf_activate_mem_resource(device_t dev, device_t child,
> +		    struct resource *r);
> +int		pci_vf_deactivate_mem_resource(device_t dev, device_t child,
> +		    struct resource *r);
> +int		pci_vf_adjust_mem_resource(device_t dev, device_t child,
> +		    struct resource *r, rman_res_t start, rman_res_t end);
> +int		pci_vf_map_mem_resource(device_t dev, device_t child,
> +		    struct resource *r, struct resource_map_request *argsp,
> +		    struct resource_map *map);
> +int		pci_vf_unmap_mem_resource(device_t dev, device_t child,
> +		    struct resource *r, struct resource_map *map);
> +
>  #endif /* _PCI_PRIVATE_H_ */
>

This patch causes the following boot panic during ata(4) initialization. Reverting it avoids the regression.

1  FreeBSD
2  FreeBSD
3  FreeBSD
5  Drive 1

F6 PXE
Boot:  1 
/boot/config: 1:ad(1,a)/boot/loader -Dh

FreeBSD/x86 boot
Default: 1:ad(1,a)/boot/loader
boot: 
BIOS drive A: is fd0
BIOS drive C: is disk0
BIOS drive D: is disk1
BIOS drive E: is disk2
BIOS drive F: is disk3
BIOS 636kB/3143552kB available memory

FreeBSD/x86 bootstrap loader, Revision 1.1
(Thu May  2 14:28:53 PDT 2024 root@cwsys)
Loading /boot/defaults/loader.conf
Loading /boot/defaults/loader.conf
Loading /boot/device.hints
Loading /boot/loader.conf
\Loading /boot/loader.conf.local
|c/Loading kernel...
-\/boot/kernel/kernel text=0xf2ca8 |text=0x7af938 /-\|text=0x12386c data=0x180+0xe80 data=0x10a780+0x2f5880 /0x8+0x111150+0x8+0x13bfe2-
Loading configured modules...
\|/boot/kernel/if_sk.ko size 0xf8d8 at 0x144e000
/etc/hostid /size=0x25
/boot/kernel/dtraceall.ko size 0x35e0 at 0x145e000
loading required module 'profile'
-/boot/kernel/profile.ko size 0x4258 at 0x1462000
loading required module 'opensolaris'
\/boot/kernel/opensolaris.ko size 0x1e2a8 at 0x1467000
loading required module 'dtrace'
|/boot/kernel/dtrace.ko /size 0x5df08 at 0x1486000
loading required module 'systrace_freebsd32'
-/boot/kernel/systrace_freebsd32.ko size 0x19418 at 0x14e4000
loading required module 'systrace'
\/boot/kernel/systrace.ko size 0x19430 at 0x14fe000
loading required module 'sdt'
|/boot/kernel/sdt.ko size 0x3e68 at 0x1518000
loading required module 'kinst'
//boot/kernel/kinst.ko size 0x8538 at 0x151c000
loading required module 'fasttrap'
/boot/kernel/fasttrap.ko -size 0x5fdc8 at 0x1525000
loading required module 'fbt'
\/boot/kernel/fbt.ko size 0x5da0 at 0x1585000
loading required module 'dtnfscl'
/boot/kernel/dtnfscl.ko size 0x62a0 at 0x158b000
loading required module 'dtmalloc'
|/boot/kernel/dtmalloc.ko size 0x3518 at 0x1592000
//boot/kernel/kbdmux.ko size 0xb068 at 0x1596000
-/boot/kernel/sem.ko size 0x7868 at 0x15a2000
\/boot/kernel/if_nfe.ko size 0x10a60 at 0x15aa000
|/-\|/-\|/-\|/-\|/-\|can't find 'random'
//boot/kernel/amdtemp.ko size 0x7448 at 0x15bb000
loading required module 'amdsmn'
-/boot/kernel/amdsmn.ko size 0x3788 at 0x15c3000
\/boot/kernel/if_lagg.ko size 0x165b8 at 0x15c7000
loading required module 'if_infiniband'
|/boot/kernel/if_infiniband.ko size 0x3588 at 0x15de000
//boot/kernel/aibs.ko size 0x4178 at 0x15e2000
/boot/entropy size=0x1000
-/boot/kernel/geom_mirror.ko size 0x21338 at 0x15e8000
\/boot/kernel/zfs.ko |/size 0x5ea588 at 0x160a000
-/boot/kernel/cpufreq.ko \size 0x12f70 at 0x1bf5000

Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [/boot/kernel/kernel] in 10 seconds... Booting [/boot/kernel/kernel] in 9 seconds... Booting [/boot/kernel/kernel] in 8 seconds... Booting [/boot/kernel/kernel] in 7 seconds... Booting [/boot/kernel/kernel] in 6 seconds... Booting [/boot/kernel/kernel] in 5 seconds... Booting [/boot/kernel/kernel] in 4 seconds... Booting [/boot/kernel/kernel] in 3 seconds... Booting [/boot/kernel/kernel] in 2 seconds... Booting [/boot/kernel/kernel] in 1 second... Booting [/boot/kernel/kernel]...               
GDB: no debug ports present
KDB: debugger backends: ddb
KDB: current backend: ddb
---<<BOOT>>---
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 #112 komquats-n270594-871b33ad65ba: Tue Jun  4 18:09:04 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 Phenom(tm) II X4 945 Processor (3014.08-MHz K8-class CPU)
  Origin="AuthenticAMD"  Id=0x100f43  Family=0x10  Model=0x4  Stepping=3
  Features=0x178bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,MMX,FXSR,SSE,SSE2,HTT>
  Features2=0x802009<SSE3,MON,CX16,POPCNT>
  AMD Features=0xee500800<SYSCALL,NX,MMX+,FFXSR,Page1GB,RDTSCP,LM,3DNow!+,3DNow!>
  AMD Features2=0x37ff<LAHF,CMP,SVM,ExtAPIC,CR8,ABM,SSE4A,MAS,Prefetch,OSVW,IBS,SKINIT,WDT>
  SVM: NP,NRIP,NAsids=64
  TSC: P-state invariant
real memory  = 8589934592 (8192 MB)
avail memory = 8266919936 (7883 MB)
Event timer "LAPIC" quality 100
ACPI APIC Table: <Nvidia ASUSACPI>
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): 32/64X length mismatch in FADT/Gpe1Block: 128/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
ioapic0 <Version 1.1> irqs 0-23
Launching APs: 3 2 1
random: entropy device external interface
kbd1 at kbdmux0
vtvga0: <VT VGA driver>
aesni0: No AES or SHA support.
acpi0: <Nvidia ASUSACPI>
ACPI Error: AE_NOT_FOUND, While resolving a named reference package element - \_PR_.CPU0 (20230628/dspkginit-605)
acpi0: Power Button (fixed)
cpu0: <ACPI CPU> on acpi0
attimer0: <AT timer> port 0x40-0x43 on acpi0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
hpet0: <High Precision Event Timer> iomem 0xfefff000-0xfefff3ff irq 0,8 on acpi0
Timecounter "HPET" frequency 25000000 Hz quality 950
atrtc0: <AT realtime clock> port 0x70-0x73 on acpi0
atrtc0: registered as a time-of-day clock, resolution 1.000000s
Event timer "RTC" frequency 32768 Hz quality 0
Timecounter "ACPI-fast" frequency 3579545 Hz quality 900
acpi_timer0: <24-bit timer at 3.579545MHz> port 0x1008-0x100b on acpi0
acpi_button0: <Power Button> on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
pci0: <memory, RAM> at device 0.0 (no driver attached)
isab0: <PCI-ISA bridge> at device 1.0 on pci0
isa0: <ISA bus> on isab0
ohci0: <nVidia nForce MCP55 USB Controller> mem 0xfe02f000-0xfe02ffff irq 21 at device 2.0 on pci0
usbus0 on ohci0
usbus0: 12Mbps Full Speed USB v1.0
ehci0: <NVIDIA nForce MCP55 USB 2.0 controller> mem 0xfe02e000-0xfe02e0ff irq 22 at device 2.1 on pci0
usbus1: EHCI version 1.0
usbus1 on ehci0
usbus1: 480Mbps High Speed USB v2.0
atapci0: <nVidia nForce MCP55 UDMA133 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xfc00-0xfc0f at device 4.0 on pci0
ata0: <ATA channel> at channel 0 on atapci0


Fatal trap 12: page fault while in kernel mode
cpuid = 2; apic id = 02
fault virtual address	= 0x54
fault code		= supervisor read data, page not present
instruction pointer	= 0x20:0xffffffff804a76e2
stack pointer	        = 0x28:0xffffffff81f0b6d0
frame pointer	        = 0x28:0xffffffff81f0b700
code segment		= base 0x0, limit 0xfffff, type 0x1b
			= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags	= interrupt enabled, resume, IOPL = 0
current process		= 0 (swapper)
rdi: fffff80004bf9000 rsi: fffff80004bf9000 rdx: fffff80004c2de00
rcx: fffff80004a99000  r8: fffff80004c2c020  r9: fffffe000ec57540
rax: 0000000000000000 rbx: fffff80004bf9000 rbp: ffffffff81f0b700
r10: fffff80004bc2000 r11: ffffffff81f0b9fc r12: 0000000000000001
r13: 0000000000000000 r14: fffff80004bf8600 r15: fffff80004c2de00
trap number		= 12
panic: page fault
cpuid = 2
time = 1
KDB: stack backtrace:
db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xffffffff81f0b3c0
vpanic() at vpanic+0x13f/frame 0xffffffff81f0b4f0
panic() at panic+0x43/frame 0xffffffff81f0b550
trap_fatal() at trap_fatal+0x40b/frame 0xffffffff81f0b5b0
trap_pfault() at trap_pfault+0x46/frame 0xffffffff81f0b600
calltrap() at calltrap+0x8/frame 0xffffffff81f0b600
--- trap 0xc, rip = 0xffffffff804a76e2, rsp = 0xffffffff81f0b6d0, rbp = 0xffffffff81f0b700 ---
pci_activate_resource() at pci_activate_resource+0x22/frame 0xffffffff81f0b700
bus_generic_rman_alloc_resource() at bus_generic_rman_alloc_resource+0xee/frame 0xffffffff81f0b740
nexus_alloc_resource() at nexus_alloc_resource+0x99/frame 0xffffffff81f0b7a0
acpi_alloc_resource() at acpi_alloc_resource+0x84/frame 0xffffffff81f0b860
acpi_pcib_acpi_alloc_resource() at acpi_pcib_acpi_alloc_resource+0x9d/frame 0xffffffff81f0b8d0
ata_pci_alloc_resource() at ata_pci_alloc_resource+0x2bd/frame 0xffffffff81f0b950
bus_alloc_resource() at bus_alloc_resource+0x98/frame 0xffffffff81f0b9b0
ata_attach() at ata_attach+0x322/frame 0xffffffff81f0ba80
device_attach() at device_attach+0x3ac/frame 0xffffffff81f0bad0
bus_generic_attach() at bus_generic_attach+0x4b/frame 0xffffffff81f0bb00
ata_pci_attach() at ata_pci_attach+0x2fd/frame 0xffffffff81f0bb30
device_attach() at device_attach+0x3ac/frame 0xffffffff81f0bb80
bus_generic_attach() at bus_generic_attach+0x4b/frame 0xffffffff81f0bbb0
pci_attach() at pci_attach+0xc7/frame 0xffffffff81f0bbe0
acpi_pci_attach() at acpi_pci_attach+0x15/frame 0xffffffff81f0bc20
device_attach() at device_attach+0x3ac/frame 0xffffffff81f0bc70
bus_generic_attach() at bus_generic_attach+0x4b/frame 0xffffffff81f0bca0
acpi_pcib_acpi_attach() at acpi_pcib_acpi_attach+0x424/frame 0xffffffff81f0bd00
device_attach() at device_attach+0x3ac/frame 0xffffffff81f0bd50
bus_generic_attach() at bus_generic_attach+0x4b/frame 0xffffffff81f0bd80
acpi_probe_children() at acpi_probe_children+0x6f/frame 0xffffffff81f0bde0
acpi_attach() at acpi_attach+0x982/frame 0xffffffff81f0be70
device_attach() at device_attach+0x3ac/frame 0xffffffff81f0bec0
bus_generic_attach() at bus_generic_attach+0x4b/frame 0xffffffff81f0bef0
device_attach() at device_attach+0x3ac/frame 0xffffffff81f0bf40
bus_generic_new_pass() at bus_generic_new_pass+0x127/frame 0xffffffff81f0bf70
root_bus_configure() at root_bus_configure+0x26/frame 0xffffffff81f0bf90
configure() at configure+0x9/frame 0xffffffff81f0bfa0
mi_startup() at mi_startup+0x1c8/frame 0xffffffff81f0bff0
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.
acpi0: reset failed - timeout
Rebooting...
cpu_reset: Restarting BSP
cpu_reset_proxy: Stopped CPU 2



-- 
Cheers,
Cy Schubert <Cy.Schubert@cschubert.com>
FreeBSD UNIX:  <cy@FreeBSD.org>   Web:  https://FreeBSD.org
NTP:           <cy@nwtime.org>    Web:  https://nwtime.org

			e^(i*pi)+1=0