linux/mm/mlock.c
<<
>>
Prefs
   1/*
   2 *      linux/mm/mlock.c
   3 *
   4 *  (C) Copyright 1995 Linus Torvalds
   5 *  (C) Copyright 2002 Christoph Hellwig
   6 */
   7
   8#include <linux/capability.h>
   9#include <linux/mman.h>
  10#include <linux/mm.h>
  11#include <linux/swap.h>
  12#include <linux/swapops.h>
  13#include <linux/pagemap.h>
  14#include <linux/mempolicy.h>
  15#include <linux/syscalls.h>
  16#include <linux/sched.h>
  17#include <linux/export.h>
  18#include <linux/rmap.h>
  19#include <linux/mmzone.h>
  20#include <linux/hugetlb.h>
  21
  22#include "internal.h"
  23
  24int can_do_mlock(void)
  25{
  26        if (capable(CAP_IPC_LOCK))
  27                return 1;
  28        if (rlimit(RLIMIT_MEMLOCK) != 0)
  29                return 1;
  30        return 0;
  31}
  32EXPORT_SYMBOL(can_do_mlock);
  33
  34/*
  35 * Mlocked pages are marked with PageMlocked() flag for efficient testing
  36 * in vmscan and, possibly, the fault path; and to support semi-accurate
  37 * statistics.
  38 *
  39 * An mlocked page [PageMlocked(page)] is unevictable.  As such, it will
  40 * be placed on the LRU "unevictable" list, rather than the [in]active lists.
  41 * The unevictable list is an LRU sibling list to the [in]active lists.
  42 * PageUnevictable is set to indicate the unevictable state.
  43 *
  44 * When lazy mlocking via vmscan, it is important to ensure that the
  45 * vma's VM_LOCKED status is not concurrently being modified, otherwise we
  46 * may have mlocked a page that is being munlocked. So lazy mlock must take
  47 * the mmap_sem for read, and verify that the vma really is locked
  48 * (see mm/rmap.c).
  49 */
  50
  51/*
  52 *  LRU accounting for clear_page_mlock()
  53 */
  54void clear_page_mlock(struct page *page)
  55{
  56        if (!TestClearPageMlocked(page))
  57                return;
  58
  59        mod_zone_page_state(page_zone(page), NR_MLOCK,
  60                            -hpage_nr_pages(page));
  61        count_vm_event(UNEVICTABLE_PGCLEARED);
  62        if (!isolate_lru_page(page)) {
  63                putback_lru_page(page);
  64        } else {
  65                /*
  66                 * We lost the race. the page already moved to evictable list.
  67                 */
  68                if (PageUnevictable(page))
  69                        count_vm_event(UNEVICTABLE_PGSTRANDED);
  70        }
  71}
  72
  73/*
  74 * Mark page as mlocked if not already.
  75 * If page on LRU, isolate and putback to move to unevictable list.
  76 */
  77void mlock_vma_page(struct page *page)
  78{
  79        BUG_ON(!PageLocked(page));
  80
  81        if (!TestSetPageMlocked(page)) {
  82                mod_zone_page_state(page_zone(page), NR_MLOCK,
  83                                    hpage_nr_pages(page));
  84                count_vm_event(UNEVICTABLE_PGMLOCKED);
  85                if (!isolate_lru_page(page))
  86                        putback_lru_page(page);
  87        }
  88}
  89
  90/**
  91 * munlock_vma_page - munlock a vma page
  92 * @page - page to be unlocked
  93 *
  94 * called from munlock()/munmap() path with page supposedly on the LRU.
  95 * When we munlock a page, because the vma where we found the page is being
  96 * munlock()ed or munmap()ed, we want to check whether other vmas hold the
  97 * page locked so that we can leave it on the unevictable lru list and not
  98 * bother vmscan with it.  However, to walk the page's rmap list in
  99 * try_to_munlock() we must isolate the page from the LRU.  If some other
 100 * task has removed the page from the LRU, we won't be able to do that.
 101 * So we clear the PageMlocked as we might not get another chance.  If we
 102 * can't isolate the page, we leave it for putback_lru_page() and vmscan
 103 * [page_referenced()/try_to_unmap()] to deal with.
 104 */
 105void munlock_vma_page(struct page *page)
 106{
 107        BUG_ON(!PageLocked(page));
 108
 109        if (TestClearPageMlocked(page)) {
 110                mod_zone_page_state(page_zone(page), NR_MLOCK,
 111                                    -hpage_nr_pages(page));
 112                if (!isolate_lru_page(page)) {
 113                        int ret = SWAP_AGAIN;
 114
 115                        /*
 116                         * Optimization: if the page was mapped just once,
 117                         * that's our mapping and we don't need to check all the
 118                         * other vmas.
 119                         */
 120                        if (page_mapcount(page) > 1)
 121                                ret = try_to_munlock(page);
 122                        /*
 123                         * did try_to_unlock() succeed or punt?
 124                         */
 125                        if (ret != SWAP_MLOCK)
 126                                count_vm_event(UNEVICTABLE_PGMUNLOCKED);
 127
 128                        putback_lru_page(page);
 129                } else {
 130                        /*
 131                         * Some other task has removed the page from the LRU.
 132                         * putback_lru_page() will take care of removing the
lint"> * the mmaa> * When we munlock a page, be132" class="line" name="L132"> 132            pan>
 * If page on LRU, isolate a1c#L35" id1="L35" class="line" name1="L351>  35            pan>
l * If page on LRU, isolate a1class="sreMlocked() flag for effic1ient 1esting
 * bother vmscan with it.  H1the fault1 path; and to support se1mi-ac1urate
  47<> * bother vmscan with it.  H1t name="L1ck.c#L38" id="L38" class1="lin1" name="L38">  38            pan>
page))
  69                        UNEVICTABLE_PGSTRANDED);
  70        }
 1    c#L71" id="L71" class=1tSome otheling list to the [in]act1ive l14try_to_munlock" class="sref">try_to_munlock(UNEVICTABLE_PGMUNLOCKED);
 127
linux/mempolicy.h&g"L351e
 * munlock_vma_page - munloc1d verify 1that the vma really is l1ocked1/span>
pagepage  49Searce="L> * bother vmscan with it.  H1aed(page)1d="L50" class="line" nam1e="L51">  50
 * bother vmscan with it.  H1me="L51">1  51
 * bother vmscan with it.  H1mSome othe="L52" class="line" name1="L521>  52 * called from munlock()/mun1_page_mlo1ck()
 * the mmak/linux/mage * bother vmscan with it.  H1.c#L54" i1d="L54" class="line" nam1e="L51">  54void (struct  * bother vmscan with it.  H1.lass="sre>  56        if (!
TestClearPageMlocked1(15ld the
 * bother vmscan with it.  H1. verify 1lass="line" name="L58"> 1 58
1  59        pagepage 127_>pagepage)
 127
 106ame="L127"> 127
mo1d_zone_page_state(Setame="L127"> 127s>Set     Runsign132lolinmlock.c#L127" iendame="L127"> 127end                -hpage_nr_p1ages<1a>( 106 127nonb hreipo            count_v1m_event(/*s="sref">1isolate_lru_page( 127mm_ 106 127mms="sref">page);
ame="L127"> 127
 127
putback_lru_page(1 127addrs="sref">page);
Setame="L127"> 127s>Set    5" id="L115" class="linelass="frefine" name="L65">  651     1          ;
 127end    1- ">page);
Setame="L127"> 127s>Set    ) / ">page);
linnux/sched.h>
(1table " id="L115" class="linel verify 1m/mlock.c#L68" id="L68" 1class16sref">PageLocked(Setame="L127"> 127s>Set     & ~">page);
          PAGE_MAS2c#L128" id="L128" class="line" class="1sref">PageUnevictable( 127end    1  & ~">page);
          PAGE_MAS2c#L128" id="L128" class="line"sref">mo1s="sref">count_vm_event<1/a>(<16sref">PageLocked(Setame="L127"> 127s>Set     <f">page);
ame="L127"> 127
 127
Setc#L128" id="L128" class="line"line" na1me="L71">  71}
( 127end    1  >f">page);
ame="L127"> 127
 127
count_v1>  72
page)rw cl_is_ href="mm/mlock.c#L11rw cl_is_ href=="mm/&me="L106"> 106 127mms="s-    ="mm/mlock.c#L1"L48" clame="L127"> 127mm48" cl (!1  73
page);
page);
 126          FOLL_"> 12    5" id="L115" class="lineot alread1y.
                         *nd putbac1k to move to unevictable1 list1
 * task has removed the pa.c#L77" i1d="L77" class="line" nam1e="L71">  77void  118 * task has removed the pa.="fref">liinux/export.h>
  38       * name="Lwoulment"6 name="Ldirt">  class="/a> * bother vmscan with it.  H1ame="L79"1>  79        (!ame="L127"> 127
page);
  62 VM_SHame=       =ef">page);
1  81        if (!page);
TestSetPageMlocked1(mod_zone_page_stat1e1                         *=hpage_nr1_pages" class="sref">hpa1ge_nr18132       d="L6 nameclass=/a>                         *=t alread1>count_vm_event(        class="1PROT_NONE<> * bother vmscan with it.  H1ge" class1="sref">isolate_lru_page1(18/span>
putback_lru_p1ageCAP_IPC_LOCK))
f">ame="L127"> 127
  62 VM_REA=    r|f">page);
page);
  88}
page);
linuux/rmap.h>
1  90get_ne""mm/mlock.c#L112" id="_>get_ne""mm/mlo="mm/mlock.c#L127" ime="L46BLE_PGMUNLOCKED 106 127mms="s Rme="L106"> 106 127addrs="s Rme="L106"> 106<="mm/mlock.c#L112" id="class="line" Rme="L106"> 106 106 106 106 127nonb hreipo     de/linux/mmzone.h" class=ss="sref1age
1

                         *map() pat1h with page supposedly o1n the1LRU.
 10_ne""mm/mlo()p.c#L32"earch=/a>posixeclass()perr                         *me" class1e vma where we found the1 page1is being
;
 127_>page/*owever, t1o walk the page's rm1ap li19class="sref">RLIMIT_MEMLOCK) c#ear"mm/mlock.c#L11rc#ear     =eff">page));
liinux/mmzone.h>
page));
) c#ear"mm/mlock.c#L11rc#ear     =eff">page));
) c#ear"mm/mlock.c#L11rc#ear     =ff">page));
 114
 ] to deal with.
<2 href2"mm/mld="L73" class="line" na2ck.c#L1052 id="L105" class="line" 2ame="20    /2f">munloc2_vma_page(struct  * munlock_vma_page - munloc2e" name="2107"> 107        page * bother vmscan with it.  H2ON(!<2 href="+code=PageLocked"2class20span>
(<09"> 109        if (2a hre20line" name="L49">  49Set - s>Setne" nddre"  c#L@="L1 76<="line* bother vmscan with it.  H2Oid="L30" ef">TestClearPageMlocked2/a>(<20>  50
mod_zone_page_sta2e21o that.
   22#include "
 * bother vmscan with it.  H2page" cla2s="sref">isolate_lru_pag2(21#L53" id="L53" class="line" n> * bother vmscan with it.  H2pe="L24"> f">ret =                          2" name="L215"> 115            2     21RU.
                         2"">munloc2 href="mm/mlock.c#L116" 2d="L121s being
 132lock. href=ef"="L9pan cssnt">                         2"" name="2ion: if the page was map2ed ju2t once,
                         2"N(!<2s our mapping and we don2#39;t2need to check all the
l       if (
page 127magepage)
 127
 106ame="L127"> 127
Setame="L127"> 127s>Set     Runsign132lolinmlock.c#L127" iendame="L127"> 127end    a href="mm/mlock.c#L30" ss="fref">>linux/hugetlb.h>
t2came="L22">   22#include ";
 127end    1- ">page);
Setame="L127"> 127s>Set    ) / ">page);
internal..h"
page);
page))
f">ame="L127"> 127
page);
 127VM_ine" n (!   24int can_ddo_mlock(void)
                         2ame="L26">>  26        if (
                         2a" name="2>(     2/a>        if CAP_IPC_LOCK))
f">ame="L127"> 127
 127VM_IO    r|f">page);
 127VM_PFNMAP  ( 106page 127no_<="line  5" id="L115" class="lin2"
2 class="line" name="L30">0"> 122**
ame="L127"> 127
page);
 127VM_DONTEXPANn    ) ||pan>
 r task has removed the p2ge fr23try_to_munlock" class="sref">">page);
ame="L127"> 127

 12lock.c#L127" if">ame="L127"> 127
page);
ame="L127"> 127 10_g113"f">="mm/mlock.c#L127" ime="L46BLE_PGMUNLOCKED 127mms="s)   int 
page 127_>pagepage)
me="L106"> 106ame="L127"> 127
Setame="L127"> 127s>Set     Rmlock.c#L127" iendame="L127"> 127end     Rme="L106"> 106(
                         2tSome oth2ling list to the [in]act2ive l2sts.
                         2t>internal the unevictable state.<2/span2
nams"Lage * bother vmscan with it.  H2c#L44" id2="L44" class="line" name2="L442>  44 11coo re"st46" id="L4--no * bother vmscan with it.  H2c#L35" id2"">linux/mempolicy.h2g"L352e
 118) c * bother vmscan with it.  H2class="sr2concurrently being modif2ied, 2therwise we
  67<) c * bother vmscan with it.  H2che fault2ing munlocked. So lazy m2lock 2ust take
 * bother vmscan with it.  H2c name="L2that the vma really is l2ocked2/span>
 127mnt"page)
me="L106"> 106Setame="L127"> 127s>Set     Rmlock.c#L127" iendame="L127"> 127end     href="+code=isolate_lru2aed(page)2d="L50" class="line" nam2e="L524**
2  51 106page 127no_<="line  :pan>
ame="L127"> 127
page);
 127VM_ine" n (!<;de=U31 118
/2.lass="sr2>  56        if (!
                         2.he fault2ef">TestClearPageMlocked2(25ld the
page 11nt">                         2. name="L2lass="line" name="L58"> 2 58
 * bother vmscan with it.  H2me="L59">2  59          49Set - s>Set nddre"  c#L@="L1oflass="lne=/a* bother vmscan with it.  H2"sref">mo2d_zone_page_state(  50
 * bother vmscan with it.  H2nr_pages"2 class="sref">hpage_nr_p2ages<26o that.
count_v2m_event( * bother vmscan with it.  H2npage_mlo2isolate_lru_page( * bother vmscan with it.  H2lass="sre2f">putback_lru_page(2 * bother vmscan with it.  H2nass="fre2ine" name="L65">  652     26RU.
                         2llass="sr2/mlock.c#L66" id="L66" c2lass=26s being
                         2lhe fault2nnux/sched.h>
(2table list.
                         2l verify 2m/mlock.c#L68" id="L68" 2class2"line" name="L68">  68   .nt">                         2le="L59">2sref">PageUnevictable(  49 118  9="line" age                         2lsref">mo2s="sref">count_vm_event<2/a>(<26>  50
lonn cls="cn " clame="L, age                         2"line" na2me="L71">  71}
 {k.c#L97|" cla}1befo  96 * bother vmscan with it.  H2">count_v2>  72
lre"me="in freL/linm href=eage                         2me="L73">2  73page * 127me *)
 127
 106ame="L127"> 127
Setame="L127"> 127s>Set     Runsign132lolinmlock.c#L127" iendame="L127"> 127end    a href="mm/mlock.c#L30" nd putbac2k to move to unevictable2 list2 127addrs="shref="+code=isolate_lru2.="fref">2iinux/export.h>
<2 lass27      79        ( 127e" nadd_drain/a>)
 href="+code=isolate_lru2(!PageLocked(ame="L127"> 127
page);
 127VM_ine" n (!<;ref="+code=isolate_lru2me="L81">2  81        if (!TestSetPageMlocked2( 106 127addrs="sref">page);
Setame="L127"> 127s>Set    5nmlock.c#L127" iaddrame="L127"> 127addrs="sr<f">page);
 127end    5nmlock.c#L127" iaddrame="L127"> 127addrs="sr+ef">page);
mod_zone_page_stat2e2 106{
hpa2ge_nr2pages(                         2=t alread2>count_vm_event(       kkkkkkkk* Although FOLL_DUMP"comintendlasss=" 10_dumpname="Lent">                         2ge" class2="sref">isolate_lru_page2(28/span>
                         2gc#L77" i2ass="sref">putback_lru_p2age
                         2g="fref">2me="L88">  88}
  38            panc suits c id="L9very96<">l(and "class=how na abnormalment"> * @page - page to be unlock2afref">li2uux/rmap.h>
 119<*9="L1sneaef=eintolass="lne=="L101"> 101  : g1eat)"> * bother vmscan with it.  H2me="L90">2  90 120        n       if (page);
 106ame="L127"> 127
 127addrs="s Rme="L106"> 106page);

page) > 1)
page)IS_ERRid="L106" classIS_ERR/a>)
me="L106"> 106<13                        int 2
 12lock.c#L127" iage             age)
me="L106"> 106<13                      href="+code=isolate_lru2=#L74" id2="L94" class="line" name2="L9429_AGAIN" class="sref">SWAP_AGAclass="sref">page * 127me *)
me="L106"> 106<13                      href="+code=isolate_lru2=t alread2h with page supposedly o2n the29ode=UNEVICTABLE_PGMLOOOOOOOOOme="L106"> 106 *13             e *13)
me="L106"> 106<13                      href="+code=isolate_lru2=e" class2e vma where we found the2 page29" class="line" name="L116"> 11e="L106"> 106<1utmm/mlock.c#L129" id="L1*13)
me="L106"> 106<13                      href="+code=isolate_lru2=c#L77" i2 to check whether other 2vmas 29()
 href="+code=isolate_lru2owever, t2o walk the page's rm2ap li29(2iinux/mmzone.h>
<2 ent"29href=d="L73" class="line" na3ge from t3e LRU, we won't be a3le to30code=TestSetPageMlocked" cl3cked as w3 might not get another c3ance.3 If we
                         3age, we l3ave it for putback_lru_p3ge() 3nd vmscan
 [all] requestsent">                         3ae="L24">3] to deal with.
<3 href3"mm/mlock.c#L104" id="L104" clnt">                         3a4="L24">3] with page supposedly o3ame="3105"> 105void  * bother vmscan with it.  H3f">munloc3_vma_page(struct 
 * bother vmscan with it.  H3ON(!<3 href="+code=PageLocked"3class30span>
  49 * bother vmscan with it.  H3O9(!<3 inux/mmzone.h>
<3/a>(<30>  50
mod_zone_page_sta3e31o tha"+sear IN;
 127m    _fixup/a>)
 127
 106ame="L127"> 127
 127
 106              rev                -3  22#include "<3 nce.3_pages(Setame="L127"> 127s>Set     Runsign132lolinmlock.c#L127" iendame="L127"> 127end     f="mm/mlock.c#L1
 127
isolate_lru_pag3(31#L53"int 3f">ret =  127mm_ 106 127mms="sref">page);
ame="L127"> 127
 127
 115            3     31          106 127/goff_eages 127/goff#L115" id="L115" class="lin3"">munloc3 href="mm/mlock.c#L116" 3d="L136" class="lineIN;
munloc3ion: if the page was map3ed ju316 class="lineIN;
(!<3s our mapping and we don3#39;t317 class="lineIN;
 127="line  ref!/_IPC_LOCK))
=ew6page);
 127VM_ine" n (!(!<3s.

3a href="mm/mlock.c#L120"3id="L31href="+code=page"IPC_LOCK))
=ew6page);
ame="L127"> 127
ame="L127"> 127
page);
linux/hugetlb.h>3t3page);
ame="L127"> 127
ame="L127"> 127
page);
ame="L127"> 127 10_g113"f">="mm/mlock.c#L127" ime="L46BLE_PGMUNLOCKED 127mms="s) pan>
3  22#include "<3"+cod3=try_to_munlock" classgolasme="L106"> 106 127out    5nde=pag"1 118 118interna3..h"
3  24int  127/goff#L11ref">page);
ame="L127"> 127
 127
Setame="L127"> 127s>Set     - ">page);
ame="L127"> 127
 127
Setc#L12 >>f">page);
(void)
 106              rev    ref">page);
_mergeame="L127"> 127
 127mms="s Rame="L106"> 106              rev     nmlock.c#L127" is>Setame="L127"> 127s>Set     Rmlock.c#L127" iendame="L127"> 127end     Rme="L106"> 106<=ew6ame="L127"> 127
ame="L127"> 127anon"f">                -  26        if ( 1ocked(ame="L127"> 127
 127/goff#L11 f="mm/mlock.c#L1
<>_policyame="L127"> 127
ame="L127"> 127
munloc3>(CAP_ame="L106"> 106              rev      int ame="L127"> 127
 106              rev    id="L32" class="line" n3d8(!<3 106 127san cssnt  id="L32" class="line" n3d
3 class="line" name="L30"30"> 132href="+code=pd="L73" class="line" na3
<3 href="mm/mlock.c#L131" 3d="L133code=TestSetPageMlocked" cl33r task has removed the p3ge fr33try_to_munlocage"IPC_LOCK))
s>Setame="L127"> 127s>Set     !ef">page);
ame="L127"> 127
 127
Setc#L12 int interna3ru_page() will take care3of re33" class="line" name="a>;
ame="L127"> 127s lit"f">="mm/mlock.c#L127" immame="L127"> 127mms="s Rme="L106"> 106ame="L127"> 127
Setame="L127"> 127s>Set     R1aid="L32" class="line" n3 a page, 3e132" class="line" name=3L132"33_AGAIN" class="sref">RLIMIT_MEMLOCK) c#="+code=page" class="s pan>
 106 127out    5pan>
munloc3 path; and to support se3mi-ac33able " id="L115" class="lin3t name="L3ck.c#L38" id="L38" class3="lin33a>        if CAP_IPC_LOCK))
endame="L127"> 127end    1!ef">page);
ame="L127"> 127
 127
(!<3="L39" class="line" name3="L3933(;
ame="L127"> 127s lit"f">="mm/mlock.c#L127" immame="L127"> 127mms="s Rme="L106"> 106ame="L127"> 127
 127end     R0aid="L32" class="line" n3 
3] is unevictable.  As su3ch, i33href="+code=UNEVICTABRLIMIT_MEMLOCK) c#="+code=page" class="s pan>
 106 127out    5pan>
interna3 the unevictable state.<3/span34*
 106 127san cssnt  :pan>
linux/mempolicy.h3g"L3534                                  3class="sr3concurrently being modif3ied, 3therwise we
 * bother vmscan with it.  H3che fault3ing munlocked. So lazy m3lock 3ust take
PageLocked( 127end    1- ">page);
Setame="L127"> 127s>Set    ) >>f">page);

RLIM"sref">page)age 127="line   pan>
)="mm/mlock.c#L112" id="class="line"reff">page));
<="mm/mlock.c#L112" id="class="line"5" id="L115" class="lin3me="L51">3  51( 127mms="s-    ="mm/mlock.c#L1 href="f"ste="L127"> 127="lif="f"s="sr+efIPC_LOCK))
="mm/mlock.c#L112" id="class="line"5" id="L115" class="lin3mSome oth3="L52" class="line" name3="L5235"mm/internal.h" class="fref3_page_mlo3ck()
                         3_#L44" id3d="L54" class="line" nam3e="L535  44))"> * bother vmscan with it.  H3.ass="fre3ge_mlock(struct RLIL124"> " cla_on * @page - page to be unlock3.lass="sr3>  56        if (!
pagelbrne" it"="li"> * bother vmscan with it.  H3.he fault3ef">TestClearPageMlocked3(35ld the
 3 583  59        RLIMIT_MEMLOCK)age 127="line   pan>
mo3d_zone_page_state(ame="L127"> 127
hpage_nr_p3ages<36>()ge * 127me *)
me="L106"> 106ame="L127"> 127
Setame="L127"> 127s>Set     Rmlock.c#L127" iendame="L127"> 127end    aid="L32" class="line" n3npage_mlo3isolate_lru_page(
putback_lru_page(3 106 127out    :pan>
  653     36          106              rev    ref">page);
ame="L127"> 127
>
(3table d="L73" class="line" na3l verify 3m/mlock.c#L68" id="L68" 3class36    3sref">PageUnevictable(;
 127do_<="line  (unsign132lolinmlock.c#L127" is>Setame="L127"> 127s>Set     Rmlock.c#L127" isize_eame="L127"> 127size_eref="IT_MEMLOCK)aename="L127"> 127een     RIN;
 127onne   pan>
mo3s="sref">count_vm_event<3/a>(<36>  50int   71}
Setame="L127"> 127ns>Set     Rmlock.c#L127" iendame="L127"> 127end     Rme="L106"> 106 127tmps="sid="L32" class="line" n3">count_v3>  72
 127
 106ame="L127"> 127
 106              rev    id="L32" class="line" n3me="L73">3  73 127err
)
me="L106"> 106Setame="L127"> 127s>Set     & ~">page);
          6AGE_MAS2    aid="L32" class="line" n3nd putbac3k to move to unevictable3 list375        ;
)
me="L106"> 106 127een    1!ef">page);
 106 127een    )aid="L32" class="line" n3.c#L77" i3d="L77" class="line" nam3e="L737( 127end    1ef">page);
Setame="L127"> 127s>Set     +"IT_MEMLOCK)aename="L127"> 127een    id="L32" class="line" n3. verify 3iinux/export.h>
<3 lass37a>        if CAP_IPC_LOCK))
endame="L127"> 127end    1<f">page);
Setame="L127"> 127s>Set    )d="L32" class="line" n3.e="L59">3>  79        page));
mo3href="+code=PageLocked" 3class37href="+code=page"mlock.c#L127" iendame="L127"> 127end    1eef">page);
Setame="L127"> 127s>Set    )d="L32" class="line" n3me="L81">3  81        if (!TestSetPageMlocked3(ame="L127"> 127
ame="L127"> 127find"f">/a>)
me="L106"> 106 127mms="s nmlock.c#L127" is>Setame="L127"> 127s>Set    aid="L32" class="line" n3" class="3sref">mod_zone_page_stat3e3page)f">ame="L127"> 127
ame="L127"> 127
 127
Setc#L1 >f">page);
Setame="L127"> 127s>Set    )d="L32" class="line" n3mass="sre3_pages" class="sref">hpa3ge_nr3pages(page));
/3ge" class3="sref">isolate_lru_page3(385        ;
page);
ame="L127"> 127
putback_lru_p3ageCAP_IPC_LOCK))
s>Setame="L127"> 127s>Set     >f">page);
ame="L127"> 127
 127
Setc#L12" id="L115" class="lin3= verify 3me="L88">  88}
page);
ame="L127"> 127
li3uux/rmap.h>
3  90 106Setame="L127"> 127ns>Set    1ef">page);
Setame="L127"> 127s>Set     ; ; 2 int  127

Set1<= ns>Set1<9com-    
page);
ame="L127"> 127
page);
 127VM_ine" n (!page)oname="L127"> 127onne   pan>
(page);
 127VM_ine" n (!<;ref="+code=isolate_lru3n leave i3t on the unevictable lru3 list39    ;
 127tmps="sref">page);
ame="L127"> 127
 127
3iinux/mmzone.h>
<3 ent"39href="+code=UNEVICTABCAP_IPC_LOCK))
tmpame="L127"> 127tmps="sr>f">page);
 127end    a href="mm/mlock.c#L30"4ge from t4e LRU, we won't be a4le to40>(;
 127tmps="sref">page);
 127end    5 href="mm/mlock.c#L30"4g1 from t4ege
)err 127errpage);
 127m    _fixup/a>)
me="L106"> 106ame="L127"> 127
 106<=s>Setame="L127"> 127ns>Set     Rmlock.c#L127" itmpame="L127"> 127tmps="s Rme="L106"> 106<=ew6 127errSWAP_AGAbreakid="L32" class="line" n4a4e, we l4a with page supposedly o4ame="40ode=UNEVICTABLE_PGMLOmlock.c#L127" i=s>Setame="L127"> 127ns>Set    1ef">page);
 127tmps="sid="L32" class="line" n4f">munloc4_vma_page(struct Setame="L127"> 127ns>Set    1<f">page);
              rev    -    ="mm/mlock.c#L1
 127
munloc4_to check whether other 4ref="40(Setame="L127"> 127ns>Set    1ef">page);
              rev    -    ="mm/mlock.c#L1
 127
munloc4_ on the unevictable lru4class40
Setame="L127"> 127ns>Set    1>= ">page);
 127end    a href="mm/mlock.c#L30"4g8>munloc4_ walk the page's rm4a hre40(munloc4_inux/mmzone.h>
<4/a>(<40**
mod_zone_page_sta4e41>(ame="L127"> 127
 127
4  22#include "<4 nce.41try_to_munlock" classRLIM"sref">page)f">ame="L127"> 127
ame="L127"> 127
 127
Setc#L1 !ef">page);
Setame="L127"> 127ns>Set    2 int isolate_lru_pag4(41" class="line" name="L123"> 12lock.c#L127" ierr 127errpage));
4f">ret = SWAP_AGAbreakid="L32" class="line" n4" name="L415"> 115            4     41ode=UNEVICTABLE_PGMLOd="L73" class="line" na4"">munloc4 href="mm/mlock.c#L116" 4d="L1415ref="+code=pd="L73" class="line" na4"6>munloc4ion: if the page was map4ed ju416 class="line.c#L32"mlock.c#L127" ierr 127err(!<4s our mapping and we don4#39;t417 clad="L73" class="line" na4"8>munloc4s.

4a href="mm/mlock.c#L120"4id="L41href="+sear IN;
Setame="L127"> 127s>Set     Rmlock.c#L127" isize_eame="L127"> 127size_eref="IT_MEMLOCK)aename="L127"> 127een     RIN;
 127ignore_errlinux/hugetlb.h>4t44  22#include "<4"+cod42ICTABLE_PGCLE 127mm_ 106 127mms="sref">page);
 127mms="sid="L32" class="line" n4">interna4..h"
 127end     f="mm/mlock.c#L1=s>Setame="L127"> 127ns>Set     Rmlock.c#L127" inendame="L127"> 127nendc#L1id="L32" class="line" n4me="L24">4  24int  127
 106ame="L127"> 127
page);
  26        if (munloc4>(PageLocked()
me="L106"> 106Setame="L127"> 127s>Set     & ~">page);
          6AGE_MAS2    aid="L32" class="line" n4d8(!<4()
me="L106"> 106 127een    1!ef">page);
 106 127een    )aid="L32" class="line" n4d
4 class="line" name="L30"40"> 142sref">PageLocked( 127end    1ef">page);
Setame="L127"> 127s>Set     +"IT_MEMLOCK)aename="L127"> 127een    id="L32" class="line" n4
<4 href="mm/mlock.c#L131" 4d="L143code=TestSetPageMlocked" cl44r task has removed the p4ge fr43try_to_munlocss="
me="L106"> 106Setame="L127"> 127ns>Set    1ef">page);
Setame="L127"> 127s>Set    ;f">page);
Setame="L127"> 127ns>Set    1<f">page);
 127end    5nmlock.c#L127" ins>Setame="L127"> 127ns>Set    1ef">page);
 127nendc#L12 int interna4ru_page() will take care4of re43" class="line" name="a1                         4 a page, 4e132" class="line" name=4L132"43  44                         4  name="L4="L35" class="line" name4="L3543  35       kkkkkkkk* Find firs8                         4 me="L26"4Mlocked() flag for effic4ient 43/span>
munloc4 path; and to support se4mi-ac43(page)agePageLocked((!<4="L39" class="line" name4="L3943(PageLocked(  6ck.c#L112" id="down_>  6/a>)
&ne" class="srefmmame="L127"> 127mms="s-    ="mm/mlock.c#L1mm48" clame="L127"> 127mm48" cl    aid="L32" class="line" n4 
4] is unevictable.  As su4ch, i43href="+code=UNEVICTAB>PageLocked(ame="L127"> 127
ame="L127"> 127find"f">/a>)
me="L106"> 106<"Lame="L127"> 127mms="s nmlock.c#L127" i=s>Setame="L127"> 127ns>Set    2id="L32" class="line" n4t;unevict4able" list, rather 4than 44>(Setame="L127"> 127ns>Set    1>= ">page);
ame="L127"> 127
 127
4ling list to the [in]act4ive l44try_to_munlock" class>PageLocked(ame="L127"> 127
ame="L127"> 127
 127
interna4 the unevictable state.<4/span44" class="line" name="age""sref">page)f">ame="L127"> 127
ame="L127"> 127
 127
Setc#L1 >= ">page);
 127end    a href="mm/mlock.c#L30"4c#L44" id4="L44" class="line" name4="L4444_AGAIN" class="sref">SWAP_AGAbreakid="L32" class="line" n4c#L35" id4"">linux/mempolicy.h4g"L3544ode=UNEVICTABLE_PGMLOa1                         4class="sr4concurrently being modif4ied, 4therwise we
Set; nend) oo intersection e mdesi tdcnddre" nt">                         4c6>munloc4ing munlocked. So lazy m4lock 4ust take
                         4c name="L4that the vma really is l4ocked44 name="L38">  38            panc       if ((!<4m/mlock.c#L49" id="L49" 4class44(;
 127nendc#L1ref">page);
 127min/a>)
mlock.c#L127" iendame="L127"> 127end     f="mm/mlock.c#L1f">ame="L127"> 127
 127

4d="L50" class="line" nam4e="L544href="+code=UNEVICTABRLIMmlock.c#L127" if">ame="L127"> 127
(4  51(page) > =s>Setame="L127"> 127ns>Set    1<f">page);
ame="L127"> 127
 127
Setc#L12" id="L115" class="lin4_page_mlo4ck()
 12lock.c#L127" ins>Setame="L127"> 127ns>Set    1ef">page);
ame="L127"> 127
 127
Setc#L1id="L32" class="line" n4m#L44" id4d="L54" class="line" nam4e="L545ages(                         4.ass="fre4ge_mlock(struct page                         4.lass="sr4>  56        if (!
 6 101                         4.6>munloc4ef">TestClearPageMlocked4(45ld the
 wmm pl>  6ycass="sredent">                         4. name="L4lass="line" name="L58"> 4 58  38            panc       if (4  59        ;
pagepagepage)
mlock.c#L127" if">ame="L127"> 127
Setame="L127"> 127ns>Set     Rmlock.c#L127" inendame="L127"> 127nendc#L1 n&ne" class="srefage
4d_zone_page_state(hpage_nr_p4ages<46>()ignore_err 127ignore_err(;
( 111111111continueie=page"a1putback_lru_page(4SWAP_AGAd="L73" class="line" na4nass="fre4ine" name="L65">  654     46ode=UNEVICTABLE_PGMLOde=page"a>;
page)
mlock.c#L127" i c#="+code=page" class="s id="L32" class="line" n4nlass="sr4/mlock.c#L66" id="L66" c4lass=46" class="line" name="L116"> 1breakid="L32" class="line" n4nhe fault4nnux/sched.h>
(46( 127nendc#L1ref">page);
Setame="L127"> 127ns>Set    1+"IT_MEMLOCK)ref="+code=page" class="sraRme="L106"> 1064sref">PageUnevictable(;

4s="sref">count_vm_event<4/a>(<46href="+code=pd="L73" class="line" na4"line" na4me="L71">  71}
)age  72
)up_>  6ck.c#L112" id="up_>  6/a>)
&ne" class="srefmmame="L127"> 127mms="s-    ="mm/mlock.c#L1mm48" clame="L127"> 127mm48" cl    aid="L32" class="line" n4me="L73">4  73/4nd putbac4k to move to unevictable4 list475    mlock.c#L127" iSYSCALL_DEFINE2="+code=page" cSYSCALL_DEFINE2/a>)
me="L106"> 106<"mmename="L127"> 127mmmenc#L1 nunsign132loli nmlock.c#L127" is>Setame="L127"> 127s>Set     Rmlock.c#L127" isize_eame="L127"> 127size_eref= Rmlock.c#L127" iaename="L127"> 127een    )span class="comment">/4nhe fault4d="L77" class="line" nam4e="L747(int >
<4 lass47a>        if unsign132lolinmlock.c#L127" iage4>  79         127age<_limie    id="L32" class="line" n4m
4href="+code=PageLocked" 4class47href="+code=paN;
 127errpage));
4  81        if (!TestSetPageMlocked4(page)can_do>page 127can_do>page)
)ad="L32" class="line" n4" class="4sref">mod_zone_page_stat4e48" class="line" name=".c#L32"f">page));
hpa4ge_nr48*
;
 127aru_add_drain_all/a>)
);lassI1isolate_lru_page4(485    f (putback_lru_p4age()
&ne" class="srefme="L46BLE_PGMUNLOCKED 127mms="s-    ="mm/mlock.c#L1mm48" clame="L127"> 127mm48" cl    aid="L32" class="line" n4= verify 4me="L88">  88}
PageLocked( 127een    1ef">page);
 106 127een    r+e"mlock.c#L127" is>Setame="L127"> 127s>Set     & ~">page);
          6AGE_MAS2    aaid="L32" class="line" n4=e="L59">4uux/rmap.h>
 127s>Set     &ef">page);
          6AGE_MAS2    id="L32" class="line" n4=
4  90
( 106 127een    r>>f">page);


))
me="L46BLE_PGMUNLOCKED 127mms="s-    ="mm/mlock.c#L1age 127="lif="f"s="s5pan>

 127age<_limie    refme="L106"> 106 127rlimie    "mlock.c#L127" iRLIMIT_MEMine"ame="L127"> 127RLIMIT_MEMine"    aid="L32" class="line" n4=t alread4h with page supposedly o4n the49         ;
 127age<_limie    r>>ef">page);

(        if CAP_MIT_MEMLOCK)age;
 127age<_limie    ) ||12lock.c#L127" icapabltste="L127"> 127capablt    "mlock.c#L127" iCAP_IPC_ine"ame="L127"> 127CAP_IPC_ine"    )ad="L32" class="line" n4owever, t4o walk the page's rm4ap li49(;
 127errpage);
page 127do_<="line  (mlock.c#L127" is>Setame="L127"> 127s>Set     Rmlock.c#L127" iaename="L127"> 127een     R1aid="L32" class="line" n4ne="L90">4iinux/mmzone.h>
<4 ent"49sref">PageLocked()
&ne" class="srefme="L46BLE_PGMUNLOCKED 127mms="s-    ="mm/mlock.c#L1mm48" clame="L127"> 127mm48" cl    aid="L32" class="line" n5ge from t5e LRU, we won't be a5le to50mlock.c#L72" RLIM"sref">page)err 127err
)err 127errpage);
pageSetame="L127"> 127s>Set     Rmlock.c#L127" iaename="L127"> 127een     R0aid="L32" class="line" n5age, we l5ave it for putback_lru_p5ge() 50a href="+code.c#L32"mlock.c#L127" ierr 127err/5f">munloc5_vma_page(struct )
me="L106"> 106<"ss="srame="L127"> 127mss="src#L1 nunsign132loli nmlock.c#L127" is>Setame="L127"> 127s>Set     Rmlock.c#L127" isize_eame="L127"> 127size_eref= Rmlock.c#L127" iaename="L127"> 127een    )span class="comment">/5f6>munloc5_to check whether other 5ref="50(int munloc5_ on the unevictable lru5class50
munloc5_ walk the page's rm5a hre50"+code=TestClearPageMlocked5a9>munloc5_inux/mmzone.h>
<5/a>(<50sref">PageLocked()
&ne" class="srefme="L46BLE_PGMUNLOCKED 127mms="s-    ="mm/mlock.c#L1mm48" clame="L127"> 127mm48" cl    aid="L32" class="line" n5te" class5"sref">mod_zone_page_sta5e51mlock.c#L72" ked( 127een    1ef">page);
 106 127een    r+e"mlock.c#L127" is>Setame="L127"> 127s>Set     & ~">page);
          6AGE_MAS2    aaid="L32" class="line" n5te="L22">5  22#include "<5 nce.51f="+code=pagene" class="srefs>Setame="L127"> 127s>Set     &ef">page);
          6AGE_MAS2    id="L32" class="line" n5page" cla5s="sref">isolate_lru_pag5(51" class="linea>;
page);
page 127do_<="line  (mlock.c#L127" is>Setame="L127"> 127s>Set     Rmlock.c#L127" iaename="L127"> 127een     R0aid="L32" class="line" n5pe="L24">5f">ret = )
&ne" class="srefme="L46BLE_PGMUNLOCKED 127mms="s-    ="mm/mlock.c#L1mm48" clame="L127"> 127mm48" cl    aid="L32" class="line" n5" name="L515"> 115            5     51ode=UNEVICTAB.c#L32"mlock.c#L127" i c#="+code=page" class="sid="L32" class="line" n5"">munloc5 href="mm/mlock.c#L116" 5d="L1515ref=d="L73" class="line" na5"6>munloc5ion: if the page was map5ed ju51able " id="L115" class="lin5"N(!<5s our mapping and we don5#39;t517 cla"+sear IN;
 127do>page)
IN;
munloc5s.

5a href="mm/mlock.c#L120"5id="L51sref">PageLoc 127
 106ame="L127"> 127
 106              rev    ref">page);
linux/hugetlb.h>5t52mlock.c#L72" unsign132IN;
5  22#include "<5"+cod52"mm/internal.h" class="fref5">interna5..h"
;
5  24int ;
 127VM_ine" n (!<;ref="+code=isolate_lru5m name="L5/a>(void)
;
 127mms="s-    ="mm/mlock.c#L1defa6munloc5>  26        if (page);
( 106 127out    5pan>
 106ame="L127"> 127
 127mms="s-    ="mm/mlock.c#L1mm48ame="L127"> 127mm48    5cked(ame="L127"> 127
(ame="L127"> 127
 127

5 class="line" name="L30"50"> 152href="+code=UNEVICTABIT_MEMLOCK)f"a6 127

<5 href="mm/mlock.c#L131" 5d="L153code=TestSetPageMlocked" cl55r task has removed the p5ge fr53try_to_munlock" classIT_MEMLOCK)=ew6page);
ame="L127"> 127
page);
 127VM_ine" n (!interna5ru_page() will take care5of re53" class="line" name="RLIM"Ma>;
SWAP_AGAIT_MEMLOCK)=ew6page);
 127VM_ine" n (!<;ref="+code=isolate_lru5  name="L5="L35" class="line" name5="L3553    /5 me="L26"5Mlocked() flag for effic5ient 53" class="line" name="a1munloc5 path; and to support se5mi-ac53( 127m    _fixup/a>)
me="L106"> 106ame="L127"> 127
 106ame="L127"> 127
 127
Setc#L1 f="mm/mlock.c#L1f">ame="L127"> 127
 127
 106<=ew6(!<5="L39" class="line" name5="L3953( 106 127out    :pan>
(5ling list to the [in]act5ive l54"mm/internal.h" class="fref5t>interna5 the unevictable state.<5/span54" clamlock.c#L127" iSYSCALL_DEFINE1ame="L127"> 127SYSCALL_DEFINE1/a>)
me="L106"> 106<"age 127page) RIN< Rme="L106"> 106<6linux/mempolicy.h5g"L3554ode=UNEVICTABunsign132lolinmlock.c#L127" iage<_limieame="L127"> 127age<_limie    id="L32" class="line" n5class="sr5concurrently being modif5ied, 54" class="lineIN;
page));
munloc5ing munlocked. So lazy m5lock 54able " id="L115" class="lin5c name="L5that the vma really is l5ocked54a>        if CAP_"sref">page)6;
 106 127out    5pan>
5  51(page));
page)can_do>page 127can_do>page)
)ad="L32" class="line" n5_page_mlo5ck()
 106 127out    5pan>
;

  56        if (! 127aru_add_drain_all/a>)
);lassI1munloc5ef">TestClearPageMlocked5(55able " id="L115" class="lin5. name="L5lass="line" name="L58"> 5 58PageLocked()
&ne" class="srefme="L46BLE_PGMUNLOCKED 127mms="s-    ="mm/mlock.c#L1mm48" clame="L127"> 127mm48" cl    aid="L32" class="line" n5me="L59">5  59        
5d_zone_page_state(PageLocked( 127age<_limie    refme="L106"> 106 127rlimie    "mlock.c#L127" iRLIMIT_MEMine"ame="L127"> 127RLIMIT_MEMine"    aid="L32" class="line" n5nr_pages"5 class="sref">hpage_nr_p5ages<56mlock.c#L72" ked( 127age<_limie    r>>ef">page);

page));
putback_lru_page(5;
;
 127mms="s-    ="mm/mlock.c#L1total"f"ste="L127"> 127total"f"     <= 3>;
 127age<_limie    ) ||" id="L115" class="lin5lass="fre5ine" name="L65">  655     56ode=UNEVICTABLE_Psref">page)capabltste="L127"> 127capablt    "mlock.c#L127" iCAP_IPC_ine"ame="L127"> 127CAP_IPC_ine"    )ad="L32" class="line" n5nlass="sr5/mlock.c#L66" id="L66" c5lass=56" class="line" name="a>;
 127do>page)
me="L106"> 106<6)
&ne" class="srefme="L46BLE_PGMUNLOCKED 127mms="s-    ="mm/mlock.c#L1mm48" clame="L127"> 127mm48" cl    aid="L32" class="line" n5l verify 5m/mlock.c#L68" id="L68" 5class56a>        if CAP_"sref">page) c#="+code=page" class="s1&& Mmlock.c#L127" i65sref">PageUnevictable(
5s="sref">count_vm_event<5/a>(<56href="+code=UNEVICTABIT_MEMLOCK)do>page 106  71}
  72
 106 127out    :pan>
5  73/5nd putbac5k to move to unevictable5 list575    mlock.c#L127" iSYSCALL_DEFINE0="+code=page" cSYSCALL_DEFINE0/a>)
me="L106"> 106<"ss="srallame="L127"> 127pss="srall    )an>
>
<5 lass57
5>  79        
5href="+code=PageLocked" 5class57sref">PageLocked()
&ne" class="srefme="L46BLE_PGMUNLOCKED 127mms="s-    ="mm/mlock.c#L1mm48" clame="L127"> 127mm48" cl    aid="L32" class="line" n5me="L81">5  81        if (!( 127do>page)
0aid="L32" class="line" n5ass="sref5">TestSetPageMlocked5()
&ne" class="srefme="L46BLE_PGMUNLOCKED 127mms="s-    ="mm/mlock.c#L1mm48" clame="L127"> 127mm48" cl    aid="L32" class="line" n5" class="5sref">mod_zone_page_stat5e58a href="+code.c#L32"mlock.c#L127" i c#="+code=page" class="sipan>
hpa5ge_nr58*count_vm_event(/5ge" class5="sref">isolate_lru_page5(58s being
                         5ghe fault5ass="sref">putback_lru_p5age
                         5g verify 5me="L88">  88}
  38                         5=e="L59">5uux/rmap.h>
  38
5  90 127DEFINE_SPINine"/a>)
me="L106"> 106 127shmage
;
 127user_)
me="L106"> 106 127size_eref="IT_MEMLOCK)sizeame="L127"> 127size/a>) R 127user_ 106 127user    )an>
 127age<_limie     Rmlock.c#L127" iaoe;
( 106 127size/a>)1+"IT_MEMLOCK)PAGE_SIZEck.c#L69" id="L6AGE_SIZE     -R1ar>>f">page);

PageLocked( 127age<_limie    refme="L106"> 106 127rlimie    "mlock.c#L127" iRLIMIT_MEMine"ame="L127"> 127RLIMIT_MEMine"    aid="L32" class="line" n5owever, t5o walk the page's rm5ap li59( 127age<_limie    reefme="L106"> 106 127RLIM_INFINITY    )an>
( 127age<_limie    r>>ef">page);

 127spin_age)
&ne" class="srefshmage 127shmagepage)allowf="mm/mlock.c#L11allowf=s="sr&&d="L32" class="line" n6a3e, we l6a"L94" class="line" name6 href60_AGAIN" class="srmlock.c#L127" iaoe)userste="L127"> 127user    -    ="mm/mlock.c#L1age 127age<_limie    r&& "sref">page)capabltste="L127"> 127capablt    "mlock.c#L127" iCAP_IPC_ine"ame="L127"> 127CAP_IPC_ine"    )ad="L32" class="line" n6a4e, we l6a with page supposedly o6ame="60ode=UNEVICTABLE_PGMLOgolasme="L106"> 106 127out    5pan>
munloc6_vma_page(struct  127user    )5pan>
( 127user    -    ="mm/mlock.c#L1agemunloc6_ on the unevictable lru6class60sref">PageLocked(munloc6_ walk the page's rm6a hre60( 106 127out    :pan>
PageLocked( 127spin_ss="sr/a>)
&ne" class="srefshmage 127shmagemod_zone_page_sta6e61mlock.c#L72" .c#L32"mlock.c#L127" iallowf="mm/mlock.c#L11allowf=s="sid="L32" class="line" n6t1 from t6  22#include "<6 nce.61f="+cd="L73" class="line" na6page" cla6s="sref">isolate_lru_pag6(61*
6f">ret =  127user_)
me="L106"> 106 127size_eref="IT_MEMLOCK)sizeame="L127"> 127size/a>) R 127user_ 106 127user    )an>
 115            6     61ode=Uint munloc6 href="mm/mlock.c#L116" 6d="L1615="+code=pagene" class="srefspin_age 127spin_age)
&ne" class="srefshmage 127shmagemunloc6ion: if the page was map6ed ju61( 127user    -    ="mm/mlock.c#L1age 106 127size/a>)1+"IT_MEMLOCK)PAGE_SIZEck.c#L69" id="L6AGE_SIZE     -R1ar>>f">page);

(!<6s our mapping and we don6#39;t61sref">PageLocked( 127spin_ss="sr/a>)
&ne" class="srefshmage 127shmagemunloc6s.
( 127user    )5pan>
linux/hugetlb.h>6t62mlock


The original LXR software by"03" "L73" clahttp://sourceforge.net/projects/lxrs>LXR a>) Rthis experispanal version by""L73" clasailto:lxr@tlbux.no11axr@tlbux.no/a>).
axr.tlbux.no kindly hosttdcby""L73" clahttp://www.redpill-tlbpro.no11Redpill Llbpro AS/a>) Rproviderle mLlbux consultne" and operations services since 1995.