Commit Graph

304717 Commits

Author SHA1 Message Date
Marco Devesas Campos 70e73c43a4 vchiq: add compat_freebsd32 ioctls and respective datatypes
Submitted by: Marco Devesas Campos <devesas.campos@gmail.com>
Differential Revision:	https://reviews.freebsd.org/D37879
2025-11-14 19:27:51 -08:00
Marco Devesas Campos aa6b871ea7 arm64: Add support to vchiq and bcm2835_audio (plus some fixes)
Add 64 bit support to vchiq:

 * update fields to the appropriate fixed bit-size variants (everywhere [cf. e.g., ref:sizes and ref:sizes2])
 * refer to event semaphores (that go into the very 32 bit VC) by offset instead of pointers [ref:sems]
 * dsb() is dsb(sy) in arm64 (vchiq_{core.c,core.h,kmod.c}) [ref:dsb]
 * comment out some unneeded code in parse_rx_slots around VCHIQ_MSG_BULK_RX (cf. [ref:deadcode])
 * adapt remote_event_signal to arm64 caching behaviours (vchiq_kmod.c)
 * refactor synchronization around remote_event_signal, forcing a wmb to be on the safe side; thereby make it look more like what linux does [ref:sync] (vchiq_{core,kmod}.c); and make a comment in vchiq_core.c true (wasn't before)
 * add a few more syncs to be on the safe side (vchiq_2835_arm.c)
 * use arm64 dcache invalidation mechanisms (vchiq_2835_arm.c)
 * explicitly invalidate pages on arm64 post bulk-read (vchiq_2835_arm.c)
 * support bulk transfers on rpi-4 (aka "long address space" transfers), by hard-coding their vc offset (0) and different bit-shift [ref:longbulk] (vchiq_2835_arm.c)
 * refactor a loop-of-constant-test (vchiq_2835_arm.c)
 * use the correct (hard-coded) cache-line size on arm64
 * rework the handling of chipset "features" to account for the extra behaviours with 64 bit chipsets. (vchiq_kmod.c)
 * add sysctl-s (log, arm_log) to control debug (vchiq_kmod.c)
 * add example kernel config (GENERIC-VCHIQ)

Fixes:

 * Rework error handling in create_pagelist, avoiding a potential panic when
   freeing memory that had been dmamem_alloc, a potential null dereference,
   and a leak when having problems pinning pages (vchiq_2835_arm.c)
 * fix a confusion about the behaviour cv_wait_sig that lead to
   uninterruptible looping (vchiq_bsd.c)
 * implement detection of fatal signals (vchiq_bsd.c)
 * fix a confusion with the name of a variable introduced by #a0b8746
   that could lead to a panic when closing the cdev file (vchiq_arm.c)
 * release user connection when destructing cdevpriv and avoid user processes
   sharing connection data, which lead to stalls and data corruption. (vchiq_arm.c)

Update bcm2835_audio to work on 64bit systems:

 * update VC audio fields (vc_vchi_audioserv_defs.h, bcm2835_audio.c)
 * repurpose the hitherto unused callback field to help push a 64 bit pointer in (bcm2835_audio.c)
 * increase (hopefully) the robustness of the code that shifts data to VC (bcm2835_audio.c)
 * add a sysctl to control the amount of debugging info output by bcm2835_audio.c

Tested on zero, zero2 and 4+ with ping, functional, bulk and control vchiq_test-s, and omxplayer

  [ref:dsb]: https://github.com/raspberrypi/linux/commit/35b7ebda57affcfd3616d39d5a727a4495b31123
  [ref:sems]: https://github.com/raspberrypi/linux/commit/24a4262afb10907fce3cdbc3ae336fcf4cdaece5
  [ref:sizes]: https://github.com/raspberrypi/linux/commit/e64568b8ea6c04e747e432c17ce2452652075216
  [ref:sizes2]: https://github.com/raspberrypi/linux/commit/f9bee6dd24addfa00c2c8d50c25b73efbfbb28ba
  [ref:deadcode]: https://github.com/raspberrypi/linux/commit/14f4d72fb799a9b3170a45ab80d4a3ddad541960
  [ref:sync]: https://github.com/raspberrypi/linux/commit/51c071265079319583e4c6e8c61e09660300d0bf
  [ref:longbulk]: https://github.com/raspberrypi/linux/commit/37f6f19a83722c9b866cecb5e455b2e16e5bbc6b

Differential Revision:	https://reviews.freebsd.org/D37878
Submitted by: Marco Devesas Campos <devesas.campos@gmail.com>
2025-11-14 19:27:46 -08:00
Dag-Erling Smørgrav b1039bbe18 NOTES: Add iwm and iwx
Reviewed by:	imp, jhb
Differential Revision:	https://reviews.freebsd.org/D53759
2025-11-15 04:18:51 +01:00
Dag-Erling Smørgrav a615ded5bf sys/conf/files: Add iwx driver
PR:		290812
Fixes:		2ad0f7e915 ("Import iwx as ported from OpenBSD by Future Crew.")
Reviewed by:	emaste
Differential Revision:	https://reviews.freebsd.org/D53758
2025-11-15 04:18:45 +01:00
Dag-Erling Smørgrav f3cf4c0af5 Use install instead of cp to copy bootstrap tools
We need to preserve modification times on bootstrap tools, but `cp -p`
also tries to preserve flags, which fails if OBJROOT is on NFS.  A -N
option was added to cp for this purpose, but trying to use that would
break cross-building on hosts that don't have that option.  The best
remaining option is `install -p`, which we already assume is present.

PR:		275030
Reviewed by:	imp, emaste
Differential Revision:	https://reviews.freebsd.org/D53751
2025-11-15 04:18:35 +01:00
Mark Johnston 51931e1f0f Revert "vnode: Rework vput() to avoid holding the vnode lock after decrementing"
The change can introduce a deadlock if we release the vnode lock in
order to release a reference, and then end up releasing the final
reference after all, requiring a relock of the vnode.  This relock may
violate the usual parent->child vnode lock order.

This reverts commit 99cb3dca47.

Reported by:	jhb
2025-11-15 02:30:34 +00:00
Kyle Evans c490bc73eb tpm: fix the conditional for the arm64 build
The intention was clearly that these ACPI bits would be included for
arm64, but MACHINE_ARCH there is aarch64 -- correct the minor typo to
build everything that should be there.

Fixes:	c2e9c5bbf0 ("tpm: Refactor TIS and add a SPI attachment")
2025-11-14 20:22:15 -06:00
Kyle Evans cca34aa1d0 tpm: crb: factor out idle/ready state transitions
Some TPM implementations have a different start method that requires
an additional notification for some state changes; for instance, the
"Pluton" start method.  Just factor these transitions out for now, and
the coming commits will introduce points that the start method can hook
in at.

Reviewed by:	obrien
Differential Revision:	https://reviews.freebsd.org/D53682
2025-11-14 20:22:10 -06:00
Ed Maste e96359d111 boot.config.5: Clarify that this controls legacy boot blocks
Reviewed by;	ziaee
Sponsored by:	The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D52460
2025-11-14 16:38:38 -05:00
Ed Maste 73a4459f6f GitHub: Enclose list of commit hashes in parens
Rather than superscript <sup>, for a nicer looking list.

Reviewed by:	vexeduxr
Sponsored by:	The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D53000
2025-11-14 16:36:22 -05:00
Gleb Smirnoff 82d8a5029a unix/stream: fix instant panic w/o INVARIANTS
A stupid microoptimization I made leaving empty STAILQ inconsistent
is a brainfart that is related to much earlier version of this code,
where it was safe to do so.

Pointy hat to:	glebius
Fixes:		69f61cee2e
2025-11-14 08:01:47 -08:00
Alexander Ziaee b0c1ead2b9 iwx.4: Fix SYNOPSIS
PR:		290812
MFC after:	3 days
Fixes:		27c41b28b1 (iwx.4: Initial manual page)
Reported by:	Dimitry Lukhtionov <dimitryluhtionov@gmail.com>
2025-11-14 10:06:04 -05:00
Alexander Ziaee 6fb0d67819 loader.8: Document module commands
Begin documenting module loader commands in loader(8), where the reader
would look for them. Segregate them by their availability in individual
loader implementations, like build(7) targets.
These details were graciously donated by kevans.

MFC after:		3 days
Reviewed by:		kevans
Co-authored-by:		Kyle Evans <kevans@freebsd.org>
Differential Revision:	https://reviews.freebsd.org/D50727
2025-11-14 10:00:16 -05:00
Alexander Ziaee 09ffaa4e07 loader manuals: Clarify console and boot_serial
console=comconsole is for the loader and boot_serial is for the kernel.

I think we should centralize documentation on the loader settings in one
manual, such a loader.8. The current proliferation is not obvious where
to find the documentation. To the user, these are all set in loader.conf
or at the loader prompt.

MFC after:		3 days
Differential Revision:	https://reviews.freebsd.org/D53695
2025-11-14 09:45:14 -05:00
Alexander Ziaee 42d9ae4945 freebsd-tips: Add a shell function for laptops
MFC after:		3 days
Reviewed by:		pauamma_gundo.com
Differential Revision:	https://reviews.freebsd.org/D53748
2025-11-14 09:40:53 -05:00
Kyle Evans 6a9452c837 lam: fix using stdin more than once
Historically, lam(1) closes stdin once we've hit EOF the first time,
which would stop it from doing anything else on subsequent gatherline()
calls with another openfile.  However, this doesn't seem to be strictly
necessary- the EOF flag on FILEs is quite sticky, so we can assume that
a subsequent fgetc(stdin) will flag EOF properly.

This 'fixes' the below-referenced commit in the sense that it surfaced
this problem as a fatal error, but the issue was pre-existing.  If we
do `lam - -`, then one gatherline() will fclose(stdin) and set `ip->eof`
for *that* openfile, while the next one will then observe that
STDIN_FILENO has been closed and turn it into an EBADF.

Add a few tests that were easy to snipe while I'm here, but I haven't
aimed for anything close to exhaustive because I think re@ would prefer
this fix go in sooner rather than later to land in 15.0.

Minor style adjustment for the previous commit while we're here.

Reported by:	cperciva
Discussed with:	jrtc27
Reviewed by:	des, jlduran
Fixes:	4472fd66d0 ("lam: fail on I/O errors")
MFC after:	3 days (tentative)
Sponsored by:	Klara, Inc.
Differential Revision:	https://reviews.freebsd.org/D53750
2025-11-14 08:36:28 -06:00
Konstantin Belousov 0eca7fa1c9 exterror.9 man page
With help from:	mckusick
Reviewed by:	emaste, pauamma_gundo.com
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D53589
2025-11-14 16:33:54 +02:00
Mark Johnston 1563da200d queue.3: Add MLINKs for *_EMPTY_ATOMIC
MFC after:	1 week
Fixes:		d2870b8666 ("queue: Add atomic variants for *_EMPTY")
2025-11-14 14:31:16 +00:00
Dag-Erling Smørgrav 2f3adab9d5 quot: Improve manual page
* Rewrite the first paragraph to clarify that quot(8) only supports FFS.

* Document which options can or cannot be combined with each other.

MFC after:	1 week
Reviewed by:	ziaee
Differential Revision:	https://reviews.freebsd.org/D53727
2025-11-14 15:29:05 +01:00
Dag-Erling Smørgrav fa272a5276 quot: Rewrite -n mode input parser
The existing parser was needlessly complicated and wildly inconsistent
in how it handled invalid input.  Rewrite using getline() and treat
invalid input consistently: silently ignore lines that don't begin with
a number, and print a warning if the inode number is out of range.

PR:		290992
MFC after:	1 week
Reviewed by:	obrien
Differential Revision:	https://reviews.freebsd.org/D53726
2025-11-14 15:29:05 +01:00
Navdeep Parhar b0cfa27c91 cxgbe(4): Avoid racy access to requested_fec in sysctl_requested_fec
PR:		289121
Reported by:	Qiu-ji Chen
MFC after:	1 week
Sponsored by:	Chelsio Communications
Differential Revision:	https://reviews.freebsd.org/D52199
2025-11-13 23:45:59 -08:00
Navdeep Parhar 4d2d65cad4 Fix typo in recently added 400G media
Reported by:	glebius
Fixes:	2d608a4ceb if_media.h: Add 400GBase-SR8 and 400GBase-CR8
MFC after:	1 week
Sponsored by:	Chelsio Communications
2025-11-13 22:10:35 -08:00
Maxim Konovalov 8cd9c39195 hgame.4: typo 2025-11-14 04:13:27 +00:00
Gleb Smirnoff 69f61cee2e unix/stream: fix a race with MSG_PEEK on SOCK_SEQPACKET with MSG_EOR
The pr_soreceive method first scans the buffer holding the both I/O sx(9)
and socket buffer mutex(9) and after figuring out how much needs to be
copied out drops the mutex.  Since the other side may only append to the
buffer, it is safe to continue the operation holding the sx(9) only.
However, the code had a bug that it used pointer in the very last mbuf as
marker of the place where to stop.  This worked both in a case when we
drain a buffer completely (marker points at NULL) and in a case when we
wanted to stop at MSG_EOR (marker points at next mbuf after MSG_EOR).
However, this pointer is not consistent after we dropped the socket buffer
mutex.

Rewrite the logic to use the data length as bounds for the copyout cycle.

Provide a test case that reproduces the race.  Note that the race is very
hard to hit, thus test will pass on unmodified kernel as well.  In a
virtual machine I needed to add tsleep(9) for 10 nanoseconds into the
middle of function to be able to reproduce.

PR:			290658
Reviewed by:		markj
Differential Revision:	https://reviews.freebsd.org/D53632
Fixes:			d157927807
2025-11-13 18:39:48 -08:00
Adrian Chadd 00b4d712e2 iwx: clean up TX AMPDU session establishment and checking
* Send a TX A-MPDU exchange successfully; we were allocating the
  A-MPDU TX queue but returning 0 to net80211 was telling it
  to not establish the TX A-MPDU session and none of the BA session
  tracking stuff would work.

* Clean up the TX A-MPDU queue lookup in the transmit path - only
  QoS data frames are allowed, not qos null-data, cf/ack/etc frames;
  only send them if the A-MPDU session is established.

* Tell net80211 that we've established the TX A-MPDU session once
  the firmware queue has been created.

* Check to make sure we're not double (or more) creating TX AMDPU
  sessions - only allocate a qid if we're not doing A-MPDU yet.

* Delete IWX_FLAG_A-MPDUTX - it's now being properly tracked!

Locally tested:

* AX210, STA mode - gets 50/50mbit on 2GHz HT20, and 100/100mbit on
  5GHz VHT/40.

Differential Revision:	https://reviews.freebsd.org/D53725
Reviewed by:	thj
2025-11-13 18:37:16 -08:00
Adrian Chadd b4c35d4622 iwx: fix and clean up suspend/resume path
I noticed a couple of things were happening:

* during suspend, I'd get a timeout in the NIC lock path (which
  sets a bit on the NIC to say that the host wants to talk to it);
* resume wouldn't come back - scan commands would fail, and you'd have
  to reinit the NIC again for it to work.

The thing is:

* the suspend path should already shut down the NIC by shutting down all
  the VAPs (and the last VAP should call ic_parent to bring it down), and
* the resume path should already bring up the NIC by bringing up each VAP,
  and the first VAP to be brought up calls ic_parent to bring it up.

So instead, I've shuffled around the code to just double check the
hardware state is consistent /before/ ieee80211_suspend_all() and
ieee80211_resume_all() is called.

This both fixes the errant hardware timeout during suspend, and it
fixes resume to work.

Locally tested:

* AX210, STA mode, both hardware ACPI suspend/resume and devctl suspend
  and devctl resume

Differential Revision:	https://reviews.freebsd.org/D53721
Reviewed by:	thj
2025-11-13 18:36:25 -08:00
Adrian Chadd 7d88ac0eb2 iwx: clean up debugging around key add/set; comments on delete
* Add IWN_DEBUG_KEYMGMT as a debug flag
* Convert DPRINTF(()) in key add/set to IWN_DPRINTF()
* printf() -> net80211_vap_printf()
* add braces around return value

Differential Revision:	https://reviews.freebsd.org/D53703
Reviewed by:	thj
2025-11-13 18:28:47 -08:00
Adrian Chadd 5431dafdb9 mtw: convert to new net80211 crypto key API
* constify mtw_write_region_1()'s data field
* convert to use ieee80211_crypto_get_*()
* .. note that rx/tx mic data routines are explicitly being called,
  as this NIC is doing TKIP + MIC offload

Differential Revision:	https://reviews.freebsd.org/D53704
Reviewed by:	bz
2025-11-13 18:25:34 -08:00
Adrian Chadd 333eb58dee rtwn: migrate to new ieee80211 key data accessors
Migrate to the ieee80211_crypto_key_*() routines.
Should be no functional change.

Locally tested:

* RTL8821AU, STA mode

Differential Revision:	https://reviews.freebsd.org/D52712
2025-11-13 18:25:25 -08:00
Robert Clausecker f0af218243 aio: fix alignment of struct (o)aiocb32 on non-amd64
Only i386 has a four-byte alignment for uint64_t, others have
eight-byte alignment.  This causes the structure to mismatch
on armv7 binaries running under aarch64, breaking the aio interface.

Fixes:		3858a1f4f5
Approved by:	markj (mentor)
Reported by:	Mark Millard <marklmi26-fbsd@yahoo.com>
Discussed with:	jrtc27
PR:		290962
MFC after:	immediately (for 15.0)
2025-11-14 01:56:12 +01:00
Mark Johnston ce5692bf00 unix: Remove an always-false null pointer check
No functional change intended.

MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D53453
2025-11-14 00:43:38 +00:00
Mark Johnston 9d9fa9a2c2 unix: Fix handling of listening sockets during garbage collection
socantrcvmore() and unp_dispose() assume that the socket's socket
buffers are initialized, which isn't the case for listening sockets.

Reported by:	syzbot+a62883292a5c257703be@syzkaller.appspotmail.com
MFC after:	1 week
Reviewed by:	glebius
Differential Revision:	https://reviews.freebsd.org/D53743
2025-11-14 00:43:38 +00:00
Alexander Ziaee 477799750a jail.8: Add creating a jail from package base
MFC after:		immediately for inclusion in 15.0R
Reported by:		ivy
Differential Revision:	https://reviews.freebsd.org/D53745
2025-11-13 18:58:00 -05:00
Alexander Ziaee c0c8d812b5 hgame.4: Polish
Explain driver loading and application access in the body of the manual.
Crossreference other game controller driver manuals, and devfs.rules to
hint about how to configure application access. Add a common dongle to
supported hardware. Add evdev a few places to make it really clear how
it works.

MFC after:		immediately for inclusion in 15.0R
Reviewed by:		wulf
Differential Revision:	https://reviews.freebsd.org/D53290
2025-11-13 18:57:59 -05:00
Navdeep Parhar b676b5e5e0 cxgbe(4): Skip non-existent blocks in the interrupt handler
Fixes:	7b80c8b7d8 cxgbe(4): Expanded interrupt handling for T7
MFC after:	1 week
Sponsored by:	Chelsio Communications
2025-11-13 14:49:16 -08:00
Andrew Gallatin c56a266434 mlx5: Fix compilation error when not building with KERN_TLS
Reported by: np
Fixes: 9349214a28 mlx5: Preallocate ktls tags asynchronously
Sponsored by: Netflix
2025-11-13 16:57:10 -05:00
David E. O'Brien 3a572775bf drm2: update gone_in to 16 from 13 2025-11-13 12:37:19 -08:00
Navdeep Parhar 7b80c8b7d8 cxgbe(4): Expanded interrupt handling for T7
- Catch up with the new cause/perr registers.  The high level approach
  is the same but the T7 has an extra top level INT_CAUSE concentrator
  and a PERR_CAUSE concentrator with a changed layout.

- Add various flags to control the interrupt handlers' behavior.

- Implement a t4_intr_clear that internally use the slow handler as an
  iterator over known cause/perr registers.  This lets the driver clear
  all of the interrupt sources that it knows about.  The firmware sets
  up the interrupt enables and clears the causes normally so this call
  should be redundant.

MFC after:	1 week
Sponsored by:	Chelsio Communications
2025-11-13 11:11:58 -08:00
Hesham Almatary 587490dabc arm64: Fix calculating kernel size for preload metadata
Cast &end to vm_offset_t before subtracting VM_MIN_KERNEL_ADDRESS to
ensure the resulting size is correct for PRELOAD_PUSH_VALUE.
Previously the correct size was effectively divided by sizeof(void *).

Reviewed by:	andrew
Obtained from:	CheriBSD
Differential Revision:	https://reviews.freebsd.org/D53699
2025-11-13 09:57:54 -05:00
Christos Margiolis b19e61f223 sound: Retire SND_DIAGNOSTIC PCM locking macros
Disabled by default, but also redundant, since most of the errors they
catch will be caught anyway by WITNESS and the locking subsystem.

Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Reviewed by:	kib
Differential Revision:	https://reviews.freebsd.org/D53735
2025-11-13 15:35:58 +01:00
Christos Margiolis fa7bc98307 sound: Do not use double pointer in dsp_io_ops()
No reason to do so.

Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Reviewed by:	kib
Differential Revision:	https://reviews.freebsd.org/D53734
2025-11-13 15:35:53 +01:00
Christos Margiolis 6b5431941c sound: Remove unnecessary uio checks in dsp_io_ops()
uiomove_faultflag() takes care of that already.

Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Reviewed by:	kib
Differential Revision:	https://reviews.freebsd.org/D53733
2025-11-13 15:35:48 +01:00
Mark Johnston a1b9b97d96 arm64/spe: Fix the GENERIC-NODEBUG build
Fixes:	68f185ccc9 ("arm64: Add Arm SPE support")
2025-11-13 13:54:53 +00:00
Christos Margiolis 1fe7bfd6c7 sound: Retire OLDPCM_IOCTL
It is defined by default, and there is no reason to have a switch for
it. While here, also get rid of some unnecessary comments and ioctl
definitions.

No functional change intended.

Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
2025-11-13 14:33:28 +01:00
Christos Margiolis 15d77c1fdc sound: Move mixer->modify_counter to more appropriate place
No functional change intended.

Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
2025-11-13 14:33:24 +01:00
Christos Margiolis b55adf9b26 sound: Retire unused mixer functions
No functional change intended.

Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
2025-11-13 13:53:18 +01:00
Christos Margiolis 634e578ac7 cuse: Fix cdevpriv bugs in cuse_client_open()
If devfs_set_cdevpriv() fails, we will panic when we enter the
cuse_client_free() callback, for a number of reasons:

- pcc->server is not yet assigned, so we'll use a NULL pointer.
- pcc has not yet been added to the pcs->hcli TAILQ, but we'll try to
  remove it.
- pccmd->sx and pccmd->cv are not yet initializated, but we'll try to
  destroy them.

Even if we'd get past all these somehow, we'd still get two errors in
the devfs_set_cdevpriv() failure block:

- We'll unref the server twice, once in cuse_client_free(), and again in
  cuse_client_open().
- A double-free panic, since we'd be trying to free(pcc), which has
  already been freed in cuse_client_free().

Fix all those issues. While here, also get rid of some unnecessary
devfs_clear_cdevpriv().

Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Reviewed by:	kib
Differential Revision:	https://reviews.freebsd.org/D53708
2025-11-13 13:11:06 +01:00
Christos Margiolis e4b31985b5 sound: Remove dead midi code
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
2025-11-13 13:10:04 +01:00
Mateusz Piotrowski 9d17b61b2f ministat: Clean up usage message, manual page, and chameleon
In the manual page:
- Fix synopsis and use better argument names
- Improve description of flags.
- In EXAMPLES, list the contents of iguana and chameleon files.
- Use Rs to reference The Cartoon Guide to Statistics
- Fix misc indentation and style issues
- Tag SPDX

MFC after:	1 week
Reviewed by:	bcr, ziaee
Differential Revision:	https://reviews.freebsd.org/D53710
2025-11-13 11:27:23 +01:00
John Baldwin daa1f9b415 apm(8): Drop MLINK to apmconf(8)
apmconf(8) was merged into apm(8) back in 2000 and this note and MLINK
were added as a transition aid, but that aid is no longer needed.
2025-11-12 21:38:35 -05:00