From owner-svn-src-all@FreeBSD.ORG Fri May 1 20:53:38 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6167A1065842; Fri, 1 May 2009 20:53:38 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4F2228FC13; Fri, 1 May 2009 20:53:38 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n41KrcEF052978; Fri, 1 May 2009 20:53:38 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n41KrcdL052976; Fri, 1 May 2009 20:53:38 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <200905012053.n41KrcdL052976@svn.freebsd.org> From: Alexander Motin Date: Fri, 1 May 2009 20:53:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191730 - in head/sys: amd64/amd64 i386/i386 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 May 2009 20:53:39 -0000 Author: mav Date: Fri May 1 20:53:37 2009 New Revision: 191730 URL: http://svn.freebsd.org/changeset/base/191730 Log: Small addition to r191720. Restore previous behaviour for the case of unknown interrupt. Invocation of IRQ -1 crashes my system on resume. Returning 0, as it was, is not perfect also, but at least not so dangerous. Modified: head/sys/amd64/amd64/local_apic.c head/sys/i386/i386/local_apic.c Modified: head/sys/amd64/amd64/local_apic.c ============================================================================== --- head/sys/amd64/amd64/local_apic.c Fri May 1 19:46:42 2009 (r191729) +++ head/sys/amd64/amd64/local_apic.c Fri May 1 20:53:37 2009 (r191730) @@ -950,11 +950,15 @@ apic_free_vector(u_int apic_id, u_int ve u_int apic_idt_to_irq(u_int apic_id, u_int vector) { + int irq; KASSERT(vector >= APIC_IO_INTS && vector != IDT_SYSCALL && vector <= APIC_IO_INTS + APIC_NUM_IOINTS, ("Vector %u does not map to an IRQ line", vector)); - return (lapics[apic_id].la_ioint_irqs[vector - APIC_IO_INTS]); + irq = lapics[apic_id].la_ioint_irqs[vector - APIC_IO_INTS]; + if (irq < 0) + irq = 0; + return (irq); } #ifdef DDB Modified: head/sys/i386/i386/local_apic.c ============================================================================== --- head/sys/i386/i386/local_apic.c Fri May 1 19:46:42 2009 (r191729) +++ head/sys/i386/i386/local_apic.c Fri May 1 20:53:37 2009 (r191730) @@ -954,11 +954,15 @@ apic_free_vector(u_int apic_id, u_int ve u_int apic_idt_to_irq(u_int apic_id, u_int vector) { + int irq; KASSERT(vector >= APIC_IO_INTS && vector != IDT_SYSCALL && vector <= APIC_IO_INTS + APIC_NUM_IOINTS, ("Vector %u does not map to an IRQ line", vector)); - return (lapics[apic_id].la_ioint_irqs[vector - APIC_IO_INTS]); + irq = lapics[apic_id].la_ioint_irqs[vector - APIC_IO_INTS]; + if (irq < 0) + irq = 0; + return (irq); } #ifdef DDB