Making a driver PAE-ified means either teaching it to do 64-bit scatter-gather (assuming that the peripheral hardware can do this and that it's documented), or teaching the driver to correctly handle EINPROGRESS from bus_dmamap_load() along with using the proper busdma tag limits. The strategy I took with 6.x/5.x was the second one since I didn't have good IPS docs in front of me and I wanted it follow the APIs correctly. I did test it with 8GB of memory and it performed correctly under load. I haven't taken a close enough look at your MFC patch to say for sure if it's correct or not. I'm not sure if I'll have time to take another look in the next few days, unfortunately. Is there any chance you could test 5.x/6.0 under load with PAE just to validate the assertion that it works correctly there?
I had a chance to test 5.4-RC1 (i386) today with GENERIC, SMP, PAE, and SMP-PAE kernels (the last one is just PAE with "options SMP").
To recap, the hardware is an IBM xSeries 346, Dual Xeon 3GHz (non-E64MT), ServeRAID-7K.
GENERIC and SMP survived "make buildkernel", but PAE and SMP-PAE paniced reproducibly doing the same. The DDB stack trace doesn't appear to be anywhere near the IPS driver though, so I'm way out of my league.
========== PAE panic kernel trap 12 with interrupts disabled
Fatal trap 12: page fault while in kernel mode fault virtual address = 0x24 fault code = supervisor read, page not present instruction pointer = 0x8:0xc03d48eb stack pointer = 0x10:0xeb133b28 frame pointer = 0x10:0xeb133b3c code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, def32 1, gran 1 processor eflags = resume, IOPL = 0 current process = 146 (syncer) [thread pid 146 tid 100157 ] Stopped at propagate_priority+0x7f: movl 0x24(%eax),%eax db> trace Tracing pid 146 tid 100157 td 0xc68cba80 propagate_priority turnstile_wait _mtx_lock_sleep vfs_clean_pages bdwrite ffs_blkfree handle_workitem_freefrag process_worklist_item softdep_process_worklist sched_sync fork_exit fork_trampoline --- trap 0x1, eip = 0, esp = 0xeb133d7c, ebp = 0 ---
========== End PAE panic
========== SMP-PAE panic kernel trap 12 with interrupts disabled
Fatal trap 12: page fault while in kernel mode cpuid = 0; apic id = 00 fault virtual address = 0x24 fault code = supervisor read, page not present instruction pointer = 0x8:0xc03d7cd3 stack pointer = 0x10:0xeb0d0b7c frame pointer = 0x10:0xeb0d0b90 code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, def32 1, gran 1 processor eflags = resume, IOPL = 0 current process = 149 (syncer) [thread pid 149 tid 100160 ] Stopped at propagate_priority+0x7f: movl 0x24(%eax),%eax db> trace Tracing pid 149 tid 100160 td 0xc68b2000 propagate_priority turnstile_wait _mtx_lock_sleep vfs_busy_pages ibwrite bwrite vfs_bio_awrite vop_stdfsync spec_fsync spec_vnoperate sched_sync fork_exit fork_trampoline --- trap 0x1, eip = 0, esp = 0xeb0d0d7c, ebp = 0 --- ========== End PAE panic
_______________________________________________ freebsd-stable@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-stable To unsubscribe, send any mail to "[EMAIL PROTECTED]"