All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juergen Gross <jgross@suse.com>
To: Wei Liu <wei.liu2@citrix.com>
Cc: roger.pau@citrix.com, stefano.stabellini@eu.citrix.com,
	ian.jackson@eu.citrix.com, Ian.Campbell@citrix.com,
	xen-devel@lists.xen.org
Subject: Re: [PATCH v3 8/9] libxc: rework of domain builder's page table handler
Date: Thu, 29 Oct 2015 15:13:30 +0100	[thread overview]
Message-ID: <5632298A.4030603@suse.com> (raw)
In-Reply-To: <20151029140237.GO18674@zion.uk.xensource.com>

On 10/29/2015 03:02 PM, Wei Liu wrote:
> On Thu, Oct 29, 2015 at 02:18:31PM +0100, Juergen Gross wrote:
>> On 10/29/2015 01:48 PM, Wei Liu wrote:
>>> On Tue, Oct 13, 2015 at 03:11:17PM +0200, Juergen Gross wrote:
>>>> In order to prepare a p2m list outside of the initial kernel mapping
>>>> do a rework of the domain builder's page table handler. The goal is
>>>> to be able to use common helpers for page table allocation and setup
>>>> for initial kernel page tables and page tables mapping the p2m list.
>>>> This is achieved by supporting multiple mapping areas. The mapped
>>>> virtual addresses of the single areas must not overlap, while the
>>>> page tables of a new area added might already be partially present.
>>>> Especially the top level page table is existing only once, of course.
>>>>
>>>
>>> Currently restrict the number of mappings to 1 because the only mapping
>>> now is the initial mapping created by toolstack. There should not be
>>> behaviour change and guest visible change introduced.
>>>
>>> If my understanding is correct, can yo please add that to the commit
>>> message?
>>
>> Sure.
>>
>> I'm currently thinking about changing this patch even further. While
>> doing similar work in grub-xen I found the page table building there
>> to be much more generic and more compact. Instead of open coding the
>> different page table levels all is done there in a loop over those
>> levels. The main loop consists of only 33 lines (and this is after
>> adding support of multiple mapping areas)!
>>
>> What do you think?
>>
>
> That's of course OK. It's patch reviewing for me anyway. One patch is as
> good as another.

You haven't seen the coding yet. ;-)

>>> Given this is a particularly thorny area, a second eye would be much
>>> appreciated.
>>
>> On the positive side: any bug in this code should be really easy to
>> spot, as the domain wouldn't be able to work reliably (this was at least
>> my experience when developing this patch and the related one in grub).
>>
>>> Some comments below.
>>>
> [...]
>>>> +    from = round_down(from, mask);
>>>> +    to = round_up(to, mask);
>>>> +
>>>> +    for ( map_n = 0, map_cmp = domx86->maps; map_n < domx86->n_mappings;
>>>> +          map_n++, map_cmp++ )
>>>>       {
>>>> -        start = round_down(start, mask);
>>>> -        end = round_up(end, mask);
>>>> -        tables = ((end - start) >> bits) + 1;
>>>> +        if ( map_cmp->lvls[lvl].from == map_cmp->lvls[lvl].to )
>>>> +            continue;
>>>> +        if ( from >= map_cmp->lvls[lvl].from && to <= map_cmp->lvls[lvl].to )
>>>> +            return;  /* Area already completely covered on this level. */
>>>> +        if ( from >= map_cmp->lvls[lvl].from && from <= map_cmp->lvls[lvl].to )
>>>> +            from = map_cmp->lvls[lvl].to + 1;
>>>> +        if ( to >= map_cmp->lvls[lvl].from && to <= map_cmp->lvls[lvl].to )
>>>> +            to = map_cmp->lvls[lvl].from - 1;
>>>
>>> Is it possible that later mapping covers the previous ones? How is that
>>> handled?
>>
>> I'm not sure I understand your question.
>>
>> In case you are asking whether different mappings are allowed to overlap
>> in terms of virtual addresses: no. I haven't added any checking code to
>> ensure this. I can do it, if you want.
>>
>
> As I understand it the sentence of "different mappings are not allowed
> to overlap" is the requirement, not the current status.

It doesn't make sense to support this. It would require to map multiple
pfns to the same virtual address. This is impossible. So yes, this is a
requirement.

I'll add some code to make sure overlapping does not occur.

> The above code snippet is used to ensure different mappings don't
> overlap, but I sense there one case missing,
>
>     from < map_cmp->lvls[lvl].from && to > map_cmp->lvls[lvl].to
>
> If this is not expected we should probably add assert here; otherwise
> that case needs to be handled as well.

This can only happen if the virtual areas are overlapping.


Juergen

  reply	other threads:[~2015-10-29 14:13 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-13 13:11 [PATCH v3 0/9] libxc: support building large pv-domains Juergen Gross
2015-10-13 13:11 ` [PATCH v3 1/9] libxc: reorganize domain builder guest memory allocator Juergen Gross
2015-10-28 15:32   ` Wei Liu
2015-10-28 15:51     ` Juergen Gross
2015-10-28 16:21       ` Wei Liu
2015-10-28 17:05         ` Juergen Gross
2015-10-13 13:11 ` [PATCH v3 2/9] xen: add generic flag to elf_dom_parms indicating support of unmapped initrd Juergen Gross
2015-10-28 15:33   ` Wei Liu
2015-10-28 15:49   ` Jan Beulich
2015-10-13 13:11 ` [PATCH v3 3/9] libxc: rename domain builder count_pgtables to alloc_pgtables Juergen Gross
2015-10-28 15:34   ` Wei Liu
2015-10-13 13:11 ` [PATCH v3 4/9] libxc: introduce domain builder architecture specific data Juergen Gross
2015-10-28 15:37   ` Wei Liu
2015-10-13 13:11 ` [PATCH v3 5/9] libxc: use domain builder architecture private data for x86 pv domains Juergen Gross
2015-10-28 15:38   ` Wei Liu
2015-10-13 13:11 ` [PATCH v3 6/9] libxc: create unmapped initrd in domain builder if supported Juergen Gross
2015-10-28 16:11   ` Wei Liu
2015-10-28 17:07     ` Juergen Gross
2015-10-13 13:11 ` [PATCH v3 7/9] libxc: split p2m allocation in domain builder from other magic pages Juergen Gross
2015-10-28 16:11   ` Wei Liu
2015-10-13 13:11 ` [PATCH v3 8/9] libxc: rework of domain builder's page table handler Juergen Gross
2015-10-29 12:48   ` Wei Liu
2015-10-29 13:18     ` Juergen Gross
2015-10-29 14:02       ` Wei Liu
2015-10-29 14:13         ` Juergen Gross [this message]
2015-10-29 15:03           ` Wei Liu
2015-10-29 15:34             ` Juergen Gross
2015-10-13 13:11 ` [PATCH v3 9/9] libxc: create p2m list outside of kernel mapping if supported Juergen Gross
2015-10-29 13:07   ` Wei Liu
2015-10-29 13:19     ` Juergen Gross
2015-10-26 11:15 ` [PATCH v3 0/9] libxc: support building large pv-domains Juergen Gross

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=5632298A.4030603@suse.com \
    --to=jgross@suse.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=roger.pau@citrix.com \
    --cc=stefano.stabellini@eu.citrix.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 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.