History

Merge tag 'for-linus-4.12b-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip

Pull xen fixes from Juergen Gross: "Some fixes for the new Xen 9pfs frontend and some minor cleanups" * tag 'for-linus-4.12b-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip: xen: make xen_flush_tlb_all() static xen: cleanup pvh leftovers from pv-only sources xen/9pfs: p9_trans_xen_init and p9_trans_xen_exit can be static xen/9pfs: fix return value check in xen_9pfs_front_probe()

Linus Torvalds committed 9 years ago

Commit 9e856e42 parents 1fbbed4 c71e6d84 files · +47 −80Browse files

Unified · Split

4 files
  1. arch/x86/xen/enlighten_pv.c +4 −11
  2. arch/x86/xen/mmu.c +1 −1
  3. arch/x86/xen/mmu_pv.c +38 −64
  4. net/9p/trans_xen.c +4 −4
arch/x86/xen/enlighten_pv.c+4−11
@@ -142,9 +142,7 @@ static void __init xen_banner(void) · 141 unmodified lines
142 struct xen_extraversion extra;142 struct xen_extraversion extra;
143 HYPERVISOR_xen_version(XENVER_extraversion, &extra);143 HYPERVISOR_xen_version(XENVER_extraversion, &extra);
144 144
145 pr_info("Booting paravirtualized kernel %son %s\n",145 pr_info("Booting paravirtualized kernel on %s\n", pv_info.name);
146 xen_feature(XENFEAT_auto_translated_physmap) ?
147 "with PVH extensions " : "", pv_info.name);
148 printk(KERN_INFO "Xen version: %d.%d%s%s\n",146 printk(KERN_INFO "Xen version: %d.%d%s%s\n",
149 version >> 16, version & 0xffff, extra.extraversion,147 version >> 16, version & 0xffff, extra.extraversion,
150 xen_feature(XENFEAT_mmu_pt_update_preserve_ad) ? " (preserve-AD)" : "");148 xen_feature(XENFEAT_mmu_pt_update_preserve_ad) ? " (preserve-AD)" : "");
@@ -957,15 +955,10 @@ static void xen_write_msr(unsigned int msr, unsigned low, unsigned high) · 806 unmodified lines
957 955
958void xen_setup_shared_info(void)956void xen_setup_shared_info(void)
959{957{
960 if (!xen_feature(XENFEAT_auto_translated_physmap)) {958 set_fixmap(FIX_PARAVIRT_BOOTMAP, xen_start_info->shared_info);
961 set_fixmap(FIX_PARAVIRT_BOOTMAP,
962 xen_start_info->shared_info);
963 959
964 HYPERVISOR_shared_info =960 HYPERVISOR_shared_info =
965 (struct shared_info *)fix_to_virt(FIX_PARAVIRT_BOOTMAP);961 (struct shared_info *)fix_to_virt(FIX_PARAVIRT_BOOTMAP);
966 } else
967 HYPERVISOR_shared_info =
968 (struct shared_info *)__va(xen_start_info->shared_info);
969 962
970#ifndef CONFIG_SMP963#ifndef CONFIG_SMP
971 /* In UP this is as good a place as any to set up shared info */964 /* In UP this is as good a place as any to set up shared info */
arch/x86/xen/mmu.c+1−1
@@ -42,7 +42,7 @@ xmaddr_t arbitrary_virt_to_machine(void *vaddr) · 41 unmodified lines
42}42}
43EXPORT_SYMBOL_GPL(arbitrary_virt_to_machine);43EXPORT_SYMBOL_GPL(arbitrary_virt_to_machine);
44 44
45void xen_flush_tlb_all(void)45static void xen_flush_tlb_all(void)
46{46{
47 struct mmuext_op *op;47 struct mmuext_op *op;
48 struct multicall_space mcs;48 struct multicall_space mcs;
arch/x86/xen/mmu_pv.c+38−64
@@ -355,10 +355,8 @@ static pteval_t pte_pfn_to_mfn(pteval_t val) · 354 unmodified lines
355 pteval_t flags = val & PTE_FLAGS_MASK;355 pteval_t flags = val & PTE_FLAGS_MASK;
356 unsigned long mfn;356 unsigned long mfn;
357 357
358 if (!xen_feature(XENFEAT_auto_translated_physmap))358 mfn = __pfn_to_mfn(pfn);
359 mfn = __pfn_to_mfn(pfn);359
360 else
361 mfn = pfn;
362 /*360 /*
363 * If there's no mfn for the pfn, then just create an361 * If there's no mfn for the pfn, then just create an
364 * empty non-present pte. Unfortunately this loses362 * empty non-present pte. Unfortunately this loses
@@ -647,9 +645,6 @@ static int __xen_pgd_walk(struct mm_struct *mm, pgd_t *pgd, · 282 unmodified lines
647 limit--;645 limit--;
648 BUG_ON(limit >= FIXADDR_TOP);646 BUG_ON(limit >= FIXADDR_TOP);
649 647
650 if (xen_feature(XENFEAT_auto_translated_physmap))
651 return 0;
652
653 /*648 /*
654 * 64-bit has a great big hole in the middle of the address649 * 64-bit has a great big hole in the middle of the address
655 * space, which contains the Xen mappings. On 32-bit these650 * space, which contains the Xen mappings. On 32-bit these
@@ -1289,9 +1284,6 @@ static void __init xen_pagetable_cleanhighmap(void) · 633 unmodified lines
1289 1284
1290static void __init xen_pagetable_p2m_setup(void)1285static void __init xen_pagetable_p2m_setup(void)
1291{1286{
1292 if (xen_feature(XENFEAT_auto_translated_physmap))
1293 return;
1294
1295 xen_vmalloc_p2m_tree();1287 xen_vmalloc_p2m_tree();
1296 1288
1297#ifdef CONFIG_X86_641289#ifdef CONFIG_X86_64
@@ -1314,8 +1306,7 @@ static void __init xen_pagetable_init(void) · 16 unmodified lines
1314 xen_build_mfn_list_list();1306 xen_build_mfn_list_list();
1315 1307
1316 /* Remap memory freed due to conflicts with E820 map */1308 /* Remap memory freed due to conflicts with E820 map */
1317 if (!xen_feature(XENFEAT_auto_translated_physmap))1309 xen_remap_memory();
1318 xen_remap_memory();
1319 1310
1320 xen_setup_shared_info();1311 xen_setup_shared_info();
1321}1312}
@@ -1925,21 +1916,20 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) · 603 unmodified lines
1925 /* Zap identity mapping */1916 /* Zap identity mapping */
1926 init_level4_pgt[0] = __pgd(0);1917 init_level4_pgt[0] = __pgd(0);
1927 1918
1928 if (!xen_feature(XENFEAT_auto_translated_physmap)) {1919 /* Pre-constructed entries are in pfn, so convert to mfn */
1929 /* Pre-constructed entries are in pfn, so convert to mfn */1920 /* L4[272] -> level3_ident_pgt */
1930 /* L4[272] -> level3_ident_pgt1921 /* L4[511] -> level3_kernel_pgt */
1931 * L4[511] -> level3_kernel_pgt */1922 convert_pfn_mfn(init_level4_pgt);
1932 convert_pfn_mfn(init_level4_pgt);
1933 1923
1934 /* L3_i[0] -> level2_ident_pgt */1924 /* L3_i[0] -> level2_ident_pgt */
1935 convert_pfn_mfn(level3_ident_pgt);1925 convert_pfn_mfn(level3_ident_pgt);
1936 /* L3_k[510] -> level2_kernel_pgt1926 /* L3_k[510] -> level2_kernel_pgt */
1937 * L3_k[511] -> level2_fixmap_pgt */1927 /* L3_k[511] -> level2_fixmap_pgt */
1938 convert_pfn_mfn(level3_kernel_pgt);1928 convert_pfn_mfn(level3_kernel_pgt);
1929
1930 /* L3_k[511][506] -> level1_fixmap_pgt */
1931 convert_pfn_mfn(level2_fixmap_pgt);
1939 1932
1940 /* L3_k[511][506] -> level1_fixmap_pgt */
1941 convert_pfn_mfn(level2_fixmap_pgt);
1942 }
1943 /* We get [511][511] and have Xen's version of level2_kernel_pgt */1933 /* We get [511][511] and have Xen's version of level2_kernel_pgt */
1944 l3 = m2v(pgd[pgd_index(__START_KERNEL_map)].pgd);1934 l3 = m2v(pgd[pgd_index(__START_KERNEL_map)].pgd);
1945 l2 = m2v(l3[pud_index(__START_KERNEL_map)].pud);1935 l2 = m2v(l3[pud_index(__START_KERNEL_map)].pud);
@@ -1962,34 +1952,30 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) · 16 unmodified lines
1962 if (i && i < pgd_index(__START_KERNEL_map))1952 if (i && i < pgd_index(__START_KERNEL_map))
1963 init_level4_pgt[i] = ((pgd_t *)xen_start_info->pt_base)[i];1953 init_level4_pgt[i] = ((pgd_t *)xen_start_info->pt_base)[i];
1964 1954
1965 if (!xen_feature(XENFEAT_auto_translated_physmap)) {1955 /* Make pagetable pieces RO */
1966 /* Make pagetable pieces RO */1956 set_page_prot(init_level4_pgt, PAGE_KERNEL_RO);
1967 set_page_prot(init_level4_pgt, PAGE_KERNEL_RO);1957 set_page_prot(level3_ident_pgt, PAGE_KERNEL_RO);
1968 set_page_prot(level3_ident_pgt, PAGE_KERNEL_RO);1958 set_page_prot(level3_kernel_pgt, PAGE_KERNEL_RO);
1969 set_page_prot(level3_kernel_pgt, PAGE_KERNEL_RO);1959 set_page_prot(level3_user_vsyscall, PAGE_KERNEL_RO);
1970 set_page_prot(level3_user_vsyscall, PAGE_KERNEL_RO);1960 set_page_prot(level2_ident_pgt, PAGE_KERNEL_RO);
1971 set_page_prot(level2_ident_pgt, PAGE_KERNEL_RO);1961 set_page_prot(level2_kernel_pgt, PAGE_KERNEL_RO);
1972 set_page_prot(level2_kernel_pgt, PAGE_KERNEL_RO);1962 set_page_prot(level2_fixmap_pgt, PAGE_KERNEL_RO);
1973 set_page_prot(level2_fixmap_pgt, PAGE_KERNEL_RO);1963 set_page_prot(level1_fixmap_pgt, PAGE_KERNEL_RO);
1974 set_page_prot(level1_fixmap_pgt, PAGE_KERNEL_RO);1964
1975 1965 /* Pin down new L4 */
1976 /* Pin down new L4 */1966 pin_pagetable_pfn(MMUEXT_PIN_L4_TABLE,
1977 pin_pagetable_pfn(MMUEXT_PIN_L4_TABLE,1967 PFN_DOWN(__pa_symbol(init_level4_pgt)));
1978 PFN_DOWN(__pa_symbol(init_level4_pgt)));1968
1979 1969 /* Unpin Xen-provided one */
1980 /* Unpin Xen-provided one */1970 pin_pagetable_pfn(MMUEXT_UNPIN_TABLE, PFN_DOWN(__pa(pgd)));
1981 pin_pagetable_pfn(MMUEXT_UNPIN_TABLE, PFN_DOWN(__pa(pgd)));
1982 1971
1983 /*1972 /*
1984 * At this stage there can be no user pgd, and no page1973 * At this stage there can be no user pgd, and no page structure to
1985 * structure to attach it to, so make sure we just set kernel1974 * attach it to, so make sure we just set kernel pgd.
1986 * pgd.1975 */
1987 */1976 xen_mc_batch();
1988 xen_mc_batch();1977 __xen_write_cr3(true, __pa(init_level4_pgt));
1989 __xen_write_cr3(true, __pa(init_level4_pgt));1978 xen_mc_issue(PARAVIRT_LAZY_CPU);
1990 xen_mc_issue(PARAVIRT_LAZY_CPU);
1991 } else
1992 native_write_cr3(__pa(init_level4_pgt));
1993 1979
1994 /* We can't that easily rip out L3 and L2, as the Xen pagetables are1980 /* We can't that easily rip out L3 and L2, as the Xen pagetables are
1995 * set out this way: [L4], [L1], [L2], [L3], [L1], [L1] ... for1981 * set out this way: [L4], [L1], [L2], [L3], [L1], [L1] ... for
@@ -2403,9 +2389,6 @@ static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot) · 407 unmodified lines
2403 2389
2404static void __init xen_post_allocator_init(void)2390static void __init xen_post_allocator_init(void)
2405{2391{
2406 if (xen_feature(XENFEAT_auto_translated_physmap))
2407 return;
2408
2409 pv_mmu_ops.set_pte = xen_set_pte;2392 pv_mmu_ops.set_pte = xen_set_pte;
2410 pv_mmu_ops.set_pmd = xen_set_pmd;2393 pv_mmu_ops.set_pmd = xen_set_pmd;
2411 pv_mmu_ops.set_pud = xen_set_pud;2394 pv_mmu_ops.set_pud = xen_set_pud;
@@ -2511,9 +2494,6 @@ void __init xen_init_mmu_ops(void) · 99 unmodified lines
2511{2494{
2512 x86_init.paging.pagetable_init = xen_pagetable_init;2495 x86_init.paging.pagetable_init = xen_pagetable_init;
2513 2496
2514 if (xen_feature(XENFEAT_auto_translated_physmap))
2515 return;
2516
2517 pv_mmu_ops = xen_mmu_ops;2497 pv_mmu_ops = xen_mmu_ops;
2518 2498
2519 memset(dummy_mapping, 0xff, PAGE_SIZE);2499 memset(dummy_mapping, 0xff, PAGE_SIZE);
@@ -2650,9 +2630,6 @@ int xen_create_contiguous_region(phys_addr_t pstart, unsigned int order, · 130 unmodified lines
2650 * this function are redundant and can be ignored.2630 * this function are redundant and can be ignored.
2651 */2631 */
2652 2632
2653 if (xen_feature(XENFEAT_auto_translated_physmap))
2654 return 0;
2655
2656 if (unlikely(order > MAX_CONTIG_ORDER))2633 if (unlikely(order > MAX_CONTIG_ORDER))
2657 return -ENOMEM;2634 return -ENOMEM;
2658 2635
@@ -2689,9 +2666,6 @@ void xen_destroy_contiguous_region(phys_addr_t pstart, unsigned int order) · 30 unmodified lines
2689 int success;2666 int success;
2690 unsigned long vstart;2667 unsigned long vstart;
2691 2668
2692 if (xen_feature(XENFEAT_auto_translated_physmap))
2693 return;
2694
2695 if (unlikely(order > MAX_CONTIG_ORDER))2669 if (unlikely(order > MAX_CONTIG_ORDER))
2696 return;2670 return;
2697 2671
net/9p/trans_xen.c+4−4
@@ -454,8 +454,8 @@ static int xen_9pfs_front_probe(struct xenbus_device *dev, · 453 unmodified lines
454 goto error_xenbus;454 goto error_xenbus;
455 }455 }
456 priv->tag = xenbus_read(xbt, dev->nodename, "tag", NULL);456 priv->tag = xenbus_read(xbt, dev->nodename, "tag", NULL);
457 if (!priv->tag) {457 if (IS_ERR(priv->tag)) {
458 ret = -EINVAL;458 ret = PTR_ERR(priv->tag);
459 goto error_xenbus;459 goto error_xenbus;
460 }460 }
461 ret = xenbus_transaction_end(xbt, 0);461 ret = xenbus_transaction_end(xbt, 0);
@@ -525,7 +525,7 @@ static struct xenbus_driver xen_9pfs_front_driver = { · 63 unmodified lines
525 .otherend_changed = xen_9pfs_front_changed,525 .otherend_changed = xen_9pfs_front_changed,
526};526};
527 527
528int p9_trans_xen_init(void)528static int p9_trans_xen_init(void)
529{529{
530 if (!xen_domain())530 if (!xen_domain())
531 return -ENODEV;531 return -ENODEV;
@@ -537,7 +537,7 @@ int p9_trans_xen_init(void) · 5 unmodified lines
537}537}
538module_init(p9_trans_xen_init);538module_init(p9_trans_xen_init);
539 539
540void p9_trans_xen_exit(void)540static void p9_trans_xen_exit(void)
541{541{
542 v9fs_unregister_trans(&p9_xen_trans);542 v9fs_unregister_trans(&p9_xen_trans);
543 return xenbus_unregister_driver(&xen_9pfs_front_driver);543 return xenbus_unregister_driver(&xen_9pfs_front_driver);