E4500 with 24GB RAM
Doug White
dwhite at gumbysoft.com
Mon Jun 6 20:38:15 GMT 2005
On Tue, 7 Jun 2005, Hiroki Sato wrote:
> Scott Long <scottl at samsco.org> wrote
> in <429A7B4D.3080102 at samsco.org>:
>
> sc> I'd guess that you're the first to have access to so much memory
> sc> and a machine to hold it. The error means that vm_map_find()
> sc> returned KERN_NO_SPACE. It could be that there is a 64-bit bug
> sc> in the code, or it could be that the page tables to index so much
> sc> memory consume all available space in the kernel map.
>
> Thanks. Jake gave me an advice about kern.maxbcache tunable, and
> I finally make it boot with kern.maxbcache=524288000.
> However, the hme driver seems to have a problem:
>
> |panic: iommu_enter: XXX: physical address too large (0x5e3fcc000)
This panic occurs since the IOMMU can only handle physical addresses up to
34 bits (16GB), it appears. From src/sys/sparc64/include/iommureg.h:
67 #define IOMMU_BITS 34
68 #define IOMMU_MAXADDR (1UL << IOMMU_BITS)
Since the panic is in a KASSERT thats why it only pops up under
INVARIANTS. However the bus_dma tags specify that hme can only handle 32
bit addresses so it should be using a bounce buffer. I'm guessing that
bus_dma needs to be taught about this limitation and use bounce buffers
for the IOMMU on >16GB systems.
Someone should also research this value a bit more ... I wonder if its
from some older system (E450?), and newer machines have larger limits. I
would hope they'd build E4500s with IOMMUs that can address all of
physical memory.
> |cpuid = 0
> |KDB: enter: panic
> |[thread pid 442 tid 100215 ]
> |Stopped at kdb_enter+0x3c: ta %xcc, 1
> |db> tr
> |Tracing pid 442 tid 100215 td 0xfffff800af657b80
> |panic() at panic+0x16c
> |iommu_enter() at iommu_enter+0x3c
> |iommu_dvmamap_load_buffer() at iommu_dvmamap_load_buffer+0x118
> |iommu_dvmamap_load_mbuf() at iommu_dvmamap_load_mbuf+0x170
> |hme_load_txmbuf() at hme_load_txmbuf+0x68
> |hme_start_locked() at hme_start_locked+0x1bc
> |hme_start() at hme_start+0x2c
> |if_start() at if_start+0xa0
> |ether_output_frame() at ether_output_frame+0x244
> |ether_output() at ether_output+0x474
> |ip_output() at ip_output+0xa98
> |udp_output() at udp_output+0x5b4
> |udp_send() at udp_send+0x14
> |sosend() at sosend+0x654
>
> When INVARIANTS enabled this panic occurs instantly.
>
>
--
Doug White | FreeBSD: The Power to Serve
dwhite at gumbysoft.com | www.FreeBSD.org
More information about the freebsd-sparc64
mailing list