public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Pekka Enberg <penberg@gmail.com>
To: Nigel Cunningham <nigel@suspend2.net>
Cc: linux-kernel@vger.kernel.org, Pekka Enberg <penberg@cs.helsinki.fi>
Subject: Re: [PATCH] [45/48] Suspend2 2.1.9.8 for 2.6.12: 621-swsusp-tidy.patch
Date: Wed, 6 Jul 2005 12:55:48 +0300	[thread overview]
Message-ID: <84144f020507060255638ba0c6@mail.gmail.com> (raw)
In-Reply-To: <11206164441379@foobar.com>

On 7/6/05, Nigel Cunningham <nigel@suspend2.net> wrote:
> diff -ruNp 622-swapwriter.patch-old/kernel/power/suspend_swap.c 622-swapwriter.patch-new/kernel/power/suspend_swap.c
> --- 622-swapwriter.patch-old/kernel/power/suspend_swap.c        1970-01-01 10:00:00.000000000 +1000
> +++ 622-swapwriter.patch-new/kernel/power/suspend_swap.c        2005-07-05 23:48:59.000000000 +1000
> +/*
> + * ---------------------------------------------------------------
> + *
> + *     Internal Data Structures
> + *
> + * ---------------------------------------------------------------
> + */

Can we please tone down this banner?

> +struct {
> +       /* Extent chains for swap & blocks */
> +       struct extentchain swapextents;
> +       struct extentchain block_chain[MAX_SWAPFILES];
> +
> +       /* Location of start of pagedir 1 */
> +       struct extent * pd1start_block_extent;
> +       int pd1start_chain;
> +       int pd1start_extent_number;
> +       unsigned long pd1start_block_offset;
> +
> +       /* Devices used for swap */
> +       dev_t swapdevs[MAX_SWAPFILES];
> +       char blocksizes[MAX_SWAPFILES];
> +
> +} header_data;
> +
> +static dev_t header_device = 0;
> +static struct block_device * header_block_device = NULL;
> +static int headerblocksize = PAGE_SIZE;
> +static int headerblock;
> +
> +/* For swapfile automatically swapon/off'd. */
> +static char swapfilename[256] = "";

<linux/suspend.h> already has SWAP_FILENAME_MAXLENGTH. Use that.

> +extern asmlinkage long sys_swapon(const char * specialfile, int swap_flags);
> +extern asmlinkage long sys_swapoff(const char * specialfile);
> +static int suspend_swapon_status = 0;
> +
> +/*
> + * ---------------------------------------------------------------
> + *
> + *     Current state.
> + *
> + * ---------------------------------------------------------------
> + */

Could we please tone down this banner?

> +
> +/* Which pagedir are we saving/reloading? Needed so we can know whether to
> + * remember the last swap entry used at the end of writing pageset2, and
> + * get that location when saving or reloading pageset1.*/
> +static int current_stream = 0;

No need to set to zero. The compiler will do it for you.

> +
> +/* Pointer to current swap entry being loaded/saved. */
> +static struct extent * currentblockextent = NULL;
> +static unsigned long currentblockoffset = 0;
> +static int currentblockchain = 0;
> +static int currentblocksperpage = 0;
> +
> +/* Header Page Information */
> +static int header_pages_allocated = 0;
> +static struct submit_params * first_header_submit_info = NULL,
> + * last_header_submit_info = NULL, * current_header_submit_info = NULL;

Ditto. (applies to NULL as well)

> +static void get_header_params(struct submit_params * headerpage)
> +{
> +       swp_entry_t entry = headerpage->swap_address;
> +       int swapfilenum = swp_type(entry);
> +       unsigned long offset = swp_offset(entry);
> +       struct swap_info_struct * sis = get_swap_info_struct(swapfilenum);
> +       sector_t sector = map_swap_page(sis, offset);
> +
> +       headerpage->dev = sis->bdev,
> +       headerpage->block[0] = sector;
> +       //headerpage->blocks_used = 1;

Please drop commented out code.

> +static int try_to_open_resume_device(void)
> +{
> +       resume_block_device = open_by_devnum(resume_device, FMODE_READ);
> +
> +       if (IS_ERR(resume_block_device) || (!resume_block_device))

The second set of parenthesis are redundant.

> +       /*
> +        * Put bdev of suspend header in last byte of swap header
> +        * (unsigned short)
> +        */
> +       if (type > 11) {
> +               dev_t * header_ptr = (dev_t *) &header[1];
> +               unsigned char * headerblocksize_ptr =
> +                       (unsigned char *) &header[5];
> +               unsigned long * headerblock_ptr = (unsigned long *) &header[6];
> +               header_device = *header_ptr;
> +               /*
> +                * We are now using the highest bit of the char to indicate
> +                * whether we have attempted to resume from this image before.
> +                */
> +               clear_suspend_state(SUSPEND_RESUMED_BEFORE);
> +               if (((int) *headerblocksize_ptr) & 0x80)
> +                       set_suspend_state(SUSPEND_RESUMED_BEFORE);
> +               headerblocksize = 512 * (((int) *headerblocksize_ptr) & 0xf);

Hardcoded sector size?

> +
> +       /* Restore device info */
> +       for (i = 0; i < MAX_SWAPFILES; i++) {
> +               dev_t thisdevice = header_data.swapdevs[i];
> +
> +               swap_info[i].bdev = NULL;
> +
> +               if (!thisdevice)
> +                       continue;
> +
> +               if (thisdevice == resume_device) {
> +                       swap_info[i].bdev = resume_block_device;
> +                       /* Mark as used so the device doesn't get suspended. */
> +                       swap_info[i].swap_file = (struct file *) 0xffffff;

Please use constants instead of magic numbers.

> +static int swapwriter_write_init(int stream_number)
> +{
> +       current_stream = stream_number;
> +
> +       if (current_stream == 1) {
> +               currentblockextent = header_data.pd1start_block_extent;
> +               currentblockoffset = header_data.pd1start_block_offset;
> +               currentblockchain = header_data.pd1start_chain;
> +       } else

See below.

> +               for (currentblockchain = 0; currentblockchain < MAX_SWAPFILES;
> +                               currentblockchain++)
> +                       if (header_data.block_chain[currentblockchain].first) {
> +                               currentblockextent =
> +                                       header_data.
> +                                        block_chain[currentblockchain].first;
> +                               currentblockoffset = currentblockextent->minimum;
> +                               break;
> +                       }

Braces would make sense here.


> +
> +       currentblocksperpage = get_blocks_per_page(currentblockchain);
> +
> +       suspend_bio_ops.reset_io_stats();
> +
> +       return 0;
> +}
> +
> +static int swapwriter_write_chunk(struct page * buffer_page)
> +{
> +       int i;
> +       struct submit_params submit_params;
> +
> +       if (TEST_ACTION_STATE(SUSPEND_TEST_FILTER_SPEED))
> +               return 0;
> +
> +       if (currentblockchain == MAX_SWAPFILES) {
> +               printk("Error! We have run out of blocks for writing data.\n");
> +               return -ENOSPC;
> +       }
> +
> +       if (!currentblockextent) {
> +               do {
> +                       currentblockchain++;
> +               } while ((currentblockchain < MAX_SWAPFILES) &&
> +                  (!header_data.block_chain[currentblockchain].first));
> +
> +               /* We can validly not have a new blockextent. We
> +                * might be compressing data and the user was
> +                * too optimistic in setting the compression
> +                * ratio or we're just copying the pageset. */
> +
> +               if (currentblockchain == MAX_SWAPFILES) {
> +                       printk("Argh. Ran out of block chains.\n");
> +                       return -ENOSPC;
> +               }
> +
> +               currentblockextent =
> +                header_data.block_chain[currentblockchain].first;
> +               currentblockoffset = currentblockextent->minimum;
> +               currentblocksperpage = get_blocks_per_page(currentblockchain);
> +       }
> +
> +       submit_params.readahead_index = -1;
> +       submit_params.page = buffer_page;
> +       submit_params.dev = swap_info[currentblockchain].bdev;
> +
> +       /* Get the blocks */
> +       submit_params.block[0] = currentblockoffset;
> +       for (i = 0; i < currentblocksperpage; i++)
> +               GET_EXTENT_NEXT(currentblockextent, currentblockoffset);
> +
> +       suspend_bio_ops.submit_io(WRITE, &submit_params, 0);
> +
> +       check_shift_keys(0, NULL);
> +
> +       return 0;
> +}
> +
> +static int swapwriter_write_cleanup(void)
> +{
> +       if (current_stream == 2) {

Where did that magic number two come from?

> +               header_data.pd1start_block_extent = currentblockextent;
> +               header_data.pd1start_block_offset = currentblockoffset;
> +               header_data.pd1start_chain = currentblockchain;
> +       }
> +
> +       suspend_bio_ops.finish_all_io();
> +
> +       suspend_bio_ops.check_io_stats();
> +
> +       return 0;
> +}
> +
> +static int swapwriter_read_init(int stream_number)
> +{
> +       current_stream = stream_number;
> +
> +       if (current_stream == 1) {

Ditto.

> +static int swapwriter_parse_image_location(char * commandline, int only_writer)
> +{
> +       char *thischar, *devstart = NULL, *colon = NULL, *at_symbol = NULL;
> +       union p_diskpage diskpage;
> +       int signature_found, result = -EINVAL, temp_result;
> +
> +       if (strncmp(commandline, "swap:", 5)) {
> +               if (!only_writer)
> +                       return 1;
> +       } else
> +               commandline += 5;
> +
> +       devstart = thischar = commandline;
> +       while ((*thischar != ':') && (*thischar != '@') &&
> +               ((thischar - commandline) < 250) && (*thischar))

What's the magic 250 here?

> +               thischar++;
> +
> +       if (*thischar == ':') {
> +               colon = thischar;
> +               *colon = 0;
> +               thischar++;
> +       }
> +
> +       while ((*thischar != '@') && ((thischar - commandline) < 250) && (*thischar))

And here?

> +               thischar++;
> +
> +       if (*thischar == '@') {
> +               at_symbol = thischar;
> +               *at_symbol = 0;
> +       }
> +
> +       if (colon)
> +               resume_firstblock = (int) simple_strtoul(colon + 1, NULL, 0);
> +       else
> +               resume_firstblock = 0;
> +
> +       if (at_symbol) {
> +               resume_firstblocksize = (int) simple_strtoul(at_symbol + 1, NULL, 0);
> +               if (resume_firstblocksize & 0x1FF)
> +                       printk("Swapwriter: Blocksizes are usually a multiple of 512. Don't expect this to work!\n");

Then why do we allow it?

  reply	other threads:[~2005-07-06 13:43 UTC|newest]

Thread overview: 187+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-06  2:20 [0/48] Suspend2 2.1.9.8 for 2.6.12 Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [5/48] Suspend2 2.1.9.8 for 2.6.12: 350-workthreads.patch Nigel Cunningham
2005-07-10 23:04   ` Christoph Hellwig
2005-07-12  6:40     ` Nigel Cunningham
2005-07-12 10:57       ` Pavel Machek
2005-07-12 11:07         ` Nigel Cunningham
2005-07-12 11:15           ` Pavel Machek
2005-07-12 11:25             ` Nigel Cunningham
2005-07-12 11:25               ` Pavel Machek
2005-07-12 11:45                 ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [6/48] Suspend2 2.1.9.8 for 2.6.12: 351-syncthreads.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [2/48] Suspend2 2.1.9.8 for 2.6.12: 300-reboot-handler-hook.patch Nigel Cunningham
2005-07-06 10:08   ` Pekka Enberg
2005-07-06 10:18     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [1/48] Suspend2 2.1.9.8 for 2.6.12: submit_intro Nigel Cunningham
2005-07-06  6:37   ` Pekka Enberg
2005-07-06  8:12   ` Pavel Machek
2005-07-06  2:20 ` [PATCH] [4/48] Suspend2 2.1.9.8 for 2.6.12: 302-init-hooks.patch Nigel Cunningham
2005-07-06  8:38   ` Shaohua Li
2005-07-06  8:35     ` Nigel Cunningham
2005-07-06 15:38     ` Bernard Blackham
2005-07-06  2:20 ` [PATCH] [3/48] Suspend2 2.1.9.8 for 2.6.12: 301-proc-acpi-sleep-activate-hook.patch Nigel Cunningham
2005-07-10 23:03   ` Christoph Hellwig
2005-07-12  6:45     ` Nigel Cunningham
     [not found]       ` <E1DsHMp-00062f-00@chiark.greenend.org.uk>
2005-07-12 10:07         ` Nigel Cunningham
2005-07-12 10:22           ` Matthew Garrett
2005-07-12 10:34             ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [7/48] Suspend2 2.1.9.8 for 2.6.12: 352-disable-pdflush-during-suspend.patch Nigel Cunningham
2005-07-06  3:34   ` Zwane Mwaikambo
2005-07-06  3:43     ` Nigel Cunningham
2005-07-06 13:27       ` Zwane Mwaikambo
2005-07-06  8:08   ` Pavel Machek
2005-07-06  9:52   ` Russell King
2005-07-10 23:07   ` Christoph Hellwig
2005-07-06  2:20 ` [PATCH] [8/48] Suspend2 2.1.9.8 for 2.6.12: 353-disable-highmem-tlb-flush-for-copyback.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [10/48] Suspend2 2.1.9.8 for 2.6.12: 360-reset-kswapd-max-order-after-resume.patch Nigel Cunningham
2005-07-10 23:09   ` Christoph Hellwig
2005-07-12  9:05     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [9/48] Suspend2 2.1.9.8 for 2.6.12: 354-disable-mce-checking-during-suspend-avoid-smp-deadlock.patch Nigel Cunningham
2005-07-09 11:49   ` Pavel Machek
2005-07-09 12:02     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [11/48] Suspend2 2.1.9.8 for 2.6.12: 401-e820-table-support.patch Nigel Cunningham
2005-07-06  3:35   ` Zwane Mwaikambo
2005-07-06  3:44     ` Nigel Cunningham
2005-07-06  8:04       ` Pavel Machek
2005-07-06 13:29       ` Zwane Mwaikambo
2005-07-06  2:20 ` [PATCH] [13/48] Suspend2 2.1.9.8 for 2.6.12: 403-debug-pagealloc-support.patch Nigel Cunningham
2005-07-10 23:02   ` Christoph Hellwig
2005-07-12  6:48     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [12/48] Suspend2 2.1.9.8 for 2.6.12: 402-mtrr-remove-sysdev.patch Nigel Cunningham
2005-07-10 23:07   ` Christoph Hellwig
2005-07-12  6:33     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [14/48] Suspend2 2.1.9.8 for 2.6.12: 404-check-mounts-support.patch Nigel Cunningham
2005-07-06  8:15   ` Pavel Machek
2005-07-06  8:30     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [19/48] Suspend2 2.1.9.8 for 2.6.12: 510-version-specific-mac.patch Nigel Cunningham
2005-07-06  3:49   ` Nigel Cunningham
2005-07-06  5:30     ` hugang
2005-07-06  6:03       ` Nigel Cunningham
2005-07-06  3:53   ` Zwane Mwaikambo
2005-07-06  3:59     ` Nigel Cunningham
2005-07-06 13:40       ` Zwane Mwaikambo
2005-07-06  5:58   ` Pekka Enberg
2005-07-06  6:21     ` Nigel Cunningham
2005-07-06 10:04     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [16/48] Suspend2 2.1.9.8 for 2.6.12: 406-dynamic-pageflags.patch Nigel Cunningham
2005-07-06  7:46   ` Shaohua Li
2005-07-06  8:13     ` Nigel Cunningham
2005-07-06  8:30       ` Shaohua Li
2005-07-06  2:20 ` [PATCH] [20/48] Suspend2 2.1.9.8 for 2.6.12: 520-version-specific-x86_64.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [17/48] Suspend2 2.1.9.8 for 2.6.12: 500-version-specific-i386.patch Nigel Cunningham
2005-07-06  3:43   ` YOSHIFUJI Hideaki / 吉藤英明
2005-07-06  2:20 ` [PATCH] [18/48] Suspend2 2.1.9.8 for 2.6.12: 501-tlb-flushing-functions.patch Nigel Cunningham
2005-07-09 11:52   ` Pavel Machek
2005-07-06  2:20 ` [PATCH] [22/48] Suspend2 2.1.9.8 for 2.6.12: 560-Kconfig-and-Makefile-for-suspend2.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [23/48] Suspend2 2.1.9.8 for 2.6.12: 600-suspend-header.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [15/48] Suspend2 2.1.9.8 for 2.6.12: 405-clear-swapfile-bdev-in-swapoff.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [21/48] Suspend2 2.1.9.8 for 2.6.12: 550-documentation.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [32/48] Suspend2 2.1.9.8 for 2.6.12: 609-driver-model.patch Nigel Cunningham
2005-07-06 10:10   ` Pekka Enberg
2005-07-06 12:05     ` Nigel Cunningham
2005-07-06 12:14     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [31/48] Suspend2 2.1.9.8 for 2.6.12: 608-compression.patch Nigel Cunningham
2005-07-09 11:55   ` Pavel Machek
2005-07-09 12:15     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [26/48] Suspend2 2.1.9.8 for 2.6.12: 603-suspend2_common-headers.patch Nigel Cunningham
2005-07-06 10:22   ` Pekka Enberg
2005-07-06 11:41     ` Nigel Cunningham
2005-07-06 11:52       ` Pekka J Enberg
2005-07-06 11:58     ` [PATCH] [26/48] " Nigel Cunningham
2005-07-09 11:53   ` Pavel Machek
2005-07-06  2:20 ` [PATCH] [30/48] Suspend2 2.1.9.8 for 2.6.12: 607-atomic-copy.patch Nigel Cunningham
2005-07-10 18:01   ` Pavel Machek
2005-07-11  8:58     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [25/48] Suspend2 2.1.9.8 for 2.6.12: 602-smp.patch Nigel Cunningham
2005-07-06 12:03   ` Pekka Enberg
2005-07-06 13:21     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [27/48] Suspend2 2.1.9.8 for 2.6.12: 604-utility.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [29/48] Suspend2 2.1.9.8 for 2.6.12: 606-all-settings.patch Nigel Cunningham
2005-07-10 18:03   ` Pavel Machek
2005-07-11  9:38     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [28/48] Suspend2 2.1.9.8 for 2.6.12: 605-kernel_power_suspend.patch Nigel Cunningham
2005-07-10 17:58   ` Pavel Machek
2005-07-12  8:39     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [24/48] Suspend2 2.1.9.8 for 2.6.12: 601-kernel_power_power-header.patch Nigel Cunningham
2005-07-06  3:42   ` Zwane Mwaikambo
2005-07-06  3:45     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [37/48] Suspend2 2.1.9.8 for 2.6.12: 613-pageflags.patch Nigel Cunningham
2005-07-06 12:01   ` Pekka Enberg
2005-07-07  9:30     ` Nigel Cunningham
2005-07-09 12:16   ` Pavel Machek
2005-07-09 12:32     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [33/48] Suspend2 2.1.9.8 for 2.6.12: 610-encryption.patch Nigel Cunningham
2005-07-10 18:15   ` Pavel Machek
2005-07-12  8:34     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [34/48] Suspend2 2.1.9.8 for 2.6.12: 610-extent.patch Nigel Cunningham
2005-07-06 10:14   ` Pekka Enberg
2005-07-06  2:20 ` [PATCH] [39/48] Suspend2 2.1.9.8 for 2.6.12: 615-poweroff.patch Nigel Cunningham
2005-07-10 18:18   ` Pavel Machek
2005-07-12  8:31     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [40/48] Suspend2 2.1.9.8 for 2.6.12: 616-prepare_image.patch Nigel Cunningham
2005-07-10 18:13   ` Pavel Machek
2005-07-12  8:34     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [41/48] Suspend2 2.1.9.8 for 2.6.12: 617-proc.patch Nigel Cunningham
2005-07-06 10:03   ` Pekka Enberg
2005-07-06  2:20 ` [PATCH] [35/48] Suspend2 2.1.9.8 for 2.6.12: 611-io.patch Nigel Cunningham
2005-07-10 18:12   ` Pavel Machek
2005-07-12  8:38     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [36/48] Suspend2 2.1.9.8 for 2.6.12: 612-pagedir.patch Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [38/48] Suspend2 2.1.9.8 for 2.6.12: 614-plugins.patch Nigel Cunningham
2005-07-10 18:08   ` Pavel Machek
2005-07-11 10:05     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [47/48] Suspend2 2.1.9.8 for 2.6.12: 623-generic-block-io.patch Nigel Cunningham
2005-07-10 18:24   ` Pavel Machek
2005-07-06  2:20 ` [PATCH] [43/48] Suspend2 2.1.9.8 for 2.6.12: 619-userspace-nofreeze.patch Nigel Cunningham
2005-07-06  6:18   ` Pekka Enberg
2005-07-10 23:15   ` Christoph Hellwig
2005-07-12  6:29     ` Nigel Cunningham
2005-07-12 14:21       ` Christoph Hellwig
2005-07-06  2:20 ` [PATCH] [44/48] Suspend2 2.1.9.8 for 2.6.12: 620-userui.patch Nigel Cunningham
2005-07-10 18:22   ` Pavel Machek
2005-07-12  6:58     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [42/48] Suspend2 2.1.9.8 for 2.6.12: 618-core.patch Nigel Cunningham
2005-07-10 18:21   ` Pavel Machek
2005-07-12  6:59     ` Nigel Cunningham
2005-07-12  7:56       ` Pavel Machek
2005-07-06  2:20 ` [PATCH] [46/48] Suspend2 2.1.9.8 for 2.6.12: 622-swapwriter.patch Nigel Cunningham
2005-07-06  6:33   ` Pekka Enberg
2005-07-07 12:40     ` Nigel Cunningham
2005-07-07 13:05       ` Pekka J Enberg
2005-07-08 13:41         ` Nigel Cunningham
2005-07-07 13:32   ` [PATCH] [46/48] " Pekka Enberg
2005-07-07 21:16     ` Nigel Cunningham
2005-07-07 21:26       ` nickpiggin
2005-07-08 13:42         ` Nigel Cunningham
2005-07-08  5:49       ` Pekka J Enberg
2005-07-08  5:53       ` Pekka J Enberg
2005-07-06  2:20 ` [PATCH] [48/48] Suspend2 2.1.9.8 for 2.6.12: 624-filewriter.patch Nigel Cunningham
2005-07-06 10:07   ` Pekka Enberg
2005-07-06 10:13     ` Nigel Cunningham
2005-07-06 10:17       ` Pekka J Enberg
2005-07-09 12:10   ` [PATCH] [48/48] " Pavel Machek
2005-07-09 12:18     ` Nigel Cunningham
2005-07-10 23:14   ` Christoph Hellwig
2005-07-12  6:30     ` Nigel Cunningham
2005-07-06  2:20 ` [PATCH] [45/48] Suspend2 2.1.9.8 for 2.6.12: 621-swsusp-tidy.patch Nigel Cunningham
2005-07-06  9:55   ` Pekka Enberg [this message]
2005-07-06  6:40 ` [0/48] Suspend2 2.1.9.8 for 2.6.12 Pekka Enberg
2005-07-07 12:19   ` Nigel Cunningham
2005-07-06  8:21 ` Pavel Machek
2005-07-06  8:22 ` Pavel Machek
2005-07-06  8:33   ` Nigel Cunningham
2005-07-07  0:27   ` Nigel Cunningham
2005-07-07 12:04     ` Matthew Garrett
2005-07-07 12:15       ` Nigel Cunningham
2005-07-07 12:49         ` Matthew Garrett
2005-07-07 12:56           ` Nigel Cunningham
2005-07-07 18:54           ` Rafael J. Wysocki
2005-07-07 21:21             ` Nigel Cunningham
2005-07-08 13:30           ` Stefan Seyfried
2005-07-08 22:27             ` Nigel Cunningham
2005-07-07 19:19     ` Pavel Machek
2005-07-10 23:06 ` Christoph Hellwig
2005-07-12  6:36   ` Nigel Cunningham
2005-07-12  6:41     ` Andrew Morton
2005-07-12  6:57       ` Nigel Cunningham
2005-07-12 10:25       ` 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=84144f020507060255638ba0c6@mail.gmail.com \
    --to=penberg@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nigel@suspend2.net \
    --cc=penberg@cs.helsinki.fi \
    /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