From: Olaf Hering <olaf@aepfle.de>
To: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Cc: xen-devel@lists.xensource.com, ian.campbell@citrix.com,
andres@gridcentric.ca, tim@xen.org, keir.xen@gmail.com,
JBeulich@suse.com, ian.jackson@citrix.com, adin@gridcentric.ca
Subject: Re: [PATCH 0 of 2] Fix correctness race in xc_mem_paging_prep
Date: Thu, 1 Dec 2011 13:43:43 +0100 [thread overview]
Message-ID: <20111201124343.GA11316@aepfle.de> (raw)
In-Reply-To: <20111130132100.GA17890@aepfle.de>
On Wed, Nov 30, Olaf Hering wrote:
> On Tue, Nov 29, Andres Lagar-Cavilla wrote:
>
> > P2m_mem_paging_prep ensures that an mfn is backing the paged-out gfn, and
> > transitions to the next state in the paging state machine for this page.
> > Foreign mappings of the gfn will now succeed. This is the key idea, as it
> > allows the pager to now map the gfn and fill in its contents.
> >
> > Unfortunately, it also allows any other foreign mapper to map the gfn and read
> > its contents. This is particularly dangerous when the populate is launched
> > by a foreign mapper in the first place, which will be actively retrying the
> > map operation and might race with the pager. Qemu-dm being a prime example.
>
> Yes, I think thats a real issue. The concept looks ok to me.
After some more thought I think we can kill two birds with one stone:
- merge p2m_mem_paging_prep() into p2m_mem_paging_resume().
p2m_mem_paging_populate() maintains a list of buffer pages and passes
one of them to the pager. The pager fills the buffer and passes it back
to p2m_mem_paging_resume() which copies that buffer into a newly
allocated page. Once the p2mt state is restored the buffer is released
for further uses in p2m_mem_paging_populate().
Its just the question: how to handle allocation failures?
- if both functions are merged, the communication between
p2m_mem_paging_drop()/p2m_mem_paging_populate() and
p2m_mem_paging_resume() could be done entirely with th event channel.
The two domctls can disappear and also a p2mt could be removed. So both
page-out and page-in will be a two-step process.
What do you think about that idea?
Olaf
next prev parent reply other threads:[~2011-12-01 12:43 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-29 21:52 [PATCH 0 of 2] Fix correctness race in xc_mem_paging_prep Andres Lagar-Cavilla
2011-11-29 21:52 ` [PATCH 1 of 2] After preparing a page for page-in, allow immediate fill-in of the page contents Andres Lagar-Cavilla
2011-11-30 14:46 ` Ian Jackson
2011-11-30 15:13 ` Andres Lagar-Cavilla
2011-12-01 16:11 ` Ian Jackson
2011-12-01 15:53 ` Tim Deegan
2011-12-01 15:58 ` Andres Lagar-Cavilla
2011-11-29 21:52 ` [PATCH 2 of 2] Tools: Libxc wrappers to automatically fill in page oud page contents on prepare Andres Lagar-Cavilla
2011-11-30 13:21 ` [PATCH 0 of 2] Fix correctness race in xc_mem_paging_prep Olaf Hering
2011-12-01 12:43 ` Olaf Hering [this message]
-- strict thread matches above, loose matches on Subject: below --
2011-11-29 20:32 Andres Lagar-Cavilla
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=20111201124343.GA11316@aepfle.de \
--to=olaf@aepfle.de \
--cc=JBeulich@suse.com \
--cc=adin@gridcentric.ca \
--cc=andres@gridcentric.ca \
--cc=andres@lagarcavilla.org \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@citrix.com \
--cc=keir.xen@gmail.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xensource.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.