Page MenuHomeFreeBSD

xen-intr: fix removal of event channels during resume
AbandonedPublic

Authored by royger on Jul 29 2016, 8:23 AM.
Tags
None
Referenced Files
Unknown Object (File)
Wed, Jan 29, 8:05 AM
Unknown Object (File)
Jan 11 2025, 2:45 AM
Unknown Object (File)
Jan 10 2025, 12:43 AM
Unknown Object (File)
Jan 9 2025, 5:09 AM
Unknown Object (File)
Jan 9 2025, 4:50 AM
Unknown Object (File)
Nov 5 2024, 8:12 AM
Unknown Object (File)
Oct 5 2024, 10:36 AM
Unknown Object (File)
Sep 15 2024, 7:27 AM
Subscribers

Details

Reviewers
None
Summary

Event channel handlers cannot be removed during resume because there might
be an interrupt thread running on a CPU currently blocked in the
cpususpend_handler, which prevents the call to intr_remove_handler from
finishing and completely freezes the system during resume. r291022 tried to
fix this by allowing recursion in intr_remove_handler, but that's clearly
not enough.

Instead don't remove the handlers at the interrupt resume phase, and let
each driver remove the handler by itself during resume. In order to do this,
change the opaque event channel handler cookie to use the global interrupt
vector instead of the event channel port. The event channel port cannot be
used because after resume all event channels are reset, and the port numbers
can change.

Sponsored by: Citrix Systems R&D
MFC after: 4 days

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 4651
Build 4705: arc lint + arc unit

Event Timeline

royger retitled this revision from to xen-intr: fix removal of event channels during resume.
royger updated this object.
royger edited the test plan for this revision. (Show Details)