From owner-freebsd-xen@FreeBSD.ORG Thu Dec 30 01:30:15 2010 Return-Path: Delivered-To: freebsd-xen@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 588621065675 for ; Thu, 30 Dec 2010 01:30:15 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 482F48FC08 for ; Thu, 30 Dec 2010 01:30:15 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id oBU1UF7x093579 for ; Thu, 30 Dec 2010 01:30:15 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id oBU1UFQc093572; Thu, 30 Dec 2010 01:30:15 GMT (envelope-from gnats) Date: Thu, 30 Dec 2010 01:30:15 GMT Message-Id: <201012300130.oBU1UFQc093572@freefall.freebsd.org> To: freebsd-xen@FreeBSD.org From: dfilter@FreeBSD.ORG (dfilter service) Cc: Subject: Re: kern/153511: commit references a PR X-BeenThere: freebsd-xen@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: dfilter service List-Id: Discussion of the freebsd port to xen - implementation and usage List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Dec 2010 01:30:15 -0000 The following reply was made to PR kern/153511; it has been noted by GNATS. From: dfilter@FreeBSD.ORG (dfilter service) To: bug-followup@FreeBSD.org Cc: Subject: Re: kern/153511: commit references a PR Date: Thu, 30 Dec 2010 01:29:04 +0000 (UTC) Author: cperciva Date: Thu Dec 30 01:28:56 2010 New Revision: 216812 URL: http://svn.freebsd.org/changeset/base/216812 Log: Add xenpic_dynirq_disable_intr and set it as the .pic_disable_intr method for xenpic_dynirq_template. This fixes a panic when a virtual disk is removed, since that results in an interrupt channel being disabled and NULL isn't very good function for disabling interrupts. We should probably have a xenpic_pirq_disable_intr as well; I'm not adding that here because (a) I'm not sure what uses pirqs so I don't have a test case, and (b) the xenpic_pirq_enable_intr code is significantly more complex than the xenpic_dynirq_enable_intr code, so I'm not sure what should go into a xenpic_pirq_disable_intr routine. PR: kern/153511 MFC after: 3 days Modified: head/sys/xen/evtchn/evtchn.c Modified: head/sys/xen/evtchn/evtchn.c ============================================================================== --- head/sys/xen/evtchn/evtchn.c Thu Dec 30 01:13:42 2010 (r216811) +++ head/sys/xen/evtchn/evtchn.c Thu Dec 30 01:28:56 2010 (r216812) @@ -628,6 +628,7 @@ static void xenpic_dynirq_enable_sou 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 } 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; _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"