]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
x86/xen: fix accounted interrupt time
authorRoger Pau Monné <royger@FreeBSD.org>
Tue, 5 Mar 2024 13:15:03 +0000 (14:15 +0100)
committerRoger Pau Monné <royger@FreeBSD.org>
Tue, 16 Apr 2024 07:06:33 +0000 (09:06 +0200)
commitf750dce972efaea614aa6d03ecdb24aa962a38a4
tree4060825b0da897bf1f5d7221e476808fa403dff3
parent605a00660eadb210ed76d49df551f3f33bbb4da7
x86/xen: fix accounted interrupt time

The current addition to the interrupt nesting level in
xen_arch_intr_handle_upcall() needs to be compensated in
xen_intr_handle_upcall(), otherwise interrupts dispatched by the upcall handler
end up seeing a td_intr_nesting_level of 2 or more, which makes them assume
there's been an interrupt nesting.

Such extra interrupt nesting count lead to statclock() reporting idle time as
interrupt, as the call from interrupt context will always be seen as a nested
one (td->td_intr_nesting_level >= 2) due to the nesting count increase done by
both xen_arch_intr_handle_upcall() and intr_execute_handlers().

Fix this by adjusting the nested interrupt count before dispatching interrupts
from xen_intr_handle_upcall().

PR: 277231
Reported by: Matthew Grooms <mgrooms@shrew.net>
Fixes: af610cabf1f4 ('xen/intr: adjust xen_intr_handle_upcall() to match driver filter')
Sponsored by: Cloud Software Group
Reviewed by: Elliott Mitchell <ehem+freebsd@m5p.com>
sys/dev/xen/bus/xen_intr.c