Re: [Xen-devel] [PATCH 12/17] xen/xsm: remove .xsm_initcall.init section
On 21/06/16 16:41, Julien Grall wrote: > Hello, > > On 21/06/16 16:21, Andrew Cooper wrote: >> On 20/06/16 15:04, Daniel De Graaf wrote: >>> Since FLASK is the only implementation of XSM hooks in Xen, using an >>> iterated initcall dispatch for setup is overly complex. Change this to >>> a direct function call to a globally visible function; if additional >>> XSM >>> hooks are added in the future, a switching mechanism will be needed >>> regardless, and that can be placed in xsm_core.c. >>> >>> Signed-off-by: Daniel De Graaf>> >> Reviewed-by: Andrew Cooper >> >> (CC'ing ARM maintainers) > > For the ARM bits: > > Acked-by: Julien Grall And committed (as this patch unblocks one of my series). I will leave the remainder of the series until a decision is taken about patch 13. ~Andrew ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Re: [Xen-devel] [PATCH 12/17] xen/xsm: remove .xsm_initcall.init section
Hello, On 21/06/16 16:21, Andrew Cooper wrote: On 20/06/16 15:04, Daniel De Graaf wrote: Since FLASK is the only implementation of XSM hooks in Xen, using an iterated initcall dispatch for setup is overly complex. Change this to a direct function call to a globally visible function; if additional XSM hooks are added in the future, a switching mechanism will be needed regardless, and that can be placed in xsm_core.c. Signed-off-by: Daniel De GraafReviewed-by: Andrew Cooper (CC'ing ARM maintainers) For the ARM bits: Acked-by: Julien Grall Regards, -- Julien Grall ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Re: [Xen-devel] [PATCH 12/17] xen/xsm: remove .xsm_initcall.init section
On 20/06/16 15:04, Daniel De Graaf wrote: > Since FLASK is the only implementation of XSM hooks in Xen, using an > iterated initcall dispatch for setup is overly complex. Change this to > a direct function call to a globally visible function; if additional XSM > hooks are added in the future, a switching mechanism will be needed > regardless, and that can be placed in xsm_core.c. > > Signed-off-by: Daniel De GraafReviewed-by: Andrew Cooper (CC'ing ARM maintainers) > --- > xen/arch/arm/xen.lds.S | 5 - > xen/arch/x86/xen.lds.S | 5 - > xen/include/xsm/xsm.h | 16 > xen/xsm/flask/hooks.c | 4 +--- > xen/xsm/xsm_core.c | 13 + > 5 files changed, 10 insertions(+), 33 deletions(-) > > diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S > index 76982b2..8320381 100644 > --- a/xen/arch/arm/xen.lds.S > +++ b/xen/arch/arm/xen.lds.S > @@ -162,11 +162,6 @@ SECTIONS > *(.initcall1.init) > __initcall_end = .; >} :text > - .xsm_initcall.init : { > - __xsm_initcall_start = .; > - *(.xsm_initcall.init) > - __xsm_initcall_end = .; > - } :text >__init_end_efi = .; >. = ALIGN(STACK_SIZE); >__init_end = .; > diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S > index a43b29d..dcbb8fe 100644 > --- a/xen/arch/x86/xen.lds.S > +++ b/xen/arch/x86/xen.lds.S > @@ -190,11 +190,6 @@ SECTIONS > *(.initcall1.init) > __initcall_end = .; >} :text > - .xsm_initcall.init : { > - __xsm_initcall_start = .; > - *(.xsm_initcall.init) > - __xsm_initcall_end = .; > - } :text >. = ALIGN(PAGE_SIZE); >__init_end = .; > > diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h > index 8ed8ee5..0d525ec 100644 > --- a/xen/include/xsm/xsm.h > +++ b/xen/include/xsm/xsm.h > @@ -46,14 +46,6 @@ typedef enum xsm_default xsm_default_t; > extern char *policy_buffer; > extern u32 policy_size; > > -typedef void (*xsm_initcall_t)(void); > - > -extern xsm_initcall_t __xsm_initcall_start[], __xsm_initcall_end[]; > - > -#define xsm_initcall(fn) \ > -static xsm_initcall_t __initcall_##fn \ > -__used_section(".xsm_initcall.init") = fn > - > struct xsm_operations { > void (*security_domaininfo) (struct domain *d, > struct xen_domctl_getdomaininfo > *info); > @@ -763,6 +755,14 @@ extern int unregister_xsm(struct xsm_operations *ops); > extern struct xsm_operations dummy_xsm_ops; > extern void xsm_fixup_ops(struct xsm_operations *ops); > > +#ifdef CONFIG_FLASK > +extern void flask_init(void); > +#else > +static inline void flask_init(void) > +{ > +} > +#endif > + > #else /* CONFIG_XSM */ > > #include > diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c > index 543406b..d632b0e 100644 > --- a/xen/xsm/flask/hooks.c > +++ b/xen/xsm/flask/hooks.c > @@ -1817,7 +1817,7 @@ static struct xsm_operations flask_ops = { > .xen_version = flask_xen_version, > }; > > -static __init void flask_init(void) > +__init void flask_init(void) > { > int ret = -ENOENT; > > @@ -1860,8 +1860,6 @@ static __init void flask_init(void) > printk(XENLOG_INFO "Flask: Starting in permissive mode.\n"); > } > > -xsm_initcall(flask_init); > - > /* > * Local variables: > * mode: C > diff --git a/xen/xsm/xsm_core.c b/xen/xsm/xsm_core.c > index 634ec98..3487742 100644 > --- a/xen/xsm/xsm_core.c > +++ b/xen/xsm/xsm_core.c > @@ -36,17 +36,6 @@ static inline int verify(struct xsm_operations *ops) > return 0; > } > > -static void __init do_xsm_initcalls(void) > -{ > -xsm_initcall_t *call; > -call = __xsm_initcall_start; > -while ( call < __xsm_initcall_end ) > -{ > -(*call) (); > -call++; > -} > -} > - > static int __init xsm_core_init(void) > { > if ( verify(_xsm_ops) ) > @@ -57,7 +46,7 @@ static int __init xsm_core_init(void) > } > > xsm_ops = _xsm_ops; > -do_xsm_initcalls(); > +flask_init(); > > return 0; > } ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
[Xen-devel] [PATCH 12/17] xen/xsm: remove .xsm_initcall.init section
Since FLASK is the only implementation of XSM hooks in Xen, using an iterated initcall dispatch for setup is overly complex. Change this to a direct function call to a globally visible function; if additional XSM hooks are added in the future, a switching mechanism will be needed regardless, and that can be placed in xsm_core.c. Signed-off-by: Daniel De Graaf--- xen/arch/arm/xen.lds.S | 5 - xen/arch/x86/xen.lds.S | 5 - xen/include/xsm/xsm.h | 16 xen/xsm/flask/hooks.c | 4 +--- xen/xsm/xsm_core.c | 13 + 5 files changed, 10 insertions(+), 33 deletions(-) diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S index 76982b2..8320381 100644 --- a/xen/arch/arm/xen.lds.S +++ b/xen/arch/arm/xen.lds.S @@ -162,11 +162,6 @@ SECTIONS *(.initcall1.init) __initcall_end = .; } :text - .xsm_initcall.init : { - __xsm_initcall_start = .; - *(.xsm_initcall.init) - __xsm_initcall_end = .; - } :text __init_end_efi = .; . = ALIGN(STACK_SIZE); __init_end = .; diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S index a43b29d..dcbb8fe 100644 --- a/xen/arch/x86/xen.lds.S +++ b/xen/arch/x86/xen.lds.S @@ -190,11 +190,6 @@ SECTIONS *(.initcall1.init) __initcall_end = .; } :text - .xsm_initcall.init : { - __xsm_initcall_start = .; - *(.xsm_initcall.init) - __xsm_initcall_end = .; - } :text . = ALIGN(PAGE_SIZE); __init_end = .; diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h index 8ed8ee5..0d525ec 100644 --- a/xen/include/xsm/xsm.h +++ b/xen/include/xsm/xsm.h @@ -46,14 +46,6 @@ typedef enum xsm_default xsm_default_t; extern char *policy_buffer; extern u32 policy_size; -typedef void (*xsm_initcall_t)(void); - -extern xsm_initcall_t __xsm_initcall_start[], __xsm_initcall_end[]; - -#define xsm_initcall(fn) \ -static xsm_initcall_t __initcall_##fn \ -__used_section(".xsm_initcall.init") = fn - struct xsm_operations { void (*security_domaininfo) (struct domain *d, struct xen_domctl_getdomaininfo *info); @@ -763,6 +755,14 @@ extern int unregister_xsm(struct xsm_operations *ops); extern struct xsm_operations dummy_xsm_ops; extern void xsm_fixup_ops(struct xsm_operations *ops); +#ifdef CONFIG_FLASK +extern void flask_init(void); +#else +static inline void flask_init(void) +{ +} +#endif + #else /* CONFIG_XSM */ #include diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c index 543406b..d632b0e 100644 --- a/xen/xsm/flask/hooks.c +++ b/xen/xsm/flask/hooks.c @@ -1817,7 +1817,7 @@ static struct xsm_operations flask_ops = { .xen_version = flask_xen_version, }; -static __init void flask_init(void) +__init void flask_init(void) { int ret = -ENOENT; @@ -1860,8 +1860,6 @@ static __init void flask_init(void) printk(XENLOG_INFO "Flask: Starting in permissive mode.\n"); } -xsm_initcall(flask_init); - /* * Local variables: * mode: C diff --git a/xen/xsm/xsm_core.c b/xen/xsm/xsm_core.c index 634ec98..3487742 100644 --- a/xen/xsm/xsm_core.c +++ b/xen/xsm/xsm_core.c @@ -36,17 +36,6 @@ static inline int verify(struct xsm_operations *ops) return 0; } -static void __init do_xsm_initcalls(void) -{ -xsm_initcall_t *call; -call = __xsm_initcall_start; -while ( call < __xsm_initcall_end ) -{ -(*call) (); -call++; -} -} - static int __init xsm_core_init(void) { if ( verify(_xsm_ops) ) @@ -57,7 +46,7 @@ static int __init xsm_core_init(void) } xsm_ops = _xsm_ops; -do_xsm_initcalls(); +flask_init(); return 0; } -- 2.7.4 ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel