[Bug 342926] Re: No PCI IOMEM space available below 4GB

TJ ubuntu at tjworld.net
Sat Mar 14 22:00:57 UTC 2009


** Description changed:

  Binary package hint: nvidia-glx-180
  
  This can affect almost all releases (6.10 7.04, 7.10, 8.04, 8.10, 9.04+)
  
  It usually only shows up dramatically with video cards that have large
  memory (e.g. 256MB) and on systems that
  
  a) have 3GB or more RAM and/or
  b) have 64-bit CPUs on 32-bit north-bridge chipsets (e.g. Intel 945)
  
  Typical symptom: "failed to load the nvidia kernel module"
  
  This issue could affect all versions of the Nvidia proprietary drivers
  and others.
  
  Recently I've seen several users in IRC #ubuntu asking for help but
  without solving the issue. When I saw Keith Dewitt asking the same
  question on 2009-03-14 I arranged with him to access his system via SSH
  and a multiuser screen session to diagnose the issue. Keith was very
  patient and supportive and his assistance led directly to this
  discovery.
  
  There are also threads on the nvidia forums with the same issues.
  
  The symptoms are that users report that systems with Nvidia-based
  graphics cards won't start the X server successfully. There are a wide
  range of reports that don't immediately pin-point the cause.
  
  The fact the nvidia kernel module failed to load is the biggest clue.
  
  Check dmesg and /var/log/kern.log for something along these lines:
  
  [   20.137717] nvidia: module license 'NVIDIA' taints kernel.                   
  [   20.412849] ACPI: PCI Interrupt Link [LNEB] enabled at IRQ 18                
  [   20.412858] nvidia 0000:02:00.0: PCI INT A -> Link[LNEB] -> GSI 18 (level, low) -> IRQ 18                                                                    
  [   20.412862] NVRM: This PCI I/O region assigned to your NVIDIA device is invalid:
  [   20.412862] NVRM: BAR1 is 256M @ 0x30000000 (PCI:0002:00.0)                  
  [   20.412865] NVRM: This is a 64-bit BAR mapped above 4GB by the system BIOS or
  [   20.412865] NVRM: Linux kernel. The NVIDIA Linux graphics driver and other   
  [   20.412866] NVRM: system software do not currently support this configuration
  [   20.412867] NVRM: reliably.                                                  
  [   20.412872] nvidia: probe of 0000:02:00.0 failed with error -1               
  [   20.412887] NVRM: The NVIDIA probe routine failed for 1 device(s).           
  [   20.412889] NVRM: None of the NVIDIA graphics adapters were initialized!     
  
  Also check /var/log/Xorg.0.log or /var/log/Xorg.0.log.old for this tell-
  tale:
  
  (--) PCI:*(0 at 2:0:0) nVidia Corporation GeForce 8400 GS rev 161, Mem @ 0xfd000000
  /16777216, 0x130000000/268435456, 0xfa000000/33554432, I/O @ 0x0000ec00/128, BIO
  S @ 0x????????/131072
  
  (**) NVIDIA(0): Depth 24, (--) framebuffer bpp 32
  (==) NVIDIA(0): RGB weight 888
  (==) NVIDIA(0): Default visual is TrueColor
  (==) NVIDIA(0): Using gamma correction (1.0, 1.0, 1.0)
  (**) NVIDIA(0): Enabling RENDER acceleration
  (II) NVIDIA(0): Support for GLX with the Damage and Composite X extensions is
  (II) NVIDIA(0):     enabled.
  (EE) NVIDIA(0): Failed to load the NVIDIA kernel module!
  (EE) NVIDIA(0):  *** Aborting ***
  (II) UnloadModule: "nvidia"
  
  Notice that the video card's IOMEM allocation is at 5GB
  (0x130000000/268435456 = 5GB/256MB).
  
  /var/log/dmesg shows:
  
  [    0.000000]  BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
  
  [    0.477047] pci 0000:00:0b.0: BAR 9: can't allocate resource
  [    0.477047] pci 0000:02:00.0: BAR 1: can't allocate resource 
  
  lspci -nn reveals:
  00:0b.0 PCI bridge [0604]: nVidia Corporation MCP73 PCI Express bridge [10de:056
  e] (rev a1)
  02:00.0 VGA compatible controller [0300]: nVidia Corporation GeForce 8400 GS [10
  de:0404] (rev a1)
  
  lspci -vvnn -s 02:00.0
  
  02:00.0 VGA compatible controller [0300]: nVidia Corporation GeForce 8400 GS [10
  de:0404] (rev a1)                                                               
          Subsystem: eVga.com. Corp. Device [3842:c738]                           
          Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Step
  ping- SERR- FastB2B- DisINTx-                                                   
          Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- 
  <MAbort- >SERR- <PERR- INTx-                                                    
          Latency: 0, Cache Line Size: 64 bytes
          Interrupt: pin A routed to IRQ 18
          Region 0: Memory at fd000000 (32-bit, non-prefetchable) [size=16M]
          Region 1: Memory at 130000000 (64-bit, prefetchable) [size=256M]
          Region 3: Memory at fa000000 (64-bit, non-prefetchable) [size=32M]
          Region 5: I/O ports at ec00 [size=128]
          Expansion ROM at febe0000 [disabled] [size=128K]
          Capabilities: <access denied>
          Kernel modules: nvidia, nvidiafb
  
  The reason for the failure is that the video chipset's PCI IOMEM RAM (in
- this case 256MB) cannot be allocated in the PCI IOMEM region below $GB
+ this case 256MB) cannot be allocated in the PCI IOMEM region below 4GB
  (from 3GB-4GB) since other devices have already been given assignments
  that mean there isn't a 256MB gap available on a 256MB boundary - in
  other words, either at 3GB or 3.25GB.
  
  The host system has 4GB of system RAM which causes the kernel to prevent
  the use of the 3GB-3.25GB range, and other allocations prevent the use
  other ranges.
  
  Workarounds:
  
  a) alter the BIOS video IOMEM position to below 4GB (on 64-bit architectures), or
  b) some BIOSes allow setting the "top of memory below 4GB" If so, set it to less than 2.75GB and try progressively lower values - one should allow a hole large enough for the video IOMEM to fit below 4GB, or
  c) reduce the system's RAM to less than 2.5GB to leave sufficient free space.
  
  For the last year I've had an ongoing project to write a completely new
  PCI IOMEM system for the Linux kernel. I've added the mainline bug
  report that triggered the development to this report. Additionally, here
  is a link to my Wiki describing the issue and solutions.
  
  http://tjworld.net/wiki/Linux/PCIDynamicResourceAllocationManagement

** Description changed:

  Binary package hint: nvidia-glx-180
  
  This can affect almost all releases (6.10 7.04, 7.10, 8.04, 8.10, 9.04+)
  
  It usually only shows up dramatically with video cards that have large
  memory (e.g. 256MB) and on systems that
  
  a) have 3GB or more RAM and/or
  b) have 64-bit CPUs on 32-bit north-bridge chipsets (e.g. Intel 945)
  
  Typical symptom: "failed to load the nvidia kernel module"
  
  This issue could affect all versions of the Nvidia proprietary drivers
  and others.
  
  Recently I've seen several users in IRC #ubuntu asking for help but
  without solving the issue. When I saw Keith Dewitt asking the same
  question on 2009-03-14 I arranged with him to access his system via SSH
  and a multiuser screen session to diagnose the issue. Keith was very
  patient and supportive and his assistance led directly to this
  discovery.
  
  There are also threads on the nvidia forums with the same issues.
  
  The symptoms are that users report that systems with Nvidia-based
  graphics cards won't start the X server successfully. There are a wide
  range of reports that don't immediately pin-point the cause.
  
  The fact the nvidia kernel module failed to load is the biggest clue.
  
  Check dmesg and /var/log/kern.log for something along these lines:
  
  [   20.137717] nvidia: module license 'NVIDIA' taints kernel.                   
  [   20.412849] ACPI: PCI Interrupt Link [LNEB] enabled at IRQ 18                
  [   20.412858] nvidia 0000:02:00.0: PCI INT A -> Link[LNEB] -> GSI 18 (level, low) -> IRQ 18                                                                    
  [   20.412862] NVRM: This PCI I/O region assigned to your NVIDIA device is invalid:
  [   20.412862] NVRM: BAR1 is 256M @ 0x30000000 (PCI:0002:00.0)                  
  [   20.412865] NVRM: This is a 64-bit BAR mapped above 4GB by the system BIOS or
  [   20.412865] NVRM: Linux kernel. The NVIDIA Linux graphics driver and other   
  [   20.412866] NVRM: system software do not currently support this configuration
  [   20.412867] NVRM: reliably.                                                  
  [   20.412872] nvidia: probe of 0000:02:00.0 failed with error -1               
  [   20.412887] NVRM: The NVIDIA probe routine failed for 1 device(s).           
  [   20.412889] NVRM: None of the NVIDIA graphics adapters were initialized!     
  
  Also check /var/log/Xorg.0.log or /var/log/Xorg.0.log.old for this tell-
  tale:
  
  (--) PCI:*(0 at 2:0:0) nVidia Corporation GeForce 8400 GS rev 161, Mem @ 0xfd000000
  /16777216, 0x130000000/268435456, 0xfa000000/33554432, I/O @ 0x0000ec00/128, BIO
  S @ 0x????????/131072
  
  (**) NVIDIA(0): Depth 24, (--) framebuffer bpp 32
  (==) NVIDIA(0): RGB weight 888
  (==) NVIDIA(0): Default visual is TrueColor
  (==) NVIDIA(0): Using gamma correction (1.0, 1.0, 1.0)
  (**) NVIDIA(0): Enabling RENDER acceleration
  (II) NVIDIA(0): Support for GLX with the Damage and Composite X extensions is
  (II) NVIDIA(0):     enabled.
  (EE) NVIDIA(0): Failed to load the NVIDIA kernel module!
  (EE) NVIDIA(0):  *** Aborting ***
  (II) UnloadModule: "nvidia"
  
  Notice that the video card's IOMEM allocation is at 5GB
  (0x130000000/268435456 = 5GB/256MB).
  
  /var/log/dmesg shows:
  
  [    0.000000]  BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
  
  [    0.477047] pci 0000:00:0b.0: BAR 9: can't allocate resource
  [    0.477047] pci 0000:02:00.0: BAR 1: can't allocate resource 
  
  lspci -nn reveals:
  00:0b.0 PCI bridge [0604]: nVidia Corporation MCP73 PCI Express bridge [10de:056
  e] (rev a1)
  02:00.0 VGA compatible controller [0300]: nVidia Corporation GeForce 8400 GS [10
  de:0404] (rev a1)
  
  lspci -vvnn -s 02:00.0
  
  02:00.0 VGA compatible controller [0300]: nVidia Corporation GeForce 8400 GS [10
  de:0404] (rev a1)                                                               
          Subsystem: eVga.com. Corp. Device [3842:c738]                           
          Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Step
  ping- SERR- FastB2B- DisINTx-                                                   
          Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- 
  <MAbort- >SERR- <PERR- INTx-                                                    
          Latency: 0, Cache Line Size: 64 bytes
          Interrupt: pin A routed to IRQ 18
          Region 0: Memory at fd000000 (32-bit, non-prefetchable) [size=16M]
          Region 1: Memory at 130000000 (64-bit, prefetchable) [size=256M]
          Region 3: Memory at fa000000 (64-bit, non-prefetchable) [size=32M]
          Region 5: I/O ports at ec00 [size=128]
          Expansion ROM at febe0000 [disabled] [size=128K]
          Capabilities: <access denied>
          Kernel modules: nvidia, nvidiafb
  
  The reason for the failure is that the video chipset's PCI IOMEM RAM (in
  this case 256MB) cannot be allocated in the PCI IOMEM region below 4GB
  (from 3GB-4GB) since other devices have already been given assignments
  that mean there isn't a 256MB gap available on a 256MB boundary - in
  other words, either at 3GB or 3.25GB.
  
  The host system has 4GB of system RAM which causes the kernel to prevent
  the use of the 3GB-3.25GB range, and other allocations prevent the use
- other ranges.
+ of other ranges.
  
  Workarounds:
  
  a) alter the BIOS video IOMEM position to below 4GB (on 64-bit architectures), or
- b) some BIOSes allow setting the "top of memory below 4GB" If so, set it to less than 2.75GB and try progressively lower values - one should allow a hole large enough for the video IOMEM to fit below 4GB, or
+ b) some BIOSes allow setting the "top of memory below 4GB" If so, set it to less than or equal to 2.75GB and try progressively lower values - one should allow a hole large enough for the video IOMEM to fit starting at 3GB (below 4GB), or
  c) reduce the system's RAM to less than 2.5GB to leave sufficient free space.
  
  For the last year I've had an ongoing project to write a completely new
  PCI IOMEM system for the Linux kernel. I've added the mainline bug
  report that triggered the development to this report. Additionally, here
  is a link to my Wiki describing the issue and solutions.
  
  http://tjworld.net/wiki/Linux/PCIDynamicResourceAllocationManagement

-- 
No PCI IOMEM space available below 4GB
https://bugs.launchpad.net/bugs/342926
You received this bug notification because you are a member of Kernel
Bugs, which is subscribed to Linux.




More information about the kernel-bugs mailing list