From owner-p4-projects@FreeBSD.ORG Thu Jan 4 21:17:52 2007 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 147AF16A415; Thu, 4 Jan 2007 21:17:52 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E267216A40F for ; Thu, 4 Jan 2007 21:17:51 +0000 (UTC) (envelope-from piso@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id D4F0D13C448 for ; Thu, 4 Jan 2007 21:17:51 +0000 (UTC) (envelope-from piso@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 l04LHpo2031149 for ; Thu, 4 Jan 2007 21:17:51 GMT (envelope-from piso@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id l04LHp3R031146 for perforce@freebsd.org; Thu, 4 Jan 2007 21:17:51 GMT (envelope-from piso@freebsd.org) Date: Thu, 4 Jan 2007 21:17:51 GMT Message-Id: <200701042117.l04LHp3R031146@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to piso@freebsd.org using -f From: Paolo Pisati To: Perforce Change Reviews Cc: Subject: PERFORCE change 112493 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: Thu, 04 Jan 2007 21:17:52 -0000 http://perforce.freebsd.org/chv.cgi?CH=112493 Change 112493 by piso@piso_newluxor on 2007/01/04 21:17:24 Readd support for filters to powerpc - not compiled tough cause crosscompiling powerpc code from my amd64 seems broken. Affected files ... .. //depot/projects/soc2006/intr_filter/powerpc/powerpc/intr_machdep.c#16 edit Differences ... ==== //depot/projects/soc2006/intr_filter/powerpc/powerpc/intr_machdep.c#16 (text+ko) ==== @@ -192,8 +192,8 @@ return (intr_event_remove_handler(cookie)); } -void -intr_handle(u_int irq) +__unused void +intr_handle_old(u_int irq) { struct ppc_intr *i; struct intr_event *ie; @@ -247,3 +247,55 @@ } } } + +static void +stray_int(uint irq) +{ + + atomic_add_long(&intrcnt[0], 1); + if (intrcnt[0] <= MAX_STRAY_LOG) { + printf("stray irq %d\n", irq); + if (intrcnt[0] >= MAX_STRAY_LOG) { + printf("got %d stray interrupts, not" + "logging anymore\n", MAX_STRAY_LOG); + } + } +} + +void +intr_handle(u_int irq) +{ + struct ppc_intr *i; + struct intr_event *ie; + int error; + + i = ppc_intrs[irq]; + if (i == NULL) { + stray_int(irq); + return; + } + + atomic_add_long(i->cntp, 1); + + ie = i->event; + KASSERT(ie != NULL, ("%s: interrupt without an event", __func__)); + + res = mi_handle_intr(ie, NULL, intr_eoi_src_stub, + intr_disab_eoi_src_stub, NULL); + switch(res) { + case 0: + break; + case ECHILD: + irq_enable(irq); + break; + case EFAULT: + panic("%s: impossible stray interrupt", __func__); + break; + case EINVAL: + stray_int(irq); + break; + default: + printf("Ouch! Return code from mi_handle_intr()" + "not expected.\n"); + } +}