Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 30 Jul 2026 12:49:29 +0300
From:      Konstantin Belousov <kib@freebsd.org>
To:        Mark Millard <marklmi@yahoo.com>
Cc:        John Baldwin <jhb@freebsd.org>, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org
Subject:   Re: git: 6e93f5e4d693 - main - amd64: FRED support
Message-ID:  <amseKY1Gk44ePAJ7@kib.kiev.ua>
In-Reply-To: <6FF84ADB-3678-480F-BD67-FF7C7A675121@yahoo.com>
References:  <6a5e986a.22164.2ca88691@gitrepo.freebsd.org> <0c99064d-9ada-4ed9-800e-a0cae178f6c8@FreeBSD.org> <c73d21c8-e611-4770-98d2-94a243707d23@yahoo.com> <amrAIgiSD9PkJPwB@kib.kiev.ua> <6FF84ADB-3678-480F-BD67-FF7C7A675121@yahoo.com>

index | next in thread | previous in thread | raw e-mail

On Wed, Jul 29, 2026 at 10:20:31PM -0700, Mark Millard wrote:
> On Jul 29, 2026, at 20:08, Konstantin Belousov <kostikbel@gmail.com> wrote:
> 
> > On Wed, Jul 29, 2026 at 03:08:20PM -0700, Mark Millard wrote:
> >> On 7/29/26 13:44, John Baldwin wrote:
> >>> On 7/20/26 17:51, Konstantin Belousov wrote:
> >>>> The branch main has been updated by kib:
> >>>> 
> >>>> URL: https://cgit.FreeBSD.org/src/commit/?
> >>>> id=6e93f5e4d6932c423b89dff8fc08d86f8bdeb7b9
> >>>> 
> >>>> commit 6e93f5e4d6932c423b89dff8fc08d86f8bdeb7b9
> >>>> Author:     Konstantin Belousov <kib@FreeBSD.org>
> >>>> AuthorDate: 2026-02-13 11:24:40 +0000
> >>>> Commit:     Konstantin Belousov <kib@FreeBSD.org>
> >>>> CommitDate: 2026-07-20 21:51:02 +0000
> >>>> 
> >>>>      amd64: FRED support
> >>>>           FRED support as defined starting from the SDM rev. 90,
> >>>> requires a new
> >>>>      'events' entry point to receive user and kernel mode exceptions and
> >>>>      interrupts notifications from the hardware.  A minimal asm
> >>>> trampoline is
> >>>>      enough, rest can be implemented in C due to the clean FRED
> >>>> organization
> >>>>      of the event reporting.
> >>>>           The syscall entry is handled by a microptimized assembly
> >>>> path, directly
> >>>>      calling into the amd64_syscall() handler, instead of the generic
> >>>> events
> >>>>      entry point.
> >>>>           Tested by:      emaste
> >>>>      Sponsored by:   The FreeBSD Foundation
> >>>>      MFC after:      1 week
> >>>>      Differential revision:  https://reviews.freebsd.org/D55829
> >>> 
> >>> This appears to have broken the cross-build jobs on GitHub for the past
> >>> week
> >>> which build with clang 15 and clang 18.  Are those versions too old to
> >>> support
> >>> the instructions used here?
> >>> 
> >>> Sample output:
> >>> 
> >>> --------------------------------------------------------------
> >>>>>> stage 3.1: building everything
> >>> --------------------------------------------------------------
> >>> /home/runner/work/freebsd-src/freebsd-src/sys/amd64/amd64/
> >>> exception.S:1455:2: error: invalid instruction mnemonic 'eretu'
> >>>  eretu
> >>>  ^~~~~
> >>> /home/runner/work/freebsd-src/freebsd-src/sys/amd64/amd64/
> >>> exception.S:1521:2: error: invalid instruction mnemonic 'lkgs'
> >>>  lkgs %ax
> >>>  ^~~~
> >>> /home/runner/work/freebsd-src/freebsd-src/sys/amd64/amd64/
> >>> exception.S:1542:2: error: invalid instruction mnemonic 'eretu'
> >>>  eretu
> >>>  ^~~~~
> >>> /home/runner/work/freebsd-src/freebsd-src/sys/amd64/amd64/
> >>> exception.S:1662:2: error: invalid instruction mnemonic 'erets'
> >>>  erets
> >>>  ^~~~~
> >>> /home/runner/work/freebsd-src/freebsd-src/sys/amd64/amd64/
> >>> exception.S:1682:2: error: invalid instruction mnemonic 'erets'
> >>>  erets
> >>>  ^~~~~
> >>> --- exception.o ---
> >>> *** [exception.o] Error code 1
> >>> 
> >>> (Or maybe clang needs some -m<foo> or .set <foo> to enable use of these
> >>> instructions?)
> >>> 
> >> 
> >>> From what I read (but its is only reading):
> >> 
> >> clang-15 predates any FRED support.
> >> clang-17 was more incomplete/preliminary/experimental for FRED support
> >> 
> >> 
> >> clang-18 has .S and inline assembly FRED support but various (most?)
> >> target triples do not enable it by default.
> >> 
> >> Possibly add to appropriate .S file(s):
> >> 
> >> .arch x86-64
> >> .arch .fred
> >> .arch .lkgs
> >> 
> >> for defined(__clang__) && (__clang_major__ >= 18)
> >> 
> >> Or, make use of:
> >> 
> >> -Wa,-mwave-fred -Wa,-mwave-lkgs
> >> 
> >> 
> >> clang-19 has the intended fully general handling of FRED.
> > 
> > I think that the adequate workaround would be to #ifdef out the
> > instructions for old versions of clang.  I doubt that anybody would
> > run the built kernel, esp. on the new enough hardware.
> > 
> > But I am open for other suggestions.
> 
> 
> So far as I can tell, clang documentation does not cover this area,
> making what I read solidly hear-say. (The -mwave-* notation is a
> possible hint at that status.) It seems that linux may have gotten
> its source to go through all the tools via use of (what translates
> to) .byte use for the 3 instructions.
> 
> It is not clear to me what versions of clang may require -mattr= or
> -mcpu= to specify something known to support LKGS/FRED in order to
> enable the notation for the 3 instructions.
> 
> 
> [Note: For some reason, I only found your note in my Email, not in
> dev-commits-src-all@ or dev-commits-src-main@ (via multiple ways of
> accessing those). So this is an Email based reply, not thunderbird
> based use of news.gmane.io .]

https://reviews.freebsd.org/D58550


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?amseKY1Gk44ePAJ7>