From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Oliver Neukum <oliver@neukum.org>,
Maxim Levitsky <maximlevitsky@gmail.com>,
linux-pm@lists.linux-foundation.org,
LKML <linux-kernel@vger.kernel.org>,
linux-mm <linux-mm@kvack.org>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [RFC][PATCH] PM: Force GFP_NOIO during suspend/resume (was: Re: [linux-pm] Memory allocations in .suspend became very unreliable)
Date: Mon, 18 Jan 2010 05:58:04 +1100 [thread overview]
Message-ID: <1263754684.724.444.camel@pasglop> (raw)
In-Reply-To: <201001171427.27954.rjw@sisk.pl>
On Sun, 2010-01-17 at 14:27 +0100, Rafael J. Wysocki wrote:
> Yes it will, but why exactly shouldn't it? System suspend/resume _is_ a
> special situation anyway.
To some extent this is similar to the boot time allocation problem for
which it was decided to bury the logic in the allocator as well.
> Memory allocations are made for other purposes during suspend/resume too. For
> example, new kernel threads may be created (for async suspend/resume among
> other things).
Right. Well, I would add in fact that this isn't even the main issue I
see. If it was just a matter of changing a kmalloc() call in a driver
suspend() routine, I would agree with Oliver.
However, there are two categories of allocations that make this
extremely difficult:
- One is implicit allocations. IE. suspend() is a normal task context,
it's expected that any function can be called that might itself call a
function etc... that does an allocation. There is simply no way all of
these code path can be identified and the allocation "flags" pushed up
all the way to the API in every case.
- There's a more subtle issue at play here. The moment the core starts
calling driver's suspend() routines, all allocations can potentially
hang since a device with dirty pages might have been suspended and the
VM can stall trying to swap out to it. (I don't think Rafael proposed
patch handles this in a race free way btw, but that's hard, especially
for allocations already blocked waiting for a write back ...). That
means that a driver that has -not- been suspended yet (and thus doesn't
necessarily know the suspend process has been started) might be blocked
in an allocation somewhere, holding a mutex or similar, which will then
cause a deadlock when that same driver's suspend() routine is called
which tries to take the same mutex.
Overall, it's a can of worms. The only way out I can see that is
reasonably sane and doesn't impose API changes thorough the kernel and
unreasonable expectations from driver writers is to deal with it at the
allocator level.
However, it's hard to deal with the case of allocations that have
already started waiting for IOs. It might be possible to have some VM
hook to make them wakeup, re-evaluate the situation and get out of that
code path but in any case it would be tricky.
So Rafael's proposed patch is a first step toward fixing that problem
but isn't, I believe, enough.
> Besides, the fact that you tell people to do something doesn't necessary imply
> that they will listen. :-)
>
> I have discussed that with Ben for a couple of times and we have generally
> agreed that memory allocation problems during suspend/resume are not avoidable
> in general unless we disable __GFP_FS and __GFP_IO at the high level.
>
Cheers,
Ben.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2010-01-17 18:58 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1263549544.3112.10.camel@maxim-laptop>
[not found] ` <1263678289.4276.4.camel@maxim-laptop>
[not found] ` <201001162317.39940.rjw@sisk.pl>
2010-01-17 0:38 ` [RFC][PATCH] PM: Force GFP_NOIO during suspend/resume (was: Re: [linux-pm] Memory allocations in .suspend became very unreliable) Rafael J. Wysocki
2010-01-17 1:24 ` Oliver Neukum
2010-01-17 13:27 ` Rafael J. Wysocki
2010-01-17 13:36 ` Rafael J. Wysocki
2010-01-17 18:58 ` Benjamin Herrenschmidt [this message]
2010-01-17 23:00 ` Rafael J. Wysocki
2010-01-18 7:53 ` Oliver Neukum
2010-01-18 16:17 ` [linux-pm] [RFC][PATCH] PM: Force GFP_NOIO during suspend/resume (was: " Alan Stern
2010-01-18 20:59 ` Rafael J. Wysocki
2010-01-19 15:13 ` Alan Stern
2010-01-18 20:56 ` [RFC][PATCH] PM: Force GFP_NOIO during suspend/resume (was: Re: [linux-pm] " Rafael J. Wysocki
2010-01-18 21:55 ` Benjamin Herrenschmidt
2010-01-18 23:33 ` Rafael J. Wysocki
2010-01-17 13:55 ` Rafael J. Wysocki
2010-01-17 16:21 ` [linux-pm] [RFC][PATCH] PM: Force GFP_NOIO during suspend/resume (was: " Minchan Kim
2010-01-17 16:23 ` Minchan Kim
2010-01-18 0:25 ` Rafael J. Wysocki
2010-01-18 2:20 ` KOSAKI Motohiro
2010-01-18 21:06 ` Rafael J. Wysocki
2010-01-19 9:15 ` Oliver Neukum
2010-01-19 20:34 ` Rafael J. Wysocki
2010-01-18 17:00 ` [RFC][PATCH] PM: Force GFP_NOIO during suspend/resume (was: Re: [linux-pm] " Oliver Neukum
2010-01-18 20:41 ` Rafael J. Wysocki
2010-01-19 9:25 ` Oliver Neukum
2010-01-19 20:37 ` Rafael J. Wysocki
2010-01-20 14:05 ` Oliver Neukum
2010-01-20 21:13 ` Rafael J. Wysocki
2010-01-18 2:16 ` KOSAKI Motohiro
2010-01-18 20:55 ` Rafael J. Wysocki
2010-01-19 1:19 ` KOSAKI Motohiro
2010-01-19 3:19 ` Benjamin Herrenschmidt
2010-01-19 9:04 ` Bastien ROUCARIES
2010-01-19 23:17 ` Benjamin Herrenschmidt
2010-01-20 11:31 ` Oliver Neukum
2010-01-20 21:11 ` Benjamin Herrenschmidt
2010-01-20 21:12 ` Rafael J. Wysocki
2010-01-19 20:47 ` Rafael J. Wysocki
2010-01-20 0:33 ` KOSAKI Motohiro
2010-01-20 21:21 ` Rafael J. Wysocki
2010-01-21 0:47 ` KOSAKI Motohiro
2010-01-21 20:21 ` Rafael J. Wysocki
2010-01-21 20:42 ` [linux-pm] [RFC][PATCH] PM: Force GFP_NOIO during suspend/resume (was: " Nigel Cunningham
2010-01-21 21:38 ` Rafael J. Wysocki
2010-01-22 1:31 ` [RFC][PATCH] PM: Force GFP_NOIO during suspend/resume (was: Re: [linux-pm] " KOSAKI Motohiro
2010-01-22 1:42 ` KOSAKI Motohiro
2010-01-22 10:11 ` Maxim Levitsky
2010-01-22 21:19 ` [Update][PATCH] MM / PM: Force GFP_NOIO during suspend/hibernation and resume Rafael J. Wysocki
2010-01-23 9:29 ` Maxim Levitsky
2010-01-25 21:49 ` Rafael J. Wysocki
2010-01-25 21:52 ` Alexey Starikovskiy
2010-01-30 18:56 ` Rafael J. Wysocki
2010-01-30 20:42 ` Maxim Levitsky
2010-01-30 20:53 ` Rafael J. Wysocki
2010-01-22 20:58 ` [RFC][PATCH] PM: Force GFP_NOIO during suspend/resume (was: Re: [linux-pm] Memory allocations in .suspend became very unreliable) Rafael J. Wysocki
2010-01-30 15:46 ` Maxim Levitsky
2010-01-30 18:47 ` Rafael J. Wysocki
2010-01-30 20:37 ` Maxim Levitsky
2010-02-01 19:51 ` Maxim Levitsky
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=1263754684.724.444.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=maximlevitsky@gmail.com \
--cc=oliver@neukum.org \
--cc=rjw@sisk.pl \
/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;
as well as URLs for NNTP newsgroup(s).