|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 4/6] xen/arm: implement get/put_page_type
On Fri, 2012-07-20 at 16:05 +0100, Stefano Stabellini wrote:
> Add a basic get_page_type and put_page_type implementation: the
> implementation is similar to the x86 one, without all the code to handle
> shadow pagetables and other unneeded features.
>
> Also remove PGT_shared_page, that is unused.
I suppose it'll come back some day?
Is the existing page sharing stuff completely contained within the x86
arch code and not in generic code at all?
> +int get_page_type(struct page_info *page, unsigned long type)
> +{
> + unsigned long nx, x, y = page->u.inuse.type_info;
> +
> + for ( ; ; )
> + {
> + x = y;
> + nx = x + 1;
> + if ( unlikely((nx & PGT_count_mask) == 0) )
> + {
> + printk("Type count overflow on pfn %lx", page_to_mfn(page));
> + return -EINVAL;
> + }
> + else if ( (x & PGT_count_mask) == 0 )
> + {
> + struct domain *d = page_get_owner(page);
> +
> + if ( (x & PGT_type_mask) != type )
> + {
> + /*
> + * On type change we check to flush stale TLB entries. This
> + * may be unnecessary (e.g., page was GDT/LDT) but those
> + * circumstances should be very rare.
> + */
> + cpumask_t mask;
> +
> + cpumask_copy(&mask, d->domain_dirty_cpumask);
> +
> + /* Don't flush if the timestamp is old enough */
> + tlbflush_filter(mask, page->tlbflush_timestamp);
> +
> + if ( unlikely(!cpumask_empty(&mask)) )
> + {
> + perfc_incr(need_flush_tlb_flush);
> + flush_tlb_mask(&mask);
> + }
> +
> + /* We lose existing type and validity. */
> + nx &= ~(PGT_type_mask | PGT_validated);
> + nx |= type;
> +
> + /* No special validation needed for writable pages. */
> + /* Page tables and GDT/LDT need to be scanned for validity.
> */
There is no GDT/LDT on ARM.
And do we really need PGT_validated when there is no direct paging
support? (Hrm, maybe I'm confused about what PGT_validated means).
In fact, do the types make any sense at all for ARM? Is PGT_writable is
really only meaningful when you have direct paging?
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |