Bug-fixes:

- Fix lazy flushing in case m2p override fails.
  - Fix module compile issues with ARM/Xen
  - Add missing call to DMA map page for Xen SWIOTLB for ARM.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.15 (GNU/Linux)
 
 iQEcBAABAgAGBQJSnJuAAAoJEFjIrFwIi8fJj7sIAJQgSEMWJcEOBJ3lujfbhhKr
 9GYfyNILfBjaOcH3LkA354U0JB3y4vON/xz6ONzMO4X7Jj6oUzACeEluq2iexlji
 VDxqtnDJGS/82TcIN5xOVKRZbIqZ0xdRjK2f4h7AU9lIoIk+SJEJIycG1RGqqrmr
 0nv39lUMjQhXNDhUjyt7e6JQj5GHrP0hzp5ngEQGcquPKbHXUInlwkB/kCH3zwju
 2kEYQyKSWFoZCVtIBDeHplcZw9r/zWyOHBxjWOVoI/KZk8k+6d2breC3hv0lrhvU
 qkJwzJcKZGlFdiCVHLbo3sTHf0NvvfF+qBCv7JbsymYaQc5SkrATmQ/DAUOssg0=
 =emSu
 -----END PGP SIGNATURE-----

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

Pull Xen bug-fixes from Konrad Rzeszutek Wilk:
 "Fixes to patches that went in this merge window along with a latent
  bug:
   - Fix lazy flushing in case m2p override fails.
   - Fix module compile issues with ARM/Xen
   - Add missing call to DMA map page for Xen SWIOTLB for ARM"

* tag 'stable/for-linus-3.13-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
  xen/gnttab: leave lazy MMU mode in the case of a m2p override failure
  xen/arm: p2m_init and p2m_lock should be static
  arm/xen: Export phys_to_mach to fix Xen module link errors
  swiotlb-xen: add missing xen_dma_map_page call
This commit is contained in:
Linus Torvalds 2013-12-02 10:12:01 -08:00
commit bcc2f9b718
3 changed files with 12 additions and 4 deletions

View file

@ -25,8 +25,9 @@ struct xen_p2m_entry {
struct rb_node rbnode_phys; struct rb_node rbnode_phys;
}; };
rwlock_t p2m_lock; static rwlock_t p2m_lock;
struct rb_root phys_to_mach = RB_ROOT; struct rb_root phys_to_mach = RB_ROOT;
EXPORT_SYMBOL_GPL(phys_to_mach);
static struct rb_root mach_to_phys = RB_ROOT; static struct rb_root mach_to_phys = RB_ROOT;
static int xen_add_phys_to_mach_entry(struct xen_p2m_entry *new) static int xen_add_phys_to_mach_entry(struct xen_p2m_entry *new)
@ -200,7 +201,7 @@ bool __set_phys_to_machine(unsigned long pfn, unsigned long mfn)
} }
EXPORT_SYMBOL_GPL(__set_phys_to_machine); EXPORT_SYMBOL_GPL(__set_phys_to_machine);
int p2m_init(void) static int p2m_init(void)
{ {
rwlock_init(&p2m_lock); rwlock_init(&p2m_lock);
return 0; return 0;

View file

@ -930,9 +930,10 @@ int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
ret = m2p_add_override(mfn, pages[i], kmap_ops ? ret = m2p_add_override(mfn, pages[i], kmap_ops ?
&kmap_ops[i] : NULL); &kmap_ops[i] : NULL);
if (ret) if (ret)
return ret; goto out;
} }
out:
if (lazy) if (lazy)
arch_leave_lazy_mmu_mode(); arch_leave_lazy_mmu_mode();
@ -969,9 +970,10 @@ int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops,
ret = m2p_remove_override(pages[i], kmap_ops ? ret = m2p_remove_override(pages[i], kmap_ops ?
&kmap_ops[i] : NULL); &kmap_ops[i] : NULL);
if (ret) if (ret)
return ret; goto out;
} }
out:
if (lazy) if (lazy)
arch_leave_lazy_mmu_mode(); arch_leave_lazy_mmu_mode();

View file

@ -555,6 +555,11 @@ xen_swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl,
sg_dma_len(sgl) = 0; sg_dma_len(sgl) = 0;
return 0; return 0;
} }
xen_dma_map_page(hwdev, pfn_to_page(map >> PAGE_SHIFT),
map & ~PAGE_MASK,
sg->length,
dir,
attrs);
sg->dma_address = xen_phys_to_bus(map); sg->dma_address = xen_phys_to_bus(map);
} else { } else {
/* we are not interested in the dma_addr returned by /* we are not interested in the dma_addr returned by