From: "Michael Brown" <mcb30@ipxe.org>
To: devel@edk2.groups.io, ray.ni@intel.com,
Laszlo Ersek <lersek@redhat.com>,
"kraxel@redhat.com" <kraxel@redhat.com>
Cc: Pedro Falcato <pedro.falcato@gmail.com>,
"Kinney, Michael D" <michael.d.kinney@intel.com>,
"Desimone, Nathaniel L" <nathaniel.l.desimone@intel.com>,
"Kumar, Rahul R" <rahul.r.kumar@intel.com>,
"Liu, Zhiguang" <zhiguang.liu@intel.com>
Subject: Re: [edk2-devel] [PATCH 1/6] UefiCpuPkg/LocalApicTimerDxe: Duplicate OvmfPkg/LocalApicTimerDxe driver
Date: Sat, 20 Jan 2024 00:49:30 +0000 [thread overview]
Message-ID: <0102018d24581b55-17b57f2c-d3ad-4383-bb46-62508c0200b2-000000@eu-west-1.amazonses.com> (raw)
In-Reply-To: <MN6PR11MB82446B0C79A9660C56C5CA788C702@MN6PR11MB8244.namprd11.prod.outlook.com>
On 19/01/2024 23:44, Ni, Ray wrote:
> I still want to see if the RestoreTpl2 that does not enable interrupt is
> added as a protocol, and how simple the lib could be.
RestoreTpl() always has to enable interrupts during its execution, since
interrupts must be allowed to occur while callbacks are running
(otherwise the callbacks may break due to the system time freezing).
The only alternative approach I am aware of would be to add a
RestoreTPLEx() call to EFI_BOOT_SERVICES, with an additional parameter
EnableInterruptsAtRestoredTpl.
RestoreTPLEx() would then:
1. For each TPL between EfiCurrentTpl and OldTpl:
a) enable interrupts
b) dispatch any callbacks registered at this TPL
c) disable interrupts
2. Re-enable interrupts before returning if
EnableInterruptsAtRestoredTpl is TRUE.
The implementation of RestoreTPL() would then become just a call to
RestoreTPLEx(OldTPl, (OldTpl < TPL_HIGH_LEVEL)).
This would require a change to the EFI_BOOT_SERVICES table definition,
which is something that I don't think has happened in the 18 years since
the UEFI specification was released. There's a very good chance that
such a table change would break something, somewhere.
RestoreTPLEx() could be installed as a protocol instead, but it seems
very messy to have something so fundamental as TPL management and event
dispatch handled through an installable (and therefore uninstallable)
protocol. Are there any other instances where deep internals of DxeCore
are exposed in this way?
Lastly: I think the RestoreTPLEx approach ought to work, but I have not
done any testing on it (and have no intention of trying it, unless Intel
wants to fund the work). NestedInterruptTplLib has been quite
thoroughly tested by now.
> The reason is about maintainability.
> I can image that one day people would question the Lib implementation if
> some timer event issue appears. If the Lib is easy to understand, the
> suspicion could be avoided.
> And if the correctness of the Lib can be proven by a thorough test, that
> will be better. But it seems to me the Lib can only be proven as correct
> with careful code review, like some multi-threaded logic.
It's relatively easy to test with a deliberately broken ISR: that's how
I tested it during development.
The semi-formal proof is an added bonus. Testing shows that the
symptoms have gone away, but the semi-formal proof is what gives
confidence (to me, at least) that the problem has actually been fixed
properly.
Thanks,
Michael
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114104): https://edk2.groups.io/g/devel/message/114104
Mute This Topic: https://groups.io/mt/103734961/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
next prev parent reply other threads:[~2024-01-20 0:49 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-15 8:03 [edk2-devel] Add LocalApicTimerDxe driver in UefiCpuPkg Ni, Ray
2024-01-15 8:03 ` [edk2-devel] [PATCH 1/6] UefiCpuPkg/LocalApicTimerDxe: Duplicate OvmfPkg/LocalApicTimerDxe driver Ni, Ray
2024-01-15 8:59 ` Pedro Falcato
2024-01-15 18:10 ` Michael D Kinney
2024-01-16 10:02 ` Laszlo Ersek
2024-01-16 17:17 ` Michael D Kinney
2024-01-15 19:30 ` Laszlo Ersek
2024-01-16 8:47 ` Gerd Hoffmann
2024-01-16 9:48 ` Michael Brown
2024-01-16 14:34 ` Laszlo Ersek
2024-01-16 15:16 ` Michael Brown
2024-01-16 15:37 ` Laszlo Ersek
2024-01-17 7:11 ` Ni, Ray
2024-01-17 10:46 ` Michael Brown
2024-01-19 13:14 ` Ni, Ray
2024-01-19 17:42 ` Michael Brown
2024-01-19 23:44 ` Ni, Ray
2024-01-20 0:49 ` Michael Brown [this message]
2024-01-22 10:15 ` Gerd Hoffmann
2024-01-15 8:03 ` [edk2-devel] [PATCH 2/6] UefiCpuPkg/LocalApicTimerDxe: Remove NestedInterruptTplLib call Ni, Ray
2024-01-15 8:03 ` [edk2-devel] [PATCH 3/6] UefiCpuPkg: Add LocalApicTimerDxe driver in DSC file Ni, Ray
2024-01-15 8:03 ` [edk2-devel] [PATCH 4/6] UefiCpuPkg/LocalApicTimerDxe: Enhance Timer Frequency calculation logic Ni, Ray
2024-01-15 8:03 ` [edk2-devel] [PATCH 5/6] UefiCpuPkg/LocalApicTimerDxe: warn if APIC Timer is used by other code Ni, Ray
2024-01-15 8:03 ` [edk2-devel] [PATCH 6/6] UefiCpuPkg/LocalApicTimerDxe: Passing fixed timer period is not a bug Ni, Ray
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0102018d24581b55-17b57f2c-d3ad-4383-bb46-62508c0200b2-000000@eu-west-1.amazonses.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox