mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
Merge tag 'modules-6.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux
Pull module updates from Luis Chamberlain:
"The summary of the changes for this pull requests is:
- Song Liu's new struct module_memory replacement
- Nick Alcock's MODULE_LICENSE() removal for non-modules
- My cleanups and enhancements to reduce the areas where we vmalloc
module memory for duplicates, and the respective debug code which
proves the remaining vmalloc pressure comes from userspace.
Most of the changes have been in linux-next for quite some time except
the minor fixes I made to check if a module was already loaded prior
to allocating the final module memory with vmalloc and the respective
debug code it introduces to help clarify the issue. Although the
functional change is small it is rather safe as it can only *help*
reduce vmalloc space for duplicates and is confirmed to fix a bootup
issue with over 400 CPUs with KASAN enabled. I don't expect stable
kernels to pick up that fix as the cleanups would have also had to
have been picked up. Folks on larger CPU systems with modules will
want to just upgrade if vmalloc space has been an issue on bootup.
Given the size of this request, here's some more elaborate details:
The functional change change in this pull request is the very first
patch from Song Liu which replaces the 'struct module_layout' with a
new 'struct module_memory'. The old data structure tried to put
together all types of supported module memory types in one data
structure, the new one abstracts the differences in memory types in a
module to allow each one to provide their own set of details. This
paves the way in the future so we can deal with them in a cleaner way.
If you look at changes they also provide a nice cleanup of how we
handle these different memory areas in a module. This change has been
in linux-next since before the merge window opened for v6.3 so to
provide more than a full kernel cycle of testing. It's a good thing as
quite a bit of fixes have been found for it.
Jason Baron then made dynamic debug a first class citizen module user
by using module notifier callbacks to allocate / remove module
specific dynamic debug information.
Nick Alcock has done quite a bit of work cross-tree to remove module
license tags from things which cannot possibly be module at my request
so to:
a) help him with his longer term tooling goals which require a
deterministic evaluation if a piece a symbol code could ever be
part of a module or not. But quite recently it is has been made
clear that tooling is not the only one that would benefit.
Disambiguating symbols also helps efforts such as live patching,
kprobes and BPF, but for other reasons and R&D on this area is
active with no clear solution in sight.
b) help us inch closer to the now generally accepted long term goal
of automating all the MODULE_LICENSE() tags from SPDX license tags
In so far as a) is concerned, although module license tags are a no-op
for non-modules, tools which would want create a mapping of possible
modules can only rely on the module license tag after the commit
8b41fc4454 ("kbuild: create modules.builtin without
Makefile.modbuiltin or tristate.conf").
Nick has been working on this *for years* and AFAICT I was the only
one to suggest two alternatives to this approach for tooling. The
complexity in one of my suggested approaches lies in that we'd need a
possible-obj-m and a could-be-module which would check if the object
being built is part of any kconfig build which could ever lead to it
being part of a module, and if so define a new define
-DPOSSIBLE_MODULE [0].
A more obvious yet theoretical approach I've suggested would be to
have a tristate in kconfig imply the same new -DPOSSIBLE_MODULE as
well but that means getting kconfig symbol names mapping to modules
always, and I don't think that's the case today. I am not aware of
Nick or anyone exploring either of these options. Quite recently Josh
Poimboeuf has pointed out that live patching, kprobes and BPF would
benefit from resolving some part of the disambiguation as well but for
other reasons. The function granularity KASLR (fgkaslr) patches were
mentioned but Joe Lawrence has clarified this effort has been dropped
with no clear solution in sight [1].
In the meantime removing module license tags from code which could
never be modules is welcomed for both objectives mentioned above. Some
developers have also welcomed these changes as it has helped clarify
when a module was never possible and they forgot to clean this up, and
so you'll see quite a bit of Nick's patches in other pull requests for
this merge window. I just picked up the stragglers after rc3. LWN has
good coverage on the motivation behind this work [2] and the typical
cross-tree issues he ran into along the way. The only concrete blocker
issue he ran into was that we should not remove the MODULE_LICENSE()
tags from files which have no SPDX tags yet, even if they can never be
modules. Nick ended up giving up on his efforts due to having to do
this vetting and backlash he ran into from folks who really did *not
understand* the core of the issue nor were providing any alternative /
guidance. I've gone through his changes and dropped the patches which
dropped the module license tags where an SPDX license tag was missing,
it only consisted of 11 drivers. To see if a pull request deals with a
file which lacks SPDX tags you can just use:
./scripts/spdxcheck.py -f \
$(git diff --name-only commid-id | xargs echo)
You'll see a core module file in this pull request for the above, but
that's not related to his changes. WE just need to add the SPDX
license tag for the kernel/module/kmod.c file in the future but it
demonstrates the effectiveness of the script.
Most of Nick's changes were spread out through different trees, and I
just picked up the slack after rc3 for the last kernel was out. Those
changes have been in linux-next for over two weeks.
The cleanups, debug code I added and final fix I added for modules
were motivated by David Hildenbrand's report of boot failing on a
systems with over 400 CPUs when KASAN was enabled due to running out
of virtual memory space. Although the functional change only consists
of 3 lines in the patch "module: avoid allocation if module is already
present and ready", proving that this was the best we can do on the
modules side took quite a bit of effort and new debug code.
The initial cleanups I did on the modules side of things has been in
linux-next since around rc3 of the last kernel, the actual final fix
for and debug code however have only been in linux-next for about a
week or so but I think it is worth getting that code in for this merge
window as it does help fix / prove / evaluate the issues reported with
larger number of CPUs. Userspace is not yet fixed as it is taking a
bit of time for folks to understand the crux of the issue and find a
proper resolution. Worst come to worst, I have a kludge-of-concept [3]
of how to make kernel_read*() calls for modules unique / converge
them, but I'm currently inclined to just see if userspace can fix this
instead"
Link: https://lore.kernel.org/all/Y/kXDqW+7d71C4wz@bombadil.infradead.org/ [0]
Link: https://lkml.kernel.org/r/025f2151-ce7c-5630-9b90-98742c97ac65@redhat.com [1]
Link: https://lwn.net/Articles/927569/ [2]
Link: https://lkml.kernel.org/r/20230414052840.1994456-3-mcgrof@kernel.org [3]
* tag 'modules-6.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux: (121 commits)
module: add debugging auto-load duplicate module support
module: stats: fix invalid_mod_bytes typo
module: remove use of uninitialized variable len
module: fix building stats for 32-bit targets
module: stats: include uapi/linux/module.h
module: avoid allocation if module is already present and ready
module: add debug stats to help identify memory pressure
module: extract patient module check into helper
modules/kmod: replace implementation with a semaphore
Change DEFINE_SEMAPHORE() to take a number argument
module: fix kmemleak annotations for non init ELF sections
module: Ignore L0 and rename is_arm_mapping_symbol()
module: Move is_arm_mapping_symbol() to module_symbol.h
module: Sync code of is_arm_mapping_symbol()
scripts/gdb: use mem instead of core_layout to get the module address
interconnect: remove module-related code
interconnect: remove MODULE_LICENSE in non-modules
zswap: remove MODULE_LICENSE in non-modules
zpool: remove MODULE_LICENSE in non-modules
x86/mm/dump_pagetables: remove MODULE_LICENSE in non-modules
...
This commit is contained in:
@@ -3363,6 +3363,12 @@
|
|||||||
specified, <module>.async_probe takes precedence for
|
specified, <module>.async_probe takes precedence for
|
||||||
the specific module.
|
the specific module.
|
||||||
|
|
||||||
|
module.enable_dups_trace
|
||||||
|
[KNL] When CONFIG_MODULE_DEBUG_AUTOLOAD_DUPS is set,
|
||||||
|
this means that duplicate request_module() calls will
|
||||||
|
trigger a WARN_ON() instead of a pr_warn(). Note that
|
||||||
|
if MODULE_DEBUG_AUTOLOAD_DUPS_TRACE is set, WARN_ON()s
|
||||||
|
will always be issued and this option does nothing.
|
||||||
module.sig_enforce
|
module.sig_enforce
|
||||||
[KNL] When CONFIG_MODULE_SIG is set, this means that
|
[KNL] When CONFIG_MODULE_SIG is set, this means that
|
||||||
modules without (valid) signatures will fail to load.
|
modules without (valid) signatures will fail to load.
|
||||||
|
|||||||
@@ -220,12 +220,30 @@ relay interface
|
|||||||
Module Support
|
Module Support
|
||||||
==============
|
==============
|
||||||
|
|
||||||
Module Loading
|
Kernel module auto-loading
|
||||||
--------------
|
--------------------------
|
||||||
|
|
||||||
.. kernel-doc:: kernel/kmod.c
|
.. kernel-doc:: kernel/module/kmod.c
|
||||||
:export:
|
:export:
|
||||||
|
|
||||||
|
Module debugging
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. kernel-doc:: kernel/module/stats.c
|
||||||
|
:doc: module debugging statistics overview
|
||||||
|
|
||||||
|
dup_failed_modules - tracks duplicate failed modules
|
||||||
|
****************************************************
|
||||||
|
|
||||||
|
.. kernel-doc:: kernel/module/stats.c
|
||||||
|
:doc: dup_failed_modules - tracks duplicate failed modules
|
||||||
|
|
||||||
|
module statistics debugfs counters
|
||||||
|
**********************************
|
||||||
|
|
||||||
|
.. kernel-doc:: kernel/module/stats.c
|
||||||
|
:doc: module statistics debugfs counters
|
||||||
|
|
||||||
Inter Module support
|
Inter Module support
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ kernel/relay.c
|
|||||||
|
|
||||||
该API在以下内核代码中:
|
该API在以下内核代码中:
|
||||||
|
|
||||||
kernel/kmod.c
|
kernel/module/kmod.c
|
||||||
|
|
||||||
模块接口支持
|
模块接口支持
|
||||||
------------
|
------------
|
||||||
|
|||||||
13
MAINTAINERS
13
MAINTAINERS
@@ -11601,16 +11601,6 @@ F: include/linux/kmemleak.h
|
|||||||
F: mm/kmemleak.c
|
F: mm/kmemleak.c
|
||||||
F: samples/kmemleak/kmemleak-test.c
|
F: samples/kmemleak/kmemleak-test.c
|
||||||
|
|
||||||
KMOD KERNEL MODULE LOADER - USERMODE HELPER
|
|
||||||
M: Luis Chamberlain <mcgrof@kernel.org>
|
|
||||||
L: linux-kernel@vger.kernel.org
|
|
||||||
L: linux-modules@vger.kernel.org
|
|
||||||
S: Maintained
|
|
||||||
F: include/linux/kmod.h
|
|
||||||
F: kernel/kmod.c
|
|
||||||
F: lib/test_kmod.c
|
|
||||||
F: tools/testing/selftests/kmod/
|
|
||||||
|
|
||||||
KMSAN
|
KMSAN
|
||||||
M: Alexander Potapenko <glider@google.com>
|
M: Alexander Potapenko <glider@google.com>
|
||||||
R: Marco Elver <elver@google.com>
|
R: Marco Elver <elver@google.com>
|
||||||
@@ -14186,8 +14176,11 @@ L: linux-kernel@vger.kernel.org
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux.git modules-next
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux.git modules-next
|
||||||
F: include/linux/module.h
|
F: include/linux/module.h
|
||||||
|
F: include/linux/kmod.h
|
||||||
F: kernel/module/
|
F: kernel/module/
|
||||||
F: scripts/module*
|
F: scripts/module*
|
||||||
|
F: lib/test_kmod.c
|
||||||
|
F: tools/testing/selftests/kmod/
|
||||||
|
|
||||||
MONOLITHIC POWER SYSTEM PMIC DRIVER
|
MONOLITHIC POWER SYSTEM PMIC DRIVER
|
||||||
M: Saravanan Sekar <sravanhome@gmail.com>
|
M: Saravanan Sekar <sravanhome@gmail.com>
|
||||||
|
|||||||
@@ -369,6 +369,8 @@ void *unwind_add_table(struct module *module, const void *table_start,
|
|||||||
unsigned long table_size)
|
unsigned long table_size)
|
||||||
{
|
{
|
||||||
struct unwind_table *table;
|
struct unwind_table *table;
|
||||||
|
struct module_memory *core_text;
|
||||||
|
struct module_memory *init_text;
|
||||||
|
|
||||||
if (table_size <= 0)
|
if (table_size <= 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -377,11 +379,11 @@ void *unwind_add_table(struct module *module, const void *table_start,
|
|||||||
if (!table)
|
if (!table)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
init_unwind_table(table, module->name,
|
core_text = &module->mem[MOD_TEXT];
|
||||||
module->core_layout.base, module->core_layout.size,
|
init_text = &module->mem[MOD_INIT_TEXT];
|
||||||
module->init_layout.base, module->init_layout.size,
|
|
||||||
table_start, table_size,
|
init_unwind_table(table, module->name, core_text->base, core_text->size,
|
||||||
NULL, 0);
|
init_text->base, init_text->size, table_start, table_size, NULL, 0);
|
||||||
|
|
||||||
init_unwind_hdr(table, unw_hdr_alloc);
|
init_unwind_hdr(table, unw_hdr_alloc);
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
/* Not needed, but used in some headers pulled in by decompressors */
|
/* Not needed, but used in some headers pulled in by decompressors */
|
||||||
extern char * strstr(const char * s1, const char *s2);
|
extern char * strstr(const char * s1, const char *s2);
|
||||||
extern size_t strlen(const char *s);
|
extern size_t strlen(const char *s);
|
||||||
|
extern int strcmp(const char *cs, const char *ct);
|
||||||
extern int memcmp(const void *cs, const void *ct, size_t count);
|
extern int memcmp(const void *cs, const void *ct, size_t count);
|
||||||
extern char * strchrnul(const char *, int);
|
extern char * strchrnul(const char *, int);
|
||||||
|
|
||||||
|
|||||||
@@ -28,11 +28,6 @@ static const u32 fixed_plts[] = {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool in_init(const struct module *mod, unsigned long loc)
|
|
||||||
{
|
|
||||||
return loc - (u32)mod->init_layout.base < mod->init_layout.size;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void prealloc_fixed(struct mod_plt_sec *pltsec, struct plt_entries *plt)
|
static void prealloc_fixed(struct mod_plt_sec *pltsec, struct plt_entries *plt)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -50,8 +45,8 @@ static void prealloc_fixed(struct mod_plt_sec *pltsec, struct plt_entries *plt)
|
|||||||
|
|
||||||
u32 get_module_plt(struct module *mod, unsigned long loc, Elf32_Addr val)
|
u32 get_module_plt(struct module *mod, unsigned long loc, Elf32_Addr val)
|
||||||
{
|
{
|
||||||
struct mod_plt_sec *pltsec = !in_init(mod, loc) ? &mod->arch.core :
|
struct mod_plt_sec *pltsec = !within_module_init(loc, mod) ?
|
||||||
&mod->arch.init;
|
&mod->arch.core : &mod->arch.init;
|
||||||
struct plt_entries *plt;
|
struct plt_entries *plt;
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
|
|||||||
@@ -65,17 +65,12 @@ static bool plt_entries_equal(const struct plt_entry *a,
|
|||||||
(q + aarch64_insn_adrp_get_offset(le32_to_cpu(b->adrp)));
|
(q + aarch64_insn_adrp_get_offset(le32_to_cpu(b->adrp)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool in_init(const struct module *mod, void *loc)
|
|
||||||
{
|
|
||||||
return (u64)loc - (u64)mod->init_layout.base < mod->init_layout.size;
|
|
||||||
}
|
|
||||||
|
|
||||||
u64 module_emit_plt_entry(struct module *mod, Elf64_Shdr *sechdrs,
|
u64 module_emit_plt_entry(struct module *mod, Elf64_Shdr *sechdrs,
|
||||||
void *loc, const Elf64_Rela *rela,
|
void *loc, const Elf64_Rela *rela,
|
||||||
Elf64_Sym *sym)
|
Elf64_Sym *sym)
|
||||||
{
|
{
|
||||||
struct mod_plt_sec *pltsec = !in_init(mod, loc) ? &mod->arch.core :
|
struct mod_plt_sec *pltsec = !within_module_init((unsigned long)loc, mod) ?
|
||||||
&mod->arch.init;
|
&mod->arch.core : &mod->arch.init;
|
||||||
struct plt_entry *plt = (struct plt_entry *)sechdrs[pltsec->plt_shndx].sh_addr;
|
struct plt_entry *plt = (struct plt_entry *)sechdrs[pltsec->plt_shndx].sh_addr;
|
||||||
int i = pltsec->plt_num_entries;
|
int i = pltsec->plt_num_entries;
|
||||||
int j = i - 1;
|
int j = i - 1;
|
||||||
@@ -105,8 +100,8 @@ u64 module_emit_plt_entry(struct module *mod, Elf64_Shdr *sechdrs,
|
|||||||
u64 module_emit_veneer_for_adrp(struct module *mod, Elf64_Shdr *sechdrs,
|
u64 module_emit_veneer_for_adrp(struct module *mod, Elf64_Shdr *sechdrs,
|
||||||
void *loc, u64 val)
|
void *loc, u64 val)
|
||||||
{
|
{
|
||||||
struct mod_plt_sec *pltsec = !in_init(mod, loc) ? &mod->arch.core :
|
struct mod_plt_sec *pltsec = !within_module_init((unsigned long)loc, mod) ?
|
||||||
&mod->arch.init;
|
&mod->arch.core : &mod->arch.init;
|
||||||
struct plt_entry *plt = (struct plt_entry *)sechdrs[pltsec->plt_shndx].sh_addr;
|
struct plt_entry *plt = (struct plt_entry *)sechdrs[pltsec->plt_shndx].sh_addr;
|
||||||
int i = pltsec->plt_num_entries++;
|
int i = pltsec->plt_num_entries++;
|
||||||
u32 br;
|
u32 br;
|
||||||
|
|||||||
@@ -485,19 +485,19 @@ module_frob_arch_sections (Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, char *secstrings,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline bool
|
||||||
in_init (const struct module *mod, uint64_t addr)
|
in_init (const struct module *mod, uint64_t addr)
|
||||||
{
|
{
|
||||||
return addr - (uint64_t) mod->init_layout.base < mod->init_layout.size;
|
return within_module_init(addr, mod);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline bool
|
||||||
in_core (const struct module *mod, uint64_t addr)
|
in_core (const struct module *mod, uint64_t addr)
|
||||||
{
|
{
|
||||||
return addr - (uint64_t) mod->core_layout.base < mod->core_layout.size;
|
return within_module_core(addr, mod);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline bool
|
||||||
is_internal (const struct module *mod, uint64_t value)
|
is_internal (const struct module *mod, uint64_t value)
|
||||||
{
|
{
|
||||||
return in_init(mod, value) || in_core(mod, value);
|
return in_init(mod, value) || in_core(mod, value);
|
||||||
@@ -677,7 +677,8 @@ do_reloc (struct module *mod, uint8_t r_type, Elf64_Sym *sym, uint64_t addend,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case RV_BDREL:
|
case RV_BDREL:
|
||||||
val -= (uint64_t) (in_init(mod, val) ? mod->init_layout.base : mod->core_layout.base);
|
val -= (uint64_t) (in_init(mod, val) ? mod->mem[MOD_INIT_TEXT].base :
|
||||||
|
mod->mem[MOD_TEXT].base);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RV_LTV:
|
case RV_LTV:
|
||||||
@@ -812,15 +813,18 @@ apply_relocate_add (Elf64_Shdr *sechdrs, const char *strtab, unsigned int symind
|
|||||||
* addresses have been selected...
|
* addresses have been selected...
|
||||||
*/
|
*/
|
||||||
uint64_t gp;
|
uint64_t gp;
|
||||||
if (mod->core_layout.size > MAX_LTOFF)
|
struct module_memory *mod_mem;
|
||||||
|
|
||||||
|
mod_mem = &mod->mem[MOD_DATA];
|
||||||
|
if (mod_mem->size > MAX_LTOFF)
|
||||||
/*
|
/*
|
||||||
* This takes advantage of fact that SHF_ARCH_SMALL gets allocated
|
* This takes advantage of fact that SHF_ARCH_SMALL gets allocated
|
||||||
* at the end of the module.
|
* at the end of the module.
|
||||||
*/
|
*/
|
||||||
gp = mod->core_layout.size - MAX_LTOFF / 2;
|
gp = mod_mem->size - MAX_LTOFF / 2;
|
||||||
else
|
else
|
||||||
gp = mod->core_layout.size / 2;
|
gp = mod_mem->size / 2;
|
||||||
gp = (uint64_t) mod->core_layout.base + ((gp + 7) & -8);
|
gp = (uint64_t) mod_mem->base + ((gp + 7) & -8);
|
||||||
mod->arch.gp = gp;
|
mod->arch.gp = gp;
|
||||||
DEBUGP("%s: placing gp at 0x%lx\n", __func__, gp);
|
DEBUGP("%s: placing gp at 0x%lx\n", __func__, gp);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ extern void pci_console_init(const char *arg);
|
|||||||
static unsigned long long max_memory = ULLONG_MAX;
|
static unsigned long long max_memory = ULLONG_MAX;
|
||||||
static unsigned long long reserve_low_mem;
|
static unsigned long long reserve_low_mem;
|
||||||
|
|
||||||
DEFINE_SEMAPHORE(octeon_bootbus_sem);
|
DEFINE_SEMAPHORE(octeon_bootbus_sem, 1);
|
||||||
EXPORT_SYMBOL(octeon_bootbus_sem);
|
EXPORT_SYMBOL(octeon_bootbus_sem);
|
||||||
|
|
||||||
static struct octeon_boot_descriptor *octeon_boot_desc_ptr;
|
static struct octeon_boot_descriptor *octeon_boot_desc_ptr;
|
||||||
|
|||||||
@@ -199,18 +199,17 @@ static void layout_sections(struct module *mod, const Elf_Ehdr *hdr,
|
|||||||
for (m = 0; m < ARRAY_SIZE(masks); ++m) {
|
for (m = 0; m < ARRAY_SIZE(masks); ++m) {
|
||||||
for (i = 0; i < hdr->e_shnum; ++i) {
|
for (i = 0; i < hdr->e_shnum; ++i) {
|
||||||
Elf_Shdr *s = &sechdrs[i];
|
Elf_Shdr *s = &sechdrs[i];
|
||||||
|
struct module_memory *mod_mem;
|
||||||
|
|
||||||
|
mod_mem = &mod->mem[MOD_TEXT];
|
||||||
|
|
||||||
if ((s->sh_flags & masks[m][0]) != masks[m][0]
|
if ((s->sh_flags & masks[m][0]) != masks[m][0]
|
||||||
|| (s->sh_flags & masks[m][1])
|
|| (s->sh_flags & masks[m][1])
|
||||||
|| s->sh_entsize != ~0UL)
|
|| s->sh_entsize != ~0UL)
|
||||||
continue;
|
continue;
|
||||||
s->sh_entsize =
|
s->sh_entsize =
|
||||||
get_offset((unsigned long *)&mod->core_layout.size, s);
|
get_offset((unsigned long *)&mod_mem->size, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m == 0)
|
|
||||||
mod->core_layout.text_size = mod->core_layout.size;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -641,7 +640,7 @@ static int vpe_elfload(struct vpe *v)
|
|||||||
layout_sections(&mod, hdr, sechdrs, secstrings);
|
layout_sections(&mod, hdr, sechdrs, secstrings);
|
||||||
}
|
}
|
||||||
|
|
||||||
v->load_addr = alloc_progmem(mod.core_layout.size);
|
v->load_addr = alloc_progmem(mod.mem[MOD_TEXT].size);
|
||||||
if (!v->load_addr)
|
if (!v->load_addr)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
|||||||
@@ -27,9 +27,9 @@
|
|||||||
* We are not doing SEGREL32 handling correctly. According to the ABI, we
|
* We are not doing SEGREL32 handling correctly. According to the ABI, we
|
||||||
* should do a value offset, like this:
|
* should do a value offset, like this:
|
||||||
* if (in_init(me, (void *)val))
|
* if (in_init(me, (void *)val))
|
||||||
* val -= (uint32_t)me->init_layout.base;
|
* val -= (uint32_t)me->mem[MOD_INIT_TEXT].base;
|
||||||
* else
|
* else
|
||||||
* val -= (uint32_t)me->core_layout.base;
|
* val -= (uint32_t)me->mem[MOD_TEXT].base;
|
||||||
* However, SEGREL32 is used only for PARISC unwind entries, and we want
|
* However, SEGREL32 is used only for PARISC unwind entries, and we want
|
||||||
* those entries to have an absolute address, and not just an offset.
|
* those entries to have an absolute address, and not just an offset.
|
||||||
*
|
*
|
||||||
@@ -76,25 +76,6 @@
|
|||||||
* allows us to allocate up to 4095 GOT entries. */
|
* allows us to allocate up to 4095 GOT entries. */
|
||||||
#define MAX_GOTS 4095
|
#define MAX_GOTS 4095
|
||||||
|
|
||||||
/* three functions to determine where in the module core
|
|
||||||
* or init pieces the location is */
|
|
||||||
static inline int in_init(struct module *me, void *loc)
|
|
||||||
{
|
|
||||||
return (loc >= me->init_layout.base &&
|
|
||||||
loc <= (me->init_layout.base + me->init_layout.size));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int in_core(struct module *me, void *loc)
|
|
||||||
{
|
|
||||||
return (loc >= me->core_layout.base &&
|
|
||||||
loc <= (me->core_layout.base + me->core_layout.size));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int in_local(struct module *me, void *loc)
|
|
||||||
{
|
|
||||||
return in_init(me, loc) || in_core(me, loc);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef CONFIG_64BIT
|
#ifndef CONFIG_64BIT
|
||||||
struct got_entry {
|
struct got_entry {
|
||||||
Elf32_Addr addr;
|
Elf32_Addr addr;
|
||||||
@@ -302,6 +283,7 @@ int module_frob_arch_sections(CONST Elf_Ehdr *hdr,
|
|||||||
{
|
{
|
||||||
unsigned long gots = 0, fdescs = 0, len;
|
unsigned long gots = 0, fdescs = 0, len;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
struct module_memory *mod_mem;
|
||||||
|
|
||||||
len = hdr->e_shnum * sizeof(me->arch.section[0]);
|
len = hdr->e_shnum * sizeof(me->arch.section[0]);
|
||||||
me->arch.section = kzalloc(len, GFP_KERNEL);
|
me->arch.section = kzalloc(len, GFP_KERNEL);
|
||||||
@@ -346,14 +328,15 @@ int module_frob_arch_sections(CONST Elf_Ehdr *hdr,
|
|||||||
me->arch.section[s].stub_entries += count;
|
me->arch.section[s].stub_entries += count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod_mem = &me->mem[MOD_TEXT];
|
||||||
/* align things a bit */
|
/* align things a bit */
|
||||||
me->core_layout.size = ALIGN(me->core_layout.size, 16);
|
mod_mem->size = ALIGN(mod_mem->size, 16);
|
||||||
me->arch.got_offset = me->core_layout.size;
|
me->arch.got_offset = mod_mem->size;
|
||||||
me->core_layout.size += gots * sizeof(struct got_entry);
|
mod_mem->size += gots * sizeof(struct got_entry);
|
||||||
|
|
||||||
me->core_layout.size = ALIGN(me->core_layout.size, 16);
|
mod_mem->size = ALIGN(mod_mem->size, 16);
|
||||||
me->arch.fdesc_offset = me->core_layout.size;
|
me->arch.fdesc_offset = mod_mem->size;
|
||||||
me->core_layout.size += fdescs * sizeof(Elf_Fdesc);
|
mod_mem->size += fdescs * sizeof(Elf_Fdesc);
|
||||||
|
|
||||||
me->arch.got_max = gots;
|
me->arch.got_max = gots;
|
||||||
me->arch.fdesc_max = fdescs;
|
me->arch.fdesc_max = fdescs;
|
||||||
@@ -371,7 +354,7 @@ static Elf64_Word get_got(struct module *me, unsigned long value, long addend)
|
|||||||
|
|
||||||
BUG_ON(value == 0);
|
BUG_ON(value == 0);
|
||||||
|
|
||||||
got = me->core_layout.base + me->arch.got_offset;
|
got = me->mem[MOD_TEXT].base + me->arch.got_offset;
|
||||||
for (i = 0; got[i].addr; i++)
|
for (i = 0; got[i].addr; i++)
|
||||||
if (got[i].addr == value)
|
if (got[i].addr == value)
|
||||||
goto out;
|
goto out;
|
||||||
@@ -389,7 +372,7 @@ static Elf64_Word get_got(struct module *me, unsigned long value, long addend)
|
|||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
static Elf_Addr get_fdesc(struct module *me, unsigned long value)
|
static Elf_Addr get_fdesc(struct module *me, unsigned long value)
|
||||||
{
|
{
|
||||||
Elf_Fdesc *fdesc = me->core_layout.base + me->arch.fdesc_offset;
|
Elf_Fdesc *fdesc = me->mem[MOD_TEXT].base + me->arch.fdesc_offset;
|
||||||
|
|
||||||
if (!value) {
|
if (!value) {
|
||||||
printk(KERN_ERR "%s: zero OPD requested!\n", me->name);
|
printk(KERN_ERR "%s: zero OPD requested!\n", me->name);
|
||||||
@@ -407,7 +390,7 @@ static Elf_Addr get_fdesc(struct module *me, unsigned long value)
|
|||||||
|
|
||||||
/* Create new one */
|
/* Create new one */
|
||||||
fdesc->addr = value;
|
fdesc->addr = value;
|
||||||
fdesc->gp = (Elf_Addr)me->core_layout.base + me->arch.got_offset;
|
fdesc->gp = (Elf_Addr)me->mem[MOD_TEXT].base + me->arch.got_offset;
|
||||||
return (Elf_Addr)fdesc;
|
return (Elf_Addr)fdesc;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_64BIT */
|
#endif /* CONFIG_64BIT */
|
||||||
@@ -742,7 +725,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs,
|
|||||||
loc, val);
|
loc, val);
|
||||||
val += addend;
|
val += addend;
|
||||||
/* can we reach it locally? */
|
/* can we reach it locally? */
|
||||||
if (in_local(me, (void *)val)) {
|
if (within_module(val, me)) {
|
||||||
/* this is the case where the symbol is local
|
/* this is the case where the symbol is local
|
||||||
* to the module, but in a different section,
|
* to the module, but in a different section,
|
||||||
* so stub the jump in case it's more than 22
|
* so stub the jump in case it's more than 22
|
||||||
@@ -801,7 +784,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs,
|
|||||||
break;
|
break;
|
||||||
case R_PARISC_FPTR64:
|
case R_PARISC_FPTR64:
|
||||||
/* 64-bit function address */
|
/* 64-bit function address */
|
||||||
if(in_local(me, (void *)(val + addend))) {
|
if (within_module(val + addend, me)) {
|
||||||
*loc64 = get_fdesc(me, val+addend);
|
*loc64 = get_fdesc(me, val+addend);
|
||||||
pr_debug("FDESC for %s at %llx points to %llx\n",
|
pr_debug("FDESC for %s at %llx points to %llx\n",
|
||||||
strtab + sym->st_name, *loc64,
|
strtab + sym->st_name, *loc64,
|
||||||
@@ -839,7 +822,7 @@ register_unwind_table(struct module *me,
|
|||||||
|
|
||||||
table = (unsigned char *)sechdrs[me->arch.unwind_section].sh_addr;
|
table = (unsigned char *)sechdrs[me->arch.unwind_section].sh_addr;
|
||||||
end = table + sechdrs[me->arch.unwind_section].sh_size;
|
end = table + sechdrs[me->arch.unwind_section].sh_size;
|
||||||
gp = (Elf_Addr)me->core_layout.base + me->arch.got_offset;
|
gp = (Elf_Addr)me->mem[MOD_TEXT].base + me->arch.got_offset;
|
||||||
|
|
||||||
pr_debug("register_unwind_table(), sect = %d at 0x%p - 0x%p (gp=0x%lx)\n",
|
pr_debug("register_unwind_table(), sect = %d at 0x%p - 0x%p (gp=0x%lx)\n",
|
||||||
me->arch.unwind_section, table, end, gp);
|
me->arch.unwind_section, table, end, gp);
|
||||||
@@ -977,7 +960,7 @@ void module_arch_cleanup(struct module *mod)
|
|||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
void *dereference_module_function_descriptor(struct module *mod, void *ptr)
|
void *dereference_module_function_descriptor(struct module *mod, void *ptr)
|
||||||
{
|
{
|
||||||
unsigned long start_opd = (Elf64_Addr)mod->core_layout.base +
|
unsigned long start_opd = (Elf64_Addr)mod->mem[MOD_TEXT].base +
|
||||||
mod->arch.fdesc_offset;
|
mod->arch.fdesc_offset;
|
||||||
unsigned long end_opd = start_opd +
|
unsigned long end_opd = start_opd +
|
||||||
mod->arch.fdesc_count * sizeof(Elf64_Fdesc);
|
mod->arch.fdesc_count * sizeof(Elf64_Fdesc);
|
||||||
|
|||||||
@@ -163,8 +163,7 @@ static uint32_t do_plt_call(void *location,
|
|||||||
|
|
||||||
pr_debug("Doing plt for call to 0x%x at 0x%x\n", val, (unsigned int)location);
|
pr_debug("Doing plt for call to 0x%x at 0x%x\n", val, (unsigned int)location);
|
||||||
/* Init, or core PLT? */
|
/* Init, or core PLT? */
|
||||||
if (location >= mod->core_layout.base
|
if (within_module_core((unsigned long)location, mod))
|
||||||
&& location < mod->core_layout.base + mod->core_layout.size)
|
|
||||||
entry = (void *)sechdrs[mod->arch.core_plt_section].sh_addr;
|
entry = (void *)sechdrs[mod->arch.core_plt_section].sh_addr;
|
||||||
else
|
else
|
||||||
entry = (void *)sechdrs[mod->arch.init_plt_section].sh_addr;
|
entry = (void *)sechdrs[mod->arch.init_plt_section].sh_addr;
|
||||||
@@ -322,14 +321,14 @@ notrace int module_trampoline_target(struct module *mod, unsigned long addr,
|
|||||||
|
|
||||||
int module_finalize_ftrace(struct module *module, const Elf_Shdr *sechdrs)
|
int module_finalize_ftrace(struct module *module, const Elf_Shdr *sechdrs)
|
||||||
{
|
{
|
||||||
module->arch.tramp = do_plt_call(module->core_layout.base,
|
module->arch.tramp = do_plt_call(module->mem[MOD_TEXT].base,
|
||||||
(unsigned long)ftrace_caller,
|
(unsigned long)ftrace_caller,
|
||||||
sechdrs, module);
|
sechdrs, module);
|
||||||
if (!module->arch.tramp)
|
if (!module->arch.tramp)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
|
#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
|
||||||
module->arch.tramp_regs = do_plt_call(module->core_layout.base,
|
module->arch.tramp_regs = do_plt_call(module->mem[MOD_TEXT].base,
|
||||||
(unsigned long)ftrace_regs_caller,
|
(unsigned long)ftrace_regs_caller,
|
||||||
sechdrs, module);
|
sechdrs, module);
|
||||||
if (!module->arch.tramp_regs)
|
if (!module->arch.tramp_regs)
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
|
|||||||
Elf_Rela *rela;
|
Elf_Rela *rela;
|
||||||
char *strings;
|
char *strings;
|
||||||
int nrela, i, j;
|
int nrela, i, j;
|
||||||
|
struct module_memory *mod_mem;
|
||||||
|
|
||||||
/* Find symbol table and string table. */
|
/* Find symbol table and string table. */
|
||||||
symtab = NULL;
|
symtab = NULL;
|
||||||
@@ -173,14 +174,15 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
|
|||||||
|
|
||||||
/* Increase core size by size of got & plt and set start
|
/* Increase core size by size of got & plt and set start
|
||||||
offsets for got and plt. */
|
offsets for got and plt. */
|
||||||
me->core_layout.size = ALIGN(me->core_layout.size, 4);
|
mod_mem = &me->mem[MOD_TEXT];
|
||||||
me->arch.got_offset = me->core_layout.size;
|
mod_mem->size = ALIGN(mod_mem->size, 4);
|
||||||
me->core_layout.size += me->arch.got_size;
|
me->arch.got_offset = mod_mem->size;
|
||||||
me->arch.plt_offset = me->core_layout.size;
|
mod_mem->size += me->arch.got_size;
|
||||||
|
me->arch.plt_offset = mod_mem->size;
|
||||||
if (me->arch.plt_size) {
|
if (me->arch.plt_size) {
|
||||||
if (IS_ENABLED(CONFIG_EXPOLINE) && !nospec_disable)
|
if (IS_ENABLED(CONFIG_EXPOLINE) && !nospec_disable)
|
||||||
me->arch.plt_size += PLT_ENTRY_SIZE;
|
me->arch.plt_size += PLT_ENTRY_SIZE;
|
||||||
me->core_layout.size += me->arch.plt_size;
|
mod_mem->size += me->arch.plt_size;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -304,7 +306,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
|
|||||||
case R_390_GOTPLT64: /* 64 bit offset to jump slot. */
|
case R_390_GOTPLT64: /* 64 bit offset to jump slot. */
|
||||||
case R_390_GOTPLTENT: /* 32 bit rel. offset to jump slot >> 1. */
|
case R_390_GOTPLTENT: /* 32 bit rel. offset to jump slot >> 1. */
|
||||||
if (info->got_initialized == 0) {
|
if (info->got_initialized == 0) {
|
||||||
Elf_Addr *gotent = me->core_layout.base +
|
Elf_Addr *gotent = me->mem[MOD_TEXT].base +
|
||||||
me->arch.got_offset +
|
me->arch.got_offset +
|
||||||
info->got_offset;
|
info->got_offset;
|
||||||
|
|
||||||
@@ -329,7 +331,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
|
|||||||
rc = apply_rela_bits(loc, val, 0, 64, 0, write);
|
rc = apply_rela_bits(loc, val, 0, 64, 0, write);
|
||||||
else if (r_type == R_390_GOTENT ||
|
else if (r_type == R_390_GOTENT ||
|
||||||
r_type == R_390_GOTPLTENT) {
|
r_type == R_390_GOTPLTENT) {
|
||||||
val += (Elf_Addr) me->core_layout.base - loc;
|
val += (Elf_Addr) me->mem[MOD_TEXT].base - loc;
|
||||||
rc = apply_rela_bits(loc, val, 1, 32, 1, write);
|
rc = apply_rela_bits(loc, val, 1, 32, 1, write);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -345,7 +347,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
|
|||||||
char *plt_base;
|
char *plt_base;
|
||||||
char *ip;
|
char *ip;
|
||||||
|
|
||||||
plt_base = me->core_layout.base + me->arch.plt_offset;
|
plt_base = me->mem[MOD_TEXT].base + me->arch.plt_offset;
|
||||||
ip = plt_base + info->plt_offset;
|
ip = plt_base + info->plt_offset;
|
||||||
*(int *)insn = 0x0d10e310; /* basr 1,0 */
|
*(int *)insn = 0x0d10e310; /* basr 1,0 */
|
||||||
*(int *)&insn[4] = 0x100c0004; /* lg 1,12(1) */
|
*(int *)&insn[4] = 0x100c0004; /* lg 1,12(1) */
|
||||||
@@ -375,7 +377,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
|
|||||||
val - loc + 0xffffUL < 0x1ffffeUL) ||
|
val - loc + 0xffffUL < 0x1ffffeUL) ||
|
||||||
(r_type == R_390_PLT32DBL &&
|
(r_type == R_390_PLT32DBL &&
|
||||||
val - loc + 0xffffffffULL < 0x1fffffffeULL)))
|
val - loc + 0xffffffffULL < 0x1fffffffeULL)))
|
||||||
val = (Elf_Addr) me->core_layout.base +
|
val = (Elf_Addr) me->mem[MOD_TEXT].base +
|
||||||
me->arch.plt_offset +
|
me->arch.plt_offset +
|
||||||
info->plt_offset;
|
info->plt_offset;
|
||||||
val += rela->r_addend - loc;
|
val += rela->r_addend - loc;
|
||||||
@@ -397,7 +399,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
|
|||||||
case R_390_GOTOFF32: /* 32 bit offset to GOT. */
|
case R_390_GOTOFF32: /* 32 bit offset to GOT. */
|
||||||
case R_390_GOTOFF64: /* 64 bit offset to GOT. */
|
case R_390_GOTOFF64: /* 64 bit offset to GOT. */
|
||||||
val = val + rela->r_addend -
|
val = val + rela->r_addend -
|
||||||
((Elf_Addr) me->core_layout.base + me->arch.got_offset);
|
((Elf_Addr) me->mem[MOD_TEXT].base + me->arch.got_offset);
|
||||||
if (r_type == R_390_GOTOFF16)
|
if (r_type == R_390_GOTOFF16)
|
||||||
rc = apply_rela_bits(loc, val, 0, 16, 0, write);
|
rc = apply_rela_bits(loc, val, 0, 16, 0, write);
|
||||||
else if (r_type == R_390_GOTOFF32)
|
else if (r_type == R_390_GOTOFF32)
|
||||||
@@ -407,7 +409,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
|
|||||||
break;
|
break;
|
||||||
case R_390_GOTPC: /* 32 bit PC relative offset to GOT. */
|
case R_390_GOTPC: /* 32 bit PC relative offset to GOT. */
|
||||||
case R_390_GOTPCDBL: /* 32 bit PC rel. off. to GOT shifted by 1. */
|
case R_390_GOTPCDBL: /* 32 bit PC rel. off. to GOT shifted by 1. */
|
||||||
val = (Elf_Addr) me->core_layout.base + me->arch.got_offset +
|
val = (Elf_Addr) me->mem[MOD_TEXT].base + me->arch.got_offset +
|
||||||
rela->r_addend - loc;
|
rela->r_addend - loc;
|
||||||
if (r_type == R_390_GOTPC)
|
if (r_type == R_390_GOTPC)
|
||||||
rc = apply_rela_bits(loc, val, 1, 32, 0, write);
|
rc = apply_rela_bits(loc, val, 1, 32, 0, write);
|
||||||
@@ -515,7 +517,7 @@ int module_finalize(const Elf_Ehdr *hdr,
|
|||||||
!nospec_disable && me->arch.plt_size) {
|
!nospec_disable && me->arch.plt_size) {
|
||||||
unsigned int *ij;
|
unsigned int *ij;
|
||||||
|
|
||||||
ij = me->core_layout.base + me->arch.plt_offset +
|
ij = me->mem[MOD_TEXT].base + me->arch.plt_offset +
|
||||||
me->arch.plt_size - PLT_ENTRY_SIZE;
|
me->arch.plt_size - PLT_ENTRY_SIZE;
|
||||||
ij[0] = 0xc6000000; /* exrl %r0,.+10 */
|
ij[0] = 0xc6000000; /* exrl %r0,.+10 */
|
||||||
ij[1] = 0x0005a7f4; /* j . */
|
ij[1] = 0x0005a7f4; /* j . */
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/jump_label.h>
|
#include <linux/jump_label.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/sizes.h>
|
#include <linux/sizes.h>
|
||||||
|
|
||||||
#include <asm/cpufeature.h>
|
#include <asm/cpufeature.h>
|
||||||
@@ -72,6 +71,4 @@ static int __init blake2s_mod_init(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(blake2s_mod_init);
|
subsys_initcall(blake2s_mod_init);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -330,8 +330,8 @@ void noinline callthunks_patch_module_calls(struct callthunk_sites *cs,
|
|||||||
struct module *mod)
|
struct module *mod)
|
||||||
{
|
{
|
||||||
struct core_text ct = {
|
struct core_text ct = {
|
||||||
.base = (unsigned long)mod->core_layout.base,
|
.base = (unsigned long)mod->mem[MOD_TEXT].base,
|
||||||
.end = (unsigned long)mod->core_layout.base + mod->core_layout.size,
|
.end = (unsigned long)mod->mem[MOD_TEXT].base + mod->mem[MOD_TEXT].size,
|
||||||
.name = mod->name,
|
.name = mod->name,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1177,7 +1177,7 @@ static const struct {
|
|||||||
static struct ratelimit_state bld_ratelimit;
|
static struct ratelimit_state bld_ratelimit;
|
||||||
|
|
||||||
static unsigned int sysctl_sld_mitigate = 1;
|
static unsigned int sysctl_sld_mitigate = 1;
|
||||||
static DEFINE_SEMAPHORE(buslock_sem);
|
static DEFINE_SEMAPHORE(buslock_sem, 1);
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_SYSCTL
|
#ifdef CONFIG_PROC_SYSCTL
|
||||||
static struct ctl_table sld_sysctls[] = {
|
static struct ctl_table sld_sysctls[] = {
|
||||||
|
|||||||
@@ -362,8 +362,8 @@ int module_finalize(const Elf_Ehdr *hdr,
|
|||||||
}
|
}
|
||||||
if (locks) {
|
if (locks) {
|
||||||
void *lseg = (void *)locks->sh_addr;
|
void *lseg = (void *)locks->sh_addr;
|
||||||
void *text = me->core_layout.base;
|
void *text = me->mem[MOD_TEXT].base;
|
||||||
void *text_end = text + me->core_layout.text_size;
|
void *text_end = text + me->mem[MOD_TEXT].size;
|
||||||
alternatives_smp_module_add(me, me->name,
|
alternatives_smp_module_add(me, me->name,
|
||||||
lseg, lseg + locks->sh_size,
|
lseg, lseg + locks->sh_size,
|
||||||
text, text_end);
|
text, text_end);
|
||||||
|
|||||||
@@ -71,6 +71,5 @@ static void __exit pt_dump_debug_exit(void)
|
|||||||
|
|
||||||
module_init(pt_dump_debug_init);
|
module_init(pt_dump_debug_init);
|
||||||
module_exit(pt_dump_debug_exit);
|
module_exit(pt_dump_debug_exit);
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_AUTHOR("Arjan van de Ven <arjan@linux.intel.com>");
|
MODULE_AUTHOR("Arjan van de Ven <arjan@linux.intel.com>");
|
||||||
MODULE_DESCRIPTION("Kernel debugging helper that dumps pagetables");
|
MODULE_DESCRIPTION("Kernel debugging helper that dumps pagetables");
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
#include <keys/user-type.h>
|
#include <keys/user-type.h>
|
||||||
#include "asymmetric_keys.h"
|
#include "asymmetric_keys.h"
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|
||||||
const char *const key_being_used_for[NR__KEY_BEING_USED_FOR] = {
|
const char *const key_being_used_for[NR__KEY_BEING_USED_FOR] = {
|
||||||
[VERIFYING_MODULE_SIGNATURE] = "mod sig",
|
[VERIFYING_MODULE_SIGNATURE] = "mod sig",
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
|
|
||||||
MODULE_AUTHOR("samuel.thibault@ens-lyon.org");
|
MODULE_AUTHOR("samuel.thibault@ens-lyon.org");
|
||||||
MODULE_DESCRIPTION("braille device");
|
MODULE_DESCRIPTION("braille device");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Braille device support part.
|
* Braille device support part.
|
||||||
|
|||||||
@@ -126,4 +126,3 @@ static struct platform_driver integrator_ap_lm_driver = {
|
|||||||
module_platform_driver(integrator_ap_lm_driver);
|
module_platform_driver(integrator_ap_lm_driver);
|
||||||
MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
|
MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
|
||||||
MODULE_DESCRIPTION("Integrator AP Logical Module driver");
|
MODULE_DESCRIPTION("Integrator AP Logical Module driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -416,4 +416,3 @@ module_platform_driver(bt1_apb_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Serge Semin <Sergey.Semin@baikalelectronics.ru>");
|
MODULE_AUTHOR("Serge Semin <Sergey.Semin@baikalelectronics.ru>");
|
||||||
MODULE_DESCRIPTION("Baikal-T1 APB-bus driver");
|
MODULE_DESCRIPTION("Baikal-T1 APB-bus driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -309,4 +309,3 @@ module_platform_driver(bt1_axi_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Serge Semin <Sergey.Semin@baikalelectronics.ru>");
|
MODULE_AUTHOR("Serge Semin <Sergey.Semin@baikalelectronics.ru>");
|
||||||
MODULE_DESCRIPTION("Baikal-T1 AXI-bus driver");
|
MODULE_DESCRIPTION("Baikal-T1 AXI-bus driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -423,4 +423,3 @@ static struct platform_driver ixp4xx_exp_driver = {
|
|||||||
module_platform_driver(ixp4xx_exp_driver);
|
module_platform_driver(ixp4xx_exp_driver);
|
||||||
MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
|
MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
|
||||||
MODULE_DESCRIPTION("Intel IXP4xx external bus driver");
|
MODULE_DESCRIPTION("Intel IXP4xx external bus driver");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -403,4 +403,3 @@ static struct platform_driver qcom_ebi2_driver = {
|
|||||||
module_platform_driver(qcom_ebi2_driver);
|
module_platform_driver(qcom_ebi2_driver);
|
||||||
MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
|
MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
|
||||||
MODULE_DESCRIPTION("Qualcomm EBI2 driver");
|
MODULE_DESCRIPTION("Qualcomm EBI2 driver");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -386,4 +386,3 @@ module_platform_driver(qcom_ssc_block_bus_driver);
|
|||||||
|
|
||||||
MODULE_DESCRIPTION("A driver for handling the init sequence needed for accessing the SSC block on (some) qcom SoCs over AHB");
|
MODULE_DESCRIPTION("A driver for handling the init sequence needed for accessing the SSC block on (some) qcom SoCs over AHB");
|
||||||
MODULE_AUTHOR("Michael Srba <Michael.Srba@seznam.cz>");
|
MODULE_AUTHOR("Michael Srba <Michael.Srba@seznam.cz>");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
/*
|
/*
|
||||||
* Simple Power-Managed Bus Driver
|
* Simple Power-Managed Bus Driver
|
||||||
*
|
*
|
||||||
@@ -138,4 +139,3 @@ module_platform_driver(simple_pm_bus_driver);
|
|||||||
|
|
||||||
MODULE_DESCRIPTION("Simple Power-Managed Bus Driver");
|
MODULE_DESCRIPTION("Simple Power-Managed Bus Driver");
|
||||||
MODULE_AUTHOR("Geert Uytterhoeven <geert+renesas@glider.be>");
|
MODULE_AUTHOR("Geert Uytterhoeven <geert+renesas@glider.be>");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -949,4 +949,3 @@ module_platform_driver(bm1880_clk_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>");
|
MODULE_AUTHOR("Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>");
|
||||||
MODULE_DESCRIPTION("Clock driver for Bitmain BM1880 SoC");
|
MODULE_DESCRIPTION("Clock driver for Bitmain BM1880 SoC");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -513,4 +513,3 @@ MODULE_DESCRIPTION("Microchip PolarFire SoC Clock Driver");
|
|||||||
MODULE_AUTHOR("Padmarao Begari <padmarao.begari@microchip.com>");
|
MODULE_AUTHOR("Padmarao Begari <padmarao.begari@microchip.com>");
|
||||||
MODULE_AUTHOR("Daire McNamara <daire.mcnamara@microchip.com>");
|
MODULE_AUTHOR("Daire McNamara <daire.mcnamara@microchip.com>");
|
||||||
MODULE_AUTHOR("Conor Dooley <conor.dooley@microchip.com>");
|
MODULE_AUTHOR("Conor Dooley <conor.dooley@microchip.com>");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -1127,4 +1127,3 @@ void __init mssr_mod_nullify(struct mssr_mod_clk *mod_clks,
|
|||||||
}
|
}
|
||||||
|
|
||||||
MODULE_DESCRIPTION("Renesas CPG/MSSR Driver");
|
MODULE_DESCRIPTION("Renesas CPG/MSSR Driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -1440,4 +1440,3 @@ static int __init rzg2l_cpg_init(void)
|
|||||||
subsys_initcall(rzg2l_cpg_init);
|
subsys_initcall(rzg2l_cpg_init);
|
||||||
|
|
||||||
MODULE_DESCRIPTION("Renesas RZ/G2L CPG Driver");
|
MODULE_DESCRIPTION("Renesas RZ/G2L CPG Driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -363,4 +363,3 @@ module_exit(em_sti_exit);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Magnus Damm");
|
MODULE_AUTHOR("Magnus Damm");
|
||||||
MODULE_DESCRIPTION("Renesas Emma Mobile STI Timer Driver");
|
MODULE_DESCRIPTION("Renesas Emma Mobile STI Timer Driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -1174,4 +1174,3 @@ module_exit(sh_cmt_exit);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Magnus Damm");
|
MODULE_AUTHOR("Magnus Damm");
|
||||||
MODULE_DESCRIPTION("SuperH CMT Timer Driver");
|
MODULE_DESCRIPTION("SuperH CMT Timer Driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -530,4 +530,3 @@ module_exit(sh_mtu2_exit);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Magnus Damm");
|
MODULE_AUTHOR("Magnus Damm");
|
||||||
MODULE_DESCRIPTION("SuperH MTU2 Timer Driver");
|
MODULE_DESCRIPTION("SuperH MTU2 Timer Driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -674,4 +674,3 @@ module_exit(sh_tmu_exit);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Magnus Damm");
|
MODULE_AUTHOR("Magnus Damm");
|
||||||
MODULE_DESCRIPTION("SuperH TMU Timer Driver");
|
MODULE_DESCRIPTION("SuperH TMU Timer Driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -218,4 +218,3 @@ module_platform_driver(stm32_clkevent_lp_driver);
|
|||||||
|
|
||||||
MODULE_ALIAS("platform:stm32-lptimer-timer");
|
MODULE_ALIAS("platform:stm32-lptimer-timer");
|
||||||
MODULE_DESCRIPTION("STMicroelectronics STM32 clockevent low power driver");
|
MODULE_DESCRIPTION("STMicroelectronics STM32 clockevent low power driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -511,4 +511,3 @@ module_platform_driver(tegra186_wdt_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>");
|
MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>");
|
||||||
MODULE_DESCRIPTION("NVIDIA Tegra186 timers driver");
|
MODULE_DESCRIPTION("NVIDIA Tegra186 timers driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -1283,5 +1283,4 @@ static struct platform_driver omap_dm_timer_driver = {
|
|||||||
module_platform_driver(omap_dm_timer_driver);
|
module_platform_driver(omap_dm_timer_driver);
|
||||||
|
|
||||||
MODULE_DESCRIPTION("OMAP Dual-Mode Timer Driver");
|
MODULE_DESCRIPTION("OMAP Dual-Mode Timer Driver");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_AUTHOR("Texas Instruments Inc");
|
MODULE_AUTHOR("Texas Instruments Inc");
|
||||||
|
|||||||
@@ -407,4 +407,3 @@ static int add_default_cma_heap(void)
|
|||||||
}
|
}
|
||||||
module_init(add_default_cma_heap);
|
module_init(add_default_cma_heap);
|
||||||
MODULE_DESCRIPTION("DMA-BUF CMA Heap");
|
MODULE_DESCRIPTION("DMA-BUF CMA Heap");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -440,4 +440,3 @@ static int system_heap_create(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
module_init(system_heap_create);
|
module_init(system_heap_create);
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -430,4 +430,3 @@ module_init(udmabuf_dev_init)
|
|||||||
module_exit(udmabuf_dev_exit)
|
module_exit(udmabuf_dev_exit)
|
||||||
|
|
||||||
MODULE_AUTHOR("Gerd Hoffmann <kraxel@redhat.com>");
|
MODULE_AUTHOR("Gerd Hoffmann <kraxel@redhat.com>");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -1431,4 +1431,3 @@ subsys_initcall(ep93xx_dma_module_init);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Mika Westerberg <mika.westerberg@iki.fi>");
|
MODULE_AUTHOR("Mika Westerberg <mika.westerberg@iki.fi>");
|
||||||
MODULE_DESCRIPTION("EP93xx DMA driver");
|
MODULE_DESCRIPTION("EP93xx DMA driver");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -1797,6 +1797,5 @@ static int __init ipu_init(void)
|
|||||||
subsys_initcall(ipu_init);
|
subsys_initcall(ipu_init);
|
||||||
|
|
||||||
MODULE_DESCRIPTION("IPU core driver");
|
MODULE_DESCRIPTION("IPU core driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_AUTHOR("Guennadi Liakhovetski <lg@denx.de>");
|
MODULE_AUTHOR("Guennadi Liakhovetski <lg@denx.de>");
|
||||||
MODULE_ALIAS("platform:ipu-core");
|
MODULE_ALIAS("platform:ipu-core");
|
||||||
|
|||||||
@@ -917,4 +917,3 @@ static struct platform_driver mv_xor_v2_driver = {
|
|||||||
module_platform_driver(mv_xor_v2_driver);
|
module_platform_driver(mv_xor_v2_driver);
|
||||||
|
|
||||||
MODULE_DESCRIPTION("DMA engine driver for Marvell's Version 2 of XOR engine");
|
MODULE_DESCRIPTION("DMA engine driver for Marvell's Version 2 of XOR engine");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -1047,6 +1047,5 @@ static void __exit shdma_exit(void)
|
|||||||
}
|
}
|
||||||
module_exit(shdma_exit);
|
module_exit(shdma_exit);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_DESCRIPTION("SH-DMA driver base library");
|
MODULE_DESCRIPTION("SH-DMA driver base library");
|
||||||
MODULE_AUTHOR("Guennadi Liakhovetski <g.liakhovetski@gmx.de>");
|
MODULE_AUTHOR("Guennadi Liakhovetski <g.liakhovetski@gmx.de>");
|
||||||
|
|||||||
@@ -398,4 +398,3 @@ arch_initcall(stm32_dmamux_init);
|
|||||||
MODULE_DESCRIPTION("DMA Router driver for STM32 DMA MUX");
|
MODULE_DESCRIPTION("DMA Router driver for STM32 DMA MUX");
|
||||||
MODULE_AUTHOR("M'boumba Cedric Madianga <cedric.madianga@gmail.com>");
|
MODULE_AUTHOR("M'boumba Cedric Madianga <cedric.madianga@gmail.com>");
|
||||||
MODULE_AUTHOR("Pierre-Yves Mordret <pierre-yves.mordret@st.com>");
|
MODULE_AUTHOR("Pierre-Yves Mordret <pierre-yves.mordret@st.com>");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -1814,4 +1814,3 @@ subsys_initcall(stm32_mdma_init);
|
|||||||
MODULE_DESCRIPTION("Driver for STM32 MDMA controller");
|
MODULE_DESCRIPTION("Driver for STM32 MDMA controller");
|
||||||
MODULE_AUTHOR("M'boumba Cedric Madianga <cedric.madianga@gmail.com>");
|
MODULE_AUTHOR("M'boumba Cedric Madianga <cedric.madianga@gmail.com>");
|
||||||
MODULE_AUTHOR("Pierre-Yves Mordret <pierre-yves.mordret@st.com>");
|
MODULE_AUTHOR("Pierre-Yves Mordret <pierre-yves.mordret@st.com>");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -255,4 +255,3 @@ char *bcm47xx_nvram_get_contents(size_t *nvram_size)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(bcm47xx_nvram_get_contents);
|
EXPORT_SYMBOL(bcm47xx_nvram_get_contents);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ void efi_call_virt_check_flags(unsigned long flags, const char *call)
|
|||||||
* none of the remaining functions are actually ever called at runtime.
|
* none of the remaining functions are actually ever called at runtime.
|
||||||
* So let's just use a single lock to serialize all Runtime Services calls.
|
* So let's just use a single lock to serialize all Runtime Services calls.
|
||||||
*/
|
*/
|
||||||
static DEFINE_SEMAPHORE(efi_runtime_lock);
|
static DEFINE_SEMAPHORE(efi_runtime_lock, 1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Expose the EFI runtime lock to the UV platform
|
* Expose the EFI runtime lock to the UV platform
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
/* Private pointer to registered efivars */
|
/* Private pointer to registered efivars */
|
||||||
static struct efivars *__efivars;
|
static struct efivars *__efivars;
|
||||||
|
|
||||||
static DEFINE_SEMAPHORE(efivars_lock);
|
static DEFINE_SEMAPHORE(efivars_lock, 1);
|
||||||
|
|
||||||
static efi_status_t check_var_size(bool nonblocking, u32 attributes,
|
static efi_status_t check_var_size(bool nonblocking, u32 attributes,
|
||||||
unsigned long size)
|
unsigned long size)
|
||||||
|
|||||||
@@ -949,6 +949,5 @@ struct hwspinlock *devm_hwspin_lock_request_specific(struct device *dev,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(devm_hwspin_lock_request_specific);
|
EXPORT_SYMBOL_GPL(devm_hwspin_lock_request_specific);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_DESCRIPTION("Hardware spinlock interface");
|
MODULE_DESCRIPTION("Hardware spinlock interface");
|
||||||
MODULE_AUTHOR("Ohad Ben-Cohen <ohad@wizery.com>");
|
MODULE_AUTHOR("Ohad Ben-Cohen <ohad@wizery.com>");
|
||||||
|
|||||||
@@ -62,11 +62,6 @@ MODULE_AUTHOR("Roland Dreier");
|
|||||||
MODULE_DESCRIPTION("InfiniBand SCSI RDMA Protocol initiator");
|
MODULE_DESCRIPTION("InfiniBand SCSI RDMA Protocol initiator");
|
||||||
MODULE_LICENSE("Dual BSD/GPL");
|
MODULE_LICENSE("Dual BSD/GPL");
|
||||||
|
|
||||||
#if !defined(CONFIG_DYNAMIC_DEBUG)
|
|
||||||
#define DEFINE_DYNAMIC_DEBUG_METADATA(name, fmt)
|
|
||||||
#define DYNAMIC_DEBUG_BRANCH(descriptor) false
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static unsigned int srp_sg_tablesize;
|
static unsigned int srp_sg_tablesize;
|
||||||
static unsigned int cmd_sg_entries;
|
static unsigned int cmd_sg_entries;
|
||||||
static unsigned int indirect_sg_entries;
|
static unsigned int indirect_sg_entries;
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
#include <linux/interconnect.h>
|
#include <linux/interconnect.h>
|
||||||
#include <linux/interconnect-provider.h>
|
#include <linux/interconnect-provider.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
@@ -1106,7 +1105,3 @@ static int __init icc_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
device_initcall(icc_init);
|
device_initcall(icc_init);
|
||||||
|
|
||||||
MODULE_AUTHOR("Georgi Djakov <georgi.djakov@linaro.org>");
|
|
||||||
MODULE_DESCRIPTION("Interconnect Driver Core");
|
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -1076,4 +1076,3 @@ builtin_platform_driver_probe(sun50i_iommu_driver, sun50i_iommu_probe);
|
|||||||
MODULE_DESCRIPTION("Allwinner H6 IOMMU driver");
|
MODULE_DESCRIPTION("Allwinner H6 IOMMU driver");
|
||||||
MODULE_AUTHOR("Maxime Ripard <maxime@cerno.tech>");
|
MODULE_AUTHOR("Maxime Ripard <maxime@cerno.tech>");
|
||||||
MODULE_AUTHOR("zhuxianbin <zhuxianbin@allwinnertech.com>");
|
MODULE_AUTHOR("zhuxianbin <zhuxianbin@allwinnertech.com>");
|
||||||
MODULE_LICENSE("Dual BSD/GPL");
|
|
||||||
|
|||||||
@@ -26,7 +26,6 @@
|
|||||||
|
|
||||||
MODULE_AUTHOR("Talel Shenhar");
|
MODULE_AUTHOR("Talel Shenhar");
|
||||||
MODULE_DESCRIPTION("Amazon's Annapurna Labs Interrupt Controller Driver");
|
MODULE_DESCRIPTION("Amazon's Annapurna Labs Interrupt Controller Driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|
||||||
enum al_fic_state {
|
enum al_fic_state {
|
||||||
AL_FIC_UNCONFIGURED = 0,
|
AL_FIC_UNCONFIGURED = 0,
|
||||||
|
|||||||
@@ -430,4 +430,3 @@ module_platform_driver(ls_scfg_msi_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Minghuan Lian <Minghuan.Lian@nxp.com>");
|
MODULE_AUTHOR("Minghuan Lian <Minghuan.Lian@nxp.com>");
|
||||||
MODULE_DESCRIPTION("Freescale Layerscape SCFG MSI controller driver");
|
MODULE_DESCRIPTION("Freescale Layerscape SCFG MSI controller driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -392,5 +392,4 @@ module_platform_driver(mbigen_platform_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Jun Ma <majun258@huawei.com>");
|
MODULE_AUTHOR("Jun Ma <majun258@huawei.com>");
|
||||||
MODULE_AUTHOR("Yun Wu <wuyun.wu@huawei.com>");
|
MODULE_AUTHOR("Yun Wu <wuyun.wu@huawei.com>");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_DESCRIPTION("HiSilicon MBI Generator driver");
|
MODULE_DESCRIPTION("HiSilicon MBI Generator driver");
|
||||||
|
|||||||
@@ -276,5 +276,4 @@ IRQCHIP_MATCH("microchip,sama7g5-eic", mchp_eic_init)
|
|||||||
IRQCHIP_PLATFORM_DRIVER_END(mchp_eic)
|
IRQCHIP_PLATFORM_DRIVER_END(mchp_eic)
|
||||||
|
|
||||||
MODULE_DESCRIPTION("Microchip External Interrupt Controller");
|
MODULE_DESCRIPTION("Microchip External Interrupt Controller");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_AUTHOR("Claudiu Beznea <claudiu.beznea@microchip.com>");
|
MODULE_AUTHOR("Claudiu Beznea <claudiu.beznea@microchip.com>");
|
||||||
|
|||||||
@@ -608,4 +608,3 @@ module_exit(intc_irqpin_exit);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Magnus Damm");
|
MODULE_AUTHOR("Magnus Damm");
|
||||||
MODULE_DESCRIPTION("Renesas INTC External IRQ Pin Driver");
|
MODULE_DESCRIPTION("Renesas INTC External IRQ Pin Driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -270,4 +270,3 @@ module_exit(irqc_exit);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Magnus Damm");
|
MODULE_AUTHOR("Magnus Damm");
|
||||||
MODULE_DESCRIPTION("Renesas IRQC Driver");
|
MODULE_DESCRIPTION("Renesas IRQC Driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -281,4 +281,3 @@ module_exit(rza1_irqc_exit);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Geert Uytterhoeven <geert+renesas@glider.be>");
|
MODULE_AUTHOR("Geert Uytterhoeven <geert+renesas@glider.be>");
|
||||||
MODULE_DESCRIPTION("Renesas RZ/A1 IRQC Driver");
|
MODULE_DESCRIPTION("Renesas RZ/A1 IRQC Driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -390,4 +390,3 @@ IRQCHIP_MATCH("renesas,rzg2l-irqc", rzg2l_irqc_init)
|
|||||||
IRQCHIP_PLATFORM_DRIVER_END(rzg2l_irqc)
|
IRQCHIP_PLATFORM_DRIVER_END(rzg2l_irqc)
|
||||||
MODULE_AUTHOR("Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>");
|
MODULE_AUTHOR("Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>");
|
||||||
MODULE_DESCRIPTION("Renesas RZ/G2L IRQC Driver");
|
MODULE_DESCRIPTION("Renesas RZ/G2L IRQC Driver");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -92,4 +92,3 @@ module_platform_driver(sl28cpld_intc_driver);
|
|||||||
|
|
||||||
MODULE_DESCRIPTION("sl28cpld Interrupt Controller Driver");
|
MODULE_DESCRIPTION("sl28cpld Interrupt Controller Driver");
|
||||||
MODULE_AUTHOR("Michael Walle <michael@walle.cc>");
|
MODULE_AUTHOR("Michael Walle <michael@walle.cc>");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -743,4 +743,3 @@ module_platform_driver(ti_sci_inta_irq_domain_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Lokesh Vutla <lokeshvutla@ti.com>");
|
MODULE_AUTHOR("Lokesh Vutla <lokeshvutla@ti.com>");
|
||||||
MODULE_DESCRIPTION("K3 Interrupt Aggregator driver over TI SCI protocol");
|
MODULE_DESCRIPTION("K3 Interrupt Aggregator driver over TI SCI protocol");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -303,4 +303,3 @@ module_platform_driver(ti_sci_intr_irq_domain_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Lokesh Vutla <lokeshvutla@ticom>");
|
MODULE_AUTHOR("Lokesh Vutla <lokeshvutla@ticom>");
|
||||||
MODULE_DESCRIPTION("K3 Interrupt Router driver over TI SCI protocol");
|
MODULE_DESCRIPTION("K3 Interrupt Router driver over TI SCI protocol");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ static struct adb_driver *adb_controller;
|
|||||||
BLOCKING_NOTIFIER_HEAD(adb_client_list);
|
BLOCKING_NOTIFIER_HEAD(adb_client_list);
|
||||||
static int adb_got_sleep;
|
static int adb_got_sleep;
|
||||||
static int adb_inited;
|
static int adb_inited;
|
||||||
static DEFINE_SEMAPHORE(adb_probe_mutex);
|
static DEFINE_SEMAPHORE(adb_probe_mutex, 1);
|
||||||
static int sleepy_trackpad;
|
static int sleepy_trackpad;
|
||||||
static int autopoll_devs;
|
static int autopoll_devs;
|
||||||
int __adb_probe_sync;
|
int __adb_probe_sync;
|
||||||
|
|||||||
@@ -259,7 +259,7 @@ config MTK_CMDQ_MBOX
|
|||||||
during the vblank.
|
during the vblank.
|
||||||
|
|
||||||
config ZYNQMP_IPI_MBOX
|
config ZYNQMP_IPI_MBOX
|
||||||
bool "Xilinx ZynqMP IPI Mailbox"
|
tristate "Xilinx ZynqMP IPI Mailbox"
|
||||||
depends on ARCH_ZYNQMP && OF
|
depends on ARCH_ZYNQMP && OF
|
||||||
help
|
help
|
||||||
Say yes here to add support for Xilinx IPI mailbox driver.
|
Say yes here to add support for Xilinx IPI mailbox driver.
|
||||||
|
|||||||
@@ -254,7 +254,6 @@ static struct platform_driver rockchip_mbox_driver = {
|
|||||||
|
|
||||||
module_platform_driver(rockchip_mbox_driver);
|
module_platform_driver(rockchip_mbox_driver);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_DESCRIPTION("Rockchip mailbox: communicate between CPU cores and MCU");
|
MODULE_DESCRIPTION("Rockchip mailbox: communicate between CPU cores and MCU");
|
||||||
MODULE_AUTHOR("Addy Ke <addy.ke@rock-chips.com>");
|
MODULE_AUTHOR("Addy Ke <addy.ke@rock-chips.com>");
|
||||||
MODULE_AUTHOR("Caesar Wang <wxt@rock-chips.com>");
|
MODULE_AUTHOR("Caesar Wang <wxt@rock-chips.com>");
|
||||||
|
|||||||
@@ -198,4 +198,3 @@ module_exit(altr_sysmgr_exit);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Thor Thayer <>");
|
MODULE_AUTHOR("Thor Thayer <>");
|
||||||
MODULE_DESCRIPTION("SOCFPGA System Manager driver");
|
MODULE_DESCRIPTION("SOCFPGA System Manager driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ const u32 dmae_reg_go_c[] = {
|
|||||||
|
|
||||||
/* Global resources for unloading a previously loaded device */
|
/* Global resources for unloading a previously loaded device */
|
||||||
#define BNX2X_PREV_WAIT_NEEDED 1
|
#define BNX2X_PREV_WAIT_NEEDED 1
|
||||||
static DEFINE_SEMAPHORE(bnx2x_prev_sem);
|
static DEFINE_SEMAPHORE(bnx2x_prev_sem, 1);
|
||||||
static LIST_HEAD(bnx2x_prev_list);
|
static LIST_HEAD(bnx2x_prev_list);
|
||||||
|
|
||||||
/* Forward declaration */
|
/* Forward declaration */
|
||||||
|
|||||||
@@ -2111,4 +2111,3 @@ module_exit(nvmem_exit);
|
|||||||
MODULE_AUTHOR("Srinivas Kandagatla <srinivas.kandagatla@linaro.org");
|
MODULE_AUTHOR("Srinivas Kandagatla <srinivas.kandagatla@linaro.org");
|
||||||
MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com");
|
MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com");
|
||||||
MODULE_DESCRIPTION("nvmem Driver Core");
|
MODULE_DESCRIPTION("nvmem Driver Core");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -616,4 +616,3 @@ static struct platform_driver intel_cbphy_driver = {
|
|||||||
module_platform_driver(intel_cbphy_driver);
|
module_platform_driver(intel_cbphy_driver);
|
||||||
|
|
||||||
MODULE_DESCRIPTION("Intel Combo-phy driver");
|
MODULE_DESCRIPTION("Intel Combo-phy driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -1724,4 +1724,3 @@ module_exit(s500_pinctrl_exit);
|
|||||||
MODULE_AUTHOR("Actions Semi Inc.");
|
MODULE_AUTHOR("Actions Semi Inc.");
|
||||||
MODULE_AUTHOR("Cristian Ciocaltea <cristian.ciocaltea@gmail.com>");
|
MODULE_AUTHOR("Cristian Ciocaltea <cristian.ciocaltea@gmail.com>");
|
||||||
MODULE_DESCRIPTION("Actions Semi S500 SoC Pinctrl Driver");
|
MODULE_DESCRIPTION("Actions Semi S500 SoC Pinctrl Driver");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -1908,4 +1908,3 @@ module_exit(s700_pinctrl_exit);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Actions Semi Inc.");
|
MODULE_AUTHOR("Actions Semi Inc.");
|
||||||
MODULE_DESCRIPTION("Actions Semi S700 Soc Pinctrl Driver");
|
MODULE_DESCRIPTION("Actions Semi S700 Soc Pinctrl Driver");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -1827,4 +1827,3 @@ module_exit(s900_pinctrl_exit);
|
|||||||
MODULE_AUTHOR("Actions Semi Inc.");
|
MODULE_AUTHOR("Actions Semi Inc.");
|
||||||
MODULE_AUTHOR("Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>");
|
MODULE_AUTHOR("Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>");
|
||||||
MODULE_DESCRIPTION("Actions Semi S900 SoC Pinctrl Driver");
|
MODULE_DESCRIPTION("Actions Semi S900 SoC Pinctrl Driver");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -299,5 +299,4 @@ static struct platform_driver ns_pinctrl_driver = {
|
|||||||
module_platform_driver(ns_pinctrl_driver);
|
module_platform_driver(ns_pinctrl_driver);
|
||||||
|
|
||||||
MODULE_AUTHOR("Rafał Miłecki");
|
MODULE_AUTHOR("Rafał Miłecki");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_DEVICE_TABLE(of, ns_pinctrl_of_match_table);
|
MODULE_DEVICE_TABLE(of, ns_pinctrl_of_match_table);
|
||||||
|
|||||||
@@ -1670,5 +1670,4 @@ static int __init mt8188_pinctrl_init(void)
|
|||||||
|
|
||||||
arch_initcall(mt8188_pinctrl_init);
|
arch_initcall(mt8188_pinctrl_init);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_DESCRIPTION("MediaTek MT8188 Pinctrl Driver");
|
MODULE_DESCRIPTION("MediaTek MT8188 Pinctrl Driver");
|
||||||
|
|||||||
@@ -1431,5 +1431,4 @@ static int __init mt8192_pinctrl_init(void)
|
|||||||
}
|
}
|
||||||
arch_initcall(mt8192_pinctrl_init);
|
arch_initcall(mt8192_pinctrl_init);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_DESCRIPTION("MediaTek MT8192 Pinctrl Driver");
|
MODULE_DESCRIPTION("MediaTek MT8192 Pinctrl Driver");
|
||||||
|
|||||||
@@ -495,6 +495,5 @@ static int __init mtk_pinctrl_init(void)
|
|||||||
}
|
}
|
||||||
arch_initcall(mtk_pinctrl_init);
|
arch_initcall(mtk_pinctrl_init);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_DESCRIPTION("MediaTek MT8365 Pinctrl Driver");
|
MODULE_DESCRIPTION("MediaTek MT8365 Pinctrl Driver");
|
||||||
MODULE_AUTHOR("Zhiyong Tao <zhiyong.tao@mediatek.com>");
|
MODULE_AUTHOR("Zhiyong Tao <zhiyong.tao@mediatek.com>");
|
||||||
|
|||||||
@@ -2046,7 +2046,6 @@ static int __init npcm7xx_pinctrl_register(void)
|
|||||||
}
|
}
|
||||||
arch_initcall(npcm7xx_pinctrl_register);
|
arch_initcall(npcm7xx_pinctrl_register);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_AUTHOR("jordan_hargrave@dell.com");
|
MODULE_AUTHOR("jordan_hargrave@dell.com");
|
||||||
MODULE_AUTHOR("tomer.maimon@nuvoton.com");
|
MODULE_AUTHOR("tomer.maimon@nuvoton.com");
|
||||||
MODULE_DESCRIPTION("Nuvoton NPCM7XX Pinctrl and GPIO driver");
|
MODULE_DESCRIPTION("Nuvoton NPCM7XX Pinctrl and GPIO driver");
|
||||||
|
|||||||
@@ -1213,6 +1213,5 @@ static struct platform_driver amd_gpio_driver = {
|
|||||||
|
|
||||||
module_platform_driver(amd_gpio_driver);
|
module_platform_driver(amd_gpio_driver);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_AUTHOR("Ken Xue <Ken.Xue@amd.com>, Jeff Wu <Jeff.Wu@amd.com>");
|
MODULE_AUTHOR("Ken Xue <Ken.Xue@amd.com>, Jeff Wu <Jeff.Wu@amd.com>");
|
||||||
MODULE_DESCRIPTION("AMD GPIO pinctrl driver");
|
MODULE_DESCRIPTION("AMD GPIO pinctrl driver");
|
||||||
|
|||||||
@@ -1407,4 +1407,3 @@ core_initcall(rza1_pinctrl_init);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Jacopo Mondi <jacopo+renesas@jmondi.org");
|
MODULE_AUTHOR("Jacopo Mondi <jacopo+renesas@jmondi.org");
|
||||||
MODULE_DESCRIPTION("Pin and gpio controller driver for Reneas RZ/A1 SoC");
|
MODULE_DESCRIPTION("Pin and gpio controller driver for Reneas RZ/A1 SoC");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -514,4 +514,3 @@ core_initcall(rza2_pinctrl_init);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Chris Brandt <chris.brandt@renesas.com>");
|
MODULE_AUTHOR("Chris Brandt <chris.brandt@renesas.com>");
|
||||||
MODULE_DESCRIPTION("Pin and gpio controller driver for RZ/A2 SoC");
|
MODULE_DESCRIPTION("Pin and gpio controller driver for RZ/A2 SoC");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -1570,4 +1570,3 @@ core_initcall(rzg2l_pinctrl_init);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>");
|
MODULE_AUTHOR("Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>");
|
||||||
MODULE_DESCRIPTION("Pin and gpio controller driver for RZ/G2L family");
|
MODULE_DESCRIPTION("Pin and gpio controller driver for RZ/G2L family");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -952,4 +952,3 @@ subsys_initcall(_pinctrl_drv_register);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Phil Edworthy <phil.edworthy@renesas.com>");
|
MODULE_AUTHOR("Phil Edworthy <phil.edworthy@renesas.com>");
|
||||||
MODULE_DESCRIPTION("Renesas RZ/N1 pinctrl driver");
|
MODULE_DESCRIPTION("Renesas RZ/N1 pinctrl driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -1117,4 +1117,3 @@ core_initcall(rzv2m_pinctrl_init);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Phil Edworthy <phil.edworthy@renesas.com>");
|
MODULE_AUTHOR("Phil Edworthy <phil.edworthy@renesas.com>");
|
||||||
MODULE_DESCRIPTION("Pin and gpio controller driver for RZ/V2M");
|
MODULE_DESCRIPTION("Pin and gpio controller driver for RZ/V2M");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
* Protects against simultaneous tests on multiple cores, or
|
* Protects against simultaneous tests on multiple cores, or
|
||||||
* reloading can file while a test is in progress
|
* reloading can file while a test is in progress
|
||||||
*/
|
*/
|
||||||
static DEFINE_SEMAPHORE(ifs_sem);
|
static DEFINE_SEMAPHORE(ifs_sem, 1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The sysfs interface to check additional details of last test
|
* The sysfs interface to check additional details of last test
|
||||||
|
|||||||
@@ -84,4 +84,3 @@ module_platform_driver(as3722_poweroff_driver);
|
|||||||
MODULE_DESCRIPTION("Power off driver for ams AS3722 PMIC Device");
|
MODULE_DESCRIPTION("Power off driver for ams AS3722 PMIC Device");
|
||||||
MODULE_ALIAS("platform:as3722-power-off");
|
MODULE_ALIAS("platform:as3722-power-off");
|
||||||
MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
|
MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -105,5 +105,4 @@ module_platform_driver(gpio_poweroff_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Jamie Lentin <jm@lentin.co.uk>");
|
MODULE_AUTHOR("Jamie Lentin <jm@lentin.co.uk>");
|
||||||
MODULE_DESCRIPTION("GPIO poweroff driver");
|
MODULE_DESCRIPTION("GPIO poweroff driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_ALIAS("platform:poweroff-gpio");
|
MODULE_ALIAS("platform:poweroff-gpio");
|
||||||
|
|||||||
@@ -139,4 +139,3 @@ module_platform_driver(gpio_restart_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("David Riley <davidriley@chromium.org>");
|
MODULE_AUTHOR("David Riley <davidriley@chromium.org>");
|
||||||
MODULE_DESCRIPTION("GPIO restart driver");
|
MODULE_DESCRIPTION("GPIO restart driver");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -169,5 +169,4 @@ module_platform_driver(rsctrl_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Ivan Khoronzhuk <ivan.khoronzhuk@ti.com>");
|
MODULE_AUTHOR("Ivan Khoronzhuk <ivan.khoronzhuk@ti.com>");
|
||||||
MODULE_DESCRIPTION("Texas Instruments keystone reset driver");
|
MODULE_DESCRIPTION("Texas Instruments keystone reset driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_ALIAS("platform:" KBUILD_MODNAME);
|
MODULE_ALIAS("platform:" KBUILD_MODNAME);
|
||||||
|
|||||||
@@ -317,4 +317,3 @@ module_platform_driver(ltc2952_poweroff_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("René Moll <rene.moll@xsens.com>");
|
MODULE_AUTHOR("René Moll <rene.moll@xsens.com>");
|
||||||
MODULE_DESCRIPTION("LTC PowerPath power-off driver");
|
MODULE_DESCRIPTION("LTC PowerPath power-off driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -97,4 +97,3 @@ module_platform_driver(mt6323_pwrc_driver);
|
|||||||
|
|
||||||
MODULE_DESCRIPTION("Poweroff driver for MT6323 PMIC");
|
MODULE_DESCRIPTION("Poweroff driver for MT6323 PMIC");
|
||||||
MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
|
MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -79,5 +79,4 @@ module_platform_driver(regulator_poweroff_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Michael Klein <michael@fossekall.de>");
|
MODULE_AUTHOR("Michael Klein <michael@fossekall.de>");
|
||||||
MODULE_DESCRIPTION("Regulator poweroff driver");
|
MODULE_DESCRIPTION("Regulator poweroff driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_ALIAS("platform:poweroff-regulator");
|
MODULE_ALIAS("platform:poweroff-regulator");
|
||||||
|
|||||||
@@ -59,5 +59,4 @@ module_platform_driver(restart_poweroff_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Andrew Lunn <andrew@lunn.ch");
|
MODULE_AUTHOR("Andrew Lunn <andrew@lunn.ch");
|
||||||
MODULE_DESCRIPTION("restart poweroff driver");
|
MODULE_DESCRIPTION("restart poweroff driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_ALIAS("platform:poweroff-restart");
|
MODULE_ALIAS("platform:poweroff-restart");
|
||||||
|
|||||||
@@ -95,4 +95,3 @@ module_platform_driver(tps65086_restart_driver);
|
|||||||
|
|
||||||
MODULE_AUTHOR("Emil Renner Berthing <kernel@esmil.dk>");
|
MODULE_AUTHOR("Emil Renner Berthing <kernel@esmil.dk>");
|
||||||
MODULE_DESCRIPTION("TPS65086 restart driver");
|
MODULE_DESCRIPTION("TPS65086 restart driver");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
@@ -1485,4 +1485,3 @@ MODULE_DESCRIPTION("Universal power supply monitor class");
|
|||||||
MODULE_AUTHOR("Ian Molton <spyro@f2s.com>, "
|
MODULE_AUTHOR("Ian Molton <spyro@f2s.com>, "
|
||||||
"Szabolcs Gyurko, "
|
"Szabolcs Gyurko, "
|
||||||
"Anton Vorontsov <cbou@mail.ru>");
|
"Anton Vorontsov <cbou@mail.ru>");
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|||||||
@@ -271,6 +271,5 @@ static struct platform_driver wm97xx_bat_driver = {
|
|||||||
|
|
||||||
module_platform_driver(wm97xx_bat_driver);
|
module_platform_driver(wm97xx_bat_driver);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_AUTHOR("Marek Vasut <marek.vasut@gmail.com>");
|
MODULE_AUTHOR("Marek Vasut <marek.vasut@gmail.com>");
|
||||||
MODULE_DESCRIPTION("WM97xx battery driver");
|
MODULE_DESCRIPTION("WM97xx battery driver");
|
||||||
|
|||||||
@@ -183,4 +183,3 @@ module_platform_driver(stm32_pwr_driver);
|
|||||||
|
|
||||||
MODULE_DESCRIPTION("STM32MP1 PWR voltage regulator driver");
|
MODULE_DESCRIPTION("STM32MP1 PWR voltage regulator driver");
|
||||||
MODULE_AUTHOR("Pascal Paillet <p.paillet@st.com>");
|
MODULE_AUTHOR("Pascal Paillet <p.paillet@st.com>");
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user