Skip to contentSkip to conversation

5/5 iosapic: rationalize __init/__devinit

PATCH New Bjorn Helgaas 1 participant 1 message Feb 20, 2003

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 5/5 iosapic: rationalize __init/__devinit

Rationalize __init/__devinit attributes. The noteworthy changes are that

	iosapic_system_init(),
	iosapic_init(),
	iosapic_register_platform_intr(), and
	iosapic_override_isa_irq()
are __init (only called from ACPI __init functions), but
	iosapic_lists[],
	num_iosapic,
	find_iosapic(),
	register_intr(),
	iosapic_register_intr(), and
	acpi_register_irq()

are not because they may be used after init-time by modules.

More detailed analysis:

iosapic_lists[], num_iosapic: normal, referenced by
find_iosapic (normal) register_intr (normal) iosapic_init (__init)

pcat_compat: __initdata, referenced by
iosapic_system_init (__init)
iosapic_init (__init)
iosapic_parse_prt (__init)

find_iosapic: normal, called by
register_intr (normal)

register_intr: normal, called by
iosapic_register_intr (normal), called by
acpi_register_irq (normal), called by
modules (=> can't be __init or __devinit)
iosapic_register_platform_intr (__init) iosapic_override_isa_irq (__init) iosapic_parse_prt (__init)

iosapic_reassign_vector: __init, called by
iosapic_register_platform_intr (__init), called by
acpi_parse_plat_int_src (__init)

iosapic_system_init: __init, called by
acpi_parse_madt (__init)

iosapic_init: __init, called by
acpi_parse_iosapic (__init)

iosapic_register_platform_intr: __init, called by
acpi_parse_plat_int_src (__init)

iosapic_override_isa_irq: __init, called by
acpi_parse_int_src_ovr (__init) iosapic_init (__init)

fixup_vector: __init, called by
iosapic_parse_prt (__init), called by
acpi_pci_irq_init (__init)

arch/ia64/kernel/acpi.c +1 -1
diff -u -ur iosapic-5/arch/ia64/kernel/acpi.c iosapic-6/arch/ia64/kernel/acpi.c
@@ -837,7 +837,7 @@
 	return gsi_to_vector(irq);
 }
 
-int __init
+int
 acpi_register_irq (u32 gsi, u32 polarity, u32 trigger)
 {
 	int vector = 0;
arch/ia64/kernel/iosapic.c +13 -10
diff -u -ur iosapic-5/arch/ia64/kernel/iosapic.c iosapic-6/arch/ia64/kernel/iosapic.c
@@ -29,6 +29,9 @@
  * 02/07/29	T. Kochi	Allocate interrupt vectors dynamically
  * 02/08/04	T. Kochi	Cleaned up terminology (irq, global system interrupt, vector, etc.)
  * 02/09/20	D. Mosberger	Simplified by taking advantage of ACPI's pci_irq code.
+ * 03/02/19	B. Helgaas	Make pcat_compat system-wide, not per-IOSAPIC.
+ *				Remove iosapic_address & gsi_base from external interfaces.
+ *				Rationalize __init/__devinit attributes.
  */
 /*
  * Here is what the interrupt logic between a PCI device and the kernel looks like:
@@ -111,17 +114,17 @@
 	char		*addr;		/* base address of IOSAPIC */
 	unsigned int 	gsi_base;	/* first GSI assigned to this IOSAPIC */
 	unsigned short 	num_rte;	/* number of RTE in this IOSAPIC */
-} iosapic_lists[256] __devinitdata;
+} iosapic_lists[256];
 
-static int num_iosapic = 0;
+static int num_iosapic;
 
-static unsigned char pcat_compat;	/* 8259 compatibility flag */
+static unsigned char pcat_compat __initdata;	/* 8259 compatibility flag */
 
 
 /*
  * Find an IOSAPIC associated with a GSI
  */
-static inline int __devinit
+static inline int
 find_iosapic (unsigned int gsi)
 {
 	int i;
@@ -424,7 +427,7 @@
  * if the given vector is already owned by other,
  *  assign a new vector for the other and make the vector available
  */
-static void
+static void __init
 iosapic_reassign_vector (int vector)
 {
 	int new_vector;
@@ -516,7 +519,7 @@
  * ACPI calls this when it finds an entry for a platform interrupt.
  * Note that the irq_base and IOSAPIC address must be set in iosapic_init().
  */
-int
+int __init
 iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
 				int iosapic_vector, u16 eid, u16 id,
 				unsigned long polarity, unsigned long trigger)
@@ -565,7 +568,7 @@
  * ACPI calls this when it finds an entry for a legacy ISA IRQ override.
  * Note that the gsi_base and IOSAPIC address must be set in iosapic_init().
  */
-void
+void __init
 iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi,
 			  unsigned long polarity,
 			  unsigned long trigger)
@@ -586,7 +589,7 @@
 	set_rte(vector, dest);
 }
 
-void __devinit
+void __init
 iosapic_system_init (int system_pcat_compat)
 {
 	int vector;
@@ -606,7 +609,7 @@
 	}
 }
 
-void __devinit
+void __init
 iosapic_init (unsigned long phys_addr, unsigned int gsi_base)
 {
 	int num_rte;
@@ -643,7 +646,7 @@
 	}
 }
 
-static void
+static void __init
 fixup_vector (int vector, unsigned int gsi, const char *pci_id)
 {
 	struct hw_interrupt_type *irq_type = &irq_type_iosapic_level;
include/asm-ia64/iosapic.h +5 -5
diff -u -ur iosapic-5/include/asm-ia64/iosapic.h iosapic-6/include/asm-ia64/iosapic.h
@@ -51,18 +51,18 @@
 
 #ifndef __ASSEMBLY__
 
-extern void __devinit iosapic_system_init (int pcat_compat);
-extern void __devinit iosapic_init (unsigned long address,
+extern void __init iosapic_system_init (int pcat_compat);
+extern void __init iosapic_init (unsigned long address,
 				    unsigned int gsi_base);
 extern int gsi_to_vector (unsigned int gsi);
 extern int gsi_to_irq (unsigned int gsi);
-extern void iosapic_parse_prt (void);
+extern void __init iosapic_parse_prt (void);
 extern int iosapic_register_intr (unsigned int gsi, unsigned long polarity,
 				  unsigned long trigger);
-extern void iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi,
+extern void __init iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi,
 				      unsigned long polarity,
 				      unsigned long trigger);
-extern int iosapic_register_platform_intr (u32 int_type,
+extern int __init iosapic_register_platform_intr (u32 int_type,
 					   unsigned int gsi,
 					   int pmi_vector,
 					   u16 eid, u16 id,