diff options
author | Colin Percival <cperciva@FreeBSD.org> | 2011-01-06 22:55:53 +0000 |
---|---|---|
committer | Colin Percival <cperciva@FreeBSD.org> | 2011-01-06 22:55:53 +0000 |
commit | 002fe711ccbf70dbc21e9ecfd417defb89cd99a8 (patch) | |
tree | dc530e46ce01715b60bd360c9cc8e9ab3e430032 | |
parent | af0dacb52530043ec6ee548cc02103da5164970a (diff) | |
download | src-002fe711ccbf70dbc21e9ecfd417defb89cd99a8.tar.gz src-002fe711ccbf70dbc21e9ecfd417defb89cd99a8.zip |
MFS r217055: Don't panic when a disk is detached on XEN.
Approved by: re (rwatson)
Notes
Notes:
svn path=/releng/8.2/; revision=217083
-rw-r--r-- | sys/xen/evtchn/evtchn.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/xen/evtchn/evtchn.c b/sys/xen/evtchn/evtchn.c index 3ad2e2cc879f..b4053eb0c49e 100644 --- a/sys/xen/evtchn/evtchn.c +++ b/sys/xen/evtchn/evtchn.c @@ -628,6 +628,7 @@ static void xenpic_dynirq_enable_source(struct intsrc *isrc); static void xenpic_dynirq_disable_source(struct intsrc *isrc, int); static void xenpic_dynirq_eoi_source(struct intsrc *isrc); static void xenpic_dynirq_enable_intr(struct intsrc *isrc); +static void xenpic_dynirq_disable_intr(struct intsrc *isrc); static void xenpic_pirq_enable_source(struct intsrc *isrc); static void xenpic_pirq_disable_source(struct intsrc *isrc, int); @@ -647,6 +648,7 @@ struct pic xenpic_dynirq_template = { .pic_disable_source = xenpic_dynirq_disable_source, .pic_eoi_source = xenpic_dynirq_eoi_source, .pic_enable_intr = xenpic_dynirq_enable_intr, + .pic_disable_intr = xenpic_dynirq_disable_intr, .pic_vector = xenpic_vector, .pic_source_pending = xenpic_source_pending, .pic_suspend = xenpic_suspend, @@ -716,6 +718,20 @@ xenpic_dynirq_enable_intr(struct intsrc *isrc) } static void +xenpic_dynirq_disable_intr(struct intsrc *isrc) +{ + unsigned int irq; + struct xenpic_intsrc *xp; + + xp = (struct xenpic_intsrc *)isrc; + mtx_lock_spin(&irq_mapping_update_lock); + irq = xenpic_vector(isrc); + mask_evtchn(evtchn_from_irq(irq)); + xp->xp_masked = 1; + mtx_unlock_spin(&irq_mapping_update_lock); +} + +static void xenpic_dynirq_eoi_source(struct intsrc *isrc) { unsigned int irq; |