diff options
author | Chris Metcalf <cmetcalf@tilera.com> | 2011-05-02 15:35:06 -0400 |
---|---|---|
committer | Chris Metcalf <cmetcalf@tilera.com> | 2011-05-04 14:40:25 -0400 |
commit | 229f4df1fb84e5d3306b4fc49b41f7847340092d (patch) | |
tree | 1e7bbb5c6af2d5a2891910492469df876e2885d6 /arch/tile | |
parent | 7194988fb5add6341b95f4501f6778bf27b4d3de (diff) |
arch/tile: properly flush the I$ when unloading kernel modules
Otherwise, in principle, there could be stale I$ data present
next time the page that previously held the kernel module code was
used to run some new code.
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Diffstat (limited to 'arch/tile')
-rw-r--r-- | arch/tile/kernel/module.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/tile/kernel/module.c b/arch/tile/kernel/module.c index e2ab82b7c7e7..f68df69f1f67 100644 --- a/arch/tile/kernel/module.c +++ b/arch/tile/kernel/module.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <asm/opcode-tile.h> | 23 | #include <asm/opcode-tile.h> |
24 | #include <asm/pgtable.h> | 24 | #include <asm/pgtable.h> |
25 | #include <asm/homecache.h> | ||
25 | 26 | ||
26 | #ifdef __tilegx__ | 27 | #ifdef __tilegx__ |
27 | # define Elf_Rela Elf64_Rela | 28 | # define Elf_Rela Elf64_Rela |
@@ -86,8 +87,13 @@ error: | |||
86 | void module_free(struct module *mod, void *module_region) | 87 | void module_free(struct module *mod, void *module_region) |
87 | { | 88 | { |
88 | vfree(module_region); | 89 | vfree(module_region); |
90 | |||
91 | /* Globally flush the L1 icache. */ | ||
92 | flush_remote(0, HV_FLUSH_EVICT_L1I, cpu_online_mask, | ||
93 | 0, 0, 0, NULL, NULL, 0); | ||
94 | |||
89 | /* | 95 | /* |
90 | * FIXME: If module_region == mod->init_region, trim exception | 96 | * FIXME: If module_region == mod->module_init, trim exception |
91 | * table entries. | 97 | * table entries. |
92 | */ | 98 | */ |
93 | } | 99 | } |