|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH] x86/shadow: Reposition sh_remove_write_access_from_sl1p()
> -----Original Message-----
> From: Xen-devel <xen-devel-bounces@xxxxxxxxxxxxxxxxxxxx> On Behalf Of Andrew
> Cooper
> Sent: 21 May 2020 10:04
> To: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>; Tim Deegan <tim@xxxxxxx>; Wei
> Liu <wl@xxxxxxx>; Jan
> Beulich <JBeulich@xxxxxxxx>; Roger Pau Monné <roger.pau@xxxxxxxxxx>
> Subject: [PATCH] x86/shadow: Reposition sh_remove_write_access_from_sl1p()
>
> When compiling with SHOPT_OUT_OF_SYNC disabled, the build fails with:
>
> common.c:41:12: error: ‘sh_remove_write_access_from_sl1p’ declared ‘static’
> but never defined [-
> Werror=unused-function]
> static int sh_remove_write_access_from_sl1p(struct domain *d, mfn_t gmfn,
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> due to an unguarded forward declaration.
Is this, perhaps, an argument for making SHADOW_OPTIMIZATIONS tunable via
Kconfig so that randconfig could catch things like this?
Paul
>
> It turns out there is no need to forward declare
> sh_remove_write_access_from_sl1p() to begin with, so move it to just ahead of
> its first users, which is within a larger #ifdef'd SHOPT_OUT_OF_SYNC block.
>
> Fix up for style while moving it. No functional change.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> CC: Wei Liu <wl@xxxxxxx>
> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> CC: Tim Deegan <tim@xxxxxxx>
> ---
> xen/arch/x86/mm/shadow/common.c | 56
> ++++++++++++++++++-----------------------
> 1 file changed, 25 insertions(+), 31 deletions(-)
>
> diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c
> index 0ac3f880e1..6dff240e97 100644
> --- a/xen/arch/x86/mm/shadow/common.c
> +++ b/xen/arch/x86/mm/shadow/common.c
> @@ -38,9 +38,6 @@
> #include <xen/numa.h>
> #include "private.h"
>
> -static int sh_remove_write_access_from_sl1p(struct domain *d, mfn_t gmfn,
> - mfn_t smfn, unsigned long
> offset);
> -
> DEFINE_PER_CPU(uint32_t,trace_shadow_path_flags);
>
> static int sh_enable_log_dirty(struct domain *, bool log_global);
> @@ -252,6 +249,31 @@ static inline void _sh_resync_l1(struct vcpu *v, mfn_t
> gmfn, mfn_t snpmfn)
> SHADOW_INTERNAL_NAME(sh_resync_l1, 4)(v, gmfn, snpmfn);
> }
>
> +static int sh_remove_write_access_from_sl1p(struct domain *d, mfn_t gmfn,
> + mfn_t smfn, unsigned long off)
> +{
> + struct page_info *sp = mfn_to_page(smfn);
> +
> + ASSERT(mfn_valid(smfn));
> + ASSERT(mfn_valid(gmfn));
> +
> + if ( sp->u.sh.type == SH_type_l1_32_shadow ||
> + sp->u.sh.type == SH_type_fl1_32_shadow )
> + return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p, 2)
> + (d, gmfn, smfn, off);
> +
> + if ( sp->u.sh.type == SH_type_l1_pae_shadow ||
> + sp->u.sh.type == SH_type_fl1_pae_shadow )
> + return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p, 3)
> + (d, gmfn, smfn, off);
> +
> + if ( sp->u.sh.type == SH_type_l1_64_shadow ||
> + sp->u.sh.type == SH_type_fl1_64_shadow )
> + return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p, 4)
> + (d, gmfn, smfn, off);
> +
> + return 0;
> +}
>
> /*
> * Fixup arrays: We limit the maximum number of writable mappings to
> @@ -2001,34 +2023,6 @@ int sh_remove_write_access(struct domain *d, mfn_t
> gmfn,
> }
> #endif /* CONFIG_HVM */
>
> -#if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC)
> -static int sh_remove_write_access_from_sl1p(struct domain *d, mfn_t gmfn,
> - mfn_t smfn, unsigned long off)
> -{
> - struct page_info *sp = mfn_to_page(smfn);
> -
> - ASSERT(mfn_valid(smfn));
> - ASSERT(mfn_valid(gmfn));
> -
> - if ( sp->u.sh.type == SH_type_l1_32_shadow
> - || sp->u.sh.type == SH_type_fl1_32_shadow )
> - {
> - return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p,2)
> - (d, gmfn, smfn, off);
> - }
> - else if ( sp->u.sh.type == SH_type_l1_pae_shadow
> - || sp->u.sh.type == SH_type_fl1_pae_shadow )
> - return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p,3)
> - (d, gmfn, smfn, off);
> - else if ( sp->u.sh.type == SH_type_l1_64_shadow
> - || sp->u.sh.type == SH_type_fl1_64_shadow )
> - return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p,4)
> - (d, gmfn, smfn, off);
> -
> - return 0;
> -}
> -#endif
> -
> /**************************************************************************/
> /* Remove all mappings of a guest frame from the shadow tables.
> * Returns non-zero if we need to flush TLBs. */
> --
> 2.11.0
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |