Re: [PATCH] arm64: Allow user selection of ARM64_MODULE_PLTS

From: Florian Fainelli
Date: Mon Jun 17 2019 - 14:08:45 EST

On 6/17/19 10:32 AM, Will Deacon wrote:
> On Thu, Jun 13, 2019 at 07:59:32PM -0700, Florian Fainelli wrote:
>> Make ARM64_MODULE_PLTS a selectable Kconfig symbol, since some people
>> might have very big modules spilling out of the dedicated module area
>> into vmalloc. Help text is copied from the ARM 32-bit counterpart.
>> Signed-off-by: Florian Fainelli <f.fainelli@xxxxxxxxx>
>> ---
>> arch/arm64/Kconfig | 14 +++++++++++++-
>> 1 file changed, 13 insertions(+), 1 deletion(-)
>> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
>> index 697ea0510729..36befe987b73 100644
>> --- a/arch/arm64/Kconfig
>> +++ b/arch/arm64/Kconfig
>> @@ -1418,8 +1418,20 @@ config ARM64_SVE
>> KVM in the same kernel image.
>> config ARM64_MODULE_PLTS
>> - bool
>> + bool "Use PLTs to allow module memory to spill over into vmalloc area"
>> + help
>> + Allocate PLTs when loading modules so that jumps and calls whose
>> + targets are too far away for their relative offsets to be encoded
>> + in the instructions themselves can be bounced via veneers in the
>> + module's PLT. This allows modules to be allocated in the generic
>> + vmalloc area after the dedicated module memory area has been
>> + exhausted. The modules will use slightly more memory, but after
>> + rounding up to page size, the actual memory footprint is usually
>> + the same.
> Isn't the worry really about the runtime performance overhead introduced
> by the veneers, as opposed to the memory usage of the module?

The main concern is indeed runtime performance (both added veneers and
possibly increased cache trashing) and second could be the increased
vmalloc usage. Do you want me to rephrase that part, or drop it?

>> + Disabling this is usually safe for small single-platform
>> + configurations. If unsure, say y.
> So should this be on by default?

It is turned on under certain conditions that require it (v2 makes that
clearer, based on Ard's feedback), having it turned off by default at
least makes people realize (or rather can be used as argument) that the
modules are possibly too big.

Under certain build configurations like test/manufacturing, you might
have a set of large modules that should still load, hence this patch.