All of lore.kernel.org
 help / color / mirror / Atom feed
From: William Lee Irwin III <wli@holomorphy.com>
To: Pavel Machek <pavel@ucw.cz>
Cc: kernel list <linux-kernel@vger.kernel.org>,
	torvalds@transmeta.com,
	ACPI mailing list <acpi-devel@lists.sourceforge.net>
Subject: Re: suspend-to-{RAM,disk} for 2.5.17
Date: Mon, 27 May 2002 12:40:18 -0700	[thread overview]
Message-ID: <20020527194018.GQ14918@holomorphy.com> (raw)
In-Reply-To: <20020521222858.GA14737@elf.ucw.cz>

On Wed, May 22, 2002 at 12:28:59AM +0200, Pavel Machek wrote:
...


I foresee trouble here; you're doing list_entry(list, struct page, list)
on &area->free_list.

On Wed, May 22, 2002 at 12:28:59AM +0200, Pavel Machek wrote:
> +#ifdef CONFIG_SOFTWARE_SUSPEND
> +int is_head_of_free_region(struct page *p)
> +{
> +	pg_data_t *pgdat = pgdat_list;
> +	unsigned type;
> +	unsigned long flags;
> +
> +	for (type=0;type < MAX_NR_ZONES; type++) {
> +		zone_t *zone = pgdat->node_zones + type;
> +		int order = MAX_ORDER - 1;
> +		free_area_t *area;
> +		struct list_head *head, *curr;
> +		spin_lock_irqsave(&zone->lock, flags);	/* Should not matter as we need quiescent system for suspend anyway, but... */
> +
> +		do {
> +			area = zone->free_area + order;
> +			head = &area->free_list;
> +			curr = head;

                        ^^^^^^^^^^^^
                        set right here

On Wed, May 22, 2002 at 12:28:59AM +0200, Pavel Machek wrote:
> +
> +			for(;;) {
> +				if(!curr) {
> +//					printk("FIXME: this should not happen but it does!!!");
> +					break;
> +				}
> +				if(p != memlist_entry(curr, struct page, list)) {
> +					curr = memlist_next(curr);
> +					if (curr == head)
> +						break;
> +					continue;
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                       deep trouble here and in the if ()

On Wed, May 22, 2002 at 12:28:59AM +0200, Pavel Machek wrote:
> +				}
> +				return 1 << order;
> +			}
> +		} while(order--);
> +		spin_unlock_irqrestore(&zone->lock, flags);
> +
> +	}
> +	return 0;
> +}
> +#endif /* CONFIG_SOFTWARE_SUSPEND */

The rest is okay...

I'd try writing it this way, and though I've not tested it, I've walked
buddy lists a few times in the past week or two:


#ifdef CONFIG_SOFTWARE_SUSPEND
int is_head_of_free_region(struct page *page)
{
	zone_t *zone, *node_zones = pgdat_list->node_zones;
	unsigned long flags;

	for (zone = node_zones; zone - node_zones < MAX_NR_ZONES; ++zone) {
		int order;
		list_t *curr;

		/*
		 * Should not matter as we need quiescent system for
		 * suspend anyway, but...
		 */
		spin_lock_irqsave(&zone->lock, flags);
		for (order = MAX_ORDER - 1; order >= 0; --order)
			list_for_each(curr, &zone->free_area[order].free_list)
				if (page == list_entry(curr, struct page, list))
					return 1 << order;
		spin_unlock_irqrestore(&zone->lock, flags);

	}
	return 0;
}
#endif /* CONFIG_SOFTWARE_SUSPEND */


Cheers,
Bill

  parent reply	other threads:[~2002-05-27 19:40 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-05-21 22:28 suspend-to-{RAM,disk} for 2.5.17 Pavel Machek
2002-05-21 23:01 ` Linus Torvalds
2002-05-21 23:15   ` Linus Torvalds
2002-05-21 23:27     ` Pavel Machek
2002-05-21 23:40     ` Pavel Machek
2002-05-21 23:20   ` Pavel Machek
2002-05-21 23:26     ` Linus Torvalds
2002-05-21 23:33       ` Pavel Machek
2002-05-22  0:09         ` Linus Torvalds
2002-05-22  0:15           ` Pavel Machek
2002-05-22  6:49   ` Martin Dalecki
2002-05-22  9:00     ` Pavel Machek
2002-05-22 10:03     ` Xavier Bestel
2002-05-22  9:03       ` Martin Dalecki
2002-05-22 10:35         ` Albert D. Cahalan
2002-05-22 10:42         ` Xavier Bestel
2002-05-22 12:54       ` Frank v Waveren
2002-05-22 15:59       ` Linus Torvalds
2002-05-25 13:30 ` Geert Uytterhoeven
2002-05-26 17:20   ` Pavel Machek
2002-05-27 19:40 ` William Lee Irwin III [this message]
2002-05-28 19:20   ` Pavel Machek
2002-05-28 19:32   ` Pavel Machek
2002-05-28 21:09     ` William Lee Irwin III
2002-05-28 21:11       ` Pavel Machek
2002-05-28 21:24         ` William Lee Irwin III
2002-05-28 21:34           ` Pavel Machek
2002-05-28 21:53             ` William Lee Irwin III
2002-05-28 22:00               ` Pavel Machek
2002-05-28 22:28                 ` William Lee Irwin III

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=20020527194018.GQ14918@holomorphy.com \
    --to=wli@holomorphy.com \
    --cc=acpi-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pavel@ucw.cz \
    --cc=torvalds@transmeta.com \
    /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.