|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 16/17] xen/mm: Convert {s, g}et_gpfn_from_mfn() to use typesafe MFN
On 22.03.2020 17:14, julien@xxxxxxx wrote:
> @@ -983,19 +984,20 @@ long p2m_pt_audit_p2m(struct p2m_domain *p2m)
> /* check for 1GB super page */
> if ( l3e_get_flags(l3e[i3]) & _PAGE_PSE )
> {
> - mfn = l3e_get_pfn(l3e[i3]);
> - ASSERT(mfn_valid(_mfn(mfn)));
> + mfn = l3e_get_mfn(l3e[i3]);
> + ASSERT(mfn_valid(mfn));
> /* we have to cover 512x512 4K pages */
> for ( i2 = 0;
> i2 < (L2_PAGETABLE_ENTRIES * L1_PAGETABLE_ENTRIES);
> i2++)
> {
> - m2pfn = get_gpfn_from_mfn(mfn+i2);
> + m2pfn = get_pfn_from_mfn(mfn_add(mfn, i2));
> if ( m2pfn != (gfn + i2) )
> {
> pmbad++;
> - P2M_PRINTK("mismatch: gfn %#lx -> mfn %#lx ->
> gfn %#lx\n",
> - gfn + i2, mfn + i2, m2pfn);
> + P2M_PRINTK("mismatch: gfn %#lx -> mfn %"PRI_mfn"
> gfn %#lx\n",
> + gfn + i2, mfn_x(mfn_add(mfn, i2)),
As in the earlier patch, "mfn_x(mfn) + i2" would be shorter and
hence imo preferable, especially in printk() and alike invocations.
I would also prefer if you left %#lx alone, with the 2nd best
option being to also use PRI_gfn alongside PRI_mfn. Primarily
I'd like to avoid having a mixture.
Same (for both) at least one more time further down.
> @@ -974,7 +974,7 @@ guest_physmap_add_entry(struct domain *d, gfn_t gfn,
> mfn_t mfn,
> P2M_DEBUG("old gfn=%#lx -> mfn %#lx\n",
> gfn_x(ogfn) , mfn_x(omfn));
> if ( mfn_eq(omfn, mfn_add(mfn, i)) )
> - p2m_remove_page(p2m, gfn_x(ogfn), mfn_x(mfn_add(mfn, i)),
> + p2m_remove_page(p2m, gfn_x(ogfn), mfn_add(mfn, i),
> 0);
Pull this up then onto the now shorter prior line?
> @@ -2843,53 +2843,53 @@ void audit_p2m(struct domain *d,
> spin_lock(&d->page_alloc_lock);
> page_list_for_each ( page, &d->page_list )
> {
> - mfn = mfn_x(page_to_mfn(page));
> + mfn = page_to_mfn(page);
>
> - P2M_PRINTK("auditing guest page, mfn=%#lx\n", mfn);
> + P2M_PRINTK("auditing guest page, mfn=%"PRI_mfn"\n", mfn_x(mfn));
>
> od = page_get_owner(page);
>
> if ( od != d )
> {
> - P2M_PRINTK("mfn %"PRI_mfn" owner %pd != %pd\n", mfn, od, d);
> + P2M_PRINTK("mfn %"PRI_mfn" owner %pd != %pd\n", mfn_x(mfn), od,
> d);
> continue;
> }
>
> - gfn = get_gpfn_from_mfn(mfn);
> + gfn = get_pfn_from_mfn(mfn);
> if ( gfn == INVALID_M2P_ENTRY )
> {
> orphans_count++;
> - P2M_PRINTK("orphaned guest page: mfn=%#lx has invalid gfn\n",
> - mfn);
> + P2M_PRINTK("orphaned guest page: mfn=%"PRI_mfn" has invalid
> gfn\n",
> + mfn_x(mfn));
> continue;
> }
>
> if ( SHARED_M2P(gfn) )
> {
> - P2M_PRINTK("shared mfn (%lx) on domain page list!\n",
> - mfn);
> + P2M_PRINTK("shared mfn (%"PRI_mfn") on domain page list!\n",
> + mfn_x(mfn));
> continue;
> }
>
> p2mfn = get_gfn_type_access(p2m, gfn, &type, &p2ma, 0, NULL);
> - if ( mfn_x(p2mfn) != mfn )
> + if ( !mfn_eq(p2mfn, mfn) )
> {
> mpbad++;
> - P2M_PRINTK("map mismatch mfn %#lx -> gfn %#lx -> mfn %#lx"
> + P2M_PRINTK("map mismatch mfn %"PRI_mfn" -> gfn %#lx -> mfn
> %"PRI_mfn""
> " (-> gfn %#lx)\n",
> - mfn, gfn, mfn_x(p2mfn),
> + mfn_x(mfn), gfn, mfn_x(p2mfn),
> (mfn_valid(p2mfn)
> - ? get_gpfn_from_mfn(mfn_x(p2mfn))
> + ? get_pfn_from_mfn(p2mfn)
> : -1u));
I realize this is an entirely unrelated change, but the -1u here
is standing out too much to not mention it: Could I talk you into
making this gfn_x(INVALID_GFN) at this occasion?
> --- a/xen/include/asm-x86/mm.h
> +++ b/xen/include/asm-x86/mm.h
> @@ -500,9 +500,10 @@ extern paddr_t mem_hotplug;
> */
> extern bool machine_to_phys_mapping_valid;
>
> -static inline void set_gpfn_from_mfn(unsigned long mfn, unsigned long pfn)
> +static inline void set_pfn_from_mfn(mfn_t mfn_, unsigned long pfn)
> {
> - const struct domain *d = page_get_owner(mfn_to_page(_mfn(mfn)));
> + const unsigned long mfn = mfn_x(mfn_);
I think it would be better overall if the parameter was named
"mfn" and there was no local variable altogether. This would
bring things in line with ...
> @@ -515,11 +516,14 @@ static inline void set_gpfn_from_mfn(unsigned long mfn,
> unsigned long pfn)
>
> extern struct rangeset *mmio_ro_ranges;
>
> -#define get_gpfn_from_mfn(mfn) (machine_to_phys_mapping[(mfn)])
> +static inline unsigned long get_pfn_from_mfn(mfn_t mfn)
> +{
> + return machine_to_phys_mapping[mfn_x(mfn)];
> +}
... this.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |