From: George Dunlap <George.Dunlap@eu.citrix.com>
To: Ed White <edmund.h.white@intel.com>
Cc: Ravi Sahita <ravi.sahita@intel.com>,
Wei Liu <wei.liu2@citrix.com>,
Ian Jackson <ian.jackson@eu.citrix.com>, Tim Deegan <tim@xen.org>,
"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
Jan Beulich <jbeulich@suse.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
tlengyel@novetta.com, Daniel De Graaf <dgdegra@tycho.nsa.gov>
Subject: Re: [PATCH v3 05/13] x86/altp2m: basic data structures and support routines.
Date: Wed, 8 Jul 2015 14:52:54 +0100 [thread overview]
Message-ID: <CAFLBxZaFyfoBG97vLbCGJFdnkbdroPaS8VCsuaEhpvixS3yALQ@mail.gmail.com> (raw)
In-Reply-To: <559BFC1D.3070402@intel.com>
On Tue, Jul 7, 2015 at 5:19 PM, Ed White <edmund.h.white@intel.com> wrote:
> On 07/07/2015 08:22 AM, Tim Deegan wrote:
>> At 16:04 +0100 on 07 Jul (1436285059), George Dunlap wrote:
>>> On 07/01/2015 07:09 PM, Ed White wrote:
>>>> diff --git a/xen/arch/x86/mm/mm-locks.h b/xen/arch/x86/mm/mm-locks.h
>>>> index b4f035e..301ca59 100644
>>>> --- a/xen/arch/x86/mm/mm-locks.h
>>>> +++ b/xen/arch/x86/mm/mm-locks.h
>>>> @@ -217,7 +217,7 @@ declare_mm_lock(nestedp2m)
>>>> #define nestedp2m_lock(d) mm_lock(nestedp2m, &(d)->arch.nested_p2m_lock)
>>>> #define nestedp2m_unlock(d) mm_unlock(&(d)->arch.nested_p2m_lock)
>>>>
>>>> -/* P2M lock (per-p2m-table)
>>>> +/* P2M lock (per-non-alt-p2m-table)
>>>> *
>>>> * This protects all queries and updates to the p2m table.
>>>> * Queries may be made under the read lock but all modifications
>>>> @@ -225,10 +225,44 @@ declare_mm_lock(nestedp2m)
>>>> *
>>>> * The write lock is recursive as it is common for a code path to look
>>>> * up a gfn and later mutate it.
>>>> + *
>>>> + * Note that this lock shares its implementation with the altp2m
>>>> + * lock (not the altp2m list lock), so the implementation
>>>> + * is found there.
>>>> */
>>>>
>>>> declare_mm_rwlock(p2m);
>>>> -#define p2m_lock(p) mm_write_lock(p2m, &(p)->lock);
>>>> +
>>>> +/* Alternate P2M list lock (per-domain)
>>>> + *
>>>> + * A per-domain lock that protects the list of alternate p2m's.
>>>> + * Any operation that walks the list needs to acquire this lock.
>>>> + * Additionally, before destroying an alternate p2m all VCPU's
>>>> + * in the target domain must be paused.
>>>> + */
>>>> +
>>>> +declare_mm_lock(altp2mlist)
>>>> +#define altp2m_lock(d) mm_lock(altp2mlist, &(d)->arch.altp2m_lock)
>>>> +#define altp2m_unlock(d) mm_unlock(&(d)->arch.altp2m_lock)
>>>> +
>>>> +/* P2M lock (per-altp2m-table)
>>>> + *
>>>> + * This protects all queries and updates to the p2m table.
>>>> + * Queries may be made under the read lock but all modifications
>>>> + * need the main (write) lock.
>>>> + *
>>>> + * The write lock is recursive as it is common for a code path to look
>>>> + * up a gfn and later mutate it.
>>>> + */
>>>> +
>>>> +declare_mm_rwlock(altp2m);
>>>> +#define p2m_lock(p) \
>>>> +{ \
>>>> + if ( p2m_is_altp2m(p) ) \
>>>> + mm_write_lock(altp2m, &(p)->lock); \
>>>> + else \
>>>> + mm_write_lock(p2m, &(p)->lock); \
>>>> +}
>>>> #define p2m_unlock(p) mm_write_unlock(&(p)->lock);
>>>> #define gfn_lock(p,g,o) p2m_lock(p)
>>>> #define gfn_unlock(p,g,o) p2m_unlock(p)
>>>
>>> I've just taken on the role of mm maintainer, and so this late in a
>>> series, having Tim's approval and also having Andy's reviewed-by, I'd
>>> normally just skim through and Ack it as a matter of course. But I just
>>> wouldn't feel right giving this my maintainer's ack without
>>> understanding the locking a bit better. So please bear with me here.
>>>
>>> I see in the cover letter that you "sandwiched" the altp2mlist lock
>>> between p2m and altp2m at Tim's suggestion. But I can't find the
>>> discussion where that was suggested (it doesn't seem to be in response
>>> to v1 patch 5),
>>
>> I suggested changing the locking order here:
>> http://lists.xenproject.org/archives/html/xen-devel/2015-01/msg01824.html
>>
>> Cheers,
>>
>> Tim.
>>
>
> And Tim, Andrew and I subsequently discussed this specific approach
> in a phone meeting.
Right; but it's still important to have all information necessary to
understand the patch series in the code, comments, and changelogs. I
can't go back and listen to your conversation, and although a
reasonable amount of inference from the code can be expected, anything
complicated should be made explicit.
(Perhaps it is explained further on in the series, in which case the
above comment may not require any action.)
-George
next prev parent reply other threads:[~2015-07-08 13:52 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-01 18:09 [PATCH v3 00/12] Alternate p2m: support multiple copies of host p2m Ed White
2015-07-01 18:09 ` [PATCH v3 01/13] common/domain: Helpers to pause a domain while in context Ed White
2015-07-01 18:09 ` [PATCH v3 02/13] VMX: VMFUNC and #VE definitions and detection Ed White
2015-07-06 17:16 ` George Dunlap
2015-07-07 18:58 ` Nakajima, Jun
2015-07-01 18:09 ` [PATCH v3 03/13] VMX: implement suppress #VE Ed White
2015-07-06 17:26 ` George Dunlap
2015-07-07 18:59 ` Nakajima, Jun
2015-07-09 13:01 ` Jan Beulich
2015-07-10 19:30 ` Sahita, Ravi
2015-07-13 7:40 ` Jan Beulich
2015-07-13 23:39 ` Sahita, Ravi
2015-07-14 11:18 ` George Dunlap
2015-07-01 18:09 ` [PATCH v3 04/13] x86/HVM: Hardware alternate p2m support detection Ed White
2015-07-01 18:09 ` [PATCH v3 05/13] x86/altp2m: basic data structures and support routines Ed White
2015-07-03 16:22 ` Andrew Cooper
2015-07-06 9:56 ` Jan Beulich
2015-07-06 16:52 ` Ed White
2015-07-06 16:40 ` Ed White
2015-07-06 16:50 ` Ian Jackson
2015-07-07 6:48 ` Coding style (was Re: [PATCH v3 05/13] x86/altp2m: basic data structures and support routines.) Jan Beulich
2015-07-07 6:31 ` [PATCH v3 05/13] x86/altp2m: basic data structures and support routines Jan Beulich
2015-07-07 15:04 ` George Dunlap
2015-07-07 15:22 ` Tim Deegan
2015-07-07 16:19 ` Ed White
2015-07-08 13:52 ` George Dunlap [this message]
2015-07-09 17:05 ` Sahita, Ravi
2015-07-10 16:35 ` George Dunlap
2015-07-10 22:11 ` Sahita, Ravi
2015-07-09 13:29 ` Jan Beulich
2015-07-10 21:48 ` Sahita, Ravi
2015-07-13 8:01 ` Jan Beulich
2015-07-14 0:01 ` Sahita, Ravi
2015-07-14 8:53 ` Jan Beulich
2015-07-16 8:48 ` Sahita, Ravi
2015-07-16 9:02 ` Jan Beulich
2015-07-17 22:39 ` Sahita, Ravi
2015-07-20 6:18 ` Jan Beulich
2015-07-21 5:04 ` Sahita, Ravi
2015-07-21 6:24 ` Jan Beulich
2015-07-14 11:34 ` George Dunlap
2015-07-09 15:58 ` George Dunlap
2015-07-01 18:09 ` [PATCH v3 06/13] VMX/altp2m: add code to support EPTP switching and #VE Ed White
2015-07-03 16:29 ` Andrew Cooper
2015-07-07 14:28 ` Wei Liu
2015-07-07 19:02 ` Nakajima, Jun
2015-07-01 18:09 ` [PATCH v3 07/13] VMX: add VMFUNC leaf 0 (EPTP switching) to emulator Ed White
2015-07-03 16:40 ` Andrew Cooper
2015-07-06 19:56 ` Sahita, Ravi
2015-07-07 7:31 ` Jan Beulich
2015-07-09 14:05 ` Jan Beulich
2015-07-01 18:09 ` [PATCH v3 08/13] x86/altp2m: add control of suppress_ve Ed White
2015-07-03 16:43 ` Andrew Cooper
2015-07-01 18:09 ` [PATCH v3 09/13] x86/altp2m: alternate p2m memory events Ed White
2015-07-01 18:29 ` Lengyel, Tamas
2015-07-03 16:46 ` Andrew Cooper
2015-07-07 15:18 ` George Dunlap
2015-07-01 18:09 ` [PATCH v3 10/13] x86/altp2m: add remaining support routines Ed White
2015-07-03 16:56 ` Andrew Cooper
2015-07-09 15:07 ` George Dunlap
2015-07-01 18:09 ` [PATCH v3 11/13] x86/altp2m: define and implement alternate p2m HVMOP types Ed White
2015-07-06 10:09 ` Andrew Cooper
2015-07-06 16:49 ` Ed White
2015-07-06 17:08 ` Ian Jackson
2015-07-06 18:27 ` Ed White
2015-07-06 23:40 ` Lengyel, Tamas
2015-07-07 7:46 ` Jan Beulich
2015-07-07 7:41 ` Jan Beulich
2015-07-07 7:39 ` Jan Beulich
2015-07-07 7:33 ` Jan Beulich
2015-07-07 20:10 ` Sahita, Ravi
2015-07-07 20:25 ` Andrew Cooper
2015-07-09 14:34 ` Jan Beulich
2015-07-01 18:09 ` [PATCH v3 12/13] x86/altp2m: Add altp2mhvm HVM domain parameter Ed White
2015-07-06 10:16 ` Andrew Cooper
2015-07-06 17:49 ` Wei Liu
2015-07-06 18:01 ` Ed White
2015-07-06 18:18 ` Wei Liu
2015-07-06 22:59 ` Ed White
2015-07-01 18:09 ` [PATCH v3 13/13] x86/altp2m: XSM hooks for altp2m HVM ops Ed White
2015-07-02 19:17 ` Daniel De Graaf
2015-07-06 9:50 ` [PATCH v3 00/12] Alternate p2m: support multiple copies of host p2m Jan Beulich
2015-07-06 11:25 ` Tim Deegan
2015-07-06 11:38 ` Jan Beulich
2015-07-08 18:35 ` Sahita, Ravi
2015-07-09 11:49 ` Wei Liu
2015-07-09 14:14 ` Jan Beulich
2015-07-09 16:13 ` Sahita, Ravi
2015-07-09 16:20 ` Ian Campbell
2015-07-09 16:21 ` Wei Liu
2015-07-09 16:42 ` George Dunlap
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=CAFLBxZaFyfoBG97vLbCGJFdnkbdroPaS8VCsuaEhpvixS3yALQ@mail.gmail.com \
--to=george.dunlap@eu.citrix.com \
--cc=andrew.cooper3@citrix.com \
--cc=dgdegra@tycho.nsa.gov \
--cc=edmund.h.white@intel.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=ravi.sahita@intel.com \
--cc=tim@xen.org \
--cc=tlengyel@novetta.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xen.org \
/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).