Page MenuHomeFreeBSD

D32876.diff
No OneTemporary

D32876.diff

Index: sys/x86/xen/xen_intr.c
===================================================================
--- sys/x86/xen/xen_intr.c
+++ sys/x86/xen/xen_intr.c
@@ -369,8 +369,6 @@
{
mtx_lock(&xen_intr_isrc_lock);
- KASSERT(isrc->xi_intsrc.is_handlers == 0,
- ("Release called, but xenisrc still in use"));
evtchn_mask_port(isrc->xi_port);
evtchn_clear_port(isrc->xi_port);
@@ -378,6 +376,13 @@
evtchn_cpu_mask_port(isrc->xi_cpu, isrc->xi_port);
evtchn_cpu_unmask_port(0, isrc->xi_port);
+ if (isrc->xi_cookie != NULL) {
+ xen_arch_intr_remove_handler(isrc);
+ isrc->xi_cookie = NULL;
+ }
+ KASSERT(!xen_arch_intr_has_handlers(isrc),
+ ("Handler removed, but xenisrc still has handlers"));
+
if (isrc->xi_port < NR_EVENT_CHANNELS) {
if (isrc->xi_close != 0) {
struct evtchn_close close = { .port = isrc->xi_port };
@@ -1280,8 +1285,6 @@
}
mtx_unlock(&xen_intr_isrc_lock);
- if (isrc->xi_cookie != NULL)
- intr_remove_handler(isrc->xi_cookie);
xen_intr_release_isrc(isrc);
}

File Metadata

Mime Type
text/plain
Expires
Fri, Sep 27, 11:20 PM (21 h, 54 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
12952868
Default Alt Text
D32876.diff (1013 B)

Event Timeline