[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XEN][RFC PATCH 01/13] device tree: Remove __init from function type
Hi Vikram,Apologies for the late answer. I was away most of September and still catching up with my e-mails. On 02/09/2021 07:05, Vikram Garhwal wrote: Change function type of following function to access during runtime: 1. handle_device_interrupt() 2. map_irq_to_domain() 3. map_range_to_domain() 4. unflatten_dt_node() 5. unflatten_device_tree() I would prefer if the __init is removed as it get used. Skimming through the rest of the series, I think the function you are trying to use will be misplaced because you are not looking to build a domain. Instead, you are looking to add more devices.Remove .init from domain_build.o and move map_range_data declaration to domain_build.h. So I think it would be better to move the functions outside of domain_build.c. One possibility would be device.c. Cheers, These changes are done to support the dynamic programming of a nodes where an overlay node will be added to fdt and unflattened node will be added to dt_host. Furthermore, irq and mmio mapping will be done for the added node. Signed-off-by: Vikram Garhwal <fnu.vikram@xxxxxxxxxx> --- xen/arch/arm/Makefile | 2 +- xen/arch/arm/domain_build.c | 15 ++++----------- xen/common/device_tree.c | 18 +++++++++--------- xen/include/asm-arm/domain_build.h | 10 ++++++++++ xen/include/xen/device_tree.h | 5 +++++ 5 files changed, 29 insertions(+), 21 deletions(-) diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile index 3d3b97b..bef4517 100644 --- a/xen/arch/arm/Makefile +++ b/xen/arch/arm/Makefile @@ -15,7 +15,7 @@ obj-y += decode.o obj-y += device.o obj-$(CONFIG_IOREQ_SERVER) += dm.o obj-y += domain.o -obj-y += domain_build.init.o +obj-y += domain_build.o obj-y += domctl.o obj-$(CONFIG_EARLY_PRINTK) += early_printk.o obj-y += gic.o diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 206038d..3a457d3 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -47,12 +47,6 @@ static int __init parse_dom0_mem(const char *s) } custom_param("dom0_mem", parse_dom0_mem);-struct map_range_data-{ - struct domain *d; - p2m_type_t p2mt; -}; - /* Override macros from asm/page.h to make them work with mfn_t */ #undef virt_to_mfn #define virt_to_mfn(va) _mfn(__virt_to_mfn(va)) @@ -1144,7 +1138,7 @@ int __init make_chosen_node(const struct kernel_info *kinfo) return res; }-int __init map_irq_to_domain(struct domain *d, unsigned int irq,+int map_irq_to_domain(struct domain *d, unsigned int irq, bool need_mapping, const char *devname) { int res; @@ -1210,7 +1204,7 @@ static int __init map_dt_irq_to_domain(const struct dt_device_node *dev, return 0; }-static int __init map_range_to_domain(const struct dt_device_node *dev,+int map_range_to_domain(const struct dt_device_node *dev, u64 addr, u64 len, void *data) { @@ -1300,9 +1294,8 @@ static int __init map_device_children(struct domain *d, * < 0 error * 0 success */ -static int __init handle_device_interrupts(struct domain *d, - struct dt_device_node *dev, - bool need_mapping) +int handle_device_interrupts(struct domain *d, struct dt_device_node *dev, + bool need_mapping) { unsigned int i, nirq; int res; diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c index 03d25a8..cda21be 100644 --- a/xen/common/device_tree.c +++ b/xen/common/device_tree.c @@ -1750,12 +1750,12 @@ int dt_count_phandle_with_args(const struct dt_device_node *np, * @allnextpp: pointer to ->allnext from last allocated device_node * @fpsize: Size of the node path up at the current depth. */ -static unsigned long __init unflatten_dt_node(const void *fdt, - unsigned long mem, - unsigned long *p, - struct dt_device_node *dad, - struct dt_device_node ***allnextpp, - unsigned long fpsize) +static unsigned long unflatten_dt_node(const void *fdt, + unsigned long mem, + unsigned long *p, + struct dt_device_node *dad, + struct dt_device_node ***allnextpp, + unsigned long fpsize) { struct dt_device_node *np; struct dt_property *pp, **prev_pp = NULL; @@ -1986,7 +1986,7 @@ static unsigned long __init unflatten_dt_node(const void *fdt, }/**- * __unflatten_device_tree - create tree of device_nodes from flat blob + * unflatten_device_tree - create tree of device_nodes from flat blob * * unflattens a device-tree, creating the * tree of struct device_node. It also fills the "name" and "type" @@ -1995,7 +1995,7 @@ static unsigned long __init unflatten_dt_node(const void *fdt, * @fdt: The fdt to expand * @mynodes: The device_node tree created by the call */ -static void __init __unflatten_device_tree(const void *fdt, +void unflatten_device_tree(const void *fdt, struct dt_device_node **mynodes) { unsigned long start, mem, size; @@ -2118,7 +2118,7 @@ dt_find_interrupt_controller(const struct dt_device_match *matches)void __init dt_unflatten_host_device_tree(void){ - __unflatten_device_tree(device_tree_flattened, &dt_host); + unflatten_device_tree(device_tree_flattened, &dt_host); dt_alias_scan(); }diff --git a/xen/include/asm-arm/domain_build.h b/xen/include/asm-arm/domain_build.hindex 34ceddc..17449b1 100644 --- a/xen/include/asm-arm/domain_build.h +++ b/xen/include/asm-arm/domain_build.h @@ -4,10 +4,20 @@ #include <xen/sched.h> #include <asm/kernel.h>+struct map_range_data+{ + struct domain *d; + p2m_type_t p2mt; +}; + int map_irq_to_domain(struct domain *d, unsigned int irq, bool need_mapping, const char *devname); int make_chosen_node(const struct kernel_info *kinfo); void evtchn_allocate(struct domain *d); +int handle_device_interrupts(struct domain *d, struct dt_device_node *dev, + bool need_mapping); +int map_range_to_domain(const struct dt_device_node *dev, u64 addr, u64 len, + void *data);#ifndef CONFIG_ACPIstatic inline int prepare_acpi(struct domain *d, struct kernel_info *kinfo) diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h index b02696b..a4e98a7 100644 --- a/xen/include/xen/device_tree.h +++ b/xen/include/xen/device_tree.h @@ -177,6 +177,11 @@ int device_tree_for_each_node(const void *fdt, int node, */ void dt_unflatten_host_device_tree(void);+/*+ * unflatten any device tree. + */ +void unflatten_device_tree(const void *fdt, struct dt_device_node **mynodes); + /** * IRQ translation callback * TODO: For the moment we assume that we only have ONE -- Julien Grall
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |