Re: [PATCH] powerpc/pseries: Fix regression while building external modules

2021-08-01 Thread Michael Ellerman
On Thu, 29 Jul 2021 11:34:49 +0530, Srikar Dronamraju wrote:
> With Commit c9f3401313a5 ("powerpc: Always enable queued spinlocks for
> 64s, disable for others") CONFIG_PPC_QUEUED_SPINLOCKS is always
> enabled on ppc64le, external modules that use spinlock APIs are
> failing.
> 
> ERROR: modpost: GPL-incompatible module XXX.ko uses GPL-only symbol
> 'shared_processor'
> 
> [...]

Applied to powerpc/fixes.

[1/1] powerpc/pseries: Fix regression while building external modules
  https://git.kernel.org/powerpc/c/333cf507465fbebb3727f5b53e77538467df312a

cheers


[PATCH] powerpc/pseries: Fix regression while building external modules

2021-07-28 Thread Srikar Dronamraju
With Commit c9f3401313a5 ("powerpc: Always enable queued spinlocks for
64s, disable for others") CONFIG_PPC_QUEUED_SPINLOCKS is always
enabled on ppc64le, external modules that use spinlock APIs are
failing.

ERROR: modpost: GPL-incompatible module XXX.ko uses GPL-only symbol
'shared_processor'

Before the above commit, modules were able to build without any
issues. Also this problem is not seen on other architectures. This
problem can be workaround if CONFIG_UNINLINE_SPIN_UNLOCK is enabled in
the config. However CONFIG_UNINLINE_SPIN_UNLOCK is not enabled by
default and only enabled in certain conditions like
CONFIG_DEBUG_SPINLOCKS is set in the kernel config.

 #include 
spinlock_t spLock;

static int __init spinlock_test_init(void)
{
spin_lock_init(&spLock);
spin_lock(&spLock);
spin_unlock(&spLock);
return 0;
}

static void __exit spinlock_test_exit(void)
{
printk("spinlock_test unloaded\n");
}
module_init(spinlock_test_init);
module_exit(spinlock_test_exit);

MODULE_DESCRIPTION ("spinlock_test");
MODULE_LICENSE ("non-GPL");
MODULE_AUTHOR ("Srikar Dronamraju");

Given that spin locks are one of the basic facilities for module code,
this effectively makes it impossible to build/load almost any non GPL
modules on ppc64le.

This was first reported at https://github.com/openzfs/zfs/issues/11172

Currently shared_processor is exported as GPL only symbol.
Fix this for parity with other architectures by exposing
shared_processor to non-GPL modules too.

Fixes: 14c73bd344da ("powerpc/vcpu: Assume dedicated processors as non-preempt")
Fixes: c9f3401313a5 ("powerpc: Always enable queued spinlocks for 64s, disable 
for others")
Reported-by: marc.c.dio...@gmail.com
Cc: linuxppc-dev@lists.ozlabs.org
Cc: Michael Ellerman 
Cc: Nicholas Piggin 
Cc: marc.c.dio...@gmail.com
Cc: jfor...@redhat.com
Cc: yaday...@in.ibm.com
Signed-off-by: Srikar Dronamraju 
---
 arch/powerpc/platforms/pseries/setup.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/pseries/setup.c 
b/arch/powerpc/platforms/pseries/setup.c
index 754e493b7c05..0338f481c12b 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -77,7 +77,7 @@
 #include "../../../../drivers/pci/pci.h"
 
 DEFINE_STATIC_KEY_FALSE(shared_processor);
-EXPORT_SYMBOL_GPL(shared_processor);
+EXPORT_SYMBOL(shared_processor);
 
 int CMO_PrPSP = -1;
 int CMO_SecPSP = -1;

base-commit: adf3c31e18b765ea24eba7b0c1efc076b8ee3d55
-- 
2.18.2