IOMMU Fixes for Linux v3.15-rc5
3 Fixes for the AMD IOMMU driver: * Fix a locking issue around get_user_pages() * Fix 2 issues with device aliasing and exclusion range handling -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJTfHqZAAoJECvwRC2XARrj8/4P/1ai+NBOS+UnplCsPLK/NsE1 b08nF/xS+ByWA6kA52TckNnwd6uymtk941SSup+OXMbxd15sSUFrTn0wlOW5ytJ+ xYEp0hfGSR82ifatglvusE2Mcu7ox+OYwUZ/PTGHeJQZ/HBWbWrLjRlj2jIenWS8 7fsTFqF0FGHKI8XYAbI0SEBNosUk5zJ5z/jigz5yLkrjpM0AKSsKGVMo7aRjEGVy 1Ph324eisLeWPHhJg4OWT63NRJl10LZGLGk+KZQv8w7azXKPCjwa7fez5SyPYH98 sRO55pJQILeQ5X4CrwUUwfG3CircaAfBlkNwv/t1/WWG/pRUSiT0Ar6x/lE507l9 UXfh6d1QpAxpb7HMQWKYuNnMbjZ/SKXL4Amc8UXmoK8Z8PkuPeqTqxLgQ662VwW2 xPV2MG0arvunTc5WVULSmZVggFLOjZtr5hW+Bm7yvSYyCrXtlTeR9vEkcPnVsuhH fFtA7mb301RJINJ2yF61Uq3p9v+3f3UOMeIaF8bFivFd84FipZe9JqA1Dj3iogja pVNjvKRGbXcpYDkz7cfuKDOvLlU4zL+4HcEdwMz1USzlZzHqMjeWzzWVurweLQvq 8bzGVc467LqK2U25zQtO5k1J/0kQe0wWFAFNPUFtscVTgu0wvTpdZZq2uyHiqT94 roiKEjLxPm8khSO52IFu =3Wdm -----END PGP SIGNATURE----- Merge tag 'iommu-fixes-v3.15-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu Pull iommu fixes from Joerg Roedel: "Three fixes for the AMD IOMMU driver: - fix a locking issue around get_user_pages() - fix two issues with device aliasing and exclusion range handling" * tag 'iommu-fixes-v3.15-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu: iommu/amd: fix enabling exclusion range for an exact device iommu/amd: Take mmap_sem when calling get_user_pages iommu/amd: Fix interrupt remapping for aliased devices
This commit is contained in:
commit
989d216f86
|
@ -3999,7 +3999,7 @@ static struct irq_remap_table *get_irq_table(u16 devid, bool ioapic)
|
|||
iommu_flush_dte(iommu, devid);
|
||||
if (devid != alias) {
|
||||
irq_lookup_table[alias] = table;
|
||||
set_dte_irq_entry(devid, table);
|
||||
set_dte_irq_entry(alias, table);
|
||||
iommu_flush_dte(iommu, alias);
|
||||
}
|
||||
|
||||
|
|
|
@ -788,7 +788,7 @@ static void __init set_device_exclusion_range(u16 devid, struct ivmd_header *m)
|
|||
* per device. But we can enable the exclusion range per
|
||||
* device. This is done here
|
||||
*/
|
||||
set_dev_entry_bit(m->devid, DEV_ENTRY_EX);
|
||||
set_dev_entry_bit(devid, DEV_ENTRY_EX);
|
||||
iommu->exclusion_start = m->range_start;
|
||||
iommu->exclusion_length = m->range_length;
|
||||
}
|
||||
|
|
|
@ -504,8 +504,10 @@ static void do_fault(struct work_struct *work)
|
|||
|
||||
write = !!(fault->flags & PPR_FAULT_WRITE);
|
||||
|
||||
down_read(&fault->state->mm->mmap_sem);
|
||||
npages = get_user_pages(fault->state->task, fault->state->mm,
|
||||
fault->address, 1, write, 0, &page, NULL);
|
||||
up_read(&fault->state->mm->mmap_sem);
|
||||
|
||||
if (npages == 1) {
|
||||
put_page(page);
|
||||
|
|
Loading…
Reference in New Issue