Re: [Xen-devel] [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use typesafe gfn

2018-11-12 Thread Julien Grall

Hi,

On 11/12/18 4:58 PM, Andrii Anisov wrote:

What's wrong with including clean-up patch in a series adding a feature?


I do not mean it is wrong.
Just assuming that introducing a new feature and cleaning up a code
might be different processes with a different review period.


We don't have different process nor different review period between 
clean-up and new feature.


I tend to do clean-up when writing new features... See my cacheflush 
series as well. If the clean-up is small then I will append/prepend to 
the feature series.


This patch modify a function that was called by this patch and therefore 
depends on the rest of the series. This was written with this series so 
it makes sense to me to do it together as it dictates the order I would 
like the patches applied and simplify tracking (I have many series in 
flight).


Cheers,

--
Julien Grall

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

Re: [Xen-devel] [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use typesafe gfn

2018-11-12 Thread Andrii Anisov
> What's wrong with including clean-up patch in a series adding a feature?

I do not mean it is wrong.
Just assuming that introducing a new feature and cleaning up a code
might be different processes with a different review period.

Sincerely,
Andrii Anisov.

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

Re: [Xen-devel] [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use typesafe gfn

2018-11-12 Thread Julien Grall



On 11/12/18 4:49 PM, Andrii Anisov wrote:

Hello Julien,


Hi,



I'm just wondering if this patch really belongs to xentrace series.
It rather looks like a separate cleanup patch.


What's wrong with including clean-up patch in a series adding a feature?

Cheers,

--
Julien Grall

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

Re: [Xen-devel] [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use typesafe gfn

2018-11-12 Thread Andrii Anisov
Hello Julien,

I'm just wondering if this patch really belongs to xentrace series.
It rather looks like a separate cleanup patch.

Sincerely,
Andrii Anisov.


вт, 6 лист. 2018 о 21:16 Julien Grall  пише:

> No functional change intended.
>
> Only reasonable clean-ups are done in this patch. The rest will use _gfn
> for the time being.
>
> Signed-off-by: Julien Grall 
> ---
>  xen/arch/arm/guestcopy.c |  2 +-
>  xen/arch/arm/mm.c|  2 +-
>  xen/arch/x86/cpu/vpmu.c  |  2 +-
>  xen/arch/x86/domain.c| 12 ++--
>  xen/arch/x86/domctl.c|  6 +++---
>  xen/arch/x86/hvm/dm.c|  2 +-
>  xen/arch/x86/hvm/domain.c|  2 +-
>  xen/arch/x86/hvm/hvm.c   |  9 +
>  xen/arch/x86/hvm/svm/svm.c   |  8 
>  xen/arch/x86/hvm/viridian/viridian.c | 24 
>  xen/arch/x86/hvm/vmx/vmx.c   |  4 ++--
>  xen/arch/x86/hvm/vmx/vvmx.c  | 12 ++--
>  xen/arch/x86/mm.c| 24 ++--
>  xen/arch/x86/mm/p2m.c|  2 +-
>  xen/arch/x86/mm/shadow/hvm.c |  6 +++---
>  xen/arch/x86/physdev.c   |  3 ++-
>  xen/arch/x86/pv/descriptor-tables.c  |  5 ++---
>  xen/arch/x86/pv/emul-priv-op.c   |  6 +++---
>  xen/arch/x86/pv/mm.c |  2 +-
>  xen/arch/x86/traps.c | 11 ++-
>  xen/common/domain.c  |  2 +-
>  xen/common/event_fifo.c  | 12 ++--
>  xen/common/memory.c  |  4 ++--
>  xen/common/tmem_xen.c|  2 +-
>  xen/include/asm-arm/p2m.h|  6 +++---
>  xen/include/asm-x86/p2m.h| 11 +++
>  26 files changed, 95 insertions(+), 86 deletions(-)
>
> diff --git a/xen/arch/arm/guestcopy.c b/xen/arch/arm/guestcopy.c
> index 7a0f3e9d5f..55892062bb 100644
> --- a/xen/arch/arm/guestcopy.c
> +++ b/xen/arch/arm/guestcopy.c
> @@ -37,7 +37,7 @@ static struct page_info *translate_get_page(copy_info_t
> info, uint64_t addr,
>  return get_page_from_gva(info.gva.v, addr,
>   write ? GV2M_WRITE : GV2M_READ);
>
> -page = get_page_from_gfn(info.gpa.d, paddr_to_pfn(addr), &p2mt,
> P2M_ALLOC);
> +page = get_page_from_gfn(info.gpa.d, gaddr_to_gfn(addr), &p2mt,
> P2M_ALLOC);
>
>  if ( !page )
>  return NULL;
> diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
> index 72d0285768..88711096ef 100644
> --- a/xen/arch/arm/mm.c
> +++ b/xen/arch/arm/mm.c
> @@ -1268,7 +1268,7 @@ int xenmem_add_to_physmap_one(
>
>  /* Take reference to the foreign domain page.
>   * Reference will be released in XENMEM_remove_from_physmap */
> -page = get_page_from_gfn(od, idx, &p2mt, P2M_ALLOC);
> +page = get_page_from_gfn(od, _gfn(idx), &p2mt, P2M_ALLOC);
>  if ( !page )
>  {
>  put_pg_owner(od);
> diff --git a/xen/arch/x86/cpu/vpmu.c b/xen/arch/x86/cpu/vpmu.c
> index 8a4f753eae..4d8f153031 100644
> --- a/xen/arch/x86/cpu/vpmu.c
> +++ b/xen/arch/x86/cpu/vpmu.c
> @@ -607,7 +607,7 @@ static int pvpmu_init(struct domain *d,
> xen_pmu_params_t *params)
>  struct vcpu *v;
>  struct vpmu_struct *vpmu;
>  struct page_info *page;
> -uint64_t gfn = params->val;
> +gfn_t gfn = _gfn(params->val);
>
>  if ( (params->vcpu >= d->max_vcpus) || (d->vcpu[params->vcpu] ==
> NULL) )
>  return -EINVAL;
> diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
> index f6fe954313..c5cce4b38d 100644
> --- a/xen/arch/x86/domain.c
> +++ b/xen/arch/x86/domain.c
> @@ -797,7 +797,7 @@ int arch_set_info_guest(
>  unsigned long flags;
>  bool compat;
>  #ifdef CONFIG_PV
> -unsigned long cr3_gfn;
> +gfn_t cr3_gfn;
>  struct page_info *cr3_page;
>  unsigned long cr4;
>  int rc = 0;
> @@ -1061,9 +1061,9 @@ int arch_set_info_guest(
>  set_bit(_VPF_in_reset, &v->pause_flags);
>
>  if ( !compat )
> -cr3_gfn = xen_cr3_to_pfn(c.nat->ctrlreg[3]);
> +cr3_gfn = _gfn(xen_cr3_to_pfn(c.nat->ctrlreg[3]));
>  else
> -cr3_gfn = compat_cr3_to_pfn(c.cmp->ctrlreg[3]);
> +cr3_gfn = _gfn(compat_cr3_to_pfn(c.cmp->ctrlreg[3]));
>  cr3_page = get_page_from_gfn(d, cr3_gfn, NULL, P2M_ALLOC);
>
>  if ( !cr3_page )
> @@ -1092,7 +1092,7 @@ int arch_set_info_guest(
>  case 0:
>  if ( !compat && !VM_ASSIST(d, m2p_strict) &&
>   !paging_mode_refcounts(d) )
> -fill_ro_mpt(_mfn(cr3_gfn));
> +fill_ro_mpt(_mfn(gfn_x(cr3_gfn)));
>  break;
>  default:
>  if ( cr3_page == current->arch.old_guest_table )
> @@ -1107,7 +1107,7 @@ int arch_set_info_guest(
>  v->arch.guest_table = pagetable_from_page(cr3_page);
>  if ( c.nat->ctrlreg[1] )
>  {
> -cr3_gfn = xen_cr3_to_pfn(c.nat->ctrlreg[1]);
> +cr3_gfn = _gfn(xen_cr3

Re: [Xen-devel] [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use typesafe gfn

2018-11-07 Thread Andrew Cooper
On 07/11/18 08:57, Paul Durrant wrote:
>>
>>>  static inline struct page_info *get_page_from_gfn(
>>> -struct domain *d, unsigned long gfn, p2m_type_t *t, p2m_query_t q)
>>> +struct domain *d, gfn_t gfn, p2m_type_t *t, p2m_query_t q)
>>>  {
>>>  struct page_info *page;
>>> +mfn_t mfn;
>>>
>>>  if ( paging_mode_translate(d) )
>>> -return p2m_get_page_from_gfn(p2m_get_hostp2m(d), _gfn(gfn), t,
>> NULL, q);
>>> +return p2m_get_page_from_gfn(p2m_get_hostp2m(d), gfn, t, NULL,
>> q);
>>>  /* Non-translated guests see 1-1 RAM / MMIO mappings everywhere */
>>>  if ( t )
>>>  *t = likely(d != dom_io) ? p2m_ram_rw : p2m_mmio_direct;
>>> -page = mfn_to_page(_mfn(gfn));
>>> -return mfn_valid(_mfn(gfn)) && get_page(page, d) ? page : NULL;
>>> +
>>> +mfn = _mfn(gfn_x(gfn));
>>> +page = mfn_to_page(mfn);
>>> +return mfn_valid(mfn) && get_page(page, d) ? page : NULL;
>> This looks like it would be cleaner by not splitting mfn out into a
>> separate variable.
>>
>> page = mfn_to_page(_mfn(gfn_x(gfn)));
>>
>> return mfn_valid(mfn) && get_page(page, d) ? page : NULL;
> ^^ er... how's that mfn_valid() going to work? You'd need 
> mfn_valid(page_to_mfn(pahge)), or somesuch.

Oops - I'm blind.  Sorry for the noise.

~Andrew

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

Re: [Xen-devel] [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use typesafe gfn

2018-11-07 Thread Julien Grall

Hi Andrew,

On 06/11/2018 20:11, Andrew Cooper wrote:

This looks like it would be cleaner by not splitting mfn out into a
separate variable.

page = mfn_to_page(_mfn(gfn_x(gfn)));

return mfn_valid(mfn) && get_page(page, d) ? page : NULL;

The only reason this looks odd is because of the mfn => gfn equality,
but we are just beside a comment explaining that we are non-translated.


I introduced the mfn variable to avoid duplicating _mfn(gfn_x(gfn)) in the two 
places where gfn was used.


I am happy to duplicated if you prefer.

Cheers,

--
Julien Grall

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

Re: [Xen-devel] [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use typesafe gfn

2018-11-07 Thread Julien Grall

Hi Paul,

On 07/11/2018 09:24, Paul Durrant wrote:

-Original Message-
From: Julien Grall [mailto:julien.gr...@arm.com]
Sent: 06 November 2018 19:15
To: sstabell...@kernel.org; xen-devel@lists.xenproject.org
Cc: Julien Grall ; Andrew Cooper
; George Dunlap ; Ian
Jackson ; Jan Beulich ; Konrad
Rzeszutek Wilk ; Tim (Xen.org) ; Wei
Liu ; Boris Ostrovsky ;
Suravee Suthikulpanit ; Brian Woods
; Paul Durrant ; Jun
Nakajima ; Kevin Tian ;
Julien Grall 
Subject: [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use
typesafe gfn

No functional change intended.

Only reasonable clean-ups are done in this patch. The rest will use _gfn
for the time being.

Signed-off-by: Julien Grall 
---
  xen/arch/arm/guestcopy.c |  2 +-
  xen/arch/arm/mm.c|  2 +-
  xen/arch/x86/cpu/vpmu.c  |  2 +-
  xen/arch/x86/domain.c| 12 ++--
  xen/arch/x86/domctl.c|  6 +++---
  xen/arch/x86/hvm/dm.c|  2 +-
  xen/arch/x86/hvm/domain.c|  2 +-
  xen/arch/x86/hvm/hvm.c   |  9 +
  xen/arch/x86/hvm/svm/svm.c   |  8 
  xen/arch/x86/hvm/viridian/viridian.c | 24 
  xen/arch/x86/hvm/vmx/vmx.c   |  4 ++--
  xen/arch/x86/hvm/vmx/vvmx.c  | 12 ++--
  xen/arch/x86/mm.c| 24 ++--
  xen/arch/x86/mm/p2m.c|  2 +-
  xen/arch/x86/mm/shadow/hvm.c |  6 +++---
  xen/arch/x86/physdev.c   |  3 ++-
  xen/arch/x86/pv/descriptor-tables.c  |  5 ++---
  xen/arch/x86/pv/emul-priv-op.c   |  6 +++---
  xen/arch/x86/pv/mm.c |  2 +-
  xen/arch/x86/traps.c | 11 ++-
  xen/common/domain.c  |  2 +-
  xen/common/event_fifo.c  | 12 ++--
  xen/common/memory.c  |  4 ++--
  xen/common/tmem_xen.c|  2 +-
  xen/include/asm-arm/p2m.h|  6 +++---
  xen/include/asm-x86/p2m.h| 11 +++
  26 files changed, 95 insertions(+), 86 deletions(-)


[snip]

diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c
index 5d00256aaa..a7419bd444 100644
--- a/xen/arch/x86/hvm/svm/svm.c
+++ b/xen/arch/x86/hvm/svm/svm.c
@@ -317,7 +317,7 @@ static int svm_vmcb_restore(struct vcpu *v, struct
hvm_hw_cpu *c)
  {
  if ( c->cr0 & X86_CR0_PG )
  {
-page = get_page_from_gfn(v->domain, c->cr3 >> PAGE_SHIFT,
+page = get_page_from_gfn(v->domain, gaddr_to_gfn(c->cr3),
   NULL, P2M_ALLOC);
  if ( !page )
  {
@@ -2412,9 +2412,9 @@ nsvm_get_nvmcb_page(struct vcpu *v, uint64_t
vmcbaddr)
  return NULL;

  /* Need to translate L1-GPA to MPA */
-page = get_page_from_gfn(v->domain,
-nv->nv_vvmcxaddr >> PAGE_SHIFT,
-&p2mt, P2M_ALLOC | P2M_UNSHARE);
+page = get_page_from_gfn(v->domain,
+ gaddr_to_gfn(nv->nv_vvmcxaddr >>
PAGE_SHIFT),


Don't you need to lose the '>> PAGE_SHIFT' now?


Yes. Brian reported on IRC and now it is fixed.

Thank you for the review.

Cheers,

--
Julien Grall

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

Re: [Xen-devel] [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use typesafe gfn

2018-11-07 Thread Paul Durrant
> -Original Message-
> From: Julien Grall [mailto:julien.gr...@arm.com]
> Sent: 06 November 2018 19:15
> To: sstabell...@kernel.org; xen-devel@lists.xenproject.org
> Cc: Julien Grall ; Andrew Cooper
> ; George Dunlap ; Ian
> Jackson ; Jan Beulich ; Konrad
> Rzeszutek Wilk ; Tim (Xen.org) ; Wei
> Liu ; Boris Ostrovsky ;
> Suravee Suthikulpanit ; Brian Woods
> ; Paul Durrant ; Jun
> Nakajima ; Kevin Tian ;
> Julien Grall 
> Subject: [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use
> typesafe gfn
> 
> No functional change intended.
> 
> Only reasonable clean-ups are done in this patch. The rest will use _gfn
> for the time being.
> 
> Signed-off-by: Julien Grall 
> ---
>  xen/arch/arm/guestcopy.c |  2 +-
>  xen/arch/arm/mm.c|  2 +-
>  xen/arch/x86/cpu/vpmu.c  |  2 +-
>  xen/arch/x86/domain.c| 12 ++--
>  xen/arch/x86/domctl.c|  6 +++---
>  xen/arch/x86/hvm/dm.c|  2 +-
>  xen/arch/x86/hvm/domain.c|  2 +-
>  xen/arch/x86/hvm/hvm.c   |  9 +
>  xen/arch/x86/hvm/svm/svm.c   |  8 
>  xen/arch/x86/hvm/viridian/viridian.c | 24 
>  xen/arch/x86/hvm/vmx/vmx.c   |  4 ++--
>  xen/arch/x86/hvm/vmx/vvmx.c  | 12 ++--
>  xen/arch/x86/mm.c| 24 ++--
>  xen/arch/x86/mm/p2m.c|  2 +-
>  xen/arch/x86/mm/shadow/hvm.c |  6 +++---
>  xen/arch/x86/physdev.c   |  3 ++-
>  xen/arch/x86/pv/descriptor-tables.c  |  5 ++---
>  xen/arch/x86/pv/emul-priv-op.c   |  6 +++---
>  xen/arch/x86/pv/mm.c |  2 +-
>  xen/arch/x86/traps.c | 11 ++-
>  xen/common/domain.c  |  2 +-
>  xen/common/event_fifo.c  | 12 ++--
>  xen/common/memory.c  |  4 ++--
>  xen/common/tmem_xen.c|  2 +-
>  xen/include/asm-arm/p2m.h|  6 +++---
>  xen/include/asm-x86/p2m.h| 11 +++
>  26 files changed, 95 insertions(+), 86 deletions(-)
> 
[snip]
> diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c
> index 5d00256aaa..a7419bd444 100644
> --- a/xen/arch/x86/hvm/svm/svm.c
> +++ b/xen/arch/x86/hvm/svm/svm.c
> @@ -317,7 +317,7 @@ static int svm_vmcb_restore(struct vcpu *v, struct
> hvm_hw_cpu *c)
>  {
>  if ( c->cr0 & X86_CR0_PG )
>  {
> -page = get_page_from_gfn(v->domain, c->cr3 >> PAGE_SHIFT,
> +page = get_page_from_gfn(v->domain, gaddr_to_gfn(c->cr3),
>   NULL, P2M_ALLOC);
>  if ( !page )
>  {
> @@ -2412,9 +2412,9 @@ nsvm_get_nvmcb_page(struct vcpu *v, uint64_t
> vmcbaddr)
>  return NULL;
> 
>  /* Need to translate L1-GPA to MPA */
> -page = get_page_from_gfn(v->domain,
> -nv->nv_vvmcxaddr >> PAGE_SHIFT,
> -&p2mt, P2M_ALLOC | P2M_UNSHARE);
> +page = get_page_from_gfn(v->domain,
> + gaddr_to_gfn(nv->nv_vvmcxaddr >>
> PAGE_SHIFT),

Don't you need to lose the '>> PAGE_SHIFT' now?

  Paul

> + &p2mt, P2M_ALLOC | P2M_UNSHARE);
>  if ( !page )
>  return NULL;
> 

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

Re: [Xen-devel] [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use typesafe gfn

2018-11-07 Thread Paul Durrant
> -Original Message-
> From: Andrew Cooper
> Sent: 06 November 2018 20:12
> To: Julien Grall ; sstabell...@kernel.org; xen-
> de...@lists.xenproject.org
> Cc: George Dunlap ; Ian Jackson
> ; Jan Beulich ; Konrad
> Rzeszutek Wilk ; Tim (Xen.org) ; Wei
> Liu ; Boris Ostrovsky ;
> Suravee Suthikulpanit ; Brian Woods
> ; Paul Durrant ; Jun
> Nakajima ; Kevin Tian ;
> Julien Grall 
> Subject: Re: [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use
> typesafe gfn
> 
> Hi - just some cosmetic suggestions.
> 
> Subject s/Swich/Switch/
> 
> > diff --git a/xen/arch/x86/pv/emul-priv-op.c b/xen/arch/x86/pv/emul-priv-
> op.c
> > index f73ea4a163..a529ebcc3f 100644
> > --- a/xen/arch/x86/pv/emul-priv-op.c
> > +++ b/xen/arch/x86/pv/emul-priv-op.c
> > @@ -760,12 +760,12 @@ static int write_cr(unsigned int reg, unsigned
> long val,
> >  case 3: /* Write CR3 */
> >  {
> >  struct domain *currd = curr->domain;
> > -unsigned long gfn;
> > +gfn_t gfn;
> >  struct page_info *page;
> >  int rc;
> >
> > -gfn = !is_pv_32bit_domain(currd)
> > -  ? xen_cr3_to_pfn(val) : compat_cr3_to_pfn(val);
> > +gfn = _gfn(!is_pv_32bit_domain(currd)
> > +  ? xen_cr3_to_pfn(val) : compat_cr3_to_pfn(val));
> 
> Please re-indent.
> 
> >  page = get_page_from_gfn(currd, gfn, NULL, P2M_ALLOC);
> >  if ( !page )
> >  break;
> > diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
> > index 9471d89022..d967e49432 100644
> > --- a/xen/arch/x86/traps.c
> > +++ b/xen/arch/x86/traps.c
> > @@ -817,13 +817,14 @@ int guest_wrmsr_xen(struct vcpu *v, uint32_t idx,
> uint64_t val)
> >
> >  if ( p2m_is_paging(t) )
> >  {
> > -p2m_mem_paging_populate(d, gmfn);
> > +p2m_mem_paging_populate(d, gfn_x(gfn));
> >  return X86EMUL_RETRY;
> >  }
> >
> >  gdprintk(XENLOG_WARNING,
> > - "Bad GMFN %lx (MFN %#"PRI_mfn") to MSR %08x\n",
> > - gmfn, mfn_x(page ? page_to_mfn(page) :
> INVALID_MFN), base);
> > + "Bad GMFN %#"PRI_gfn" (MFN %#"PRI_mfn") to MSR
> %08x\n",
> 
> GMFN => GFN.
> 
> > + gfn_x(gfn), mfn_x(page ? page_to_mfn(page) :
> INVALID_MFN),
> > + base);
> >  return X86EMUL_EXCEPTION;
> >  }
> >
> > diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h
> > index d08c595887..db1ec37610 100644
> > --- a/xen/include/asm-x86/p2m.h
> > +++ b/xen/include/asm-x86/p2m.h
> > @@ -489,18 +489,21 @@ struct page_info *p2m_get_page_from_gfn(struct
> p2m_domain *p2m, gfn_t gfn,
> >  p2m_query_t q);
> >
> >  static inline struct page_info *get_page_from_gfn(
> > -struct domain *d, unsigned long gfn, p2m_type_t *t, p2m_query_t q)
> > +struct domain *d, gfn_t gfn, p2m_type_t *t, p2m_query_t q)
> >  {
> >  struct page_info *page;
> > +mfn_t mfn;
> >
> >  if ( paging_mode_translate(d) )
> > -return p2m_get_page_from_gfn(p2m_get_hostp2m(d), _gfn(gfn), t,
> NULL, q);
> > +return p2m_get_page_from_gfn(p2m_get_hostp2m(d), gfn, t, NULL,
> q);
> >
> >  /* Non-translated guests see 1-1 RAM / MMIO mappings everywhere */
> >  if ( t )
> >  *t = likely(d != dom_io) ? p2m_ram_rw : p2m_mmio_direct;
> > -page = mfn_to_page(_mfn(gfn));
> > -return mfn_valid(_mfn(gfn)) && get_page(page, d) ? page : NULL;
> > +
> > +mfn = _mfn(gfn_x(gfn));
> > +page = mfn_to_page(mfn);
> > +return mfn_valid(mfn) && get_page(page, d) ? page : NULL;
> 
> This looks like it would be cleaner by not splitting mfn out into a
> separate variable.
> 
> page = mfn_to_page(_mfn(gfn_x(gfn)));
> 
> return mfn_valid(mfn) && get_page(page, d) ? page : NULL;

^^ er... how's that mfn_valid() going to work? You'd need 
mfn_valid(page_to_mfn(pahge)), or somesuch.

  Paul

> 
> The only reason this looks odd is because of the mfn => gfn equality,
> but we are just beside a comment explaining that we are non-translated.
> 
> ~Andrew
___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH 8/8] xen: Swich parameter in get_page_from_gfn to use typesafe gfn

2018-11-06 Thread Andrew Cooper
Hi - just some cosmetic suggestions.

Subject s/Swich/Switch/

> diff --git a/xen/arch/x86/pv/emul-priv-op.c b/xen/arch/x86/pv/emul-priv-op.c
> index f73ea4a163..a529ebcc3f 100644
> --- a/xen/arch/x86/pv/emul-priv-op.c
> +++ b/xen/arch/x86/pv/emul-priv-op.c
> @@ -760,12 +760,12 @@ static int write_cr(unsigned int reg, unsigned long val,
>  case 3: /* Write CR3 */
>  {
>  struct domain *currd = curr->domain;
> -unsigned long gfn;
> +gfn_t gfn;
>  struct page_info *page;
>  int rc;
>  
> -gfn = !is_pv_32bit_domain(currd)
> -  ? xen_cr3_to_pfn(val) : compat_cr3_to_pfn(val);
> +gfn = _gfn(!is_pv_32bit_domain(currd)
> +  ? xen_cr3_to_pfn(val) : compat_cr3_to_pfn(val));

Please re-indent.

>  page = get_page_from_gfn(currd, gfn, NULL, P2M_ALLOC);
>  if ( !page )
>  break;
> diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
> index 9471d89022..d967e49432 100644
> --- a/xen/arch/x86/traps.c
> +++ b/xen/arch/x86/traps.c
> @@ -817,13 +817,14 @@ int guest_wrmsr_xen(struct vcpu *v, uint32_t idx, 
> uint64_t val)
>  
>  if ( p2m_is_paging(t) )
>  {
> -p2m_mem_paging_populate(d, gmfn);
> +p2m_mem_paging_populate(d, gfn_x(gfn));
>  return X86EMUL_RETRY;
>  }
>  
>  gdprintk(XENLOG_WARNING,
> - "Bad GMFN %lx (MFN %#"PRI_mfn") to MSR %08x\n",
> - gmfn, mfn_x(page ? page_to_mfn(page) : INVALID_MFN), 
> base);
> + "Bad GMFN %#"PRI_gfn" (MFN %#"PRI_mfn") to MSR %08x\n",

GMFN => GFN.

> + gfn_x(gfn), mfn_x(page ? page_to_mfn(page) : 
> INVALID_MFN),
> + base);
>  return X86EMUL_EXCEPTION;
>  }
>  
> diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h
> index d08c595887..db1ec37610 100644
> --- a/xen/include/asm-x86/p2m.h
> +++ b/xen/include/asm-x86/p2m.h
> @@ -489,18 +489,21 @@ struct page_info *p2m_get_page_from_gfn(struct 
> p2m_domain *p2m, gfn_t gfn,
>  p2m_query_t q);
>  
>  static inline struct page_info *get_page_from_gfn(
> -struct domain *d, unsigned long gfn, p2m_type_t *t, p2m_query_t q)
> +struct domain *d, gfn_t gfn, p2m_type_t *t, p2m_query_t q)
>  {
>  struct page_info *page;
> +mfn_t mfn;
>  
>  if ( paging_mode_translate(d) )
> -return p2m_get_page_from_gfn(p2m_get_hostp2m(d), _gfn(gfn), t, NULL, 
> q);
> +return p2m_get_page_from_gfn(p2m_get_hostp2m(d), gfn, t, NULL, q);
>  
>  /* Non-translated guests see 1-1 RAM / MMIO mappings everywhere */
>  if ( t )
>  *t = likely(d != dom_io) ? p2m_ram_rw : p2m_mmio_direct;
> -page = mfn_to_page(_mfn(gfn));
> -return mfn_valid(_mfn(gfn)) && get_page(page, d) ? page : NULL;
> +
> +mfn = _mfn(gfn_x(gfn));
> +page = mfn_to_page(mfn);
> +return mfn_valid(mfn) && get_page(page, d) ? page : NULL;

This looks like it would be cleaner by not splitting mfn out into a
separate variable.

page = mfn_to_page(_mfn(gfn_x(gfn)));

return mfn_valid(mfn) && get_page(page, d) ? page : NULL;

The only reason this looks odd is because of the mfn => gfn equality,
but we are just beside a comment explaining that we are non-translated.

~Andrew

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