From: Shanker Donthineni <shankerd@codeaurora.org>
To: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>,
Julien Grall <julien.grall@arm.com>
Cc: sstabellini@kernel.org,
Razvan Cojocaru <rcojocaru@bitdefender.com>,
steve.capper@arm.com, proskurin@sec.in.tum.de,
xen-devel@lists.xen.org, Dirk Behme <dirk.behme@de.bosch.com>,
Tamas K Lengyel <tamas@tklengyel.com>,
wei.chen@linaro.org
Subject: Re: [RFC 00/22] xen/arm: Rework the P2M code to follow break-before-make sequence
Date: Tue, 16 Aug 2016 21:28:54 -0500 [thread overview]
Message-ID: <57B3CBE6.7060605@codeaurora.org> (raw)
In-Reply-To: <20160815150639.GA28422@toto>
Hi Julien,
I have verified this patch series on Qualcomm Server platform QDF2XXX
without any issue.
Tested-by: Shanker Donthineni <shankerd@codeaurora.org>
On 08/15/2016 10:06 AM, Edgar E. Iglesias wrote:
> On Thu, Jul 28, 2016 at 03:51:23PM +0100, Julien Grall wrote:
>> Hello all,
>>
>> The ARM architecture mandates the use of a break-before-make sequence when
>> changing translation entries if the page table is shared between multiple
>> CPUs whenever a valid entry is replaced by another valid entry (see D4.7.1
>> in ARM DDI 0487A.j for more details).
>>
>> The current P2M code does not respect this sequence and may result to
>> break coherency on some processors.
>>
>> Adapting the current implementation to use break-before-make sequence would
>> imply some code duplication and more TLBs invalidations than necessary.
>> For instance, if we are replacing a 4KB page and the current mapping in
>> the P2M is using a 1GB superpage, the following steps will happen:
>> 1) Shatter the 1GB superpage into a series of 2MB superpages
>> 2) Shatter the 2MB superpage into a series of 4KB superpages
>> 3) Replace the 4KB page
>>
>> As the current implementation is shattering while descending and install
>> the mapping before continuing to the next level, Xen would need to issue 3
>> TLB invalidation instructions which is clearly inefficient.
>>
>> Furthermore, all the operations which modify the page table are using the
>> same skeleton. It is more complicated to maintain different code paths than
>> having a generic function that set an entry and take care of the break-before-
>> make sequence.
>>
>> The new implementation is based on the x86 EPT one which, I think, fits
>> quite well for the break-before-make sequence whilst keeping the code
>> simple.
>>
>> I sent this patch series as an RFC because there are still some TODOs
>> in the code (mostly sanity check and possible optimization) and I have
>> done limited testing. However, I think it is a good shape to start reviewing,
>> get more feedback and have wider testing on different board.
>>
>> Also, I need to figure out the impact on ARM32 because the domheap is not
>> always mapped.
>>
>> This series has dependencies on some rework sent separately ([1] and [2]).
>> I have provided a branch with all the dependencies and this series applied:
>>
>> git://xenbits.xen.org/people/julieng/xen-unstable.git branch p2m-rfc
>
> Hi Julien,
>
> FWIW, I gave this a spin on the ZynqMP and it seems to be working fine.
> I tried dom0 and starting a few additional guests. All looks good.
>
> Tested-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
>
> Cheers,
> Edgar
>
>
>> Comments are welcome.
>>
>> Yours sincerely,
>>
>> Cc: Razvan Cojocaru <rcojocaru@bitdefender.com>
>> Cc: Tamas K Lengyel <tamas@tklengyel.com>
>> Cc: Shanker Donthineni <shankerd@codeaurora.org>
>> Cc: Dirk Behme <dirk.behme@de.bosch.com>
>> Cc: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
>>
>> [1] https://lists.xenproject.org/archives/html/xen-devel/2016-07/msg02936.html
>> [2] https://lists.xenproject.org/archives/html/xen-devel/2016-07/msg02830.html
>>
>> Julien Grall (22):
>> xen/arm: do_trap_instr_abort_guest: Move the IPA computation out of
>> the switch
>> xen/arm: p2m: Store in p2m_domain whether we need to clean the entry
>> xen/arm: p2m: Rename parameter in p2m_{remove,write}_pte...
>> xen/arm: p2m: Use typesafe gfn in p2m_mem_access_radix_set
>> xen/arm: traps: Move MMIO emulation code in a separate helper
>> xen/arm: traps: Check the P2M before injecting a data/instruction
>> abort
>> xen/arm: p2m: Rework p2m_put_l3_page
>> xen/arm: p2m: Invalidate the TLBs when write unlocking the p2m
>> xen/arm: p2m: Change the type of level_shifts from paddr_t to unsigned
>> int
>> xen/arm: p2m: Move the lookup helpers at the top of the file
>> xen/arm: p2m: Introduce p2m_get_root_pointer and use it in
>> __p2m_lookup
>> xen/arm: p2m: Introduce p2m_get_entry and use it to implement
>> __p2m_lookup
>> xen/arm: p2m: Replace all usage of __p2m_lookup with p2m_get_entry
>> xen/arm: p2m: Re-implement p2m_cache_flush using p2m_get_entry
>> xen/arm: p2m: Re-implement relinquish_p2m_mapping using p2m_get_entry
>> xen/arm: p2m: Make p2m_{valid,table,mapping} helpers inline
>> xen/arm: p2m: Introduce a helper to check if an entry is a superpage
>> xen/arm: p2m: Introduce p2m_set_entry and __p2m_set_entry
>> xen/arm: p2m: Re-implement p2m_remove_using using p2m_set_entry
>> xen/arm: p2m: Re-implement p2m_insert_mapping using p2m_set_entry
>> xen/arm: p2m: Re-implement p2m_set_mem_access using
>> p2m_{set,get}_entry
>> xen/arm: p2m: Do not handle shattering in p2m_create_table
>>
>> xen/arch/arm/domain.c | 8 +-
>> xen/arch/arm/p2m.c | 1274 ++++++++++++++++++++++----------------------
>> xen/arch/arm/traps.c | 126 +++--
>> xen/include/asm-arm/p2m.h | 14 +
>> xen/include/asm-arm/page.h | 4 +
>> 5 files changed, 742 insertions(+), 684 deletions(-)
>>
>> --
>> 1.9.1
>>
--
Shanker Donthineni
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
prev parent reply other threads:[~2016-08-17 2:28 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-28 14:51 [RFC 00/22] xen/arm: Rework the P2M code to follow break-before-make sequence Julien Grall
2016-07-28 14:51 ` [RFC 01/22] xen/arm: do_trap_instr_abort_guest: Move the IPA computation out of the switch Julien Grall
2016-08-16 0:21 ` Stefano Stabellini
2016-08-16 16:20 ` Julien Grall
2016-08-31 10:01 ` Julien Grall
2016-08-31 19:43 ` Stefano Stabellini
2016-09-06 14:54 ` Julien Grall
2016-07-28 14:51 ` [RFC 02/22] xen/arm: p2m: Store in p2m_domain whether we need to clean the entry Julien Grall
2016-08-16 0:35 ` Stefano Stabellini
2016-08-31 10:29 ` Julien Grall
2016-07-28 14:51 ` [RFC 03/22] xen/arm: p2m: Rename parameter in p2m_{remove, write}_pte Julien Grall
2016-08-16 0:36 ` Stefano Stabellini
2016-07-28 14:51 ` [RFC 04/22] xen/arm: p2m: Use typesafe gfn in p2m_mem_access_radix_set Julien Grall
2016-08-16 0:39 ` Stefano Stabellini
2016-07-28 14:51 ` [RFC 05/22] xen/arm: traps: Move MMIO emulation code in a separate helper Julien Grall
2016-08-16 0:49 ` Stefano Stabellini
2016-08-31 10:36 ` Julien Grall
2016-07-28 14:51 ` [RFC 06/22] xen/arm: traps: Check the P2M before injecting a data/instruction abort Julien Grall
2016-08-23 1:05 ` Stefano Stabellini
2016-08-31 10:58 ` Julien Grall
2016-07-28 14:51 ` [RFC 07/22] xen/arm: p2m: Rework p2m_put_l3_page Julien Grall
2016-08-23 1:10 ` Stefano Stabellini
2016-07-28 14:51 ` [RFC 08/22] xen/arm: p2m: Invalidate the TLBs when write unlocking the p2m Julien Grall
2016-08-23 1:18 ` Stefano Stabellini
2016-07-28 14:51 ` [RFC 09/22] xen/arm: p2m: Change the type of level_shifts from paddr_t to unsigned int Julien Grall
2016-08-23 1:20 ` Stefano Stabellini
2016-08-31 11:04 ` Julien Grall
2016-07-28 14:51 ` [RFC 10/22] xen/arm: p2m: Move the lookup helpers at the top of the file Julien Grall
2016-07-28 14:51 ` [RFC 11/22] xen/arm: p2m: Introduce p2m_get_root_pointer and use it in __p2m_lookup Julien Grall
2016-08-23 1:34 ` Stefano Stabellini
2016-07-28 14:51 ` [RFC 12/22] xen/arm: p2m: Introduce p2m_get_entry and use it to implement __p2m_lookup Julien Grall
2016-07-30 18:37 ` Tamas K Lengyel
2016-08-31 0:30 ` [RFC 12/22] xen/arm: p2m: Introduce p2m_get_entry and use it to implement __p2m_lookupo Stefano Stabellini
2016-08-31 12:25 ` Julien Grall
2016-08-31 19:33 ` Stefano Stabellini
2016-09-01 11:37 ` Julien Grall
2016-07-28 14:51 ` [RFC 13/22] xen/arm: p2m: Replace all usage of __p2m_lookup with p2m_get_entry Julien Grall
2016-07-28 17:29 ` Tamas K Lengyel
2016-07-28 17:36 ` Tamas K Lengyel
2016-07-29 15:06 ` Julien Grall
2016-07-29 22:36 ` Tamas K Lengyel
2016-07-28 17:51 ` Julien Grall
2016-09-05 20:45 ` Stefano Stabellini
2016-07-28 14:51 ` [RFC 14/22] xen/arm: p2m: Re-implement p2m_cache_flush using p2m_get_entry Julien Grall
2016-09-05 21:13 ` Stefano Stabellini
2016-09-06 14:56 ` Julien Grall
2016-07-28 14:51 ` [RFC 15/22] xen/arm: p2m: Re-implement relinquish_p2m_mapping " Julien Grall
2016-09-05 21:58 ` Stefano Stabellini
2016-09-06 15:05 ` Julien Grall
2016-09-06 18:21 ` Stefano Stabellini
2016-09-07 7:37 ` Julien Grall
2016-07-28 14:51 ` [RFC 16/22] xen/arm: p2m: Make p2m_{valid, table, mapping} helpers inline Julien Grall
2016-09-05 22:00 ` Stefano Stabellini
2016-07-28 14:51 ` [RFC 17/22] xen/arm: p2m: Introduce a helper to check if an entry is a superpage Julien Grall
2016-09-05 22:03 ` Stefano Stabellini
2016-07-28 14:51 ` [RFC 18/22] xen/arm: p2m: Introduce p2m_set_entry and __p2m_set_entry Julien Grall
2016-07-30 18:40 ` Tamas K Lengyel
2016-08-15 10:22 ` Sergej Proskurin
2016-09-06 1:08 ` Stefano Stabellini
2016-09-06 17:12 ` Julien Grall
2016-09-06 18:51 ` Stefano Stabellini
2016-09-07 8:18 ` Julien Grall
2016-09-09 23:14 ` Stefano Stabellini
2016-07-28 14:51 ` [RFC 19/22] xen/arm: p2m: Re-implement p2m_remove_using using p2m_set_entry Julien Grall
2016-09-06 18:53 ` Stefano Stabellini
2016-07-28 14:51 ` [RFC 20/22] xen/arm: p2m: Re-implement p2m_insert_mapping " Julien Grall
2016-09-06 18:57 ` Stefano Stabellini
2016-09-15 10:38 ` Julien Grall
2016-07-28 14:51 ` [RFC 21/22] xen/arm: p2m: Re-implement p2m_set_mem_access using p2m_{set, get}_entry Julien Grall
2016-07-28 15:04 ` Razvan Cojocaru
2016-07-28 15:16 ` Julien Grall
2016-08-01 15:40 ` Julien Grall
2016-08-01 15:59 ` Tamas K Lengyel
2016-08-01 16:15 ` Julien Grall
2016-08-01 16:27 ` Tamas K Lengyel
2016-08-01 16:33 ` Julien Grall
2016-08-01 16:41 ` Tamas K Lengyel
2016-08-02 6:07 ` Razvan Cojocaru
2016-08-01 16:34 ` Mark Rutland
2016-08-01 16:57 ` Julien Grall
2016-08-01 17:26 ` Mark Rutland
2016-08-01 18:22 ` Mark Rutland
2016-08-02 9:58 ` Julien Grall
2016-08-02 10:26 ` Mark Rutland
2016-07-28 17:21 ` Tamas K Lengyel
2016-09-06 19:06 ` Stefano Stabellini
2016-09-06 19:16 ` Razvan Cojocaru
2016-09-06 19:17 ` Stefano Stabellini
2016-09-07 6:56 ` Julien Grall
2016-09-07 7:03 ` Razvan Cojocaru
2016-07-28 14:51 ` [RFC 22/22] xen/arm: p2m: Do not handle shattering in p2m_create_table Julien Grall
2016-09-06 18:59 ` Stefano Stabellini
2016-07-28 17:46 ` [RFC 00/22] xen/arm: Rework the P2M code to follow break-before-make sequence Tamas K Lengyel
2016-07-29 16:23 ` Julien Grall
2016-07-29 19:05 ` Julien Grall
2016-08-15 10:24 ` Julien Grall
2016-08-15 15:06 ` Edgar E. Iglesias
2016-08-17 2:28 ` Shanker Donthineni [this message]
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=57B3CBE6.7060605@codeaurora.org \
--to=shankerd@codeaurora.org \
--cc=dirk.behme@de.bosch.com \
--cc=edgar.iglesias@xilinx.com \
--cc=julien.grall@arm.com \
--cc=proskurin@sec.in.tum.de \
--cc=rcojocaru@bitdefender.com \
--cc=sstabellini@kernel.org \
--cc=steve.capper@arm.com \
--cc=tamas@tklengyel.com \
--cc=wei.chen@linaro.org \
--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.