Commit 12376084 authored by Holger Dengler's avatar Holger Dengler Committed by Alexander Gordeev

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: default avatarHolger Dengler <dengler@linux.ibm.com>
Reviewed-by: default avatarHarald Freudenberger <freude@linux.ibm.com>
Reviewed-by: default avatarAnthony Krowiak <akrowiak@linux.ibm.com>
Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
parent 2a483d33
...@@ -550,7 +550,7 @@ These are the steps: ...@@ -550,7 +550,7 @@ These are the steps:
following Kconfig elements selected: following Kconfig elements selected:
* IOMMU_SUPPORT * IOMMU_SUPPORT
* S390 * S390
* ZCRYPT * AP
* VFIO * VFIO
* KVM * KVM
......
...@@ -724,6 +724,19 @@ config EADM_SCH ...@@ -724,6 +724,19 @@ config EADM_SCH
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called eadm_sch. 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 config VFIO_CCW
def_tristate n def_tristate n
prompt "Support for VFIO-CCW subchannels" prompt "Support for VFIO-CCW subchannels"
...@@ -740,7 +753,7 @@ config VFIO_AP ...@@ -740,7 +753,7 @@ config VFIO_AP
prompt "VFIO support for AP devices" prompt "VFIO support for AP devices"
depends on KVM depends on KVM
depends on VFIO depends on VFIO
depends on ZCRYPT depends on AP
select VFIO_MDEV select VFIO_MDEV
help help
This driver grants access to Adjunct Processor (AP) devices This driver grants access to Adjunct Processor (AP) devices
......
...@@ -67,6 +67,7 @@ config CRYPTO_DEV_GEODE ...@@ -67,6 +67,7 @@ config CRYPTO_DEV_GEODE
config ZCRYPT config ZCRYPT
tristate "Support for s390 cryptographic adapters" tristate "Support for s390 cryptographic adapters"
depends on S390 depends on S390
depends on AP
select HW_RANDOM select HW_RANDOM
help help
Select this option if you want to enable support for Select this option if you want to enable support for
......
...@@ -32,7 +32,7 @@ obj-$(CONFIG_SCLP_VT220_TTY) += sclp_vt220.o ...@@ -32,7 +32,7 @@ obj-$(CONFIG_SCLP_VT220_TTY) += sclp_vt220.o
obj-$(CONFIG_PCI) += sclp_pci.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_VMLOGRDR) += vmlogrdr.o
obj-$(CONFIG_VMCP) += vmcp.o obj-$(CONFIG_VMCP) += vmcp.o
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# #
ap-objs := ap_bus.o ap_card.o ap_queue.o 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_api.o and zcrypt_msgtype*.o depend on ap.o
zcrypt-objs := zcrypt_api.o zcrypt_card.o zcrypt_queue.o zcrypt-objs := zcrypt_api.o zcrypt_card.o zcrypt_queue.o
zcrypt-objs += zcrypt_msgtype6.o zcrypt_msgtype50.o zcrypt-objs += zcrypt_msgtype6.o zcrypt_msgtype50.o
......
...@@ -44,9 +44,10 @@ ...@@ -44,9 +44,10 @@
#include "ap_bus.h" #include "ap_bus.h"
#include "ap_debug.h" #include "ap_debug.h"
/* MODULE_AUTHOR("IBM Corporation");
* Module parameters; note though this file itself isn't modular. MODULE_DESCRIPTION("Adjunct Processor Bus driver");
*/ MODULE_LICENSE("GPL");
int ap_domain_index = -1; /* Adjunct Processor Domain Index */ int ap_domain_index = -1; /* Adjunct Processor Domain Index */
static DEFINE_SPINLOCK(ap_domain_lock); static DEFINE_SPINLOCK(ap_domain_lock);
module_param_named(domain, ap_domain_index, int, 0440); module_param_named(domain, ap_domain_index, int, 0440);
...@@ -2284,6 +2285,16 @@ static void ap_scan_bus_wq_callback(struct work_struct *unused) ...@@ -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) static inline int __init ap_async_init(void)
{ {
int rc; int rc;
...@@ -2451,4 +2462,15 @@ static int __init ap_module_init(void) ...@@ -2451,4 +2462,15 @@ static int __init ap_module_init(void)
ap_debug_exit(); ap_debug_exit();
return rc; 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);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment