lkml.org 
[lkml]   [2001]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: about kmap_high function
    Hi,

    On Fri, Jun 29, 2001 at 03:06:01PM +0800, michaelc wrote:
    > I found that the kmap_high function didn't call __flush_tlb_one()
    > when it mapped a highmem page sucessfully, and I think it maybe
    > cause the problem that TLB may store obslete page table entries, but
    > the kmap_atomic() function do call the __flush_tlb_one(), someone tell
    > me what's the differenc between the kmap_atomic and kmap_high except
    > that kmap_atomic can be used in IRQ contexts. I appreciate in advance.

    kmap_high is intended to be called routinely for access to highmem
    pages. It is coded to be as fast as possible as a result. TLB
    flushes are expensive, especially on SMP, so kmap_high tries hard to
    avoid unnecessary flushes.

    The way it does it is to do only a single, complete TLB flush of the
    whole kmap VA range once every time the kmap address ring cycles.
    That's what flush_all_zero_pkmaps() does --- it evicts old, unused
    kmap mappings and flushes the whole TLB range, so that we are
    guaranteed that there is a TLB flush between any two different uses of
    any given kmap virtual address.

    That way, we can avoid the cost of having to flush the TLB for every
    single kmap mapping we create.

    Cheers,
    Stephen
    -
    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/

    \
     
     \ /
      Last update: 2005-03-22 12:55    [W:2.997 / U:1.268 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site