aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2011-04-02 15:58:22 +0100
committerJan Beulich <jbeulich@novell.com>2011-04-02 15:58:22 +0100
commit7deb539e74648483c9d10bde7d9b68afc6a7cdf1 (patch)
tree21a6cd5ca16daea71ee6055162c2f6f96b40ee0e
parent6e59f30cbdfc0b21b81064b511873507e187e3c1 (diff)
downloadxen-7deb539e74648483c9d10bde7d9b68afc6a7cdf1.tar.gz
xen-7deb539e74648483c9d10bde7d9b68afc6a7cdf1.tar.bz2
xen-7deb539e74648483c9d10bde7d9b68afc6a7cdf1.zip
x86/ACPI: __init-annotate
xen/arch/x86/acpi/boot.c consists of almost only code/data in .init.*, so move the few bits that aren't into a new file and then use the recently introduced .init.o mechanism to move all the literal strings into .init.rodata. Signed-off-by: Jan Beulich <jbeulich@novell.com>
-rw-r--r--xen/arch/x86/acpi/Makefile4
-rw-r--r--xen/arch/x86/acpi/boot.c62
-rw-r--r--xen/arch/x86/acpi/lib.c83
-rw-r--r--xen/drivers/acpi/tables/Makefile8
-rw-r--r--xen/drivers/acpi/tables/tbxface.c3
-rw-r--r--xen/drivers/acpi/utilities/Makefile2
-rw-r--r--xen/drivers/acpi/utilities/utmisc.c6
-rw-r--r--xen/include/acpi/acmacros.h2
-rw-r--r--xen/include/acpi/acutils.h28
9 files changed, 110 insertions, 88 deletions
diff --git a/xen/arch/x86/acpi/Makefile b/xen/arch/x86/acpi/Makefile
index 76b143d1bc..27b4aa30b0 100644
--- a/xen/arch/x86/acpi/Makefile
+++ b/xen/arch/x86/acpi/Makefile
@@ -1,4 +1,4 @@
subdir-y += cpufreq
-obj-y += boot.o power.o suspend.o cpu_idle.o cpuidle_menu.o
-obj-bin-y += wakeup_prot.o
+obj-y += lib.o power.o suspend.o cpu_idle.o cpuidle_menu.o
+obj-bin-y += boot.init.o wakeup_prot.o
diff --git a/xen/arch/x86/acpi/boot.c b/xen/arch/x86/acpi/boot.c
index dd40206d95..b95d6bea79 100644
--- a/xen/arch/x86/acpi/boot.c
+++ b/xen/arch/x86/acpi/boot.c
@@ -69,58 +69,10 @@ bool_t acpi_skip_timer_override __initdata;
static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE;
#endif
-u32 __read_mostly acpi_smi_cmd;
-u8 __read_mostly acpi_enable_value;
-u8 __read_mostly acpi_disable_value;
-
-u32 __read_mostly x86_acpiid_to_apicid[MAX_MADT_ENTRIES] =
- {[0 ... MAX_MADT_ENTRIES - 1] = BAD_APICID };
-
/* --------------------------------------------------------------------------
Boot-time Configuration
-------------------------------------------------------------------------- */
-/*
- * Temporarily use the virtual area starting from FIX_IO_APIC_BASE_END,
- * to map the target physical address. The problem is that set_fixmap()
- * provides a single page, and it is possible that the page is not
- * sufficient.
- * By using this area, we can map up to MAX_IO_APICS pages temporarily,
- * i.e. until the next __va_range() call.
- *
- * Important Safety Note: The fixed I/O APIC page numbers are *subtracted*
- * from the fixed base. That's why we start at FIX_IO_APIC_BASE_END and
- * count idx down while incrementing the phys address.
- */
-char *__acpi_map_table(unsigned long phys, unsigned long size)
-{
- unsigned long base, offset, mapped_size;
- int idx;
-
- /* XEN: RAM holes above 1MB are not permanently mapped. */
- if ((phys + size) <= (1 * 1024 * 1024))
- return __va(phys);
-
- offset = phys & (PAGE_SIZE - 1);
- mapped_size = PAGE_SIZE - offset;
- set_fixmap(FIX_ACPI_END, phys);
- base = fix_to_virt(FIX_ACPI_END);
-
- /*
- * Most cases can be covered by the below.
- */
- idx = FIX_ACPI_END;
- while (mapped_size < size) {
- if (--idx < FIX_ACPI_BEGIN)
- return NULL; /* cannot handle this */
- phys += PAGE_SIZE;
- set_fixmap(idx, phys);
- mapped_size += PAGE_SIZE;
- }
-
- return ((char *) base + offset);
-}
-
#ifdef CONFIG_X86_LOCAL_APIC
static int __init acpi_parse_madt(struct acpi_table_header *table)
{
@@ -927,17 +879,3 @@ int __init acpi_boot_init(void)
return 0;
}
-
-unsigned int acpi_get_processor_id(unsigned int cpu)
-{
- unsigned int acpiid, apicid;
-
- if ((apicid = x86_cpu_to_apicid[cpu]) == BAD_APICID)
- return INVALID_ACPIID;
-
- for (acpiid = 0; acpiid < ARRAY_SIZE(x86_acpiid_to_apicid); acpiid++)
- if (x86_acpiid_to_apicid[acpiid] == apicid)
- return acpiid;
-
- return INVALID_ACPIID;
-}
diff --git a/xen/arch/x86/acpi/lib.c b/xen/arch/x86/acpi/lib.c
new file mode 100644
index 0000000000..338d866973
--- /dev/null
+++ b/xen/arch/x86/acpi/lib.c
@@ -0,0 +1,83 @@
+/*
+ * lib.c - Architecture-Specific Low-Level ACPI Support
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+#include <xen/config.h>
+#include <xen/errno.h>
+#include <xen/init.h>
+#include <xen/acpi.h>
+#include <asm/apic.h>
+#include <asm/fixmap.h>
+
+u32 __read_mostly acpi_smi_cmd;
+u8 __read_mostly acpi_enable_value;
+u8 __read_mostly acpi_disable_value;
+
+u32 __read_mostly x86_acpiid_to_apicid[MAX_MADT_ENTRIES] =
+ {[0 ... MAX_MADT_ENTRIES - 1] = BAD_APICID };
+
+/*
+ * Important Safety Note: The fixed ACPI page numbers are *subtracted*
+ * from the fixed base. That's why we start at FIX_ACPI_END and
+ * count idx down while incrementing the phys address.
+ */
+char *__acpi_map_table(unsigned long phys, unsigned long size)
+{
+ unsigned long base, offset, mapped_size;
+ int idx;
+
+ /* XEN: RAM holes above 1MB are not permanently mapped. */
+ if ((phys + size) <= (1 * 1024 * 1024))
+ return __va(phys);
+
+ offset = phys & (PAGE_SIZE - 1);
+ mapped_size = PAGE_SIZE - offset;
+ set_fixmap(FIX_ACPI_END, phys);
+ base = fix_to_virt(FIX_ACPI_END);
+
+ /*
+ * Most cases can be covered by the below.
+ */
+ idx = FIX_ACPI_END;
+ while (mapped_size < size) {
+ if (--idx < FIX_ACPI_BEGIN)
+ return NULL; /* cannot handle this */
+ phys += PAGE_SIZE;
+ set_fixmap(idx, phys);
+ mapped_size += PAGE_SIZE;
+ }
+
+ return ((char *) base + offset);
+}
+
+unsigned int acpi_get_processor_id(unsigned int cpu)
+{
+ unsigned int acpiid, apicid;
+
+ if ((apicid = x86_cpu_to_apicid[cpu]) == BAD_APICID)
+ return INVALID_ACPIID;
+
+ for (acpiid = 0; acpiid < ARRAY_SIZE(x86_acpiid_to_apicid); acpiid++)
+ if (x86_acpiid_to_apicid[acpiid] == apicid)
+ return acpiid;
+
+ return INVALID_ACPIID;
+}
diff --git a/xen/drivers/acpi/tables/Makefile b/xen/drivers/acpi/tables/Makefile
index 4d66c76b4e..e2210e0a05 100644
--- a/xen/drivers/acpi/tables/Makefile
+++ b/xen/drivers/acpi/tables/Makefile
@@ -1,5 +1,5 @@
-obj-y += tbfadt.o
-obj-y += tbinstal.o
+obj-bin-y += tbfadt.init.o
+obj-bin-y += tbinstal.init.o
obj-y += tbutils.o
-obj-y += tbxface.o
-obj-y += tbxfroot.o
+obj-bin-y += tbxface.init.o
+obj-bin-y += tbxfroot.init.o
diff --git a/xen/drivers/acpi/tables/tbxface.c b/xen/drivers/acpi/tables/tbxface.c
index 929ac50642..df6eeba7e1 100644
--- a/xen/drivers/acpi/tables/tbxface.c
+++ b/xen/drivers/acpi/tables/tbxface.c
@@ -67,7 +67,8 @@ ACPI_MODULE_NAME("tbxface")
acpi_status __init acpi_allocate_root_table(u32 initial_table_count)
{
- acpi_gbl_root_table_list.size = initial_table_count;
+ acpi_gbl_root_table_list.size = initial_table_count -
+ ACPI_ROOT_TABLE_SIZE_INCREMENT;
acpi_gbl_root_table_list.flags = ACPI_ROOT_ALLOW_RESIZE;
return (acpi_tb_resize_root_table_list());
diff --git a/xen/drivers/acpi/utilities/Makefile b/xen/drivers/acpi/utilities/Makefile
index 34b55e36ed..a60df8be7c 100644
--- a/xen/drivers/acpi/utilities/Makefile
+++ b/xen/drivers/acpi/utilities/Makefile
@@ -1,2 +1,2 @@
obj-y += utglobal.o
-obj-y += utmisc.o
+obj-bin-y += utmisc.init.o
diff --git a/xen/drivers/acpi/utilities/utmisc.c b/xen/drivers/acpi/utilities/utmisc.c
index 96d1486dd1..b3e30126ab 100644
--- a/xen/drivers/acpi/utilities/utmisc.c
+++ b/xen/drivers/acpi/utilities/utmisc.c
@@ -135,7 +135,7 @@ const char *__init acpi_ut_validate_exception(acpi_status status)
******************************************************************************/
void ACPI_INTERNAL_VAR_XFACE __init
-acpi_ut_error(char *module_name, u32 line_number, char *format, ...)
+acpi_ut_error(const char *module_name, u32 line_number, char *format, ...)
{
va_list args;
@@ -148,7 +148,7 @@ acpi_ut_error(char *module_name, u32 line_number, char *format, ...)
}
void ACPI_INTERNAL_VAR_XFACE __init
-acpi_ut_warning(char *module_name, u32 line_number, char *format, ...)
+acpi_ut_warning(const char *module_name, u32 line_number, char *format, ...)
{
va_list args;
@@ -162,7 +162,7 @@ acpi_ut_warning(char *module_name, u32 line_number, char *format, ...)
}
void ACPI_INTERNAL_VAR_XFACE __init
-acpi_ut_info(char *module_name, u32 line_number, char *format, ...)
+acpi_ut_info(const char *module_name, u32 line_number, char *format, ...)
{
va_list args;
diff --git a/xen/include/acpi/acmacros.h b/xen/include/acpi/acmacros.h
index 7a6664794d..6765535053 100644
--- a/xen/include/acpi/acmacros.h
+++ b/xen/include/acpi/acmacros.h
@@ -413,7 +413,7 @@
* error messages. The __FILE__ macro is not very useful for this, because it
* often includes the entire pathname to the module
*/
-#define ACPI_MODULE_NAME(name) static char ACPI_UNUSED_VAR *_acpi_module_name = name;
+#define ACPI_MODULE_NAME(name) static const char ACPI_UNUSED_VAR _acpi_module_name[] = name;
#else
#define ACPI_MODULE_NAME(name)
#endif
diff --git a/xen/include/acpi/acutils.h b/xen/include/acpi/acutils.h
index 97d67a6e0e..b1b0df758b 100644
--- a/xen/include/acpi/acutils.h
+++ b/xen/include/acpi/acutils.h
@@ -121,41 +121,41 @@ void acpi_ut_track_stack_ptr(void);
void
acpi_ut_trace(u32 line_number,
- const char *function_name, char *module_name, u32 component_id);
+ const char *function_name, const char *module_name, u32 component_id);
void
acpi_ut_trace_ptr(u32 line_number,
const char *function_name,
- char *module_name, u32 component_id, void *pointer);
+ const char *module_name, u32 component_id, void *pointer);
void
acpi_ut_trace_u32(u32 line_number,
const char *function_name,
- char *module_name, u32 component_id, u32 integer);
+ const char *module_name, u32 component_id, u32 integer);
void
acpi_ut_trace_str(u32 line_number,
const char *function_name,
- char *module_name, u32 component_id, char *string);
+ const char *module_name, u32 component_id, char *string);
void
acpi_ut_exit(u32 line_number,
- const char *function_name, char *module_name, u32 component_id);
+ const char *function_name, const char *module_name, u32 component_id);
void
acpi_ut_status_exit(u32 line_number,
const char *function_name,
- char *module_name, u32 component_id, acpi_status status);
+ const char *module_name, u32 component_id, acpi_status status);
void
acpi_ut_value_exit(u32 line_number,
const char *function_name,
- char *module_name, u32 component_id, acpi_integer value);
+ const char *module_name, u32 component_id, acpi_integer value);
void
acpi_ut_ptr_exit(u32 line_number,
const char *function_name,
- char *module_name, u32 component_id, u8 * ptr);
+ const char *module_name, u32 component_id, u8 * ptr);
/* Error and message reporting interfaces */
@@ -163,32 +163,32 @@ void ACPI_INTERNAL_VAR_XFACE
acpi_ut_debug_print(u32 requested_debug_level,
u32 line_number,
const char *function_name,
- char *module_name,
+ const char *module_name,
u32 component_id, char *format, ...) ACPI_PRINTF_LIKE(6);
void ACPI_INTERNAL_VAR_XFACE
acpi_ut_debug_print_raw(u32 requested_debug_level,
u32 line_number,
const char *function_name,
- char *module_name,
+ const char *module_name,
u32 component_id,
char *format, ...) ACPI_PRINTF_LIKE(6);
void ACPI_INTERNAL_VAR_XFACE
-acpi_ut_error(char *module_name,
+acpi_ut_error(const char *module_name,
u32 line_number, char *format, ...) ACPI_PRINTF_LIKE(3);
void ACPI_INTERNAL_VAR_XFACE
-acpi_ut_exception(char *module_name,
+acpi_ut_exception(const char *module_name,
u32 line_number,
acpi_status status, char *format, ...) ACPI_PRINTF_LIKE(4);
void ACPI_INTERNAL_VAR_XFACE
-acpi_ut_warning(char *module_name,
+acpi_ut_warning(const char *module_name,
u32 line_number, char *format, ...) ACPI_PRINTF_LIKE(3);
void ACPI_INTERNAL_VAR_XFACE
-acpi_ut_info(char *module_name,
+acpi_ut_info(const char *module_name,
u32 line_number, char *format, ...) ACPI_PRINTF_LIKE(3);
/*