[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] arm/acpi: Add __acpi_unmap_table function for ARM
Hi Jan, On 2020/1/21 19:02, Jan Beulich wrote: > On 21.01.2020 10:49, Wei Xu wrote: >> Add __acpi_unmap_table function for ARM and invoke it at acpi_os_unmap_memory >> to make sure the related fixmap has been cleared before using it for a >> different mapping. > > How can it possibly be that this is needed for Arm only? Sorry, I think Julien has helped to explain this. > >> --- a/xen/arch/arm/acpi/lib.c >> +++ b/xen/arch/arm/acpi/lib.c >> @@ -49,6 +49,31 @@ char *__acpi_map_table(paddr_t phys, unsigned long size) >> return ((char *) base + offset); >> } >> >> +void __acpi_unmap_table(void __iomem * virt, unsigned long size) >> +{ >> + unsigned long base, end; >> + int idx; > > unsigned int OK. I will change the type. > >> + base = FIXMAP_ADDR(FIXMAP_ACPI_BEGIN); >> + end = FIXMAP_ADDR(FIXMAP_ACPI_END); >> + >> + if ( (unsigned long)virt < base || (unsigned long)virt > end ) >> + { >> + return; >> + } > > Stray braces. OK. I will remove the braces. > >> --- a/xen/drivers/acpi/osl.c >> +++ b/xen/drivers/acpi/osl.c >> @@ -114,6 +114,8 @@ void acpi_os_unmap_memory(void __iomem * virt, acpi_size >> size) >> return; >> } >> >> + __acpi_unmap_table(virt, size); >> + >> if (system_state >= SYS_STATE_boot) >> vunmap((void *)((unsigned long)virt & PAGE_MASK)); > > How can it possibly be correct to call both vunmap() and your new > function? And how is this, having jsut an Arm implementation, > going to compile for x86? Seeing that x86 gets away without this, > may I suggest that you look at the x86 code to see why that is, > and then consider whether the same model makes sense for Arm? And > if it doesn't, check whether the new Arm model would make sense > to also use on x86? > Sorry, I thought acpi_os_unmap_memory is specific for ARM. Just now I checked map_pages_to_xen in arch/x86/mm.c and did not find any place to forbid the modification of a mapping. Maybe clearing mapping before modification is not necessary for X86. Do you think is it OK to add a empty stub function for the other cases except ARM and invoke it after vunmap as following? diff --git a/xen/drivers/acpi/osl.c b/xen/drivers/acpi/osl.c --- a/xen/drivers/acpi/osl.c +++ b/xen/drivers/acpi/osl.c @@ -114,10 +114,10 @@ void acpi_os_unmap_memory(void __iomem * virt, acpi_size size) return; } if (system_state >= SYS_STATE_boot) vunmap((void *)((unsigned long)virt & PAGE_MASK)); + + __acpi_unmap_table(virt, size); } acpi_status acpi_os_read_port(acpi_io_address port, u32 * value, u32 width) diff --git a/xen/include/xen/acpi.h b/xen/include/xen/acpi.h --- a/xen/include/xen/acpi.h +++ b/xen/include/xen/acpi.h @@ -68,7 +68,13 @@ typedef int (*acpi_table_entry_handler) (struct acpi_subtable_header *header, co unsigned int acpi_get_processor_id (unsigned int cpu); char * __acpi_map_table (paddr_t phys_addr, unsigned long size); + +#ifdef CONFIG_ARM +void __acpi_unmap_table(void __iomem *virt, unsigned long size); +#else +void __acpi_unmap_table(void __iomem *virt, unsigned long size) { } +#endif /* CONFIG_ARM */ >> --- a/xen/include/xen/acpi.h >> +++ b/xen/include/xen/acpi.h >> @@ -68,6 +68,7 @@ typedef int (*acpi_table_entry_handler) (struct >> acpi_subtable_header *header, co >> >> unsigned int acpi_get_processor_id (unsigned int cpu); >> char * __acpi_map_table (paddr_t phys_addr, unsigned long size); >> +void __acpi_unmap_table(void __iomem * virt, unsigned long size); >> int acpi_boot_init (void); >> int acpi_boot_table_init (void); >> int acpi_numa_init (void); > > Best noticable here, your mailer has mangled the patch. The way > of this mangling makes me guess you used Thunderbird to send the > patch, in which case you'll need to adjust its settings (iirc it > was mailnews.wraplength which needed setting to zero). Yes, I used Thunderbird and did not set that :(. Thanks! Best Regards, Wei > > Jan > > . > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |