Messages in this thread | | | Date | Thu, 5 Jul 2001 10:28:35 +0800 | From | michaelc <> | Subject | Re[2]: about kmap_high function |
| |
Hi,
Tuesday, July 03, 2001, 5:38:09 PM, you wrote:
SCT> kmap_high is intended to be called routinely for access to highmem SCT> pages. It is coded to be as fast as possible as a result. TLB SCT> flushes are expensive, especially on SMP, so kmap_high tries hard to SCT> avoid unnecessary flushes.
SCT> The way it does it is to do only a single, complete TLB flush of the SCT> whole kmap VA range once every time the kmap address ring cycles. SCT> That's what flush_all_zero_pkmaps() does --- it evicts old, unused SCT> kmap mappings and flushes the whole TLB range, so that we are SCT> guaranteed that there is a TLB flush between any two different uses of SCT> any given kmap virtual address.
SCT> That way, we can avoid the cost of having to flush the TLB for every SCT> single kmap mapping we create.
Thank you very much for your kindly guide, and I have two question to ask you, One question is, Is kmap_high intended to be called merely in the user context, so the highmem pages are mapped into user process page table, so on SMP, other processes ( including kernel and user process) that running on another cpu doesn't need to get that kmap virtual address. Another question is, when kernel evicts old, unused kmap mapping and flushes the whole TLB range( call the flush_all_zero_pkmaps), the TLB won't keep those zero mappings, after that, when user process call kmap_high to get a new kmap mappings, and when the process access that virtual address, MMU component will get the page directory and page table from MEMORY instead of TLB to translate the virtual address into physical address.
-- Best regards, Michael Chen mailto:michaelc@turbolinux.com.cn
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |