Author: jhb
Date: Wed Mar 28 18:53:48 2012
New Revision: 233623
URL: http://svn.freebsd.org/changeset/base/233623

Log:
  Allocate the ioapics[] array dynamically since it is only needed for the
  duration of madt_setup_io().  This avoids having the array take up
  permanent space in the BSS.
  
  Inspired by:  bde
  MFC after:    2 weeks

Modified:
  head/sys/x86/acpica/madt.c

Modified: head/sys/x86/acpica/madt.c
==============================================================================
--- head/sys/x86/acpica/madt.c  Wed Mar 28 18:38:13 2012        (r233622)
+++ head/sys/x86/acpica/madt.c  Wed Mar 28 18:53:48 2012        (r233623)
@@ -50,15 +50,15 @@ __FBSDID("$FreeBSD$");
 #include <dev/pci/pcivar.h>
 
 /* These two arrays are indexed by APIC IDs. */
-struct ioapic_info {
+static struct {
        void *io_apic;
        UINT32 io_vector;
-} static ioapics[MAX_APIC_ID + 1];
+} *ioapics;
 
-struct lapic_info {
+static struct lapic_info {
        u_int la_enabled:1;
        u_int la_acpi_id:8;
-} static lapics[MAX_APIC_ID + 1];
+} lapics[MAX_APIC_ID + 1];
 
 static int madt_found_sci_override;
 static ACPI_TABLE_MADT *madt;
@@ -162,7 +162,10 @@ madt_setup_io(void)
                printf("Try disabling either ACPI or apic support.\n");
                panic("Using MADT but ACPI doesn't work");
        }
-                   
+
+       ioapics = malloc(sizeof(*ioapics) * (MAX_APIC_ID + 1), M_MADT,
+           M_WAITOK | M_ZERO);
+
        /* First, we run through adding I/O APIC's. */
        madt_walk_table(madt_parse_apics, NULL);
 
@@ -194,6 +197,9 @@ madt_setup_io(void)
        /* Finally, we throw the switch to enable the I/O APIC's. */
        acpi_SetDefaultIntrModel(ACPI_INTR_APIC);
 
+       free(ioapics, M_MADT);
+       ioapics = NULL;
+
        return (0);
 }
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to