linux/drivers/pci
Youquan Song 6dd9a7c737 intel-iommu: Enable super page (2MiB, 1GiB, etc.) support
There are no externally-visible changes with this. In the loop in the
internal __domain_mapping() function, we simply detect if we are mapping:
  - size >= 2MiB, and
  - virtual address aligned to 2MiB, and
  - physical address aligned to 2MiB, and
  - on hardware that supports superpages.

(and likewise for larger superpages).

We automatically use a superpage for such mappings. We never have to
worry about *breaking* superpages, since we trust that we will always
*unmap* the same range that was mapped. So all we need to do is ensure
that dma_pte_clear_range() will also cope with superpages.

Adjust pfn_to_dma_pte() to take a superpage 'level' as an argument, so
it can return a PTE at the appropriate level rather than always
extending the page tables all the way down to level 1. Again, this is
simplified by the fact that we should never encounter existing small
pages when we're creating a mapping; any old mapping that used the same
virtual range will have been entirely removed and its obsolete page
tables freed.

Provide an 'intel_iommu=sp_off' argument on the command line as a
chicken bit. Not that it should ever be required.

==

The original commit seen in the iommu-2.6.git was Youquan's
implementation (and completion) of my own half-baked code which I'd
typed into an email. Followed by half a dozen subsequent 'fixes'.

I've taken the unusual step of rewriting history and collapsing the
original commits in order to keep the main history simpler, and make
life easier for the people who are going to have to backport this to
older kernels. And also so I can give it a more coherent commit comment
which (hopefully) gives a better explanation of what's going on.

The original sequence of commits leading to identical code was:

Youquan Song (3):
      intel-iommu: super page support
      intel-iommu: Fix superpage alignment calculation error
      intel-iommu: Fix superpage level calculation error in dma_pfn_level_pte()

David Woodhouse (4):
      intel-iommu: Precalculate superpage support for dmar_domain
      intel-iommu: Fix hardware_largepage_caps()
      intel-iommu: Fix inappropriate use of superpages in __domain_mapping()
      intel-iommu: Fix phys_pfn in __domain_mapping for sglist pages

Signed-off-by: Youquan Song <youquan.song@intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
2011-06-01 12:26:35 +01:00
..
hotplug Fix common misspellings 2011-03-31 11:26:23 -03:00
pcie Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6 2011-03-25 21:01:43 -07:00
.gitignore
access.c PCI: output FW warning in pci_read/write_vpd 2010-05-18 15:00:25 -07:00
bus.c Revert "PCI: allocate bus resources from the top down" 2010-12-17 10:00:54 -08:00
dmar.c intel-iommu: Remove obsolete comment from detect_intel_iommu 2011-05-24 13:08:31 +01:00
hotplug-pci.c
hotplug.c
htirq.c drivers: Final irq namespace conversion 2011-03-29 14:48:19 +02:00
intel-iommu.c intel-iommu: Enable super page (2MiB, 1GiB, etc.) support 2011-06-01 12:26:35 +01:00
intr_remapping.c Fix common misspellings 2011-03-31 11:26:23 -03:00
intr_remapping.h intr-remap: generic support for remapping HPET MSIs 2009-08-27 23:33:20 +02:00
ioapic.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
iov.c PCI: fix pci_resource_alignment prototype 2010-09-09 13:41:25 -07:00
iova.c Fix common misspellings 2011-03-31 11:26:23 -03:00
irq.c PCI: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-07 11:12:23 -08:00
Kconfig PCI: pci-label: Fix build failure when CONFIG_NLS is set to 'm' by allmodconfig 2011-04-12 08:39:02 -07:00
Makefile PCI: pci-label: Fix build failure when CONFIG_NLS is set to 'm' by allmodconfig 2011-04-12 08:39:02 -07:00
msi.c drivers: Final irq namespace conversion 2011-03-29 14:48:19 +02:00
msi.h PCI: MSI: Move MSI-X entry definition to pci_regs.h 2010-12-23 12:53:07 -08:00
pci-acpi.c ACPI: Remove the wakeup.run_wake_count device field 2011-02-24 19:58:53 +01:00
pci-driver.c PM / Hibernate: Introduce CONFIG_HIBERNATE_CALLBACKS 2011-04-11 22:54:42 +02:00
pci-label.c PCI: label: remove #include of ACPI header to avoid warnings 2011-03-16 10:24:34 -07:00
pci-stub.c PCI: pci-stub: ignore zero-length id parameters 2010-12-23 12:53:52 -08:00
pci-sysfs.c Fix common misspellings 2011-03-31 11:26:23 -03:00
pci.c PCI: PCIe links may not get configured for ASPM under POWERSAVE mode 2011-03-21 09:40:43 -07:00
pci.h PCI: Export ACPI _DSM provided firmware instance number and string name to sysfs 2011-03-04 10:41:56 -08:00
probe.c PCI: Avoid potential NULL pointer dereference in pci_scan_bridge 2011-02-08 13:08:05 -08:00
proc.c BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
quirks.c Fix common misspellings 2011-03-31 11:26:23 -03:00
remove.c PCI: eliminate redundant pci_stop_dev() call from pci_destroy_dev() 2009-06-11 12:04:19 -07:00
rom.c PCI: fix rom.c kernel-doc warning 2009-02-13 12:01:56 -08:00
search.c PCI: use for_each_pci_dev() 2010-07-30 09:47:22 -07:00
setup-bus.c PCI: Clear bridge resource flags if requested size is 0 2011-05-16 18:33:35 -07:00
setup-irq.c PCI: use for_each_pci_dev() 2010-07-30 09:47:22 -07:00
setup-res.c PCI: fix message typo 2010-10-17 20:03:05 -07:00
slot.c PCI: bus speed strings should be const 2010-08-31 15:28:00 -07:00
syscall.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
vpd.c pci: Add helper to search for VPD keywords 2010-02-28 00:43:33 -08:00
xen-pcifront.c pci/xen: Cleanup: convert int** to int[] 2011-02-18 12:41:49 -05:00