Переглянути джерело

Merge tag 'stable/for-linus-3.17-b-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip

Pull Xen bugfixes from David Vrabel:
 - fix ARM build
 - fix boot crash with PVH guests
 - improve reliability of resume/migration

* tag 'stable/for-linus-3.17-b-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
  x86/xen: use vmap() to map grant table pages in PVH guests
  x86/xen: resume timer irqs early
  arm/xen: remove duplicate arch_gnttab_init() function
Linus Torvalds 11 роки тому
батько
коміт
4dacb91c7d
3 змінених файлів з 6 додано та 11 видалено
  1. 0 5
      arch/arm/xen/grant-table.c
  2. 5 5
      arch/x86/xen/grant-table.c
  3. 1 1
      arch/x86/xen/time.c

+ 0 - 5
arch/arm/xen/grant-table.c

@@ -49,8 +49,3 @@ int arch_gnttab_init(unsigned long nr_shared)
 {
 {
 	return 0;
 	return 0;
 }
 }
-
-int arch_gnttab_init(unsigned long nr_shared, unsigned long nr_status)
-{
-	return 0;
-}

+ 5 - 5
arch/x86/xen/grant-table.c

@@ -118,6 +118,7 @@ static int __init xlated_setup_gnttab_pages(void)
 {
 {
 	struct page **pages;
 	struct page **pages;
 	xen_pfn_t *pfns;
 	xen_pfn_t *pfns;
+	void *vaddr;
 	int rc;
 	int rc;
 	unsigned int i;
 	unsigned int i;
 	unsigned long nr_grant_frames = gnttab_max_grant_frames();
 	unsigned long nr_grant_frames = gnttab_max_grant_frames();
@@ -143,21 +144,20 @@ static int __init xlated_setup_gnttab_pages(void)
 	for (i = 0; i < nr_grant_frames; i++)
 	for (i = 0; i < nr_grant_frames; i++)
 		pfns[i] = page_to_pfn(pages[i]);
 		pfns[i] = page_to_pfn(pages[i]);
 
 
-	rc = arch_gnttab_map_shared(pfns, nr_grant_frames, nr_grant_frames,
-				    &xen_auto_xlat_grant_frames.vaddr);
-
-	if (rc) {
+	vaddr = vmap(pages, nr_grant_frames, 0, PAGE_KERNEL);
+	if (!vaddr) {
 		pr_warn("%s Couldn't map %ld pfns rc:%d\n", __func__,
 		pr_warn("%s Couldn't map %ld pfns rc:%d\n", __func__,
 			nr_grant_frames, rc);
 			nr_grant_frames, rc);
 		free_xenballooned_pages(nr_grant_frames, pages);
 		free_xenballooned_pages(nr_grant_frames, pages);
 		kfree(pages);
 		kfree(pages);
 		kfree(pfns);
 		kfree(pfns);
-		return rc;
+		return -ENOMEM;
 	}
 	}
 	kfree(pages);
 	kfree(pages);
 
 
 	xen_auto_xlat_grant_frames.pfn = pfns;
 	xen_auto_xlat_grant_frames.pfn = pfns;
 	xen_auto_xlat_grant_frames.count = nr_grant_frames;
 	xen_auto_xlat_grant_frames.count = nr_grant_frames;
+	xen_auto_xlat_grant_frames.vaddr = vaddr;
 
 
 	return 0;
 	return 0;
 }
 }

+ 1 - 1
arch/x86/xen/time.c

@@ -444,7 +444,7 @@ void xen_setup_timer(int cpu)
 
 
 	irq = bind_virq_to_irqhandler(VIRQ_TIMER, cpu, xen_timer_interrupt,
 	irq = bind_virq_to_irqhandler(VIRQ_TIMER, cpu, xen_timer_interrupt,
 				      IRQF_PERCPU|IRQF_NOBALANCING|IRQF_TIMER|
 				      IRQF_PERCPU|IRQF_NOBALANCING|IRQF_TIMER|
-				      IRQF_FORCE_RESUME,
+				      IRQF_FORCE_RESUME|IRQF_EARLY_RESUME,
 				      name, NULL);
 				      name, NULL);
 	(void)xen_set_irq_priority(irq, XEN_IRQ_PRIORITY_MAX);
 	(void)xen_set_irq_priority(irq, XEN_IRQ_PRIORITY_MAX);