Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 1 May 2009 20:53:38 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r191730 - in head/sys: amd64/amd64 i386/i386
Message-ID:  <200905012053.n41KrcdL052976@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905012053.n41KrcdL052976>