Skip to content

Commit 0ef7653

Browse files
Paul Gortmakerrustyrussell
authored andcommitted
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 <[email protected]> Cc: Linus Torvalds <[email protected]> Signed-off-by: Paul Gortmaker <[email protected]> Signed-off-by: Rusty Russell <[email protected]>
1 parent be7de5f commit 0ef7653

File tree

2 files changed

+32
-25
lines changed

2 files changed

+32
-25
lines changed

include/linux/extable.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#ifndef _LINUX_EXTABLE_H
2+
#define _LINUX_EXTABLE_H
3+
4+
struct module;
5+
struct exception_table_entry;
6+
7+
const struct exception_table_entry *
8+
search_extable(const struct exception_table_entry *first,
9+
const struct exception_table_entry *last,
10+
unsigned long value);
11+
void sort_extable(struct exception_table_entry *start,
12+
struct exception_table_entry *finish);
13+
void sort_main_extable(void);
14+
void trim_init_extable(struct module *m);
15+
16+
/* Given an address, look for it in the exception tables */
17+
const struct exception_table_entry *search_exception_tables(unsigned long add);
18+
19+
#ifdef CONFIG_MODULES
20+
/* For extable.c to search modules' exception tables. */
21+
const struct exception_table_entry *search_module_extables(unsigned long addr);
22+
#else
23+
static inline const struct exception_table_entry *
24+
search_module_extables(unsigned long addr)
25+
{
26+
return NULL;
27+
}
28+
#endif /*CONFIG_MODULES*/
29+
30+
#endif /* _LINUX_EXTABLE_H */

include/linux/module.h

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <linux/moduleparam.h>
1919
#include <linux/jump_label.h>
2020
#include <linux/export.h>
21+
#include <linux/extable.h> /* only as arch move module.h -> extable.h */
2122
#include <linux/rbtree_latch.h>
2223

2324
#include <linux/percpu.h>
@@ -37,6 +38,7 @@ struct modversion_info {
3738
};
3839

3940
struct module;
41+
struct exception_table_entry;
4042

4143
struct module_kobject {
4244
struct kobject kobj;
@@ -155,18 +157,6 @@ extern void cleanup_module(void);
155157
#define __INITRODATA_OR_MODULE __INITRODATA
156158
#endif /*CONFIG_MODULES*/
157159

158-
/* Archs provide a method of finding the correct exception table. */
159-
struct exception_table_entry;
160-
161-
const struct exception_table_entry *
162-
search_extable(const struct exception_table_entry *first,
163-
const struct exception_table_entry *last,
164-
unsigned long value);
165-
void sort_extable(struct exception_table_entry *start,
166-
struct exception_table_entry *finish);
167-
void sort_main_extable(void);
168-
void trim_init_extable(struct module *m);
169-
170160
/* Generic info of form tag = "info" */
171161
#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
172162

@@ -268,9 +258,6 @@ extern const typeof(name) __mod_##type##__##name##_device_table \
268258
* files require multiple MODULE_FIRMWARE() specifiers */
269259
#define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware)
270260

271-
/* Given an address, look for it in the exception tables */
272-
const struct exception_table_entry *search_exception_tables(unsigned long add);
273-
274261
struct notifier_block;
275262

276263
#ifdef CONFIG_MODULES
@@ -630,9 +617,6 @@ const char *module_address_lookup(unsigned long addr,
630617
int lookup_module_symbol_name(unsigned long addr, char *symname);
631618
int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name);
632619

633-
/* For extable.c to search modules' exception tables. */
634-
const struct exception_table_entry *search_module_extables(unsigned long addr);
635-
636620
int register_module_notifier(struct notifier_block *nb);
637621
int unregister_module_notifier(struct notifier_block *nb);
638622

@@ -657,13 +641,6 @@ static inline bool is_livepatch_module(struct module *mod)
657641

658642
#else /* !CONFIG_MODULES... */
659643

660-
/* Given an address, look for it in the exception tables. */
661-
static inline const struct exception_table_entry *
662-
search_module_extables(unsigned long addr)
663-
{
664-
return NULL;
665-
}
666-
667644
static inline struct module *__module_address(unsigned long addr)
668645
{
669646
return NULL;

0 commit comments

Comments
 (0)