mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-27 03:49:57 -04:00
s390/zcrypt: Support up to 256 crypto adapters.
There was an artificial restriction on the card/adapter id to only 6 bits but all the AP commands do support adapter ids with 8 bit. This patch removes this restriction to 64 adapters and now up to 256 adapter can get addressed. Some of the ioctl calls work on the max number of cards possible (which was 64). These ioctls are now deprecated but still supported. All the defines, structs and ioctl interface declarations have been kept for compabibility. There are now new ioctls (and defines for these) with an additional '2' appended which provide the extended versions with 256 cards supported. Signed-off-by: Harald Freudenberger <freude@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
committed by
Martin Schwidefsky
parent
71cbbff8c4
commit
af4a72276d
@@ -889,7 +889,7 @@ int pkey_findcard(const struct pkey_seckey *seckey,
|
||||
u16 *pcardnr, u16 *pdomain, int verify)
|
||||
{
|
||||
struct secaeskeytoken *t = (struct secaeskeytoken *) seckey;
|
||||
struct zcrypt_device_matrix *device_matrix;
|
||||
struct zcrypt_device_status_ext *device_status;
|
||||
u16 card, dom;
|
||||
u64 mkvp[2];
|
||||
int i, rc, oi = -1;
|
||||
@@ -899,18 +899,19 @@ int pkey_findcard(const struct pkey_seckey *seckey,
|
||||
return -EINVAL;
|
||||
|
||||
/* fetch status of all crypto cards */
|
||||
device_matrix = kmalloc(sizeof(struct zcrypt_device_matrix),
|
||||
device_status = kmalloc(MAX_ZDEV_ENTRIES_EXT
|
||||
* sizeof(struct zcrypt_device_status_ext),
|
||||
GFP_KERNEL);
|
||||
if (!device_matrix)
|
||||
if (!device_status)
|
||||
return -ENOMEM;
|
||||
zcrypt_device_status_mask(device_matrix);
|
||||
zcrypt_device_status_mask_ext(device_status);
|
||||
|
||||
/* walk through all crypto cards */
|
||||
for (i = 0; i < MAX_ZDEV_ENTRIES; i++) {
|
||||
card = AP_QID_CARD(device_matrix->device[i].qid);
|
||||
dom = AP_QID_QUEUE(device_matrix->device[i].qid);
|
||||
if (device_matrix->device[i].online &&
|
||||
device_matrix->device[i].functions & 0x04) {
|
||||
for (i = 0; i < MAX_ZDEV_ENTRIES_EXT; i++) {
|
||||
card = AP_QID_CARD(device_status[i].qid);
|
||||
dom = AP_QID_QUEUE(device_status[i].qid);
|
||||
if (device_status[i].online &&
|
||||
device_status[i].functions & 0x04) {
|
||||
/* an enabled CCA Coprocessor card */
|
||||
/* try cached mkvp */
|
||||
if (mkvp_cache_fetch(card, dom, mkvp) == 0 &&
|
||||
@@ -930,14 +931,14 @@ int pkey_findcard(const struct pkey_seckey *seckey,
|
||||
mkvp_cache_scrub(card, dom);
|
||||
}
|
||||
}
|
||||
if (i >= MAX_ZDEV_ENTRIES) {
|
||||
if (i >= MAX_ZDEV_ENTRIES_EXT) {
|
||||
/* nothing found, so this time without cache */
|
||||
for (i = 0; i < MAX_ZDEV_ENTRIES; i++) {
|
||||
if (!(device_matrix->device[i].online &&
|
||||
device_matrix->device[i].functions & 0x04))
|
||||
for (i = 0; i < MAX_ZDEV_ENTRIES_EXT; i++) {
|
||||
if (!(device_status[i].online &&
|
||||
device_status[i].functions & 0x04))
|
||||
continue;
|
||||
card = AP_QID_CARD(device_matrix->device[i].qid);
|
||||
dom = AP_QID_QUEUE(device_matrix->device[i].qid);
|
||||
card = AP_QID_CARD(device_status[i].qid);
|
||||
dom = AP_QID_QUEUE(device_status[i].qid);
|
||||
/* fresh fetch mkvp from adapter */
|
||||
if (fetch_mkvp(card, dom, mkvp) == 0) {
|
||||
mkvp_cache_update(card, dom, mkvp);
|
||||
@@ -947,13 +948,13 @@ int pkey_findcard(const struct pkey_seckey *seckey,
|
||||
oi = i;
|
||||
}
|
||||
}
|
||||
if (i >= MAX_ZDEV_ENTRIES && oi >= 0) {
|
||||
if (i >= MAX_ZDEV_ENTRIES_EXT && oi >= 0) {
|
||||
/* old mkvp matched, use this card then */
|
||||
card = AP_QID_CARD(device_matrix->device[oi].qid);
|
||||
dom = AP_QID_QUEUE(device_matrix->device[oi].qid);
|
||||
card = AP_QID_CARD(device_status[oi].qid);
|
||||
dom = AP_QID_QUEUE(device_status[oi].qid);
|
||||
}
|
||||
}
|
||||
if (i < MAX_ZDEV_ENTRIES || oi >= 0) {
|
||||
if (i < MAX_ZDEV_ENTRIES_EXT || oi >= 0) {
|
||||
if (pcardnr)
|
||||
*pcardnr = card;
|
||||
if (pdomain)
|
||||
@@ -962,7 +963,7 @@ int pkey_findcard(const struct pkey_seckey *seckey,
|
||||
} else
|
||||
rc = -ENODEV;
|
||||
|
||||
kfree(device_matrix);
|
||||
kfree(device_status);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(pkey_findcard);
|
||||
|
||||
Reference in New Issue
Block a user