[PATCH v2 03/14] x86/mm: get_page_from_l1e() is PV-or-shadow-only
Jan Beulich <[email protected]>
| Newsgroups | org.xenproject.lists.xen-devel |
|---|---|
| Message-ID | <[email protected]> |
Otherwise the function is unreachable, violating MISRA C:2012 rule 2.1. With the function compiled out, its dedicated XSM hook also becomes unreachable, so it is similarly guarded. Signed-off-by: Jan Beulich <[email protected]> Acked-by: Daniel P. Smith <[email protected]> --- It feels suspicious that the .priv_mapping() check is used for HVM guests in shadow mode, but not for ones in HAP mode. --- v2: Also conditionalize the declaration. --- a/xen/arch/x86/include/asm/mm.h +++ b/xen/arch/x86/include/asm/mm.h @@ -404,10 +404,13 @@ int get_page_type(struct page_info *pag int put_page_type_preemptible(struct page_info *page); int get_page_type_preemptible(struct page_info *page, unsigned long type); int put_old_guest_table(struct vcpu *v); -int get_page_from_l1e( - l1_pgentry_t l1e, struct domain *l1e_owner, struct domain *pg_owner); void put_page_from_l1e(l1_pgentry_t l1e, struct domain *l1e_owner); +#if defined(CONFIG_PV) || defined(CONFIG_SHADOW_PAGING) +int get_page_from_l1e( + l1_pgentry_t l1e, struct domain *l1e_owner, struct domain *pg_owner); +#endif + static inline struct page_info *get_page_from_mfn(mfn_t mfn, struct domain *d) { struct page_info *page = mfn_to_page(mfn); --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -836,6 +836,8 @@ static int cf_check print_mmio_emul_rang } #endif +#if defined(CONFIG_PV) || defined(CONFIG_SHADOW_PAGING) + /* * get_page_from_l1e returns: * 0 => success (page not present also counts as such) @@ -1037,6 +1039,8 @@ get_page_from_l1e( return -EBUSY; } +#endif /* CONFIG_PV || CONFIG_SHADOW_PAGING */ + /* * The following flags are used to specify behavior of various get and * put commands. The first is also stored in page->partial_flags to --- a/xen/include/xsm/dummy.h +++ b/xen/include/xsm/dummy.h @@ -701,12 +701,14 @@ static XSM_INLINE int xsm_update_va_mapp #endif /* CONFIG_PV */ +#if defined(CONFIG_PV) || defined(CONFIG_SHADOW_PAGING) static XSM_INLINE int xsm_priv_mapping( XSM_DEFAULT_ARG struct domain *d, struct domain *t) { XSM_ASSERT_ACTION(XSM_TARGET); return xsm_default_action(action, d, t); } +#endif static XSM_INLINE int xsm_ioport_permission( XSM_DEFAULT_ARG struct domain *d, uint32_t s, uint32_t e, bool allow) --- a/xen/include/xsm/hooks.h +++ b/xen/include/xsm/hooks.h @@ -141,7 +141,9 @@ XSM_HOOK(int, mmu_update, struct domain XSM_HOOK(int, mmuext_op, struct domain *, struct domain *) XSM_HOOK(int, update_va_mapping, struct domain *, struct domain *, l1_pgentry_t) #endif /* CONFIG_PV */ +#if defined(CONFIG_PV) || defined(CONFIG_SHADOW_PAGING) XSM_HOOK(int, priv_mapping, struct domain *, struct domain *) +#endif XSM_HOOK(int, ioport_permission, struct domain *, uint32_t, uint32_t, bool) XSM_HOOK(int, ioport_mapping, struct domain *, uint32_t, uint32_t, bool) XSM_HOOK(int, pmu_op, struct domain *, unsigned int) --- a/xen/xsm/flask/hooks.c +++ b/xen/xsm/flask/hooks.c @@ -1829,10 +1829,12 @@ static int cf_check flask_update_va_mapp #endif /* CONFIG_PV */ +#if defined(CONFIG_PV) || defined(CONFIG_SHADOW_PAGING) static int cf_check flask_priv_mapping(struct domain *d, struct domain *t) { return domain_has_perm(d, t, SECCLASS_MMU, MMU__TARGET_HACK); } +#endif static int cf_check flask_pmu_op(struct domain *d, unsigned int op) {