From: Harald Freudenberger <freude@linux.ibm.com>
To: dengler@linux.ibm.com, ifranzki@linux.ibm.com,
fcallies@linux.ibm.com, hca@linux.ibm.com, gor@linux.ibm.com,
agordeev@linux.ibm.com
Cc: linux-s390@vger.kernel.org, herbert@gondor.apana.org.au
Subject: [PATCH v2 16/20] s390/zcrypt: Add small mempool for ep11 card info list entries
Date: Tue, 4 Mar 2025 18:21:12 +0100 [thread overview]
Message-ID: <20250304172116.85374-17-freude@linux.ibm.com> (raw)
In-Reply-To: <20250304172116.85374-1-freude@linux.ibm.com>
Add a small memory pool for (pre-)allocating ep11 card info list
entries. These entries are rather small and the pool is a simple
way to support the xflag ZCRYPT_XFLAG_NOMEMALLOC to avoid mallocs.
Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
---
drivers/s390/crypto/zcrypt_ep11misc.c | 48 ++++++++++++++++++++++-----
1 file changed, 39 insertions(+), 9 deletions(-)
diff --git a/drivers/s390/crypto/zcrypt_ep11misc.c b/drivers/s390/crypto/zcrypt_ep11misc.c
index af59d66bff33..a9a6fdc32464 100644
--- a/drivers/s390/crypto/zcrypt_ep11misc.c
+++ b/drivers/s390/crypto/zcrypt_ep11misc.c
@@ -64,6 +64,10 @@ struct card_list_entry {
static LIST_HEAD(card_list);
static DEFINE_SPINLOCK(card_list_lock);
+/* memory pool for card_list_entry entries */
+#define INFO_ENTRY_MEMPOOL_MIN_ITEMS 4
+static mempool_t *info_mempool;
+
static int card_cache_fetch(u16 cardnr, struct ep11_card_info *ci)
{
int rc = -ENOENT;
@@ -82,7 +86,8 @@ static int card_cache_fetch(u16 cardnr, struct ep11_card_info *ci)
return rc;
}
-static void card_cache_update(u16 cardnr, const struct ep11_card_info *ci)
+static void card_cache_update(u16 cardnr, const struct ep11_card_info *ci,
+ u32 xflags)
{
int found = 0;
struct card_list_entry *ptr;
@@ -96,7 +101,9 @@ static void card_cache_update(u16 cardnr, const struct ep11_card_info *ci)
}
}
if (!found) {
- ptr = kmalloc(sizeof(*ptr), GFP_ATOMIC);
+ ptr = (xflags & ZCRYPT_XFLAG_NOMEMALLOC) ?
+ mempool_alloc_preallocated(info_mempool) :
+ mempool_alloc(info_mempool, GFP_ATOMIC);
if (!ptr) {
spin_unlock_bh(&card_list_lock);
return;
@@ -116,7 +123,7 @@ static void card_cache_scrub(u16 cardnr)
list_for_each_entry(ptr, &card_list, list) {
if (ptr->cardnr == cardnr) {
list_del(&ptr->list);
- kfree(ptr);
+ mempool_free(ptr, info_mempool);
break;
}
}
@@ -130,7 +137,7 @@ static void __exit card_cache_free(void)
spin_lock_bh(&card_list_lock);
list_for_each_entry_safe(ptr, pnext, &card_list, list) {
list_del(&ptr->list);
- kfree(ptr);
+ mempool_free(ptr, info_mempool);
}
spin_unlock_bh(&card_list_lock);
}
@@ -772,7 +779,7 @@ int ep11_get_card_info(u16 card, struct ep11_card_info *info,
(pmqi->FW_major_vers << 8) + pmqi->FW_minor_vers;
memcpy(info->serial, pmqi->serial, sizeof(info->serial));
info->op_mode = pmqi->op_mode;
- card_cache_update(card, info);
+ card_cache_update(card, info, xflags);
}
out:
@@ -1713,6 +1720,8 @@ EXPORT_SYMBOL(ep11_findcard2);
int __init zcrypt_ep11misc_init(void)
{
+ int rc = -ENOMEM;
+
/* Pre-allocate a small memory pool for ep11 cprbs. */
cprb_mempool = mempool_create_kmalloc_pool(zcrypt_ep11_cprbpool_min_items,
CPRB_MEMPOOL_ITEM_SIZE);
@@ -1720,19 +1729,39 @@ int __init zcrypt_ep11misc_init(void)
ZCRYPT_DBF_ERR("%s mempool_create(%d,%d) failed: %ld\n",
__func__, zcrypt_ep11_cprbpool_min_items,
CPRB_MEMPOOL_ITEM_SIZE, PTR_ERR(cprb_mempool));
+ rc = PTR_ERR(cprb_mempool);
cprb_mempool = NULL;
- return -ENOMEM;
+ goto out;
+ }
+
+ /* Pre-allocate a very small memory pool for card info entries */
+ info_mempool = mempool_create_kmalloc_pool(INFO_ENTRY_MEMPOOL_MIN_ITEMS,
+ sizeof(struct card_list_entry));
+ if (IS_ERR(info_mempool)) {
+ ZCRYPT_DBF_ERR("%s card info entry mempool_create(%d,%d) failed: %ld\n",
+ __func__, INFO_ENTRY_MEMPOOL_MIN_ITEMS,
+ (int)sizeof(struct card_list_entry),
+ PTR_ERR(info_mempool));
+ rc = PTR_ERR(info_mempool);
+ info_mempool = NULL;
+ goto out;
}
/* Pre-allocate one crypto status card struct used in findcard() */
dev_status_mem = kvmalloc(ZCRYPT_DEV_STATUS_EXT_SIZE, GFP_KERNEL);
if (!dev_status_mem) {
ZCRYPT_DBF_ERR("%s allocation of dev_status_mem failed\n", __func__);
- mempool_destroy(cprb_mempool);
- return -ENOMEM;
+ goto out;
}
- return 0;
+ rc = 0;
+
+out:
+ if (rc) {
+ mempool_destroy(cprb_mempool);
+ mempool_destroy(info_mempool);
+ }
+ return rc;
}
void zcrypt_ep11misc_exit(void)
@@ -1740,4 +1769,5 @@ void zcrypt_ep11misc_exit(void)
card_cache_free();
kvfree(dev_status_mem);
mempool_destroy(cprb_mempool);
+ mempool_destroy(info_mempool);
}
--
2.43.0
next prev parent reply other threads:[~2025-03-04 17:21 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-04 17:20 [PATCH v2 00/20] AP bus/zcrypt/pkey/paes no-mem-alloc patches Harald Freudenberger
2025-03-04 17:20 ` [PATCH v2 01/20] s390/ap: Move response_type struct into ap_msg struct Harald Freudenberger
2025-03-17 9:38 ` Holger Dengler
2025-03-24 14:34 ` Harald Freudenberger
2025-03-04 17:20 ` [PATCH v2 02/20] s390/ap/zcrypt: Rework AP message buffer allocation Harald Freudenberger
2025-03-17 13:57 ` Holger Dengler
2025-03-04 17:20 ` [PATCH v2 03/20] s390/ap: Introduce ap message buffer pool Harald Freudenberger
2025-03-17 16:14 ` Holger Dengler
2025-03-24 14:41 ` Harald Freudenberger
2025-03-04 17:21 ` [PATCH v2 04/20] s390/ap/zcrypt: New xflag parameter and extension of the ap msg flags Harald Freudenberger
2025-03-18 12:16 ` Holger Dengler
2025-03-24 15:52 ` Harald Freudenberger
2025-03-04 17:21 ` [PATCH v2 05/20] s390/zcrypt: Introduce cprb mempool for cca misc functions Harald Freudenberger
2025-03-18 14:16 ` Holger Dengler
2025-03-25 8:26 ` Harald Freudenberger
2025-03-04 17:21 ` [PATCH v2 06/20] s390/zcrypt: Introduce cprb mempool for ep11 " Harald Freudenberger
2025-03-18 15:16 ` Holger Dengler
2025-03-25 8:36 ` Harald Freudenberger
2025-03-04 17:21 ` [PATCH v2 07/20] s390/zcrypt: Rework zcrypt function zcrypt_device_status_mask_ext Harald Freudenberger
2025-03-19 11:03 ` Holger Dengler
2025-03-25 9:24 ` Harald Freudenberger
2025-03-04 17:21 ` [PATCH v2 08/20] s390/zcrypt: Introduce pre-allocated device status array for cca misc Harald Freudenberger
2025-03-19 14:31 ` Holger Dengler
2025-03-25 10:51 ` Harald Freudenberger
2025-03-04 17:21 ` [PATCH v2 09/20] s390/zcrypt: Introduce pre-allocated device status array for ep11 misc Harald Freudenberger
2025-03-19 18:02 ` Holger Dengler
2025-03-25 11:09 ` Harald Freudenberger
2025-03-04 17:21 ` [PATCH v2 10/20] s390/zcrypt/pkey: Rework cca findcard() implementation and callers Harald Freudenberger
2025-03-19 17:58 ` Holger Dengler
2025-03-25 13:02 ` Harald Freudenberger
2025-03-04 17:21 ` [PATCH v2 11/20] s390/zcrypt/pkey: Rework ep11 " Harald Freudenberger
2025-03-20 8:30 ` Holger Dengler
2025-03-25 13:12 ` Harald Freudenberger
2025-03-04 17:21 ` [PATCH v2 12/20] s390/zcrypt: Rework cca misc functions kmallocs to use the cprb mempool Harald Freudenberger
2025-03-20 9:31 ` Holger Dengler
2025-03-04 17:21 ` [PATCH v2 13/20] s390/zcrypt: Add small mempool for cca info list entries Harald Freudenberger
2025-03-20 14:34 ` Holger Dengler
2025-03-25 13:32 ` Harald Freudenberger
2025-03-20 16:05 ` Holger Dengler
2025-03-04 17:21 ` [PATCH v2 14/20] s390/zcrypt: Locate ep11_domain_query_info onto the stack instead of kmalloc Harald Freudenberger
2025-03-20 14:41 ` Holger Dengler
2025-03-25 14:04 ` Harald Freudenberger
2025-03-04 17:21 ` [PATCH v2 15/20] s390/zcrypt: Rework ep11 misc functions to use cprb mempool Harald Freudenberger
2025-03-20 15:18 ` Holger Dengler
2025-03-04 17:21 ` Harald Freudenberger [this message]
2025-03-20 16:09 ` [PATCH v2 16/20] s390/zcrypt: Add small mempool for ep11 card info list entries Holger Dengler
2025-03-04 17:21 ` [PATCH v2 17/20] s390/pkey: Rework CCA pkey handler to use stack for small memory allocs Harald Freudenberger
2025-03-21 9:05 ` Holger Dengler
2025-03-04 17:21 ` [PATCH v2 18/20] s390/pkey: Rework EP11 " Harald Freudenberger
2025-03-21 9:06 ` Holger Dengler
2025-03-04 17:21 ` [PATCH v2 19/20] s390/zcrypt/pkey: Provide and pass xflags within pkey and zcrypt layers Harald Freudenberger
2025-03-20 16:30 ` Holger Dengler
2025-03-04 17:21 ` [PATCH v2 20/20] s390/pkey/crypto: Introduce xflags param for pkey in-kernel API Harald Freudenberger
2025-03-20 16:34 ` Holger Dengler
2025-03-20 16:40 ` [PATCH v2 00/20] AP bus/zcrypt/pkey/paes no-mem-alloc patches Holger Dengler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250304172116.85374-17-freude@linux.ibm.com \
--to=freude@linux.ibm.com \
--cc=agordeev@linux.ibm.com \
--cc=dengler@linux.ibm.com \
--cc=fcallies@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=herbert@gondor.apana.org.au \
--cc=ifranzki@linux.ibm.com \
--cc=linux-s390@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.