|
|
|
@ -480,21 +480,6 @@ static void percpu_modfree(void *freeme) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static unsigned int find_pcpusec(Elf_Ehdr *hdr, |
|
|
|
|
Elf_Shdr *sechdrs, |
|
|
|
|
const char *secstrings) |
|
|
|
|
{ |
|
|
|
|
return find_sec(hdr, sechdrs, secstrings, ".data.percpu"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void percpu_modcopy(void *pcpudest, const void *from, unsigned long size) |
|
|
|
|
{ |
|
|
|
|
int cpu; |
|
|
|
|
|
|
|
|
|
for_each_possible_cpu(cpu) |
|
|
|
|
memcpy(pcpudest + per_cpu_offset(cpu), from, size); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int percpu_modinit(void) |
|
|
|
|
{ |
|
|
|
|
pcpu_num_used = 2; |
|
|
|
@ -513,7 +498,24 @@ static int percpu_modinit(void) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
__initcall(percpu_modinit); |
|
|
|
|
|
|
|
|
|
static unsigned int find_pcpusec(Elf_Ehdr *hdr, |
|
|
|
|
Elf_Shdr *sechdrs, |
|
|
|
|
const char *secstrings) |
|
|
|
|
{ |
|
|
|
|
return find_sec(hdr, sechdrs, secstrings, ".data.percpu"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void percpu_modcopy(void *pcpudest, const void *from, unsigned long size) |
|
|
|
|
{ |
|
|
|
|
int cpu; |
|
|
|
|
|
|
|
|
|
for_each_possible_cpu(cpu) |
|
|
|
|
memcpy(pcpudest + per_cpu_offset(cpu), from, size); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#else /* ... !CONFIG_SMP */ |
|
|
|
|
|
|
|
|
|
static inline void *percpu_modalloc(unsigned long size, unsigned long align, |
|
|
|
|
const char *name) |
|
|
|
|
{ |
|
|
|
@ -535,6 +537,7 @@ static inline void percpu_modcopy(void *pcpudst, const void *src, |
|
|
|
|
/* pcpusec should be 0, and size of that section should be 0. */ |
|
|
|
|
BUG_ON(size != 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif /* CONFIG_SMP */ |
|
|
|
|
|
|
|
|
|
#define MODINFO_ATTR(field) \ |
|
|
|
|