[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v5 12/13] xen/arm: mmu: relocate copy_from_paddr() to setup.c


  • To: Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>
  • From: Henry Wang <Henry.Wang@xxxxxxx>
  • Date: Tue, 22 Aug 2023 07:44:11 +0000
  • Accept-language: zh-CN, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LwqjmdAwt4NXz27B1JZWsYzsZQ4iiTpE41S6OUVXTPo=; b=Ej00+FIDwfESOSpPh9I4Z9w+ai4acvFq1NZBtg7OyerHcJ0yud5ErWuFn/pHm/BKy7rNnCVNYzDPyJjg78HgWfOqTLqKWT5gAz7kpWNc2eV23N3n47MgMQZhwNNXUesiD4MncdM8koroFuXPKoD5wKIz2tCAhIEbth3VUoZ14EawR+BT3BLMat1y4Y2S+F2L9qEwjuoYDHtTEOitVYvm0QEpXQildfY7TYEl08TBzfO403tqzjjwBggqV7xe/7clCOLHyI6Rlg2oL2jg4PWIIv1Be+rvIwIEtTv421I76K/7XDbw5vrl6ByIaUcTLCoE0a24LeOknzPwe3oUDH815w==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VUCVere5qzgfBQ56SF7XaBzXg7V7YJfz9bSMZtFj1e494fHndg0FuZTvHdWxc4dcqmfFq2pPH97TwBpGuM1oBuVqY6Cgbz8meaA8xVm5ew7cbkSkPYNCUk/bRrtPH/tejdSWaBlT/b17bUVKupgXUl9/H6JJvEPGcUbHJ5oXq3zs4nR6t9wpBdXEWuezpDtEp22eTQV79bUlpmUe469vVrH0g+B+mcPVzOLUoosx6cxQvz2fiYQppABZcUJ/RMcKBtIiMsVNCi2ToK0WczmGIv5EWHxMVgMpDU+5CcMFNWS1GSSBBuMJGf0Y5VInxFmHobTeEBmzqld9NzS8AVCAhw==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Penny Zheng <Penny.Zheng@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Wei Chen <Wei.Chen@xxxxxxx>
  • Delivery-date: Tue, 22 Aug 2023 07:44:34 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Thread-index: AQHZzmeOkWUgiqEb9U2fOmI3mEWP3a/1UMEAgACrQQA=
  • Thread-topic: [PATCH v5 12/13] xen/arm: mmu: relocate copy_from_paddr() to setup.c

Hi Julien, Stefano, Bertrand,

> On Aug 22, 2023, at 05:31, Julien Grall <julien@xxxxxxx> wrote:
> 
> Hi,
> 
> On 14/08/2023 05:25, Henry Wang wrote:
>> From: Penny Zheng <Penny.Zheng@xxxxxxx>
>> Function copy_from_paddr() is defined in asm/setup.h, so it is better
>> to be implemented in setup.c.
> 
> I don't agree with this reasoning. We used setup.h to declare prototype for 
> function that are out of setup.c.
> 
> Looking at the overall of this series, it is unclear to me what is the 
> difference between mmu/mm.c and mmu/setup.c. I know this is technically not a 
> new problem but as we split the code, it would be a good opportunity to have 
> a better split.
> 
> For instance, we have setup_mm() defined in setup.c but setup_pagetables() 
> and mm.c. Both are technically related to the memory management. So having 
> them in separate file is a bit odd.

Skimming through the comments, it looks like we have a common problem
in patch 7, 9, 10, 12 about how to move/split the code. So instead of having
the discussion in each patch, I would like to propose that we can discuss all
of these in a common place here.

> 
> I also don't like the idea of having again a massive mm.c files. So maybe we 
> need a split like:
>  * File 1: Boot CPU0 MM bringup (mmu/setup.c)
>  * File 2: Secondary CPUs MM bringup (mmu/smpboot.c)
>  * File 3: Page tables update. (mmu/pt.c)
> 
> Ideally file 1 should contain only init code/data so it can be marked as 
> .init. So the static pagetables may want to be defined in mmu/pt.c.

So based on Julien’s suggestion, Penny and I worked a bit on the current
functions in “arch/arm/mm.c” and we would like to propose below split
scheme, would you please comment on if below makes sense to you,
thanks!

"""
static void __init __maybe_unused build_assertions()      -> arch/arm/mm.c
static lpae_t *xen_map_table()                            -> mmu/pt.c
static void xen_unmap_table()                             -> mmu/pt.c
void dump_pt_walk()                                       -> mmu/pt.c
void dump_hyp_walk()                                      -> mmu/pt.c
lpae_t mfn_to_xen_entry()                                 -> mmu/pt.c
void set_fixmap()                                         -> mmu/pt.c  
void clear_fixmap()                                       -> mmu/pt.c
void flush_page_to_ram()                                  -> arch/arm/mm.c?
lpae_t pte_of_xenaddr()                                   -> mmu/pt.c
void * __init early_fdt_map()                             -> mmu/setup.c
void __init remove_early_mappings()                       -> mmu/setup.c
static void xen_pt_enforce_wnx()                          -> mmu/pt.c, export it
static void clear_table()                                 -> mmu/smpboot.c
void __init setup_pagetables()                            -> mmu/setup.c
static void clear_boot_pagetables()                       -> mmu/smpboot.c
int init_secondary_pagetables()                           -> mmu/smpboot.c
void mmu_init_secondary_cpu()                             -> mmu/smpboot.c
void __init setup_directmap_mappings()                    -> mmu/setup.c
void __init setup_frametable_mappings()                   -> mmu/setup.c
void *__init arch_vmap_virt_end()                         -> arch/arm/mm.c or 
mmu/setup.c?
void *ioremap_attr()                                      -> mmu/pt.c
void *ioremap()                                           -> mmu/pt.c
static int create_xen_table()                             -> mmu/pt.c 
static int xen_pt_next_level()                            -> mmu/pt.c
static bool xen_pt_check_entry()                          -> mmu/pt.c 
static int xen_pt_update_entry()                          -> mmu/pt.c
static int xen_pt_mapping_level()                         -> mmu/pt.c 
static unsigned int xen_pt_check_contig()                 -> mmu/pt.c 
static int xen_pt_update()                                -> mmu/pt.c 
int map_pages_to_xen()                                    -> mmu/pt.c 
int __init populate_pt_range()                            -> mmu/pt.c
int destroy_xen_mappings()                                -> mmu/pt.c
int modify_xen_mappings()                                 -> mmu/pt.c
void free_init_memory()                                   -> mmu/setup.c
void arch_dump_shared_mem_info()                          -> arch/arm/mm.c
int steal_page()                                          -> arch/arm/mm.c
int page_is_ram_type()                                    -> arch/arm/mm.c
unsigned long domain_get_maximum_gpfn()                   -> arch/arm/mm.c
void share_xen_page_with_guest()                          -> arch/arm/mm.c
int xenmem_add_to_physmap_one()                           -> arch/arm/mm.c
long arch_memory_op()                                     -> arch/arm/mm.c
static struct domain *page_get_owner_and_nr_reference()   -> arch/arm/mm.c
struct domain *page_get_owner_and_reference()             -> arch/arm/mm.c
void put_page_nr()                                        -> arch/arm/mm.c
void put_page()                                           -> arch/arm/mm.c
bool get_page_nr()                                        -> arch/arm/mm.c
bool get_page()                                           -> arch/arm/mm.c
int get_page_type()                                       -> arch/arm/mm.c
void put_page_type()                                      -> arch/arm/mm.c
int create_grant_host_mapping()                           -> arch/arm/mm.c
int replace_grant_host_mapping()                          -> arch/arm/mm.c
bool is_iomem_page()                                      -> arch/arm/mm.c
void clear_and_clean_page()                               -> arch/arm/mm.c
unsigned long get_upper_mfn_bound()                       -> arch/arm/mm.c
"""

> 
> Bertrand, Stefano, any thoughts?
> 
> [...]
> 
>> diff --git a/xen/arch/arm/mmu/setup.c b/xen/arch/arm/mmu/setup.c
>> index e05cca3f86..889ada6b87 100644
>> --- a/xen/arch/arm/mmu/setup.c
>> +++ b/xen/arch/arm/mmu/setup.c
>> @@ -329,6 +329,33 @@ void __init setup_mm(void)
>>  }
>>  #endif
>>  +/*
> 
> Why did the second '*' disappear?

According to the CODING_STYLE, we should use something like this:

/*
 * Example, multi-line comment block.
 *
 * Note beginning and end markers on separate lines and leading '*'.
 */

Instead of "/**” in the beginning. But I think you made a point, I need
to mention that I took the opportunity to fix the comment style in commit
message.

Kind regards,
Henry

> 
>> + * copy_from_paddr - copy data from a physical address
>> + * @dst: destination virtual address
>> + * @paddr: source physical address
>> + * @len: length to copy
>> + */
>> +void __init copy_from_paddr(void *dst, paddr_t paddr, unsigned long len)
>> +{
>> 
> 
> Cheers,
> 
> -- 
> Julien Grall


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.