public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* 64bit PCI IORESOURCE_MEM bugs
@ 2005-07-06 18:24 Thomas Crowley
  0 siblings, 0 replies; 3+ messages in thread
From: Thomas Crowley @ 2005-07-06 18:24 UTC (permalink / raw)
  To: linux-kernel

I am running linux 2.6.12.2 with the memmap patch, on an Intel 64 bit 
machine with 16 Gigs of RAM.  I have written a device driver that DMAs to 14 
Gigs of RAM.

I am attempting to give 1 Gig of RAM to the OS and 1Gig of address space for 
PCI addressing and 14 Gigs for my DMA.  I have added the following to my 
grub command line:
memmap=exactmap memmap=640K@0 memmap=1024M@1M memmap=2000M$2048M 
memmap=12000M$4048M

This does not seam to be working.  I think I have run into some bugs in the 
kernel unless I am mistaken how physical RAM addressing and the bus 
addressing work.

1) in arch/x86_64/kernel/e820.c    the e820_reserve_resources function the 
line if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL) makes it so 
any region that
     starts below the 4Gig mark but ends above 4Gig mark is ignored.  So I 
have been forced to reserve the 15 Gigs using two different memmap calls one 
that reserves memory below 4 Gigs and one that reserves the memory above 4 
Gigs.

2) I am unable to get all of my PCI devices to move there addressing from 
the default values to the hole I have given it.  I am getting several errors 
of the form: "PCI: Cannot allocate resource region 8 of bridge 
0000:00:07.0".  Some of my devices are moving to the proper location.
Neither the code in drivers/pci/probe.c pci_read_bases which gets the 
default addresses for the resources or /arch/i386/pci/i386.c 
pcibios_allocate_bus_resources check to see if the address that are being 
used are reserved.  They just attempt to allocate the memory and fail.  It 
seams like a check should be made in one of these functions and if the 
resources are reserved then the addresses should be changed. (Note: 64 bit 
uses the i386 pci code that is why I am pointing out potential errors in the 
i386 code)

I also noticed the reserve kernel param can only take ints so large 
addresses can not be reserved

Thank you,
Tom



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2005-07-07 15:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <BAY21-F20B7CAAB5A3DD44D333948A0D90@phx.gbl.suse.lists.linux.kernel>
2005-07-07 12:30 ` 64bit PCI IORESOURCE_MEM bugs Andi Kleen
2005-07-07 15:44   ` Thomas Crowley
2005-07-06 18:24 Thomas Crowley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox