From owner-p4-projects@FreeBSD.ORG Tue May 30 19:28:28 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6FB8516ACC5; Tue, 30 May 2006 19:28:26 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A207C16ACCF for ; Tue, 30 May 2006 19:28:23 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3763643D72 for ; Tue, 30 May 2006 19:28:10 +0000 (GMT) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k4UJQkFt055287 for ; Tue, 30 May 2006 19:26:46 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k4UJQkgt055284 for perforce@freebsd.org; Tue, 30 May 2006 19:26:46 GMT (envelope-from kmacy@freebsd.org) Date: Tue, 30 May 2006 19:26:46 GMT Message-Id: <200605301926.k4UJQkgt055284@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to kmacy@freebsd.org using -f From: Kip Macy To: Perforce Change Reviews Cc: Subject: PERFORCE change 98153 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 May 2006 19:28:48 -0000 http://perforce.freebsd.org/chv.cgi?CH=98153 Change 98153 by kmacy@kmacy_storage:sun4v_work on 2006/05/30 19:25:49 for fast interrupts call fast interrupt handler directly if there are no collisions on a vector Affected files ... .. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/intr_machdep.c#8 edit Differences ... ==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/intr_machdep.c#8 (text+ko) ==== @@ -205,9 +205,15 @@ ps = intr_disable(); if (vec != -1) { - intr_vectors[vec].iv_func = ivf; - intr_vectors[vec].iv_arg = iva; - intr_vectors[vec].iv_pri = pri; + if ((char *)intr_vectors[vec].iv_func == (char *)intr_stray_level) { + intr_vectors[vec].iv_func = ivf; + intr_vectors[vec].iv_arg = iva; + } else { + intr_vectors[vec].iv_func = intr_execute_handlers; + intr_vectors[vec].iv_arg = &intr_vectors[vec]; + } + if (pri > intr_vectors[vec].iv_pri) + intr_vectors[vec].iv_pri = pri; intr_vectors[vec].iv_vec = vec; } snprintf(pilname, MAXCOMLEN + 1, "pil%d: %s", pri, pil_names[pri]); @@ -315,8 +321,9 @@ struct intr_vector *iv; struct intr_event *ie; /* descriptor for the IRQ */ struct intr_event *orphan; - int errcode; - + int errcode, pil; + iv_func_t *ivf; + void *iva; /* * Work around a race where more than one CPU may be registering * handlers on the same IRQ at the same time. @@ -347,8 +354,11 @@ if (errcode) return (errcode); - intr_setup(flags & INTR_FAST ? PIL_FAST : PIL_ITHREAD, intr_fast, vec, - intr_execute_handlers, iv); + pil = (flags & INTR_FAST) ? PIL_FAST : PIL_ITHREAD; + ivf = (flags & INTR_FAST) ? handler : intr_execute_handlers; + iva = (flags & INTR_FAST) ? arg : iv; + + intr_setup(pil, intr_fast, vec, ivf, iva); intr_stray_count[vec] = 0;