[Suspend2][ 02/12] [Suspend2] Encryption buffer allocation.

From: Nigel Cunningham
Date: Tue Jun 27 2006 - 01:08:56 EST


Add support for allocating and freeing buffers used for encryption.

Signed-off-by: Nigel Cunningham <nigel@xxxxxxxxxxxx>

kernel/power/encryption.c | 51 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/kernel/power/encryption.c b/kernel/power/encryption.c
index a90d3ca..45d325d 100644
--- a/kernel/power/encryption.c
+++ b/kernel/power/encryption.c
@@ -45,3 +45,54 @@ static unsigned int bufofs;

static struct scatterlist suspend_crypt_sg[PAGE_SIZE/8];

+/* ---- Local buffer management ---- */
+
+/* allocate_local_buffer
+ *
+ * Description: Allocates a page of memory for buffering output.
+ * Returns: Int: Zero if successful, -ENONEM otherwise.
+ */
+static int allocate_local_buffer(void)
+{
+ if (!page_buffer) {
+ int i, remainder;
+
+ page_buffer = (char *) get_zeroed_page(GFP_ATOMIC);
+
+ if (!page_buffer) {
+ printk(KERN_ERR
+ "Failed to allocate the page buffer for "
+ "suspend2 encryption driver.\n");
+ return -ENOMEM;
+ }
+
+ for (i=0; i < (PAGE_SIZE / suspend_key_len); i++) {
+ suspend_crypt_sg[i].page = virt_to_page(page_buffer);
+ suspend_crypt_sg[i].offset = suspend_key_len * i;
+ suspend_crypt_sg[i].length = suspend_key_len;
+ }
+
+ remainder = PAGE_SIZE % suspend_key_len;
+
+ if (remainder) {
+ suspend_crypt_sg[i].page = virt_to_page(page_buffer);
+ suspend_crypt_sg[i].offset = suspend_key_len * i;
+ suspend_crypt_sg[i].length = remainder;
+ }
+ }
+
+ return 0;
+}
+
+/* free_local_buffer
+ *
+ * Description: Frees memory allocated for buffering output.
+ */
+static void free_local_buffer(void)
+{
+ if (page_buffer)
+ free_page((unsigned long) page_buffer);
+
+ page_buffer = NULL;
+}
+

--
Nigel Cunningham nigel at suspend2 dot net
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/