Commit 0ef76537 authored by Paul Gortmaker's avatar Paul Gortmaker Committed by Rusty Russell

exceptions: fork exception table content from module.h into extable.h

For historical reasons (i.e. pre-git) the exception table stuff was
buried in the middle of the module.h file.  I noticed this while
doing an audit for needless includes of module.h and found core
kernel files (both arch specific and arch independent) were just
including module.h for this.

The converse is also true, in that conventional drivers, be they
for filesystems or actual hardware peripherals or similar, do not
normally care about the exception tables.

Here we fork the exception table content out of module.h into a
new file called extable.h -- and temporarily include it into the
module.h itself.

Then we will work our way across the arch independent and arch
specific files needing just exception table content, and move
them off module.h and onto extable.h

Once that is done, we can remove the extable.h from module.h
and in doing it like this, we avoid introducing build failures
into the git history.

The gain here is that module.h gets a bit smaller, across all
modular drivers that we build for allmodconfig.  Also the core
files that only need exception table stuff don't have an include
of module.h that brings in lots of extra stuff and just looks
generally out of place.

Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarPaul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent be7de5f9
#ifndef _LINUX_EXTABLE_H
#define _LINUX_EXTABLE_H
struct module;
struct exception_table_entry;
const struct exception_table_entry *
search_extable(const struct exception_table_entry *first,
const struct exception_table_entry *last,
unsigned long value);
void sort_extable(struct exception_table_entry *start,
struct exception_table_entry *finish);
void sort_main_extable(void);
void trim_init_extable(struct module *m);
/* Given an address, look for it in the exception tables */
const struct exception_table_entry *search_exception_tables(unsigned long add);
#ifdef CONFIG_MODULES
/* For extable.c to search modules' exception tables. */
const struct exception_table_entry *search_module_extables(unsigned long addr);
#else
static inline const struct exception_table_entry *
search_module_extables(unsigned long addr)
{
return NULL;
}
#endif /*CONFIG_MODULES*/
#endif /* _LINUX_EXTABLE_H */
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/moduleparam.h> #include <linux/moduleparam.h>
#include <linux/jump_label.h> #include <linux/jump_label.h>
#include <linux/export.h> #include <linux/export.h>
#include <linux/extable.h> /* only as arch move module.h -> extable.h */
#include <linux/rbtree_latch.h> #include <linux/rbtree_latch.h>
#include <linux/percpu.h> #include <linux/percpu.h>
...@@ -37,6 +38,7 @@ struct modversion_info { ...@@ -37,6 +38,7 @@ struct modversion_info {
}; };
struct module; struct module;
struct exception_table_entry;
struct module_kobject { struct module_kobject {
struct kobject kobj; struct kobject kobj;
...@@ -155,18 +157,6 @@ extern void cleanup_module(void); ...@@ -155,18 +157,6 @@ extern void cleanup_module(void);
#define __INITRODATA_OR_MODULE __INITRODATA #define __INITRODATA_OR_MODULE __INITRODATA
#endif /*CONFIG_MODULES*/ #endif /*CONFIG_MODULES*/
/* Archs provide a method of finding the correct exception table. */
struct exception_table_entry;
const struct exception_table_entry *
search_extable(const struct exception_table_entry *first,
const struct exception_table_entry *last,
unsigned long value);
void sort_extable(struct exception_table_entry *start,
struct exception_table_entry *finish);
void sort_main_extable(void);
void trim_init_extable(struct module *m);
/* Generic info of form tag = "info" */ /* Generic info of form tag = "info" */
#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info) #define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
...@@ -268,9 +258,6 @@ extern const typeof(name) __mod_##type##__##name##_device_table \ ...@@ -268,9 +258,6 @@ extern const typeof(name) __mod_##type##__##name##_device_table \
* files require multiple MODULE_FIRMWARE() specifiers */ * files require multiple MODULE_FIRMWARE() specifiers */
#define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware) #define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware)
/* Given an address, look for it in the exception tables */
const struct exception_table_entry *search_exception_tables(unsigned long add);
struct notifier_block; struct notifier_block;
#ifdef CONFIG_MODULES #ifdef CONFIG_MODULES
...@@ -630,9 +617,6 @@ const char *module_address_lookup(unsigned long addr, ...@@ -630,9 +617,6 @@ const char *module_address_lookup(unsigned long addr,
int lookup_module_symbol_name(unsigned long addr, char *symname); int lookup_module_symbol_name(unsigned long addr, char *symname);
int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name); int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name);
/* For extable.c to search modules' exception tables. */
const struct exception_table_entry *search_module_extables(unsigned long addr);
int register_module_notifier(struct notifier_block *nb); int register_module_notifier(struct notifier_block *nb);
int unregister_module_notifier(struct notifier_block *nb); int unregister_module_notifier(struct notifier_block *nb);
...@@ -657,13 +641,6 @@ static inline bool is_livepatch_module(struct module *mod) ...@@ -657,13 +641,6 @@ static inline bool is_livepatch_module(struct module *mod)
#else /* !CONFIG_MODULES... */ #else /* !CONFIG_MODULES... */
/* Given an address, look for it in the exception tables. */
static inline const struct exception_table_entry *
search_module_extables(unsigned long addr)
{
return NULL;
}
static inline struct module *__module_address(unsigned long addr) static inline struct module *__module_address(unsigned long addr)
{ {
return NULL; return NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment