mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
s390/zcrypt: introduce new internal AP queue se_bound attribute
This patch introduces a new AP queue internal attribute se_bound which reflects the bound state of an APQN within a Secure Execution environment. With introduction of Secure Execution guests now an AP firmware queue needs to be bound to the guest before usage. This patch introduces a new internal attribute reflecting this bound state and some glue code to handle this new field during lifetime of an AP queue device. Together with that now the zcrypt scheduler considers the state of the AP queues when a message is about to be distributed among the existing queues. There is a new function ap_queue_usable() which returns true only when all conditions for using this AP queue device are fulfilled. In details this means: the AP queue needs to be configured, not checkstopped and within an SE environment it needs to be bound. So the new function gives and indication if the AP queue device is ready to serve requests or not. Signed-off-by: Harald Freudenberger <freude@linux.ibm.com> Reviewed-by: Holger Dengler <dengler@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
committed by
Vasily Gorbik
parent
32d1d9204f
commit
a19a161482
@@ -693,7 +693,7 @@ static long zcrypt_rsa_modexpo(struct ap_perms *perms,
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
/* check if device is usable and eligible */
|
||||
if (!zq->online || !zq->ops->rsa_modexpo ||
|
||||
!zq->queue->config || zq->queue->chkstop)
|
||||
!ap_queue_usable(zq->queue))
|
||||
continue;
|
||||
/* check if device node has admission for this queue */
|
||||
if (!zcrypt_check_queue(perms,
|
||||
@@ -798,7 +798,7 @@ static long zcrypt_rsa_crt(struct ap_perms *perms,
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
/* check if device is usable and eligible */
|
||||
if (!zq->online || !zq->ops->rsa_modexpo_crt ||
|
||||
!zq->queue->config || zq->queue->chkstop)
|
||||
!ap_queue_usable(zq->queue))
|
||||
continue;
|
||||
/* check if device node has admission for this queue */
|
||||
if (!zcrypt_check_queue(perms,
|
||||
@@ -916,7 +916,7 @@ static long _zcrypt_send_cprb(bool userspace, struct ap_perms *perms,
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
/* check for device usable and eligible */
|
||||
if (!zq->online || !zq->ops->send_cprb ||
|
||||
!zq->queue->config || zq->queue->chkstop ||
|
||||
!ap_queue_usable(zq->queue) ||
|
||||
(tdom != AUTOSEL_DOM &&
|
||||
tdom != AP_QID_QUEUE(zq->queue->qid)))
|
||||
continue;
|
||||
@@ -1087,7 +1087,7 @@ static long _zcrypt_send_ep11_cprb(bool userspace, struct ap_perms *perms,
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
/* check if device is usable and eligible */
|
||||
if (!zq->online || !zq->ops->send_ep11_cprb ||
|
||||
!zq->queue->config || zq->queue->chkstop ||
|
||||
!ap_queue_usable(zq->queue) ||
|
||||
(targets &&
|
||||
!is_desired_ep11_queue(zq->queue->qid,
|
||||
target_num, targets)))
|
||||
@@ -1186,7 +1186,7 @@ static long zcrypt_rng(char *buffer)
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
/* check if device is usable and eligible */
|
||||
if (!zq->online || !zq->ops->rng ||
|
||||
!zq->queue->config || zq->queue->chkstop)
|
||||
!ap_queue_usable(zq->queue))
|
||||
continue;
|
||||
if (!zcrypt_queue_compare(zq, pref_zq, wgt, pref_wgt))
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user