1. 17 2月, 2010 1 次提交
  2. 13 1月, 2010 1 次提交
  3. 14 12月, 2009 1 次提交
  4. 10 11月, 2009 2 次提交
    • F
      x86: Handle HW IOMMU initialization failure gracefully · 75f1cdf1
      FUJITA Tomonori 提交于
      If HW IOMMU initialization fails (Intel VT-d often does this,
      typically due to BIOS bugs), we fall back to nommu. It doesn't
      work for the majority since nowadays we have more than 4GB
      memory so we must use swiotlb instead of nommu.
      
      The problem is that it's too late to initialize swiotlb when HW
      IOMMU initialization fails. We need to allocate swiotlb memory
      earlier from bootmem allocator. Chris explained the issue in
      detail:
      
        http://marc.info/?l=linux-kernel&m=125657444317079&w=2
      
      The current x86 IOMMU initialization sequence is too complicated
      and handling the above issue makes it more hacky.
      
      This patch changes x86 IOMMU initialization sequence to handle
      the above issue cleanly.
      
      The new x86 IOMMU initialization sequence are:
      
      1. we initialize the swiotlb (and setting swiotlb to 1) in the case
         of (max_pfn > MAX_DMA32_PFN && !no_iommu). dma_ops is set to
         swiotlb_dma_ops or nommu_dma_ops. if swiotlb usage is forced by
         the boot option, we finish here.
      
      2. we call the detection functions of all the IOMMUs
      
      3. the detection function sets x86_init.iommu.iommu_init to the
         IOMMU initialization function (so we can avoid calling the
         initialization functions of all the IOMMUs needlessly).
      
      4. if the IOMMU initialization function doesn't need to swiotlb
         then sets swiotlb to zero (e.g. the initialization is
         sucessful).
      
      5. if we find that swiotlb is set to zero, we free swiotlb
         resource.
      Signed-off-by: NFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
      Cc: chrisw@sous-sol.org
      Cc: dwmw2@infradead.org
      Cc: joerg.roedel@amd.com
      Cc: muli@il.ibm.com
      LKML-Reference: <1257849980-22640-10-git-send-email-fujita.tomonori@lab.ntt.co.jp>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      75f1cdf1
    • F
      x86: GART: Convert gart_iommu_hole_init() to use iommu_init hook · de957628
      FUJITA Tomonori 提交于
      This changes gart_iommu_hole_init() to set gart_iommu_init() to
      iommu_init hook if gart_iommu_hole_init() finds the GART IOMMU.
      
      We can kill the code to check if we found the IOMMU in
      gart_iommu_init() since gart_iommu_hole_init() sets
      gart_iommu_init() only when it found the IOMMU.
      Signed-off-by: NFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
      Cc: chrisw@sous-sol.org
      Cc: dwmw2@infradead.org
      Cc: joerg.roedel@amd.com
      Cc: muli@il.ibm.com
      LKML-Reference: <1257849980-22640-4-git-send-email-fujita.tomonori@lab.ntt.co.jp>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      de957628
  5. 01 9月, 2009 1 次提交
  6. 28 11月, 2008 1 次提交
  7. 30 9月, 2008 1 次提交
  8. 11 7月, 2008 1 次提交
  9. 08 7月, 2008 2 次提交
  10. 23 6月, 2008 1 次提交
    • Y
      x86: change early_gart_iommu_check() back to any_mapped · 0754557d
      Yinghai Lu 提交于
      Kevin Winchester reported a GART related direct rendering failure against
      linux-next-20080611, which shows up via these log entries:
      
       PCI: Using ACPI for IRQ routing
       PCI: Cannot allocate resource region 0 of device 0000:00:00.0
       agpgart: Detected AGP bridge 0
       agpgart: Aperture conflicts with PCI mapping.
       agpgart: Aperture from AGP @ e0000000 size 128 MB
       agpgart: Aperture conflicts with PCI mapping.
       agpgart: No usable aperture found.
       agpgart: Consider rebooting with iommu=memaper=2 to get a good aperture.
      
      instead of the expected:
      
       PCI: Using ACPI for IRQ routing
       agpgart: Detected AGP bridge 0
       agpgart: Aperture from AGP @ e0000000 size 128 MB
      
      Kevin bisected it down to this change in tip/x86/gart:
      "x86: checking aperture size order".
      
      agp check is using request_mem_region(), and could fail if e820 is reserved...
      
      change it back to e820_any_mapped().
      Reported-and-bisected-by: N"Kevin Winchester" <kjwinchester@gmail.com>
      Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
      Tested-by: NKevin Winchester <kjwinchester@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      0754557d
  11. 12 6月, 2008 1 次提交
  12. 05 6月, 2008 2 次提交
    • P
      x86: aperture_64.c: corner case wrong · 4f384f8b
      Pavel Machek 提交于
      If
      
      fix == 0, aper_enabled == 1, gart_fix_e820 == 0
      
      	if (!fix && !aper_enabled)
      		return;
      
      	if (gart_fix_e820 && !fix && aper_enabled) {
      		if (e820_any_mapped(aper_base, aper_base + aper_size,
      				    E820_RAM)) {
      			/* reserve it, so we can reuse it in second kernel */
      			printk(KERN_INFO "update e820 for GART\n");
      			add_memory_region(aper_base, aper_size, E820_RESERVED);
      			update_e820();
      		}
      		return;
      	}
      
      	/* different nodes have different setting, disable them all atfirst*/
      
      we'll fall back here and disable all the settings, even when they were
      all consistent.
      
      What about this? (I hope it compiles...)
      Signed-off-by: NPavel Machek <pavel@suse.cz>
      Cc: Dave Jones <davej@codemonkey.org.uk>
      Cc: Andi Kleen <andi@firstfloor.org>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      4f384f8b
    • P
      aperture_64.c: duplicated code, buggy? · fa5b8a30
      Pavel Machek 提交于
      Hi!
      
      void __init early_gart_iommu_check(void)
      
      contains
      
      	for (num = 24; num < 32; num++) {
      		if (!early_is_k8_nb(read_pci_config(0, num, 3, 0x00)))
      			continue;
      
      loop, with very similar loop duplicated in
      
      void __init gart_iommu_hole_init(void)
      
      . First copy of a loop seems to be buggy, too. It uses 0 as a "nothing
      set" value, which may actually bite us in last_aper_enabled case
      (because it may be often zero).
      
      (Beware, it is hard to test this patch, because this code has about
      2^8 different code paths, depending on hardware and cmdline settings).
      
      Plus, the second loop does not check for consistency of
      aper_enabled. Should it?
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      fa5b8a30
  13. 28 5月, 2008 1 次提交
  14. 22 5月, 2008 1 次提交
  15. 13 5月, 2008 4 次提交
    • Y
      x86: clean up aperture_64.c · 55c0d721
      Yinghai Lu 提交于
      1. use symbolic register names where appropriate.
      2. num to bus or slot changing
      3. handle for new opteron for bus other than 0
      Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      55c0d721
    • Y
      x86_64: allocate gart aperture from 512M · 7677b2ef
      Yinghai Lu 提交于
      because we try to reserve dma32 early, so we have chance to get aperture
      from 64M.
      
      with some sequence aperture allocated from RAM, could become E820_RESERVED.
      
      and then if doing a kexec with a big kernel that uncompressed size is above
      64M we could have a range conflict with still using gart.
      
      So allocate gart aperture from 512M instead.
      
      Also change the fallback_aper_order to 5, because we don't have chance to get
      2G or 4G aperture.
      Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      7677b2ef
    • Y
      x86: checking aperture size order · 8c9fd91a
      Yinghai Lu 提交于
      some systems are using 32M for gart and agp when memory is less than 4G.
      Kernel will reject and try to allcate another 64M that is not needed,
      and we will waste 64M of perfectly good RAM.
      
      this patch adds a workaround by checking aper_base/order between NB and
      agp bridge. If they are the same, and memory size is less than 4G, it
      will allow it.
      Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      8c9fd91a
    • Y
      x86: agp_gart size checking for buggy device · 1edc1ab3
      Yinghai Lu 提交于
      while looking at Rafael J. Wysocki's system boot log,
      
      I found a funny printout:
      
      	Node 0: aperture @ de000000 size 32 MB
      	Aperture too small (32 MB)
      	AGP bridge at 00:04:00
      	Aperture from AGP @ de000000 size 4096 MB (APSIZE 0)
      	Aperture too small (0 MB)
      	Your BIOS doesn't leave a aperture memory hole
      	Please enable the IOMMU option in the BIOS setup
      	This costs you 64 MB of RAM
      	Mapping aperture over 65536 KB of RAM @ 4000000
      
      	...
      
      	agpgart: Detected AGP bridge 20
      	agpgart: Aperture pointing to RAM
      	agpgart: Aperture from AGP @ de000000 size 4096 MB
      	agpgart: Aperture too small (0 MB)
      	agpgart: No usable aperture found.
      	agpgart: Consider rebooting with iommu=memaper=2 to get a good aperture.
      
      it means BIOS allocated the correct gart on the NB and AGP bridge, but
      because a bug in the silicon (the agp bridge reports the wrong order,
      it wants 4G instead) the kernel will reject that allocation.
      
      Also, because the size is only 32MB, and we try to get another 64M for gart,
      late fix_northbridge can not revert that change because it still reads
      the wrong size from agp bridge.
      
      So try to double check the order value from the agp bridge, before calling
      aperture_valid().
      
      [ mingo@elte.hu: 32-bit fix. ]
      Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      1edc1ab3
  16. 17 4月, 2008 1 次提交
  17. 22 3月, 2008 1 次提交
  18. 30 1月, 2008 5 次提交
    • Y
      x86: change aper valid checking sequence · 261a5ec3
      Yinghai Lu 提交于
      old sequence:
        size ==> >4G  ==> point to RAM
      
      changed to:
        >4G ==> point to RAM ==> size
      
      some bios even leave aper to unclear, so check size at last.
      
      To avoid reporting:
      
        Node 0: Aperture @ 4a42000000 size 32 MB
        Aperture too small (32 MB)
      
      with this change we will get:
      
        Node 0: Aperture @ 4a42000000 size 32 MB
        Aperture beyond 4G. Ignoring.
      Signed-off-by: NYinghai Lu <yinghai.lu@sun.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      261a5ec3
    • Y
      x86: checking aperture report for node instead · 47db4c3e
      Yinghai Lu 提交于
      currently when gart iommu is enabled by BIOS or previous we got
      
      "
      Checking aperture...
      CPU 0: aperture @4000000 size 64MB
      CPU 1: aperture @4000000 size 64MB
      "
      we should use use Node instead.
      
      we will get
      "
      Checking aperture...
      Node 0: aperture @4000000 size 64MB
      Node 1: aperture @4000000 size 64MB
      "
      Signed-off-by: NYinghai Lu <yinghai.lu@sun.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      47db4c3e
    • Y
      x86: disable the GART early, 64-bit · aaf23042
      Yinghai Lu 提交于
      For K8 system: 4G RAM with memory hole remapping enabled, or more than
      4G RAM installed.
      
      when try to use kexec second kernel, and the first doesn't include
      gart_shutdown. the second kernel could have different aper position than
      the first kernel. and second kernel could use that hole as RAM that is
      still used by GART set by the first kernel. esp. when try to kexec
      2.6.24 with sparse mem enable from previous kernel (from RHEL 5 or SLES
      10). the new kernel will use aper by GART (set by first kernel) for
      vmemmap. and after new kernel setting one new GART. the position will be
      real RAM. the _mapcount set is lost.
      
      Bad page state in process 'swapper'
      page:ffffe2000e600020 flags:0x0000000000000000 mapping:0000000000000000 mapcount:1 count:0
      Trying to fix it up, but a reboot is needed
      Backtrace:
      Pid: 0, comm: swapper Not tainted 2.6.24-rc7-smp-gcdf71a10-dirty #13
      
      Call Trace:
       [<ffffffff8026401f>] bad_page+0x63/0x8d
       [<ffffffff80264169>] __free_pages_ok+0x7c/0x2a5
       [<ffffffff80ba75d1>] free_all_bootmem_core+0xd0/0x198
       [<ffffffff80ba3a42>] numa_free_all_bootmem+0x3b/0x76
       [<ffffffff80ba3461>] mem_init+0x3b/0x152
       [<ffffffff80b959d3>] start_kernel+0x236/0x2c2
       [<ffffffff80b9511a>] _sinittext+0x11a/0x121
      
      and
       [ffffe2000e600000-ffffe2000e7fffff] PMD ->ffff81001c200000 on node 0
      phys addr is : 0x1c200000
      
      RHEL 5.1 kernel -53 said:
      PCI-DMA: aperture base @ 1c000000 size 65536 KB
      
      new kernel said:
      Mapping aperture over 65536 KB of RAM @ 3c000000
      
      So could try to disable that GART if possible.
      
      According to Ingo
      
      > hm, i'm wondering, instead of modifying the GART, why dont we simply
      > _detect_ whatever GART settings we have inherited, and propagate that
      > into our e820 maps? I.e. if there's inconsistency, then punch that out
      > from the memory maps and just dont use that memory.
      >
      > that way it would not matter whether the GART settings came from a [old
      > or crashing] Linux kernel that has not called gart_iommu_shutdown(), or
      > whether it's a BIOS that has set up an aperture hole inconsistent with
      > the memory map it passed. (or the memory map we _think_ i tried to pass
      > us)
      >
      > it would also be more robust to only read and do a memory map quirk
      > based on that, than actively trying to change the GART so early in the
      > bootup. Later on we have to re-enable the GART _anyway_ and have to
      > punch a hole for it.
      >
      > and as a bonus, we would have shored up our defenses against crappy
      > BIOSes as well.
      
      add e820 modification for gart inconsistent setting.
      
      gart_fix_e820=off could be used to disable e820 fix.
      Signed-off-by: NYinghai Lu <yinghai.lu@sun.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      aaf23042
    • I
      x86: clean up arch/x86/kernel/aperture_64.c printk()s · 31183ba8
      Ingo Molnar 提交于
      clean up arch/x86/kernel/aperture_64.c printk()s.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      31183ba8
    • I
      x86: clean up arch/x86/kernel/aperture_64.c · c140df97
      Ingo Molnar 提交于
      whitespace cleanup. No code changed:
      
         text    data     bss     dec     hex filename
         2080      76       4    2160     870 aperture_64.o.before
         2080      76       4    2160     870 aperture_64.o.after
      
                                             errors   lines of code   errors/KLOC
       arch/x86/kernel/aperture_64.c            114             299         381.2
       arch/x86/kernel/aperture_64.c              0             315             0
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      c140df97
  19. 30 10月, 2007 2 次提交
  20. 11 10月, 2007 2 次提交
  21. 22 7月, 2007 2 次提交
  22. 12 5月, 2007 1 次提交
  23. 03 5月, 2007 1 次提交
  24. 26 9月, 2006 3 次提交
    • A
      [PATCH] x86: Allow disabling early pci scans with pci=noearly or disallowing conf1 · 0637a70a
      Andi Kleen 提交于
      Some buggy systems can machine check when config space accesses
      happen for some non existent devices.  i386/x86-64 do some early
      device scans that might trigger this. Allow pci=noearly to disable
      this. Also when type 1 is disabling also don't do any early
      accesses which are always type1.
      
      This moves the pci= configuration parsing to be a early parameter.
      I don't think this can break anything because it only changes
      a single global that is only used by PCI.
      
      Cc: gregkh@suse.de
      Cc: Trammell Hudson <hudson@osresearch.net>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      0637a70a
    • A
      [PATCH] Insert GART region into resource map · 56dd669a
      Aaron Durbin 提交于
      Patch inserts the GART region into the iomem resource map. The GART will then
      be visible within /proc/iomem. It will also allow for other users
      utilizing the GART to subreserve the region (agp or IOMMU).
      Signed-off-by: NAaron Durbin <adurbin@google.com>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      56dd669a
    • A
      [PATCH] A few trivial spelling and grammar fixes · d5d9ca6d
      Adam Henley 提交于
      A few trivial spelling and grammar mistakes picked up in
      "arch/x86_64/aperture.c", "arch/x86_64/crash.c" and
      "arch/x86_64/apic.c". I think all are correct fixes but am ever aware
      of my fallibility :o) This is my first patch submission so all
      feedback is appreciated, esp. WRT CCing to Linus, Andi and
      trivial@kernel.org, is this correct? And which is the most appropriate
      kernel version to diff against? If any.
      
      Should apply cleanly to 2.6.18-rc1
      Signed-off-by: NAdam Henley <adamazing@gmail.com>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      
      -  adam
      d5d9ca6d
  25. 01 7月, 2006 1 次提交