do_exit() and lock_kernel() semantics
Quoted 4 lines
Thus, for each receive we have to convert the virt address of the user-land receive buffer to a physical address (in the kernel region) before doing the memcpy (
copy_to_userdoesn't work from interrupt context).
Why do you want to do that at interrupt time?
I'd call map_user_kiobuf() when the user-land buffer is set up, and then write directly (i.e. with kmap_atomic()) into the pages stored in iobuf->maplist[]. It avoids the page table scan at interrupt time.
Which platform do you use? map_user_kiobuf() doesn't enforce cache coherency internally, outside of i386 you might need additional flush_cache_whatever (see Documentation/cachetlb.txt)
--
Manfred
Quoted 11 lines · Manfred Spraul
Quoted 5 lines
Thus, for each receive we have to convert the virt address of the user-land receive buffer to a physical address (in the kernel region) before doing the memcpy (
copy_to_userdoesn't work from interrupt context).Why do you want to do that at interrupt time?
I'd callmap_user_kiobuf()when the user-land buffer is set up, and then write directly (i.e. withkmap_atomic()) into the pages stored in iobuf->maplist[]. It avoids the page table scan at interrupt time.
Quoted 7 lines
Which platform do you use?
map_user_kiobuf()doesn't enforce cache coherency internally, outside of i386 you might need additionalflush_cache_whatever(seeDocumentation/cachetlb.txt)--
Manfred
I'm guessing the reason is that this module was initially developed on 2.0 and ported to 2.2. and 2.4. I think the kiobuf stuff is only in 2.4+, right? I should probably work on converting things, although our production Cplant cluster is still using 2.2. It might help reduce our latency, although I'm guessing the page table walk is pretty quick.
This module needs to work on Alpha, i386, and ia64 so I'd have to look into the cache issues.
Thanks,
Kevin