Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc1d3f02 authored by Ingo Tuchscherer's avatar Ingo Tuchscherer Committed by Martin Schwidefsky
Browse files

s390/zcrypt: Move the ap bus into kernel



Move the ap bus into the kernel and make it general available.
Additionally include the message types and the API layer as a
preparation for the workload management facility.

Signed-off-by: default avatarIngo Tuchscherer <ingo.tuchscherer@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent b3e8652b
Loading
Loading
Loading
Loading
+5 −5
Original line number Original line Diff line number Diff line
@@ -3,9 +3,9 @@
#
#


ap-objs := ap_bus.o
ap-objs := ap_bus.o
# zcrypt_api depends on ap
obj-$(subst m,y,$(CONFIG_ZCRYPT)) += ap.o
obj-$(CONFIG_ZCRYPT) += ap.o zcrypt_api.o
# zcrypt_api.o and zcrypt_msgtype*.o depend on ap.o
# msgtype* depend on zcrypt_api
zcrypt-objs := zcrypt_api.o zcrypt_msgtype6.o zcrypt_msgtype50.o
obj-$(CONFIG_ZCRYPT) += zcrypt_msgtype6.o zcrypt_msgtype50.o
obj-$(CONFIG_ZCRYPT) += zcrypt.o
# adapter drivers depend on ap, zcrypt_api and msgtype*
# adapter drivers depend on ap.o and zcrypt.o
obj-$(CONFIG_ZCRYPT) += zcrypt_pcixcc.o zcrypt_cex2a.o zcrypt_cex4.o
obj-$(CONFIG_ZCRYPT) += zcrypt_pcixcc.o zcrypt_cex2a.o zcrypt_cex4.o
+25 −2
Original line number Original line Diff line number Diff line
@@ -62,6 +62,7 @@ MODULE_ALIAS_CRYPTO("z90crypt");
 * Module parameter
 * Module parameter
 */
 */
int ap_domain_index = -1;	/* Adjunct Processor Domain Index */
int ap_domain_index = -1;	/* Adjunct Processor Domain Index */
static DEFINE_SPINLOCK(ap_domain_lock);
module_param_named(domain, ap_domain_index, int, S_IRUSR|S_IRGRP);
module_param_named(domain, ap_domain_index, int, S_IRUSR|S_IRGRP);
MODULE_PARM_DESC(domain, "domain index for ap devices");
MODULE_PARM_DESC(domain, "domain index for ap devices");
EXPORT_SYMBOL(ap_domain_index);
EXPORT_SYMBOL(ap_domain_index);
@@ -1481,7 +1482,21 @@ static ssize_t ap_domain_show(struct bus_type *bus, char *buf)
	return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);
	return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);
}
}


static BUS_ATTR(ap_domain, 0444, ap_domain_show, NULL);
static ssize_t ap_domain_store(struct bus_type *bus,
			       const char *buf, size_t count)
{
	int domain;

	if (sscanf(buf, "%i\n", &domain) != 1 ||
	    domain < 0 || domain > ap_max_domain_id)
		return -EINVAL;
	spin_lock_bh(&ap_domain_lock);
	ap_domain_index = domain;
	spin_unlock_bh(&ap_domain_lock);
	return count;
}

static BUS_ATTR(ap_domain, 0644, ap_domain_show, ap_domain_store);


static ssize_t ap_control_domain_mask_show(struct bus_type *bus, char *buf)
static ssize_t ap_control_domain_mask_show(struct bus_type *bus, char *buf)
{
{
@@ -1623,9 +1638,12 @@ static int ap_select_domain(void)
	 * the "domain=" parameter or the domain with the maximum number
	 * the "domain=" parameter or the domain with the maximum number
	 * of devices.
	 * of devices.
	 */
	 */
	if (ap_domain_index >= 0)
	spin_lock_bh(&ap_domain_lock);
	if (ap_domain_index >= 0) {
		/* Domain has already been selected. */
		/* Domain has already been selected. */
		spin_unlock_bh(&ap_domain_lock);
		return 0;
		return 0;
	}
	best_domain = -1;
	best_domain = -1;
	max_count = 0;
	max_count = 0;
	for (i = 0; i < AP_DOMAINS; i++) {
	for (i = 0; i < AP_DOMAINS; i++) {
@@ -1647,8 +1665,10 @@ static int ap_select_domain(void)
	}
	}
	if (best_domain >= 0){
	if (best_domain >= 0){
		ap_domain_index = best_domain;
		ap_domain_index = best_domain;
		spin_unlock_bh(&ap_domain_lock);
		return 0;
		return 0;
	}
	}
	spin_unlock_bh(&ap_domain_lock);
	return -ENODEV;
	return -ENODEV;
}
}


@@ -1677,6 +1697,8 @@ static void ap_scan_bus(struct work_struct *unused)
	if (ap_select_domain() != 0)
	if (ap_select_domain() != 0)
		goto out;
		goto out;



	spin_lock_bh(&ap_domain_lock);
	for (i = 0; i < AP_DEVICES; i++) {
	for (i = 0; i < AP_DEVICES; i++) {
		qid = AP_MKQID(i, ap_domain_index);
		qid = AP_MKQID(i, ap_domain_index);
		dev = bus_find_device(&ap_bus_type, NULL,
		dev = bus_find_device(&ap_bus_type, NULL,
@@ -1753,6 +1775,7 @@ static void ap_scan_bus(struct work_struct *unused)
			continue;
			continue;
		}
		}
	}
	}
	spin_unlock_bh(&ap_domain_lock);
out:
out:
	mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ);
	mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ);
}
}
+6 −1
Original line number Original line Diff line number Diff line
@@ -45,6 +45,7 @@
#include "zcrypt_api.h"
#include "zcrypt_api.h"


#include "zcrypt_msgtype6.h"
#include "zcrypt_msgtype6.h"
#include "zcrypt_msgtype50.h"


/*
/*
 * Module description.
 * Module description.
@@ -1459,6 +1460,8 @@ int __init zcrypt_api_init(void)
		goto out_misc;
		goto out_misc;
	}
	}


	zcrypt_msgtype6_init();
	zcrypt_msgtype50_init();
	return 0;
	return 0;


out_misc:
out_misc:
@@ -1472,11 +1475,13 @@ int __init zcrypt_api_init(void)
 *
 *
 * The module termination code.
 * The module termination code.
 */
 */
void zcrypt_api_exit(void)
void __exit zcrypt_api_exit(void)
{
{
	remove_proc_entry("driver/z90crypt", NULL);
	remove_proc_entry("driver/z90crypt", NULL);
	misc_deregister(&zcrypt_misc_device);
	misc_deregister(&zcrypt_misc_device);
	zcrypt_debug_exit();
	zcrypt_debug_exit();
	zcrypt_msgtype6_exit();
	zcrypt_msgtype50_exit();
}
}


module_init(zcrypt_api_init);
module_init(zcrypt_api_init);
+1 −5
Original line number Original line Diff line number Diff line
@@ -518,16 +518,12 @@ static struct zcrypt_ops zcrypt_msgtype50_ops = {
	.variant = MSGTYPE50_VARIANT_DEFAULT,
	.variant = MSGTYPE50_VARIANT_DEFAULT,
};
};


int __init zcrypt_msgtype50_init(void)
void __init zcrypt_msgtype50_init(void)
{
{
	zcrypt_msgtype_register(&zcrypt_msgtype50_ops);
	zcrypt_msgtype_register(&zcrypt_msgtype50_ops);
	return 0;
}
}


void __exit zcrypt_msgtype50_exit(void)
void __exit zcrypt_msgtype50_exit(void)
{
{
	zcrypt_msgtype_unregister(&zcrypt_msgtype50_ops);
	zcrypt_msgtype_unregister(&zcrypt_msgtype50_ops);
}
}

module_init(zcrypt_msgtype50_init);
module_exit(zcrypt_msgtype50_exit);
+1 −1
Original line number Original line Diff line number Diff line
@@ -35,7 +35,7 @@


#define MSGTYPE_ADJUSTMENT		0x08  /*type04 extension (not needed in type50)*/
#define MSGTYPE_ADJUSTMENT		0x08  /*type04 extension (not needed in type50)*/


int zcrypt_msgtype50_init(void);
void zcrypt_msgtype50_init(void);
void zcrypt_msgtype50_exit(void);
void zcrypt_msgtype50_exit(void);


#endif /* _ZCRYPT_MSGTYPE50_H_ */
#endif /* _ZCRYPT_MSGTYPE50_H_ */
Loading