[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v6 1/5] x86/p2m: pass the p2m to write_p2m_entry handlers



Gah -- sorry, Juergen, I pushed this series to staging erroneously; it
wasn't targeted for 4.12 and doesn't have your release ack.

Should I revert it?

 -George

On Wed, Feb 27, 2019 at 11:10 AM Roger Pau Monne <roger.pau@xxxxxxxxxx> wrote:
>
> Current callers pass the p2m to paging_write_p2m_entry, but the
> implementation specific handlers of the write_p2m_entry hook instead
> of a p2m get a domain struct due to the handling done in
> paging_write_p2m_entry.
>
> Change the code so that the implementations of write_p2m_entry take a
> p2m instead of a domain.
>
> This is a non-functional change, but will be used by follow up
> patches.
>
> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx>
> Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx>
> ---
> Cc: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
> Cc: Jan Beulich <jbeulich@xxxxxxxx>
> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> Cc: Wei Liu <wei.liu2@xxxxxxxxxx>
> Cc: Tim Deegan <tim@xxxxxxx>
> ---
> Changes since v4:
>  - New in this version.
> ---
>  xen/arch/x86/mm/hap/hap.c        | 3 ++-
>  xen/arch/x86/mm/paging.c         | 2 +-
>  xen/arch/x86/mm/shadow/common.c  | 4 +++-
>  xen/arch/x86/mm/shadow/none.c    | 2 +-
>  xen/arch/x86/mm/shadow/private.h | 2 +-
>  xen/include/asm-x86/paging.h     | 3 ++-
>  6 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/xen/arch/x86/mm/hap/hap.c b/xen/arch/x86/mm/hap/hap.c
> index 3d651b94c3..28fe48d158 100644
> --- a/xen/arch/x86/mm/hap/hap.c
> +++ b/xen/arch/x86/mm/hap/hap.c
> @@ -709,9 +709,10 @@ static void hap_update_paging_modes(struct vcpu *v)
>  }
>
>  static void
> -hap_write_p2m_entry(struct domain *d, unsigned long gfn, l1_pgentry_t *p,
> +hap_write_p2m_entry(struct p2m_domain *p2m, unsigned long gfn, l1_pgentry_t 
> *p,
>                      l1_pgentry_t new, unsigned int level)
>  {
> +    struct domain *d = p2m->domain;
>      uint32_t old_flags;
>      bool_t flush_nestedp2m = 0;
>
> diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c
> index d5836eb688..e6ed3006fe 100644
> --- a/xen/arch/x86/mm/paging.c
> +++ b/xen/arch/x86/mm/paging.c
> @@ -941,7 +941,7 @@ void paging_write_p2m_entry(struct p2m_domain *p2m, 
> unsigned long gfn,
>      if ( v->domain != d )
>          v = d->vcpu ? d->vcpu[0] : NULL;
>      if ( likely(v && paging_mode_enabled(d) && paging_get_hostmode(v) != 
> NULL) )
> -        paging_get_hostmode(v)->write_p2m_entry(d, gfn, p, new, level);
> +        paging_get_hostmode(v)->write_p2m_entry(p2m, gfn, p, new, level);
>      else
>          safe_write_pte(p, new);
>  }
> diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c
> index 07840ff727..6c67ef4996 100644
> --- a/xen/arch/x86/mm/shadow/common.c
> +++ b/xen/arch/x86/mm/shadow/common.c
> @@ -3177,10 +3177,12 @@ static void sh_unshadow_for_p2m_change(struct domain 
> *d, unsigned long gfn,
>  }
>
>  void
> -shadow_write_p2m_entry(struct domain *d, unsigned long gfn,
> +shadow_write_p2m_entry(struct p2m_domain *p2m, unsigned long gfn,
>                         l1_pgentry_t *p, l1_pgentry_t new,
>                         unsigned int level)
>  {
> +    struct domain *d = p2m->domain;
> +
>      paging_lock(d);
>
>      /* If there are any shadows, update them.  But if shadow_teardown()
> diff --git a/xen/arch/x86/mm/shadow/none.c b/xen/arch/x86/mm/shadow/none.c
> index 4de645a433..316002771d 100644
> --- a/xen/arch/x86/mm/shadow/none.c
> +++ b/xen/arch/x86/mm/shadow/none.c
> @@ -60,7 +60,7 @@ static void _update_paging_modes(struct vcpu *v)
>      ASSERT_UNREACHABLE();
>  }
>
> -static void _write_p2m_entry(struct domain *d, unsigned long gfn,
> +static void _write_p2m_entry(struct p2m_domain *p2m, unsigned long gfn,
>                               l1_pgentry_t *p, l1_pgentry_t new,
>                               unsigned int level)
>  {
> diff --git a/xen/arch/x86/mm/shadow/private.h 
> b/xen/arch/x86/mm/shadow/private.h
> index e8ed7ac714..0aaed1edfc 100644
> --- a/xen/arch/x86/mm/shadow/private.h
> +++ b/xen/arch/x86/mm/shadow/private.h
> @@ -372,7 +372,7 @@ extern int sh_remove_write_access(struct domain *d, mfn_t 
> readonly_mfn,
>                                    unsigned long fault_addr);
>
>  /* Functions that atomically write PT/P2M entries and update state */
> -void shadow_write_p2m_entry(struct domain *d, unsigned long gfn,
> +void shadow_write_p2m_entry(struct p2m_domain *p2m, unsigned long gfn,
>                              l1_pgentry_t *p, l1_pgentry_t new,
>                              unsigned int level);
>
> diff --git a/xen/include/asm-x86/paging.h b/xen/include/asm-x86/paging.h
> index fdcc22844b..7ec09d7b11 100644
> --- a/xen/include/asm-x86/paging.h
> +++ b/xen/include/asm-x86/paging.h
> @@ -124,7 +124,8 @@ struct paging_mode {
>      void          (*update_cr3            )(struct vcpu *v, int do_locking,
>                                              bool noflush);
>      void          (*update_paging_modes   )(struct vcpu *v);
> -    void          (*write_p2m_entry       )(struct domain *d, unsigned long 
> gfn,
> +    void          (*write_p2m_entry       )(struct p2m_domain *p2m,
> +                                            unsigned long gfn,
>                                              l1_pgentry_t *p, l1_pgentry_t 
> new,
>                                              unsigned int level);
>
> --
> 2.17.2 (Apple Git-113)
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxxx
> https://lists.xenproject.org/mailman/listinfo/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.