mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Nigel Cunningham <nigel@suspend2.net>
To: linux-kernel@vger.kernel.org
Subject: [Suspend2][ 9/9] [Suspend2] Extent header.
Date: Tue, 27 Jun 2006 02:54:36 +1000	[thread overview]
Message-ID: <20060626165434.11065.20895.stgit@nigel.suspend2.net> (raw)
In-Reply-To: <20060626165404.11065.91833.stgit@nigel.suspend2.net>

Add the header file for extents.

Signed-off-by: Nigel Cunningham <nigel@suspend2.net>

 kernel/power/extent.h |   82 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 82 insertions(+), 0 deletions(-)

diff --git a/kernel/power/extent.h b/kernel/power/extent.h
new file mode 100644
index 0000000..f68ca55
--- /dev/null
+++ b/kernel/power/extent.h
@@ -0,0 +1,82 @@
+/*
+ * kernel/power/extent.h
+ *
+ * Copyright (C) 2004-2006 Nigel Cunningham <nigel@suspend2.net>
+ *
+ * This file is released under the GPLv2.
+ *
+ * It contains declarations related to extents. Extents are
+ * suspend's method of storing some of the metadata for the image.
+ * See extent.c for more info.
+ *
+ */
+
+#include "modules.h"
+
+#ifndef EXTENT_H
+#define EXTENT_H
+struct extent_chain {
+	int size; /* size of the extent ie sum (max-min+1) */
+	int allocs, frees;
+	char *name;
+	struct extent *first, *last, *last_touched;
+};
+
+/*
+ * We rely on extents not fitting evenly into a page.
+ * The last four bytes are used to store the number
+ * of the page, to make saving & reloading pages simpler.
+ */
+struct extent {
+	unsigned long minimum, maximum;
+	struct extent *next;
+};
+
+struct extent_iterate_state {
+	struct extent_chain *chains;
+	int num_chains;
+	int current_chain;
+	struct extent *current_extent;
+	unsigned long current_offset;
+};
+
+struct extent_iterate_saved_state {
+	int chain_num;
+	int extent_num;
+	unsigned long offset;
+};
+
+#define suspend_extent_state_eof(state) ((state)->num_chains < (state)->current_chain)
+
+#define suspend_extent_for_each(extent_chain, extentpointer, value) \
+if ((extent_chain)->first) \
+	for ((extentpointer) = (extent_chain)->first, (value) = \
+			(extentpointer)->minimum; \
+	     ((extentpointer) && ((extentpointer)->next || (value) <= \
+				 (extentpointer)->maximum)); \
+	     (((value) == (extentpointer)->maximum) ? \
+		((extentpointer) = (extentpointer)->next, (value) = \
+		 ((extentpointer) ? (extentpointer)->minimum : 0)) : \
+			(value)++))
+
+extern int suspend_extents_allocated;
+void suspend_put_extent_chain(struct extent_chain *chain);
+int suspend_add_to_extent_chain(struct extent_chain *chain, 
+		unsigned long minimum, unsigned long maximum);
+int suspend_serialise_extent_chain(struct suspend_module_ops *owner,
+		struct extent_chain *chain);
+int suspend_load_extent_chain(struct extent_chain *chain);
+
+/* swap_entry_to_extent_val & extent_val_to_swap_entry: 
+ * We are putting offset in the low bits so consecutive swap entries
+ * make consecutive extent values */
+#define swap_entry_to_extent_val(swp_entry) (swp_entry.val)
+#define extent_val_to_swap_entry(val) (swp_entry_t) { (val) }
+
+void suspend_extent_state_save(struct extent_iterate_state *state,
+		struct extent_iterate_saved_state *saved_state);
+void suspend_extent_state_restore(struct extent_iterate_state *state,
+		struct extent_iterate_saved_state *saved_state);
+void suspend_extent_state_goto_start(struct extent_iterate_state *state);
+unsigned long suspend_extent_state_next(struct extent_iterate_state *state);
+#endif

--
Nigel Cunningham		nigel at suspend2 dot net

  parent reply	other threads:[~2006-06-26 16:57 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-26 16:54 [Suspend2][ 0/9] Extents support Nigel Cunningham
2006-06-26 16:54 ` [Suspend2][ 1/9] [Suspend2] Extents header Nigel Cunningham
2006-06-26 16:54 ` [Suspend2][ 2/9] [Suspend2] Extent allocation routines Nigel Cunningham
2006-06-26 16:54 ` [Suspend2][ 3/9] [Suspend2] Free a whole extent chain Nigel Cunningham
2006-06-26 16:54 ` [Suspend2][ 4/9] [Suspend2] Add extent to " Nigel Cunningham
2006-06-26 16:54 ` [Suspend2][ 5/9] [Suspend2] Serialise extent chains Nigel Cunningham
2006-06-26 16:54 ` [Suspend2][ 6/9] [Suspend2] Get next extent in an extent state Nigel Cunningham
2006-06-26 16:54 ` [Suspend2][ 7/9] [Suspend2] Extent state to the start Nigel Cunningham
2006-06-26 16:54 ` [Suspend2][ 8/9] [Suspend2] Extent state save and restore Nigel Cunningham
2006-06-26 16:54 ` Nigel Cunningham [this message]
2006-06-26 21:20 ` [Suspend2][ 0/9] Extents support Rafael J. Wysocki
2006-06-27  4:28   ` Nigel Cunningham
2006-06-27  5:36     ` Jens Axboe
2006-06-27  5:39       ` Nigel Cunningham
2006-06-27  7:05         ` Jens Axboe
2006-06-27  7:39           ` Nigel Cunningham
2006-06-27  7:59             ` Jens Axboe
2006-06-27  8:12               ` Greg KH
2006-06-27  8:22                 ` Jens Axboe
2006-06-27  8:58                 ` Nigel Cunningham
2006-06-28 21:11                   ` Pavel Machek
2006-06-28 22:25                     ` Nigel Cunningham
2006-06-28 22:44                       ` Pavel Machek
2006-06-28 23:14                         ` Nigel Cunningham
2006-06-30 17:36                           ` Pavel Machek
2006-06-29  3:11                       ` Martin J. Bligh
2006-06-27  9:07               ` Nigel Cunningham
2006-06-27  9:26                 ` Rafael J. Wysocki
2006-06-27  9:35                   ` Nigel Cunningham
2006-06-27 22:19                     ` Rafael J. Wysocki
2006-06-27 23:47                       ` Nigel Cunningham
2006-06-28 22:35                         ` Rafael J. Wysocki
2006-06-28 23:26                           ` Nigel Cunningham
2006-06-29 20:52                             ` Rafael J. Wysocki
2006-06-30 17:58                           ` Pavel Machek
2006-06-28 11:28             ` Rahul Karnik
2006-06-28 12:42               ` Nigel Cunningham
2006-06-28 14:42                 ` Pekka Enberg
2006-06-28 23:37                   ` Nigel Cunningham
2006-06-29  5:19                     ` Pekka Enberg
2006-06-29  5:44                       ` Nigel Cunningham
2006-06-29 21:11                         ` Rafael J. Wysocki
2006-06-30 17:55                     ` suspend2 merge [was Re: [Suspend2][ 0/9] Extents support.] Pavel Machek
2006-07-01  9:31                       ` Dumitru Ciobarcianu
2006-06-28 22:41                 ` [Suspend2][ 0/9] Extents support Rafael J. Wysocki
2006-06-28 14:37               ` Olivier Galibert
2006-06-28 21:05                 ` Pavel Machek
2006-06-27  7:06         ` Greg KH
2006-06-27  7:27           ` Nigel Cunningham
2006-06-27  7:53             ` Greg KH
2006-06-27  9:08               ` Nigel Cunningham

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=20060626165434.11065.20895.stgit@nigel.suspend2.net \
    --to=nigel@suspend2.net \
    --cc=linux-kernel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome