[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 1/2] xen: add late init call in start_xen
Thank you for your reply. I will seriously consider contributing platform specific drivers. Currently, I make a sample usage by applying this to a function in start_xen. I think functions in start_xen could be reduced for readability and understandability. These patches are just one of my suggestion. So feel free to reject it. On Sat, 30 Jul 2022, Stefano Stabellini wrote: > On Fri, 29 Jul 2022, Boyoun Park wrote: >> I really appreciate all the comments and reviews. >> I understand that it is hard to add this patch without any usage. >> >> On Fri, 29 Jul 2022, Stefano Stabellini: >>> On Thu, 28 Jul 2022, Jan Beulich wrote: >>>> On 28.07.2022 11:22, Boyoun Park wrote: >>>>> Subject: [PATCH v1] xen: add late init call in start_xen >>>>> >>>>> This patch added late_initcall section in init.data. >>>>> >>>>> The late initcall would be called after initcall >>>>> >>>>> in the start_xen function. >>>>> >>>>> Some initializing works on priority should be run >>>>> >>>>> in do_initcalls and other non-prioritized works >>>>> >>>>> would be run in do_late_initcalls. >>>>> >>>>> To call some functions by late_initcall, >>>>> >>>>> then it is possible by using >>>>> >>>>> __late_initcall(/*Function Name*/); >>>>> >>>>> Signed-off-by: Boyoun Park <boyoun.park@xxxxxxxxxxx> >>>> >>>> So I could imagine this patch to be in a series where a subsequent >>>> patch then adds an actual use of the new functionality. Without >>>> that what you're proposing is to add dead code. >>> >>> Yeah, I think it would be cool to have late initcalls but it makes sense >>> to add them if we have someone that makes use of them. >> >> I totally agree with your comments. Some drivers that I'm developing now and >>use this function are specific to my hardware environment. >> Thus, it seems difficult to arrange them in the near future. >> I will update patches if I can suggest an actual use. > > I totally understand custom setups and non-upstreamable configurations > and I have certainly some of them myself. > > However, I just wanted to let you know that we are fine with accepting > platform specific drivers in Xen where it makes sense, for instance: > > - Renesas IPMMU-VMSA found in R-Car Gen3/Gen4 SoCs (an IOMMU driver) > xen/drivers/passthrough/arm/ipmmu-vmsa.c > > - Xilinx EEMI firmware interface "mediator" in Xen (power management) > xen/arch/arm/platforms/xilinx-zynqmp-eemi.c From: Boyoun Park <boyoun.park@xxxxxxxxxxx> Date: Tue, 15 Mar 2022 12:57:59 +0900 Subject: [PATCH v2 1/2] xen: add late init call in start_xen This patch added late_initcall section in init.data. The late initcall would be called after initcall in the start_xen function. Some initializing works on priority should be run in do_initcalls and other non-prioritized works would be run in do_late_initcalls. To call some functions by late_initcall, then it is possible by using __late_initcall(/*Function Name*/); Signed-off-by: Boyoun Park <boyoun.park@xxxxxxxxxxx> --- xen/arch/arm/setup.c | 2 ++ xen/arch/arm/xen.lds.S | 2 ++ xen/arch/x86/setup.c | 2 ++ xen/arch/x86/xen.lds.S | 2 ++ xen/common/kernel.c | 9 ++++++++- xen/include/xen/init.h | 3 +++ 6 files changed, 19 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c index 85ff956..332a207 100644 --- a/xen/arch/arm/setup.c +++ b/xen/arch/arm/setup.c @@ -1063,6 +1063,8 @@ void __init start_xen(unsigned long boot_phys_offset, /* Hide UART from DOM0 if we're using it */ serial_endboot(); + do_late_initcalls(); + if ( (rc = xsm_set_system_active()) != 0 ) panic("xsm: unable to switch to SYSTEM_ACTIVE privilege: %d\n", rc); diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S index 1e986e2..215e2c3 100644 --- a/xen/arch/arm/xen.lds.S +++ b/xen/arch/arm/xen.lds.S @@ -163,6 +163,8 @@ SECTIONS __presmp_initcall_end = .; *(.initcall1.init) __initcall_end = .; + *(.initcalllate.init) + __late_initcall_end = .; . = ALIGN(4); __alt_instructions = .; diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index f08b07b..5dc6654 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -1952,6 +1952,8 @@ void __init noreturn __start_xen(unsigned long mbi_p) setup_io_bitmap(dom0); + do_late_initcalls(); + if ( bsp_delay_spec_ctrl ) { info->spec_ctrl_flags &= ~SCF_use_shadow; diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S index 8930e14..c90c7b0 100644 --- a/xen/arch/x86/xen.lds.S +++ b/xen/arch/x86/xen.lds.S @@ -250,6 +250,8 @@ SECTIONS __presmp_initcall_end = .; *(.initcall1.init) __initcall_end = .; + *(.initcalllate.init) + __late_initcall_end = .; *(.init.data) *(.init.data.rel) diff --git a/xen/common/kernel.c b/xen/common/kernel.c index f8134d3..5a3d037 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -369,7 +369,7 @@ void add_taint(unsigned int flag) } extern const initcall_t __initcall_start[], __presmp_initcall_end[], - __initcall_end[]; + __initcall_end[], __late_initcall_end[]; void __init do_presmp_initcalls(void) { @@ -385,6 +385,13 @@ void __init do_initcalls(void) (*call)(); } +void __init do_late_initcalls(void) +{ + const initcall_t *call; + for ( call = __initcall_end; call < __late_initcall_end; call++ ) + (*call)(); +} + #ifdef CONFIG_HYPFS static unsigned int __read_mostly major_version; static unsigned int __read_mostly minor_version; diff --git a/xen/include/xen/init.h b/xen/include/xen/init.h index 0af0e23..48210ee 100644 --- a/xen/include/xen/init.h +++ b/xen/include/xen/init.h @@ -68,11 +68,14 @@ typedef void (*exitcall_t)(void); const static initcall_t __initcall_##fn __init_call("presmp") = fn #define __initcall(fn) \ const static initcall_t __initcall_##fn __init_call("1") = fn +#define __late_initcall(fn) \ + const static initcall_t __initcall_##fn __init_call("late") = fn #define __exitcall(fn) \ static exitcall_t __exitcall_##fn __exit_call = fn void do_presmp_initcalls(void); void do_initcalls(void); +void do_late_initcalls(void); #endif /* __ASSEMBLY__ */ -- 2.7.4 Boyoun Park Attachment:
v2-0001-xen-add-late-init-call-in-start_xen.patch
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |