|
[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
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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |