Messages in this thread Patch in this message |  | | | From | Nigel Cunningham <> | | Subject | [Suspend2][ 9/9] [Suspend2] Extent header. | | Date | Tue, 27 Jun 2006 02:54:36 +1000 |
| |
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 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |