|
[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 ParkAttachment:
v2-0001-xen-add-late-init-call-in-start_xen.patch
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |