|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V2 3/4] arm: allocate per-PCPU domheap pagetable pages
On Tue, 23 Apr 2013, Ian Campbell wrote:
> +int init_secondary_pagetables(int cpu)
> +{
> + lpae_t *root, *first, *domheap, pte;
> + int i;
> +
> + root = alloc_xenheap_page();
> +#ifdef CONFIG_ARM_64
> + first = alloc_xenheap_page();
> +#else
> + first = root; /* root == first level on 32-bit 3-level trie */
> +#endif
> + domheap =
> alloc_xenheap_pages(get_order_from_pages(DOMHEAP_SECOND_PAGES), 0);
> +
> + if ( root == NULL || domheap == NULL || first == NULL )
> + {
> + printk("Not enough free memory for secondary CPU%d pagetables\n",
> cpu);
> + free_xenheap_pages(domheap,
> get_order_from_pages(DOMHEAP_SECOND_PAGES));
> +#ifdef CONFIG_ARM_64
> + free_xenheap_page(first);
> +#endif
> + free_xenheap_page(root);
> + return -ENOMEM;
> + }
> +
> + /* Initialise root pagetable from root of boot tables */
> + memcpy(root, boot_pgtable, PAGE_SIZE);
> +
> +#ifdef CONFIG_ARM_64
> + /* Initialise first pagetable from first level of boot tables, and
> + * hook into the new root. */
> + memcpy(first, boot_first, PAGE_SIZE);
> + pte = mfn_to_xen_entry(virt_to_mfn(first));
> + pte.pt.table = 1;
> + write_pte(root, pte);
> +#endif
> +
> + /* Ensure the domheap has no stray mappings */
> + memset(domheap, 0, DOMHEAP_SECOND_PAGES*PAGE_SIZE);
> +
> + /* Update the first level mapping to reference the local CPUs
> + * domheap mapping pages. */
> + for ( i = 0; i < DOMHEAP_SECOND_PAGES; i++ )
> + {
> + pte = mfn_to_xen_entry(virt_to_mfn(domheap+i*LPAE_ENTRIES));
> + pte.pt.table = 1;
> +
> write_pte(&first[first_table_offset(DOMHEAP_VIRT_START+i*FIRST_SIZE)], pte);
> + }
> +
> + flush_xen_dcache_va_range(root, PAGE_SIZE);
> + flush_xen_dcache_va_range(domheap, DOMHEAP_SECOND_PAGES*PAGE_SIZE);
Don't we need to flush first too (on ARMv8)?
> + per_cpu(xen_pgtable, cpu) = root;
> + per_cpu(xen_dommap, cpu) = domheap;
I think we should flush the two per_cpu variables here
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |