|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH 5/7] x86/m2b: Add a tracking structure for mfn to bfn mappings per page
On Wed, Feb 10, 2016 at 10:10 AM, Malcolm Crossley
<malcolm.crossley@xxxxxxxxxx> wrote:
> Add a pointer to the page struct which refers to the head of
> m2b tracking structure for that page.
>
> Atomically add a PGC bit to the page struct when setting the pointer to
> the m2b tracking structure.
>
> Adding elements to the per page m2b tracking structure is done via a
> RCU protected linked list.
>
> Callers of add_m2b and del_m2b must hold the page lock for the page.
> This prevents the m2b code racing with itself and allows for fine
> gain locking. References to the page are also expected to be taken and
> dropped by the callers to the m2b code.
>
> m2b references are forcibly removed as part of domain destroy to ensure
> malicious
> guests do not cause memory
Editing mistake?
[snip]
> +struct m2b_entry *lookup_m2b_entry(struct page_info *page, struct domain *d,
> + ioservid_t ioserver, unsigned long bfn)
> +{
> + struct m2b_entry *m2b_e = NULL;
> + struct list_head *entry;
> + domid_t domain = d->domain_id;
> +
> + if ( !test_bit(_PGC_foreign_map, &page->count_info) )
> + return NULL;
> +
> + rcu_read_lock(&m2b_rcu);
> + list_for_each_rcu(entry, &page->pv_iommu->head)
> + {
> + m2b_e = list_entry(entry, struct m2b_entry, list);
> + if ( m2b_e->domain == domain && m2b_e->ioserver == ioserver &&
> + m2b_e->bfn == bfn )
> + goto done;
> + else if ( ioserver == IOSERVER_ANY && m2b_e->domain == domain &&
> + m2b_e->bfn == bfn )
> + goto done;
> + else if ( bfn == BFN_ANY && m2b_e->domain == domain &&
> + m2b_e->ioserver == ioserver )
> + goto done;
> + else if ( bfn == BFN_ANY && ioserver == IOSERVER_ANY &&
> + m2b_e->domain == domain )
> + goto done;
> + }
Just a minor note while I'm thinking about it -- since every single
one of these have "m2b_e->domain == domain", wouldn't it be easier to
read if you just had "if (m2b_e->domain != domain) continue" first,
and then the series of if statements without mentioning the domain?
-George
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |