s390/ap: modularize ap bus

There is no hard requirement to have the ap bus statically in the
kernel, so add an option to compile it as module.

Cc: Tony Krowiak <akrowiak@linux.ibm.com>
Cc: Halil Pasic <pasic@linux.ibm.com>
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
Reviewed-by: Harald Freudenberger <freude@linux.ibm.com>
Reviewed-by: Anthony Krowiak <akrowiak@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
This commit is contained in:
Holger Dengler 2024-02-19 18:10:19 +01:00 committed by Alexander Gordeev
parent 2a483d333f
commit 123760841a
6 changed files with 44 additions and 8 deletions

View File

@ -550,7 +550,7 @@ These are the steps:
following Kconfig elements selected:
* IOMMU_SUPPORT
* S390
* ZCRYPT
* AP
* VFIO
* KVM

View File

@ -724,6 +724,19 @@ config EADM_SCH
To compile this driver as a module, choose M here: the
module will be called eadm_sch.
config AP
def_tristate y
prompt "Support for Adjunct Processors (ap)"
help
This driver allows usage to Adjunct Processor (AP) devices via
the ap bus, cards and queues. Supported Adjunct Processors are
the CryptoExpress Cards (CEX).
To compile this driver as a module, choose M here: the
module will be called ap.
If unsure, say Y (default).
config VFIO_CCW
def_tristate n
prompt "Support for VFIO-CCW subchannels"
@ -740,7 +753,7 @@ config VFIO_AP
prompt "VFIO support for AP devices"
depends on KVM
depends on VFIO
depends on ZCRYPT
depends on AP
select VFIO_MDEV
help
This driver grants access to Adjunct Processor (AP) devices

View File

@ -67,6 +67,7 @@ config CRYPTO_DEV_GEODE
config ZCRYPT
tristate "Support for s390 cryptographic adapters"
depends on S390
depends on AP
select HW_RANDOM
help
Select this option if you want to enable support for

View File

@ -32,7 +32,7 @@ obj-$(CONFIG_SCLP_VT220_TTY) += sclp_vt220.o
obj-$(CONFIG_PCI) += sclp_pci.o
obj-$(subst m,y,$(CONFIG_ZCRYPT)) += sclp_ap.o
obj-$(subst m,y,$(CONFIG_AP)) += sclp_ap.o
obj-$(CONFIG_VMLOGRDR) += vmlogrdr.o
obj-$(CONFIG_VMCP) += vmcp.o

View File

@ -4,7 +4,7 @@
#
ap-objs := ap_bus.o ap_card.o ap_queue.o
obj-$(subst m,y,$(CONFIG_ZCRYPT)) += ap.o
obj-$(CONFIG_AP) += ap.o
# zcrypt_api.o and zcrypt_msgtype*.o depend on ap.o
zcrypt-objs := zcrypt_api.o zcrypt_card.o zcrypt_queue.o
zcrypt-objs += zcrypt_msgtype6.o zcrypt_msgtype50.o

View File

@ -44,9 +44,10 @@
#include "ap_bus.h"
#include "ap_debug.h"
/*
* Module parameters; note though this file itself isn't modular.
*/
MODULE_AUTHOR("IBM Corporation");
MODULE_DESCRIPTION("Adjunct Processor Bus driver");
MODULE_LICENSE("GPL");
int ap_domain_index = -1; /* Adjunct Processor Domain Index */
static DEFINE_SPINLOCK(ap_domain_lock);
module_param_named(domain, ap_domain_index, int, 0440);
@ -2284,6 +2285,16 @@ static void ap_scan_bus_wq_callback(struct work_struct *unused)
}
}
static inline void __exit ap_async_exit(void)
{
if (ap_thread_flag)
ap_poll_thread_stop();
chsc_notifier_unregister(&ap_bus_nb);
cancel_work(&ap_scan_bus_work);
hrtimer_cancel(&ap_poll_timer);
timer_delete(&ap_scan_bus_timer);
}
static inline int __init ap_async_init(void)
{
int rc;
@ -2451,4 +2462,15 @@ out:
ap_debug_exit();
return rc;
}
device_initcall(ap_module_init);
static void __exit ap_module_exit(void)
{
ap_async_exit();
ap_irq_exit();
root_device_unregister(ap_root_device);
bus_unregister(&ap_bus_type);
ap_debug_exit();
}
module_init(ap_module_init);
module_exit(ap_module_exit);