linux/mm/percpu.c
<<
>>
Prefs
   1/*
   2 * mm/percpu.c - percpu memory allocator
   3 *
   4 * Copyright (C) 2009           SUSE Linux Products GmbH
   5 * Copyright (C) 2009           Tejun Heo <tj@kernel.org>
   6 *
   7 * This file is released under the GPLv2.
   8 *
   9 * This is percpu allocator which can handle both static and dynamic
  10 * areas.  Percpu areas are allocated in chunks.  Each chunk is
  11 * consisted of boot-time determined number of units and the first
  12 * chunk is used for static percpu variables in the kernel image
  13 * (special boot time alloc/init handling necessary as these areas
  14 * need to be brought up before allocation services are running).
  15 * Unit grows as necessary and all units grow or shrink in unison.
  16 * When a chunk is filled up, another chunk is allocated.
  17 *
  18 *  c0                           c1                         c2
  19 *  -------------------          -------------------        ------------
  20 * | u0 | u1 | u2 | u3 |        | u0 | u1 | u2 | u3 |      | u0 | u1 | u
  21 *  -------------------  ......  -------------------  ....  ------------
  22 *
  23 * Allocation is done in offset-size areas of single unit space.  Ie,
  24 * an area of 512 bytes at 6k in c1 occupies 512 bytes at 6k of c1:u0,
  25 * c1:u1, c1:u2 and c1:u3.  On UMA, units corresponds directly to
  26 * cpus.  On NUMA, the mapping can be non-linear and even sparse.
  27 * Percpu access can be done by configuring percpu base registers
  28 * according to cpu to unit mapping and pcpu_unit_size.
  29 *
  30 * There are usually many small percpu allocations many of them being
  31 * as small as 4 bytes.  The allocator organizes chunks into lists
  32 * according to free size and tries to allocate from the fullest one.
  33 * Each chunk keeps the maximum contiguous area size hint which is
  34 * guaranteed to be equal to or larger than the maximum contiguous
  35 * area in the chunk.  This helps the allocator not to iterate the
  36 * chunk maps unnecessarily.
  37 *
  38 * Allocation state in each chunk is kept using an array of integers
  39 * on chunk->map.  A positive value in the map represents a free
  40 * region and negative allocated.  Allocation inside a chunk is done
  41 * by scanning this map sequentially and serving the first matching
  42 * entry.  This is mostly copied from the percpu_modalloc() allocator.
  43 * Chunks can be determined from the address using the index field
  44 * in the page struct. The index field contains a pointer to the chunk.
  45 *
  46 * To use this allocator, arch code should do the followings.
  47 *
  48 * - define __addr_to_pcpu_ptr() and __pcpu_ptr_to_addr() to translate
  49 *   regular address to percpu pointer and back if they need to be
  50 *   different from the default
  51 *
  52 * - use pcpu_setup_first_chunk() during percpu area initialization to
  53 *   setup the first chunk containing the kernel static percpu area
  54 */
  55
  56#include <linux/bitmap.h>
  57#include <linux/bootmem.h>
  58#include <linux/err.h>
  59#include <linux/list.h>
  60#include <linux/log2.h>
  61#include <linux/mm.h>
  62#include <linux/module.h>
  63#include <linux/mutex.h>
  64#include <linux/percpu.h>
  65#include <linux/pfn.h>
  66#include <linux/slab.h>
  67#include <linux/spinlock.h>
  68#include <linux/vmalloc.h>
  69#include <linux/workqueue.h>
  70
  71#include <asm/cacheflush.h>
  72#include <asm/sections.h>
  73#include <asm/tlbflush.h>
  74#include <asm/io.h>
  75
  76#define PCPU_SLOT_BASE_SHIFT            5       /* 1-31 shares the same slot */
  77#define PCPU_DFL_MAP_ALLOC              16      /* start a map with 16 ents */
  78
  79#ifdef CONFIG_SMP
  80/* default addr <-> pcpu_ptr mapping, override in asm/percpu.h if necessary */
  81#ifndef __addr_to_pcpu_ptr
  82#define __addr_to_pcpu_ptr(addr)                                        \
  83        (void __percpu *)((unsigned long)(addr) -                       \
  84                          (unsigned long)pcpu_base_addr +               \
  85                          (unsigned long)__per_cpu_start)
  86#endif
  87#ifndef __pcpu_ptr_to_addr
  88#define __pcpu_ptr_to_addr(ptr)                                         \
  89        (void __force *)((unsigned long)(ptr) +                         \
  90                         (unsigned long)pcpu_base_addr -                \
  91                         (unsigned long)__per_cpu_start)
  92#endif
  93#else   /* CONFIG_SMP */
  94/* on UP, it's always identity mapped */
  95#define __addr_to_pcpu_ptr(addr)        (void __percpu *)(addr)
  96#define __pcpu_ptr_to_addr(ptr)         (void __force *)(ptr)
  97#endif  /* CONFIG_SMP */
  98
  99struct pcpu_chunk {
 100        struct list_head        list;           /* linked to pcpu_slot lists */
 101        int                     free_size;      /* free bytes in the chunk */
 102        int                     contig_hint;    /* max contiguous size hint */
 103        void                    *base_addr;     /* base address of this chunk */
 104        int                     map_used;       /* # of map entries used */
 105        int                     map_alloc;      /* # of map entries allocated */
 106        int                     *map;           /* allocation map */
 107        void                    *data;          /* chunk data */
 108        bool                    immutable;      /* no [de]population allowed */
 109        unsigned long           populated[];    /* populated bitmap */
 110};
 111
 112static int pcpu_unit_pages __read_mostly;
 113static int pcpu_unit_size __read_mostly;
 114static int pcpu_nr_units __read_mostly;
 115static int pcpu_atom_size __read_mostly;
 116static int pcpu_nr_slots __read_mostly;
 117static size_t pcpu_chunk_struct_size __read_mostly;
 118
 119/* cpus with the lowest and highest unit addresses */
 120static unsigned int pcpu_low_unit_cpu __read_mostly;
 121static unsigned int pcpu_high_unit_cpu __read_mostly;
 122
 123/* the address of the first chunk which starts with the kernel static area */
 124void *pcpu_base_addr __read_mostly;
 125EXPORT_SYMBOL_GPL(pcpu_base_addr);
 126
 127static const int *pcpu_unit_map __read_mostly;          /* cpu -> unit */
 128const unsigned long *pcpu_unit_offsets __read_mostly;   /* cpu -> unit offset */
 129
 130/* group information, used for vm allocation */
 131static int pcpu_nr_groups __read_mostly;
 132static const unsigned long *pcpu_group_offsets __read_mostly;
 133static const size_t *pcpu_group_sizes __read_mostly;
 134
 135/*
 136 * The first chunk which always exists.  Note that unlike other
 137 * chunks, this one can be allocated and mapped in several different
 138 * ways and thus often doesn't live in the vmalloc area.
 139 */
 140static struct pcpu_chunk *pcpu_first_chunk;
 141
 142/*
 143 * Optional reserved chunk.  This chunk reserves part of the first
 144 * chunk and serves it for reserved allocations.  The amount of
 145 * reserved offset is in pcpu_reserved_chunk_limit.  When reserved
 146 * area doesn't exist, the following variables contain NULL and 0
 147 * respectively.
 148 */
 149static struct pcpu_chunk *pcpu_reserved_chunk;
 150static int pcpu_reserved_chunk_limit;
 151
 152/*
 153 * Synchronization rules.
 154 *
 155 * There are two locks - pcpu_alloc_mutex and pcpu_lock.  The former
 156 * protects allocation/reclaim paths, chunks, populated bitmap and
 157 * vmalloc mapping.  The latter is a spinlock and protects the index
 158 * data structures - chunk slots, chunks and area maps in chunks.
 159 *
 160 * During allocation, pcpu_alloc_mutex is kept locked all the time and
 161 * pcpu_lock is grabbed and released as necessary.  All actual memory
 162 * allocations are done using GFP_KERNEL with pcpu_lock released.  In
 163 * general, percpu memory can't be allocated with irq off but
 164 * irqsave/restore are still used in alloc path so that it can be used
 165 * from early init path - sched_init() specifically.
 166 *
 167 * Free path accesses and alters only the index data structures, so it
 168 * can be safely called from atomic context.  When memory needs to be
 169 * returned to the system, free path schedules reclaim_work which
 170 * grabs both pcpu_alloc_mutex and pcpu_lock, unlinks chunks to be
 171 * reclaimed, release both locks and frees the chunks.  Note that it's
 172 * necessary to grab both locks to remove a chunk from circulation as
 173 * allocation path might be referencing the chunk with only
 174 * pcpu_alloc_mutex locked.
 175 */
 176static DEFINE_MUTEX(pcpu_alloc_mutex);  /* protects whole alloc and reclaim */
 177static DEFINE_SPINLOCK(pcpu_lock);      /* protects index data structures */
 178
 179static struct list_head *pcpu_slot __read_mostly; /* chunk list slots */
 180
 181/* reclaim work to release fully free chunks, scheduled from free path */
 182static void pcpu_reclaim(struct work_struct *work);
 183static DECLARE_WORK(pcpu_reclaim_work, pcpu_reclaim);
 184
 185static bool pcpu_addr_in_first_chunk(void *addr)
 186{
 187        void *first_start = pcpu_first_chunk->base_addr;
 188
 189        return addr >= first_start && addr < first_start + pcpu_unit_size;
 190}
 191
 192static bool pcpu_addr_in_reserved_chunk(void *addr)
 193{
 194        void *first_start = pcpu_first_chunk->base_addr;
 195
 196        return addr >= first_start &&
 197                addr < first_start + pcpu_reserved_chunk_limit;
 198}
 199
 200static int __pcpu_size_to_slot(int size)
 201{
 202        int highbit = fls(size);        /* size is in bytes */
 203        return max(highbit - PCPU_SLOT_BASE_SHIFT + 2, 1);
 204}
 205
 206static int pcpu_size_to_slot(int size)
 207{
 208        if (size == pcpu_unit_size)
 209                return pcpu_nr_slots - 1;
 210        return __pcpu_size_to_slot(size);
 211}
 212
 213static int pcpu_chunk_slot(const struct pcpu_chunk *chunk)
 214{
 215        if (chunk->free_size < sizeof(int) || chunk->contig_hint < sizeof(int))
 216                return 0;
 217
 218        return pcpu_size_to_slot(chunk->free_size);
 219}
 220
 221/* set the pointer to a chunk in a page struct */
 222static void pcpu_set_page_chunk(struct page *page, struct pcpu_chunk *pcpu)
 223{
 224        page->index = (unsigned long)pcpu;
 225}
 226
 227/* obtain pointer to a chunk from a page struct */
 228static struct pcpu_chunk *pcpu_get_page_chunk(struct page *page)
 229{
 230        return (struct pcpu_chunk *)page->index;
 231}
 232
 233static int __maybe_unused pcpu_page_idx(unsigned int cpu, int page_idx)
 234{
 235        return pcpu_unit_map[cpu] * pcpu_unit_pages + page_idx;
 236}
 237
 238static unsigned long pcpu_chunk_addr(struct pcpu_chunk *chunk,
 239                                     unsigned int cpu, int page_idx)
 240{
 241        return (unsigned long)chunk->base_addr + pcpu_unit_offsets[cpu] +
 242                (page_idx << PAGE_SHIFT);
 243}
 244
 245static void __maybe_unused pcpu_next_unpop(struct pcpu_chunk *chunk,
 246                                           int *rs, int *re, int end)
 247{
 248        *rs = find_next_zero_bit(chunk->populated, end, *rs);
 249        *re = find_next_bit(chunk->populated, end, *rs + 1);
 250}
 251
 252static void __maybe_unused pcpu_next_pop(struct pcpu_chunk *chunk,
 253                                         int *rs, int *re, int end)
 254{
 255        *rs = find_next_bit(chunk->populated, end, *rs);
 256        *re = find_next_zero_bit(chunk->populated, end, *rs + 1);
 257}
 258
 259/*
 260 * (Un)populated page region iterators.  Iterate over (un)populated
 261 * page regions between @start and @end in @chunk.  @rs and @re should
 262 * be integer variables and will be set to start and end page index of
 263 * the current region.
 264 */
 265#define pcpu_for_each_unpop_region(chunk, rs, re, start, end)               \
 266        for ((rs) = (start), pcpu_next_unpop((chunk), &(rs), &(re), (end)); \
 267             (rs) < (re);                                                   \
 268             (rs) = (re) + 1, pcpu_next_unpop((chunk), &(rs), &(re), (end)))
 269
 270#define pcpu_for_each_pop_region(chunk, rs, re, start, end)                 \
 271        for ((rs) = (start), pcpu_next_pop((chunk), &(rs), &(re), (end));   \
 272             (rs) < (re);                                                   \
 273             (rs) = (re) + 1, pcpu_next_pop((chunk), &(rs), &(re), (end)))
 274
 275/**
 276 * pcpu_mem_alloc - allocate memory
 277 * @size: bytes to allocate
 278 *
 279 * Allocate @size bytes.  If @size is smaller than PAGE_SIZE,
 280 * kzalloc() is used; otherwise, vmalloc() is used.  The returned
 281 * memory is always zeroed.
 282 *
 283 * CONTEXT:
 284 * Does GFP_KERNEL allocation.
 285 *
 286 * RETURNS:
 287 * Pointer to the allocated area on success, NULL on failure.
 288 */
 289static void *pcpu_mem_alloc(size_t size)
 290{
 291        if (WARN_ON_ONCE(!slab_is_available()))
 292                return NULL;
 293
 294        if (size <= PAGE_SIZE)
 295                return kzalloc(size, GFP_KERNEL);
 296        else
 297                return vzalloc(size);
 298}
 299
 300/**
 301 * pcpu_mem_free - free memory
 302 * @ptr: memory to free
 303 * @size: size of the area
 304 *
 305 * Free @ptr.  @ptr should have been allocated using pcpu_mem_alloc().
 306 */
 307static void pcpu_mem_free(void *ptr, size_t size)
 308{
 309        if (size <= PAGE_SIZE)
 310                kfree(ptr);
 311        else
 312                vfree(ptr);
 313}
 314
 315/**
 316 * pcpu_chunk_relocate - put chunk in the appropriate chunk slot
 317 * @chunk: chunk of interest
 318 * @oslot: the previous slot it was on
 319 *
 320 * This function is called after an allocation or free changed @chunk.
 321 * New slot according to the changed state is determined and @chunk is
 322 * moved to the slot.  Note that the reserved chunk is never put on
 323 * chunk slots.
 324 *
 325 * CONTEXT:
 326 * pcpu_lock.
 327 */
 328static void pcpu_chunk_relocate(struct pcpu_chunk *chunk, int oslot)
 329{
 330        int nslot = pcpu_chunk_slot(chunk);
 331
 332        if (chunk != pcpu_reserved_chunk && oslot != nslot) {
 333                if (oslot < nslot)
 334                        list_move(&chunk->list, &pcpu_slot[nslot]);
 335                else
 336                        list_move_tail(&chunk->list, &pcpu_slot[nslot]);
 337        }
 338}
 339
 340/**
 341 * pcpu_need_to_extend - determine whether chunk area map needs to be extended
 342 * @chunk: chunk of interest
 343 *
 344 * Determine whether area map of @chunk needs to be extended to
 345 * accommodate a new allocation.
 346 *
 347 * CONTEXT:
 348 * pcpu_lock.
 349 *
 350 * RETURNS:
 351 * New target map allocation length if extension is necessary, 0
 352 * otherwise.
 353 */
 354static int pcpu_need_to_extend(struct pcpu_chunk *chunk)
 355{
 356        int new_alloc;
 357
 358        if (chunk->map_alloc >= chunk->map_used + 2)
 359                return 0;
 360
 361        new_alloc = PCPU_DFL_MAP_ALLOC;
 362        while (new_alloc < chunk->map_used + 2)
 363                new_alloc *= 2;
 364
 365        return new_alloc;
 366}
 367
 368/**
 369 * pcpu_extend_area_map - extend area map of a chunk
 370 * @chunk: chunk of interest
 371 * @new_alloc: new target allocation length of the area map
 372 *
 373 * Extend area map of @chunk to have @new_alloc entries.
 374 *
 375 * CONTEXT:
 376 * Does GFP_KERNEL allocation.  Grabs and releases pcpu_lock.
 377 *
 378 * RETURNS:
 379 * 0 on success, -errno on failure.
 380 */
 381static int pcpu_extend_area_map(struct pcpu_chunk *chunk, int new_alloc)
 382{
 383        int *old = NULL, *new = NULL;
 384        size_t old_size = 0, new_size = new_alloc * sizeof(new[0]);
 385        unsigned long flags;
 386
 387        new = pcpu_mem_alloc(new_size);
 388        if (!new)
 389                return -ENOMEM;
 390
 391        /* acquire pcpu_lock and switch to new area map */
 392        spin_lock_irqsave(&pcpu_lock, flags);
 393
 394        if (new_alloc <= chunk->map_alloc)
 395                goto out_unlock;
 396
 397        old_size = chunk->map_alloc * sizeof(chunk->map[0]);
 398        old = chunk->map;
 399
 400        memcpy(new, old, old_size);
 401
 402        chunk->map_alloc = new_alloc;
 403        chunk->map = new;
 404        new = NULL;
 405
 406out_unlock:
 407        spin_unlock_irqrestore(&pcpu_lock, flags);
 408
 409        /*
 410         * pcpu_mem_free() might end up calling vfree() which uses
 411         * IRQ-unsafe lock and thus can't be called under pcpu_lock.
 412         */
 413        pcpu_mem_free(old, old_size);
 414        pcpu_mem_free(new, new_size);
 415
 416        return 0;
 417}
 418
 419/**
 420 * pcpu_split_block - split a map block
 421 * @chunk: chunk of interest
 422 * @i: index of map block to split
 423 * @head: head size in bytes (can be 0)
 424 * @tail: tail size in bytes (can be 0)
 425 *
 426 * Split the @i'th map block into two or three blocks.  If @head is
 427 * non-zero, @head bytes block is inserted before block @i moving it
 428 * to @i+1 and reducing its size by @head bytes.
 429 *
 430 * If @tail is non-zero, the target block, which can be @i or @i+1
 431 * depending on @head, is reduced by @tail bytes and @tail byte block
 432 * is inserted after the target block.
 433 *
 434 * @chunk->map must have enough free slots to accommodate the split.
 435 *
 436 * CONTEXT:
 437 * pcpu_lock.
 438 */
 439static void pcpu_split_block(struct pcpu_chunk *chunk, int i,
 440                             int head, int tail)
 441{
 442        int nr_extra = !!head + !!tail;
 443
 ]UG_ONref">tail;
]UG_ONef="+code=new" classss="sref">chunk->map_alloc >= chunk->map_used + 2)
nr_extra = !! 345<4a> 346<4a>/* acquire pcfter tmap *subf @hea
 347<4a>list_movechunk->map[0]);
i,
nr_extra = !!chunk->map[0]);
i,
 348<4a>chunk->map[0]);
chunk->map_used + 2)
i,
 349<4a>chunk->map_used + 2)
nr_extra = !! 350<4a> 351<4a>head + !! 352<4a>chunk->map[0]);
i,
chunk->map;
i,
head + !! 353<4a>chunk->map;
i,
head + !! 354<4a>sta45" class="line"mm/percpu.c#L418" id="L455" class4"line" name="L355"> 355<4a>{
<4    *tail)
 356<4a>   45                   chunk->map;
i,
tail;
 357<4a>
chunk->map;
i,
tail;
 358<4a>   4    if ( 359<4a>   4      "mm/percpu.c#L418" id="L460" class4"line" name="L360"> 360<4a>
 361<4a>   4n class="comment"> * page re
 362<4a>   4n class="comment"> * be integer >=/a>(se memory(sefrom a  * 363<4a>   4n class="comment"> * the currenunk of interest
 364<4a>
 */
 365<4a>   46 class="comment"> * CONTEXT: 366<4a>}
<46 class="comment"> *
 367<4a>
 * pcpu_lock.T(sealignhe at/@alignefrom pan>
 368<4a>/**get he reservedn is called onlynemory 369<4a> * pcpu_extendspan>
 370<4a> * @chunk: c href="mm/percpu.c#L321" id="L471" class4"line" name="L371"> 371<4a> * @new_alloc:map must have enough freervu_lotree b to accomma href="mm/percpu.c#L321" id="L472" class4"line" name="L372"> 372<4a> *
 373<4a> * Extend arespan>
 374<4a> *

 375<4a> * CONTEXT:< href="mm/percpu.c#L438" id="L476" class4"line" name="L376"> 376<4a> * Does GFP_Kspan>
 377<4a> * @size: bytsize bytdpoffset(canhave @n, -errno on f1"f="nonavtchad, a>(se 378<4a> * RETURNS: 379<4a> * 0 on succa href="mm/percpu.c#L439" id="L480" class4"line" name="L380"> 380<4a>pcpu_chunk >=/a>(st pcpu_chunk *chunk, int size, size, align hf="mm/percpu.c#L441" id="L481" class4"line" name="L381"> 381<4a>sta48href="mm/percpu.c#L442" id="L482" class4"line" name="L382"> 382<4a>{
<48   int oslot < pcpu_chunk_slot(chunk);
 383<4a>   4    int *map;
 384<4a>   4    i,
oslot &ffref="mm/percpu.c#L443" id="L485" class4"line" name="L385"> 385<4a>   48ref="mm/percpu.c#L416" id="L486" class4"line" name="L386"> 386<4a>
i,
oslot &ffref=r"+="+code=i" class="sref">i,
chunk->map_used + 2)
oslot &ffref=re"+code=new" classabsref">flags)absef="+code=new" classss="sref">chunk->map;
i,
 387<4a>   48           return tail;
boos     code=i" class="ss_">tsref">pcpu_chunkss_">tsi,
chunk->map_used + 2)
 388<4a>   48        (head, int tail;
 389<4a>   48ref="mm/percpu.c#L400" id="L490" class4"line" name="L390"> 390<4a>
/* acquire pc= !!< ref=aligncqui re_lockcqui ca href="mm/percpu.c#L439" id="L491" class4"line" name="L391"> 391<4a>   4    head + !!tail;
ALIGNef="+code=new" classsffref">oslot &ffref=recode=chunk" claalignref">size, align hf="r-+code=i" class="sffref">oslot &ffref="mm/percpu.c#L443" id="L492" class4"line" name="L392"> 392<4a>   4            return  ]UG_ONref">tail;
]UG_ONef="+code=new" classsref">i,
head + !! 393<4a>
 394<4a>   4    if (chunk->map;
i,
 395<4a>   4            goto  396<4a>
chunk->map;
i,
head + !!size)
 397<4a>   4            return  ="x_contigref">map;
 ="xref">map;
chunk->map;
i,
map;
 398<4a>   49        ( 399<4a>
 400<5a>   50ref="mm/percpu.c#L361" id="L501" class5"line" name="L401"> 401<5a>
/*
 402<5a>   5n class="comment"> * @ptr: meeeeeeeeeeeeeeeee is npan>
 393<5a>   5n class="comment"> * @size: seeeeeeeeeeeeeeee imergecalleemat the reservcallesmallcalleined afinhe aa smaller href="mm/percpu.c#L410" id="L504" class5"line" name="L394"> 394<5a>   5n class="comment"> *
 405<5a>
 * Free @pteeeeeeeeeeeeeeee iunthe sn ref=345" in.  Grabs ama href="mm/percpu.c#L321" id="L506" class5"line" name="L406"> 406<5a> */
eeeeeeeeeeeeeeee a href="mm/percpu.c#L439" id="L507" class5"line" name="L407"> 407<5a>   50           return head + !!head + !!chunk->map[0]);
i,
 408<5a>
chunk->map;
i,
 399<5a>   50           return -chunk->map;
i,
head + !! 410<5a> 411<5a>chunk->map;
i,
head + !! 412<5a>chunk->new_sizehead + !! 413<5a>   51                             "mm/percpu.c#L418" id="L514" class5"line" name="L414"> 414<5a>   51   if (chunk->map;
i,
head + !! 415<5a>
oslot &ffref=re"+code=new" classs="sref">head + !! 416<5a>   51                   head + !! 417<5a>}
<51           return  418<5a>
 419<5a>/* acquire pcff n-zero, small, jnougkeep 420<5a>tail;
chunk->map;
i,
head + !!size)
 421<5a>tail)
 422<5a>tail;
 423<5a> 424<5a>/* acquire pcp blocf="warranthe  a href="mm/percpu.c#L439" id="L525" class5"line" name="L425"> 425<5a>head + !!tail)
 426<5a>pcpu_split_block(struct chunk->i,
head, int tail;
 427<5a>head + !! 428<5a>i,
 429<5a>oslot &ffref=re"+code=new" classs="sref">head + !! 430<5a>map;
 ="xref">map;
chunk->map;
i,
map;
 431<5a> 432<5a>tail)
 433<5a>map;
 ="xref">map;
chunk->map;
i,
map;
 434<5a> 435<5a> 436<5a>/* acquire pcupplit.hf="+bytemarknemory 437<5a>tsref">pcpu_chunkss_">ts 438<5a>chunk->chunk-&ontig_hf=" ="x_contigref">map;
/* acquire pcfully scannse  a href="mm/percpu.c#L439" id="L539" class5"line" name="L439"> 439<5a>sta53           return - 440<5a>   5                         int chunk->chunk-&ontig_hf=" ="xref">map;
chunk->chunk-&ontig_hf=" 441<5a>{
<54   map;
 442<5a>   5    inmm/percpu.c#L331" id="L543" class5"line" name="L443"> 443<5a>
chunk->new_sizechunk->map;
i,
chunk->map;
i,
chunk->map;
i,
 345<5a> 346<5a>(pcpu_split_bloc(chunk->oslot <  347<5a>oslot &ffref="mm/percpu.c#L443" id="L548" class5"line" name="L348"> 348<5a> 349<5a> 350<5a>chunk->chunk-&ontig_hf=" ="x_contigref">map;
/* acquire pcfully scannse  a href="mm/percpu.c#L439" id="L551" class5"line" name="L351"> 351<5a>(pcpu_split_bloc(chunk->oslot <  352<5a> 353<5a>/* acquire pctellcks sup331 layget bervedn iave @nhas"nonavtchad, a>(se a href="mm/percpu.c#L439" id="L554" class5"line" name="L354"> 354<5a>sta55" class="line href="+1"mm/percpu.c#L331" id="L555" class5"line" name="L355"> 355<5a>{
<5    *<"mm/percpu.c#L418" id="L556" class5"line" name="L356"> 356<5a>   55ref="mm/percpu.c#L397" id="L557" class5"line" name="L357"> 357<5a>
 * @size: 
 358<5a>   55 class="comment"> * RETURNS:(se m to aa>(sepane  * 359<5a>   55 class="comment"> * pcpu_extenunk of interest
 360<5a>
 * @chunk: chu to me:poffset((sepana hrefref="mm/percpu.c#L422" id="L561" class5"line" name="L361"> 361<5a>   5n class="comment"> * page re:< href="mm/percpu.c#L438" id="L562" class5"line" name="L362"> 362<5a>   5n class="comment"> * be integerFto aa>(sestartad, from p to mend rean>
 363<5a>   5n class="comment"> * the currenonlynmodifiss.
 364<5a>
 */
 365<5a>   56 class="comment"> * CONTEXT:< href="mm/percpu.c#L321" id="L566" class5"line" name="L366"> 366<5a>}
<56 class="comment"> *

 367<5a>
 * pcpu_lock.
 368<5a>/**gea href="mm/percpu.c#L439" id="L569" class5"line" name="L369"> 369<5a>pcpu_split_bloc to sa>(st pcpu_chunk *chunk, int new_size 370<5a> 371<5a>oslot < pcpu_chunk_slot(chunk);
 372<5a>i,
oslot &ffref="mm/percpu.c#L443" id="L573" class5"line" name="L373"> 373<5a> 374<5a>i,
oslot &ffref=r"+="+code=i" class="sref">i,
chunk->map_used + 2)
oslot &ffref=re"+code=new" classabsref">flags)absef="+code=new" classss="sref">chunk->map;
i,
 375<5a>oslot &ffref=r""+code=new" class to meref">new_size 376<5a> 377<5a>tail;
]UG_ONef="+code=new" classsffref">oslot &ffref=r!"+code=new" class to meref">new_size 378<5a>tail;
]UG_ONef="+code=new" classss="sref">chunk->map;
i,
 379<5a> 380<5a>chunk->map;
i,
chunk->map;
i,
 381<5a>sta58   chunk->new_sizechunk->map;
i,
 382<5a>{
<58   inmm/percpu.c#L331" id="L583" class5"line" name="L383"> 383<5a>   58             c="comment">/* acquire pcmerge withslot it w?gea href="mm/percpu.c#L439" id="L584" class5"line" name="L384"> 384<5a>   5    i,
chunk->map;
i,
 385<5a>   58           goto chunk->map;
i,
chunk->map;
i,
 386<5a>
chunk->map_used + 2)
 387<5a>   58           return list_movechunk->map[0]);
i,
chunk->map[0]);
i,
 388<5a>   58        (chunk->map_used + 2)
i,
chunk->map[0]);
 389<5a>   58           return -i,
 390<5a>
 391<5a>   5    /* acquire pcmerge withsnext?gea href="mm/percpu.c#L439" id="L592" class5"line" name="L392"> 392<5a>   5            ref="+code=WARN_ON_ONsref">i,
chunk->map_used + 2)
chunk->map;
i,
 393<5a>
chunk->map;
i,
chunk->map;
i,
 394<5a>   5    if (chunk->map_used + 2)
 395<5a>   5            goto list_movechunk->map[0]);
i,
chunk->map[0]);
i,
 396<5a>
chunk->map_used + 2)
i,
chunk->map[0]);
 397<5a>   5            re"mm/percpu.c#L418" id="L598" class5"line" name="L398"> 398<5a>   59ref="mm/percpu.c#L419" id="L599" class5"line" name="L399"> 399<5a>
chunk->chunk-&ontig_hf=" ="xref">map;
chunk->map;
i,
chunk->chunk-&ontig_hf=" 400<6a>   60   (pcpu_split_bloc(chunk->oslot <  401<6a>
 402<6a>   60   inmm/percpu.c#L331" id="L603" class6"line" name="L393"> 393<6a>   6n clasd pcpu_chunk * >=/ss="sref">pcpu_chunk >=/ss="st  394<6a>   6n clas"mm/percpu.c#L333" id="L605" class6"line" name="L405"> 405<6a>
pcpu_chunk *chunk, int  396<6a> 407<6a>   60   chunk, int map_alloc<_slotmemass="st (new_size( 398<6a>
chunk);
 399<6a>   60           return -chunk)NULL 410<6a> 411<6a>chunk->map;
map_alloc<_slotmemass="st map_allocchunk->map[0]);
 412<6a>chunk);
map[0]);
 413<6a>   61                     code=map" classk to ref">map[0]ka href="+code=chunk" class="sref">chunk);
 414<6a>   61   if (chunk)NULL 415<6a>
 416<6a>   61ref="mm/percpu.c#L397" id="L617" class6"line" name="L417"> 417<6a>}
<61   chunk, int map_alloc >= map_alloc 418<6a>
chunk->map;
chunk->map_used + 2)
new_size 419<6a> 420<6a>new_sizechunk->pcpu_chunklitshref="mm/percpu.c#L331" id="L621" class6"line" name="L421"> 421<6a>chunk->new_sizenew_size 422<6a>chunk->chunk-&ontig_hf=" _slotuni"ss="sref">new_size 423<6a> 424<6a>chunk, int  425<6a> 426<6a> 427<6a>pcpu_chunk  to sss="spcpu_chunk *chunk, int  428<6a> 429<6a>chunk);
 430<6a> 431<6a>map[0]_slotmema to ef="+code=new" classss="sref">chunk->map;
chunk->map_alloc >= chunk->map[0]);
 432<6a>map[0]ka href="+code=chunk" class="sref">chunk);
 433<6a> 434<6a> 435<6a> * CONTEXT 436<6a> *
 437<6a> * pcpu_lock href="mm/percpu.c#L438" id="L638" class6"line" name="L438"> 438<6a> * RETURNS: 439<6a>sta63 class="comment"> * pcpu_exten[de] span>
 of are implkcquied(cana separ>
 440<6a>   64 class="comment"> * @chunk: chf="ovedn isile byte* @piled together.  Th 441<6a>{
<64 class="comment"> * @new_allocshould be implkcquieda href="mm/percpu.c#L438" id="L642" class6"line" name="L442"> 442<6a>   64 class="comment"> *
 443<6a>
 * the curren_slot span>
< *
 *

< *
 345<6a> * CONTEXT: *re>
< *
 346<6a> *
 347<6a> * pcpu_lock.
 348<6a> * RETURNS: 349<6a> * 0 on succa href="mm/percpu.c#L439" id="L650" class6"line" name="L350"> 350<6a>map[0]_slot span>
< *pcpu_chunk *chunk, int oslot &ffref=ref="+code=i" class="s="sref">size,  351<6a>pcpu_chunk on span>
< *pcpu_chunk *chunk, int oslot &ffref=ref="+code=i" class="s="sref">size,  352<6a>pcpu_chunk * *re>
< *pcpu_chunk *re>
< * 353<6a>pcpu_chunk onhreoy *pcpu_chunk *chunk, int  354<6a>sta65" clad pcpu_chunk &ddr_to_pagkref">pcpu_chunk &ddr_to_pagkt pcpu_chunk&ddr 355<6a>{
<6    *< pcpu_chunk__ini"ref="code=chunk" cla verify >=/inforef">pcpu_chunk verify >=/infot pcpu_chunk >=/infot i,
 356<6a>   65ref="mm/percpu.c#L397" id="L657" class6"line" name="L357"> 357<6a>
i,
 358<6a>   65 clas#include &quo"+code=map"c#L397" i-km.sref">map_fchunk<97" i-km.sclas&quo"+mm/percpu.c#L397" id="L659" class6"line" name="L359"> 359<6a>   65 clas#ef="mm/percpu.c#L439" id="L660" class6"line" name="L360"> 360<6a>
map_fchunk<97" i-vm.sclas&quo"+mm/percpu.c#L397" id="L661" class6"line" name="L361"> 361<6a>   6n clas#endifmm/percpu.c#L397" id="L662" class6"line" name="L362"> 362<6a>   66   inmm/percpu.c#L331" id="L663" class6"line" name="L363"> 363<6a>   6n class="comment"> * the cur
 364<6a>
 */
(<&ddr_search - onterm"L3interes&ontainid, specifisd addressreref="mm/percpu.c#L420" id="L665" class6"line" name="L365"> 365<6a>   66 class="comment"> * CONTEXT:< @addr:saddressnref=be @i ap 366<6a>}
<66 class="comment"> *
 367<6a>
 * pcpu_lock.RETURNSa href="mm/percpu.c#L437" id="L668" class6"line" name="L368"> 368<6a>/**ge Th 369<6a> * 0 on succa href="mm/percpu.c#L439" id="L670" class6"line" name="L370"> 370<6a>pcpu_chunk * */a>(<&ddr_searchref">pcpu_chunk *pcpu_chunk&ddr 371<6a> 372<6a>/* acquire pcfs 373<6a>pcpu_chunk &ddr_in_firat/ss="sef="+code=chunk" cla&ddrref">pcpu_chunk&ddr 374<6a>/* acquire pcfs?gea href="mm/percpu.c#L439" id="L675" class6"line" name="L375"> 375<6a>pcpu_chunk &ddr_in_reservsd/ss="sef="+code=chunk" cla&ddrref">pcpu_chunk&ddr 376<6a> reservsd/ss="sref">pcpu_chunk reservsd/ss="sef="+mm/percpu.c#L397" id="L677" class6"line" name="L377"> 377<6a>  irat/ss="sref">pcpu_chunk firat/ss="sef="+mm/percpu.c#L397" id="L678" class6"line" name="L378"> 378<6a> 379<6a> 380<6a> * CONTEXT 381<6a>sta68 class="comment"> * @new_alllllllllle Th
 vend runi"0=be @i mightrbe un 2)
aand href="mm/percpu.c#L438" id="L682" class6"line" name="L382"> 382<6a>{
<68 class="comment"> * @ptr: meeeeeeeee 383<6a>   68 class="comment"> * @size: seeeeeeee* currqui processef=berefe lookad, it uppinsth 384<6a>   68 class="comment"> *
 385<6a>   68 class="comment"> * Free @pteeeeeeee 386<6a>
 */
eeeeeeeeea href="mm/percpu.c#L439" id="L687" class6"line" name="L387"> 387<6a>   68   pcpu_chunk&ddrflags)_slotuni"soffsetsmap_used 388<6a>   68        ( get_pagk/ss="sref">pcpu_chunk get_pagk/ss="sef="+code=chunk" cla &ddr_to_pagkref">pcpu_chunk &ddr_to_pagkt pcpu_chunk&ddr 389<6a>   68     "mm/percpu.c#L418" id="L690" class6"line" name="L390"> 390<6a>
 391<6a>   69 class="comment"> * @new_al
 392<6a>   69 class="comment"> * be integer >= - th 393<6a>
 * the curren@(sepanemory 394<6a>   69 class="comment"> */
(se(max PAGE_SIZE)reref="mm/percpu.c#L420" id="L695" class6"line" name="L395"> 395<6a>   69 class="comment"> * CONTEXT:< @reservsd:nemory 396<6a>
 *
 397<6a>   69 class="comment"> * pcpu_lock.Amory(se 398<6a>   69 class="comment">/**ge href="mm/percpu.c#L438" id="L699" class6"line" name="L399"> 399<6a>
 * pcpu_extenspan>
 400<7a>   70 class="comment"> * @chunk: chDoes GFP_KERNELp length ofa href="mm/percpu.c#L438" id="L701" class7"line" name="L401"> 401<7a>
 * page re:< href="mm/percpu.c#L438" id="L702" class7"line" name="L402"> 402<7a>   70 class="comment"> * be integerRETURNSa href="mm/percpu.c#L437" id="L703" class7"line" name="L393"> 393<7a>   70 class="comment"> * the currenP20" ippospan>nd rks semory(se 394<7a>   70 class="comment"> */
 405<7a>
pcpu_chunk__439" iref="+code=chunk" cla &s="sref">map_alloc<_slotss="st pcpu_chunksize, pcpu_chunkpcpu_chunk&lignref=recode=chunk" claboosref">tail)
boosref="code=chunk" clareservsdref">map_used 396<7a> 407<7a>   70   pcpu_chunkwarn_limi"   398<7a>
pcpu_chunk *chunk, int  399<7a>   70           recedatrchar"+code=chunk" claerrref">pcpu_chunkerr 410<7a>oslot lt; oslot &ffref="+code=new_size" new &s="sref">map_alloc 411<7a>flags) lags 412<7a> 413<7a>   71             f="+code=WARN_ON_ONunlikelyref">flags)unlikelyt size, size, size, PCPU_MIN_UNIT_SIZEref=;||+code=vfree" claalignref">pcpu_chunk&lignref=;r="++code=vfree" claPAGE_SIZEref">size, PAGE_SIZE 414<7a>   71   if (tail;
WARNt size, refsref="+c="comment"> hreing"s&quo"+illegal"href((%zu) ef=&lign((%zu) ref=&quo"+chref="mm/percpu.c#L439" id="L715" class7"line" name="L415"> 415<7a>
 hreing"s&quo"+420" ip length of\n&quo"+chref="recode=chunk" clasize, pcpu_chunk&lignref=="mm/percpu.c#L331" id="L716" class7"line" name="L416"> 416<7a>   71                   chunk)NULL 417<7a>}
<71           re"mm/percpu.c#L418" id="L718" class7"line" name="L418"> 418<7a>
 419<7a>
chunk)mutexan>
 >=/mutexref">pcpu_chunk >=/mutexref=="mm/percpu.c#L331" id="L720" class7"line" name="L420"> 420<7a>
<_irqsa"sref">list_move
<_irqsa"st  n>
chunk) n>
flags) lags 421<7a> 422<7a>/* acquire pcservssreservsd alength ofspfrom th 423<7a>map_used reservsd/ss="sref">pcpu_chunk reservsd/ss="sef="=="mm/percpu.c#L333" id="L724" class7"line" name="L424"> 424<7a>chunk, int pcpu_chunk reservsd/ss="sef="+mm/percpu.c#L397" id="L725" class7"line" name="L425"> 425<7a> 426<7a>size, chunk->chunk-&ontig_hf=" 427<7a>pcpu_chunkerr hreing"s&quo"+>= from reservsd nteresfailed&quo"+chref="+mm/percpu.c#L397" id="L728" class7"line" name="L428"> 428<7a>
chunk) ail_unl>
 429<7a> 430<7a> 431<7a>map_allocmap_usedchunk, int  432<7a>
<_irq>
list_move
<_irq>
 n>
chunk) n>
flags) lags 433<7a>map[0] extendsa>(s_="st chunk, int map_alloc 434<7a>pcpu_chunkerr hreing"s&quo"+failednd rextend  >(se="se 435<7a>
pcpu_chunk ail_unl>
 436<7a> 437<7a>
<_irqsa"sref">list_move
<_irqsa"st  n>
chunk) n>
flags) lags 438<7a> 439<7a>sta73ref="mm/percpu.c#L400" id="L740" class7"line" name="L440"> 440<7a>   74                     code=new_size" sffref">oslot &ffref=r"+code=pcpu_chunk_slot>=/a>(sref">pcpu_split_bloc>=/a>(st chunk, int size, pcpu_chunk&lignref=="mm/percpu.c#L331" id="L741" class7"line" name="L441"> 441<7a>{
<74   oslot &ffref=rf="+"+==mm/percpu.c#L331" id="L742" class7"line" name="L442"> 442<7a>   74           (s_founpcpu_chunk&>(s_foun 443<7a>
pcpu_chunkerr hreing"s&quo"+>= from reservsd nteresfailed&quo"+chref="+mm/percpu.c#L397" id="L745" class7"line" name="L345"> 345<7a>
chunk) ail_unl>
 346<7a> 347<7a> 348<7a>map_used 349<7a>/* acquire pcsearch through normal nteres
 350<7a>oslot lt; pcpu_chunk_slotsize, oslot lt; flags)_slotnrss="ssef="++code=vfree" clas="sref">oslot lt;  351<7a>flags)lits_for_each_quiryt chunk, int  s="sref">pcpu_chunk_slotoslot lt; pcpu_chunklitshref=="mm/percpu.c#L333" id="L752" class7"line" name="L352"> 352<7a>size, chunk->chunk-&ontig_hf=" 353<7a> 354<7a>sta75     mm/percpu.c#L418" id="L755" class7"line" name="L355"> 355<7a>{
<75           goto map_allocmap_usedchunk, int  356<7a>   75                   map_alloc 357<7a>
list_move
<_irq>
 n>
chunk) n>
flags) lags 358<7a>   75        ( extendsa>(s_="sref">map[0] extendsa>(s_="st chunk, int  359<7a>   75           return -map_alloc 360<7a>
pcpu_chunkerr hreing"s&quo"+failednd rextend  >(se="s&quo"+chref="+mm/percpu.c#L397" id="L761" class7"line" name="L361"> 361<7a>   76   
pcpu_chunk ail_unl>
 362<7a>   76            363<7a>   76                           
<_irqsa"sref">list_move
<_irqsa"st  n>
chunk) n>
flags) lags 364<7a>
 * CONTEXT 365<7a>   76 class="comment"> * CONTEXT:::::::::::::::::::::::::::::::::er n>
< has been droap3d,nneednd  href="mm/percpu.c#L410" id="L766" class7"line" name="L366"> 366<7a>}
<76 class="comment"> *
<::::::::::::::::::::::::::::::::errestart slot 367<7a>
 * pcpu_loc::::::::::::::::::::::::::::::::ea href="mm/percpu.c#L439" id="L768" class7"line" name="L368"> 368<7a>map_used 369<7a> 370<7a> 371<7a>oslot &ffref=r"+code=pcpu_chunk_slot>=/a>(sref">pcpu_split_bloc>=/a>(st chunk, int size, pcpu_chunk&lignref=="mm/percpu.c#L361" id="L772" class7"line" name="L372"> 372<7a>oslot &ffref=rf="+"+==mm/percpu.c#L331" id="L773" class7"line" name="L373"> 373<7a>(s_founpcpu_chunk&>(s_foun 374<7a> 375<7a> 376<7a> 377<7a>/* acquire pchmmm..."nonspacenleft, *re>
 378<7a>
<_irq>
list_move
<_irq>
 n>
chunk) n>
flags) lags 379<7a> 380<7a>chunk, int 
< *pcpu_chunk *re>
< * 381<7a>sta78   chunk);
 382<7a>{
<78           pcpu_chunkerr hreing"s&quo"+failednd remory 383<7a>   78                     gotoecode=chunk" cla ail_unl>
pcpu_chunk ail_unl>
 384<7a>   784          go"mm/percpu.c#L418" id="L785" class7"line" name="L385"> 385<7a>   78ref="mm/percpu.c#L416" id="L786" class7"line" name="L386"> 386<7a>

<_irqsa"sref">list_move
<_irqsa"st  n>
chunk) n>
flags) lags 387<7a>   78   pcpu_split_bloc(chunk-> 388<7a>   78        (map_used 389<7a>   78ref="mm/percpu.c#L400" id="L790" class7"line" name="L390"> 390<7a>
(s_founpcpu_chunk&>(s_foun 391<7a>   79   
<_irq>
list_move
<_irq>
 n>
chunk) n>
flags) lags 392<7a>   79   inmm/percpu.c#L331" id="L793" class7"line" name="L393"> 393<7a>
/* acquire pc span>
<,e="sebyte*learrks se>(seea href="mm/percpu.c#L439" id="L794" class7"line" name="L394"> 394<7a>   794    span>
< *map[0]_slot span>
< *chunk, int oslot &ffref="+code=new_size" size,  395<7a>   79           goto 
<_irqsa"sref">list_move
<_irqsa"st  n>
chunk) n>
flags) lags 396<7a>
  to sa>(sref">pcpu_split_bloc to sa>(schunk, int oslot &ffref=="mm/percpu.c#L331" id="L797" class7"line" name="L397"> 397<7a>   79           return pcpu_chunkerr hreing"s&quo"+failednd r span>
<&quo"+chref="+mm/percpu.c#L397" id="L798" class7"line" name="L398"> 398<7a>   79        (
chunk) ail_unl>
 399<7a>
 400<8a>   80ref="mm/percpu.c#L361" id="L801" class8"line" name="L401"> 401<8a>

chunk)mutexaunl>
 >=/mutexref">pcpu_chunk >=/mutexref=="mm/percpu.c#L331" id="L802" class8"line" name="L402"> 402<8a>   80   inmm/percpu.c#L331" id="L803" class8"line" name="L393"> 393<8a>   80             c="comment">/* acquire pchref="+addressnren>
 vend rbas 394<8a>   80" class="line href="code=chunk" cla_ &ddr_to_pslot trref">pcpu_chunk_ &ddr_to_pslot trchunk, int pcpu_chunkbas<_&ddr clas++code=new_size" sffref">oslot &ffref=="mm/percpu.c#L331" id="L805" class8"line" name="L405"> 405<8a>
 396<8a>
chunk) ail_unl>
 407<8a>   80   list_move
<_irq>
 n>
chunk) n>
flags) lags 398<8a>

pcpu_chunk ail_unl>
 399<8a>   80           recode=chunk" clamutexaunl>
chunk)mutexaunl>
 >=/mutexref">pcpu_chunk >=/mutexref=="mm/percpu.c#L331" id="L810" class8"line" name="L410"> 410<8a>pcpu_chunkwarn_limi"   411<8a>pcpu_chunk hreing"s&quo"+PERCPU: alength ofsfailed,"href=%zu=&lign=%zu,=&quo"+chref="mm/percpu.c#L439" id="L812" class8"line" name="L412"> 412<8a> hreing"s&quo"+%s\n&quo"+chref="recode=chunk" clasize, pcpu_chunk&lignref=recode=chunk" claerrref">pcpu_chunkerr 413<8a>   81                     code=chunk" cladump_sta
chunk)dump_sta
 414<8a>   81   if (pcpu_chunkwarn_limi"   415<8a>
pcpu_chunk hreing"s&quo"+PERCPU: limi"e hached,"disable
warning\n&quo"+chref="="mm/percpu.c#L331" id="L816" class8"line" name="L416"> 416<8a>   81             "mm/percpu.c#L418" id="L817" class8"line" name="L417"> 417<8a>}
<81           rehref="+code=new_alloc"NULLref">chunk)NULL 418<8a>
 419<8a> 420<8a> * @chunk:
 421<8a> * @new_alloc_ >=/420" ip-remory icp420" ip >(s href="mm/percpu.c#L420" id="L822" class8"line" name="L422"> 422<8a> * be integer@(sepanemory 423<8a> * the curren@align: aligncqui (se(max PAGE_SIZE)reref="mm/percpu.c#L420" id="L824" class8"line" name="L424"> 424<8a> */
 425<8a> * CONTEXT:< Amory(se 426<8a> *
 427<8a> * pcpu_lock href="mm/percpu.c#L438" id="L828" class8"line" name="L428"> 428<8a>/**ge span>
 429<8a> * pcpu_extenDoes GFP_KERNELp length ofa href="mm/percpu.c#L438" id="L830" class8"line" name="L430"> 430<8a> * @chunk: c href="mm/percpu.c#L438" id="L831" class8"line" name="L431"> 431<8a> * @new_allocRETURNSa href="mm/percpu.c#L437" id="L832" class8"line" name="L432"> 432<8a> * be integerP20" ippospan>nd rks semory(se 433<8a> * the currea href="mm/percpu.c#L439" id="L834" class8"line" name="L434"> 434<8a>pcpu_chunk__439" iref="+code=chunk" cla_ >=/420" iref">pcpu_chunk_ >=/420" ipcpu_chunksize, pcpu_chunkpcpu_chunk&lignref==mm/percpu.c#L331" id="L835" class8"line" name="L435"> 435<8a> 436<8a> &s="sref">map_alloc<_slotss="st size, pcpu_chunk&lignref=recode=chunk" clafalshref">size, falsh 437<8a> 438<8a>chunk)EXPORT_SYMBOL_GPLt pcpu_chunk_ >=/420" i 439<8a>sta83ref="mm/percpu.c#L400" id="L840" class8"line" name="L440"> 440<8a>   84 class="comment"> * @chunk:
 441<8a>{
<84 class="comment"> * @new_alloc_ >=/reservsd/420" ip-remory(s href="mm/percpu.c#L420" id="L842" class8"line" name="L442"> 442<8a>   84 class="comment"> * be integer@(sepanemory 443<8a>
 * the curren@align: aligncqui (se(max PAGE_SIZE)reref="mm/percpu.c#L420" id="L844" class8"line" name="L43href="mm8percp84 class="comment"> */
 345<8a> * CONTEXT:(se 346<8a> *
(sef="arch has set(it up; oap 347<8a> * pcpu_lock.alength ofsis servsd from th 3pdy"> icp >(s. eMightrsleep.reref="mm/percpu.c#L420" id="L848" class8"line" name="L348"> 348<8a> * RETURNS: 349<8a> * 0 on succ href="mm/percpu.c#L438" id="L850" class8"line" name="L350"> 350<8a> * @chunk: chspan>
 351<8a> * @new_allocDoes GFP_KERNELp length ofa href="mm/percpu.c#L438" id="L852" class8"line" name="L352"> 352<8a> * be intege href="mm/percpu.c#L438" id="L853" class8"line" name="L353"> 353<8a> * the currenRETURNSa href="mm/percpu.c#L437" id="L854" class8"line" name="L354"> 354<8a>sta85 class="comment"> */
nd rks semory(se 355<8a>{
<85 class="comment"> * CONTEXT: 356<8a>   85     ef="+code=pcpu_split__439" iref">pcpu_chunk__439" iref="+code=chunk" cla_ >=/reservsd/420" iref">pcpu_chunk_ >=/reservsd/420" ipcpu_chunksize, pcpu_chunkpcpu_chunk&lignref==mm/percpu.c#L331" id="L857" class8"line" name="L357"> 357<8a>
 358<8a>   85        ( &s="sref">map_alloc<_slotss="st size, pcpu_chunk&lignref=recode=chunk" clarefsref">size, refsref=="mm/percpu.c#L331" id="L859" class8"line" name="L359"> 359<8a>   85     "mm/percpu.c#L418" id="L860" class8"line" name="L360"> 360<8a>
 361<8a>   86 class="comment"> * @new_al
 362<8a>   86 class="comment"> * be integer remenimp-rremenimpfully  to  nteres,rworkqueuepfunch of href="mm/percpu.c#L420" id="L863" class8"line" name="L363"> 363<8a>   8n class="comment"> * the curren@work: un 2)
 href="mm/percpu.c#L420" id="L864" class8"line" name="L364"> 364<8a>
 */
< href="mm/percpu.c#L420" id="L865" class8"line" name="L365"> 365<8a>   86 class="comment"> * CONTEXT:< Remenimpss=pfully  to  nteres except ref=th 366<8a>}
<86 class="comment"> *
 367<8a>
 * pcpu_lock.span>
 368<8a>/**ge workqueuep&ontexta href="mm/percpu.c#L438" id="L869" class8"line" name="L369"> 369<8a> * 0 on succa href="mm/percpu.c#L439" id="L870" class8"line" name="L370"> 370<8a>map_alloc<_slotremenimt pcpu_chunkwork_href="ref="+code=chunk" claworkref">pcpu_chunkworkref==mm/percpu.c#L331" id="L871" class8"line" name="L371"> 371<8a> 372<8a>pcpu_chunkLIST_HEADt pcpu_chunktodoref=="mm/percpu.c#L331" id="L873" class8"line" name="L373"> 373<8a>pcpu_chunklits_heapcpu_chunkhea s="sref">pcpu_chunk_slotflags)_slotnrss="ssef="p-r1]"mm/percpu.c#L331" id="L874" class8"line" name="L374"> 374<8a>pcpu_chunk *chunk, int chunk,next 375<8a> 376<8a>
chunk)mutexan>
 >=/mutexref">pcpu_chunk >=/mutexref=="mm/percpu.c#L331" id="L877" class8"line" name="L377"> 377<8a>list_move
<_irqt  n>
chunk) n>
 378<8a> 379<8a>size, lits_for_each_quiry_safst chunk, int chunk,nextpcpu_chunkheapcpu_chunklitshref=="mm/percpu.c#L333" id="L880" class8"line" name="L380"> 380<8a>tail;
WARN_ONt chunk, int chunk,immutableref=="mm/percpu.c#L331" id="L881" class8"line" name="L381"> 381<8a>sta88    382<8a>{
<88           /* acquire pcspare=th 383<8a>   88                     f="+code=pcpu_lock"ss="sref">chunk, int flags)lits_firat_quiryt pcpu_chunkheapcpu_chunk *pcpu_chunklitshref==mm/percpu.c#L331" id="L884" class8"line" name="L384"> 384<8a>   88   if ( 385<8a>   88ref="mm/percpu.c#L416" id="L886" class8"line" name="L386"> 386<8a>
list_movechunk, int pcpu_chunklitshref"+ef="+code=pcpu_lock"todoref">pcpu_chunktodoref=="mm/percpu.c#L331" id="L887" class8"line" name="L387"> 387<8a>   88           re"mm/percpu.c#L418" id="L888" class8"line" name="L388"> 388<8a>   88ref="mm/percpu.c#L419" id="L889" class8"line" name="L389"> 389<8a>   88           recode=chunk" claspinaunl>
<_irqref">list_move
<_irqt  n>
chunk) n>
 390<8a>
 391<8a>   89   size, lits_for_each_quiry_safst chunk, int chunk,nextpcpu_chunktodoref=recode=chunk" clalitsref">pcpu_chunklitshref=="mm/percpu.c#L333" id="L892" class8"line" name="L392"> 392<8a>   89            de span>
< *map[0]_slotde span>
< *chunk, int size, _slotunit_ 393<8a>
map[0]_slotdehreoy *chunk, int  394<8a>   894   395<8a>   89ref="mm/percpu.c#L416" id="L896" class8"line" name="L396"> 396<8a>

chunk)mutexaunl>
 >=/mutexref">pcpu_chunk >=/mutexref=="mm/percpu.c#L331" id="L897" class8"line" name="L397"> 397<8a>   89     "mm/percpu.c#L418" id="L898" class8"line" name="L398"> 398<8a>   89ref="mm/percpu.c#L419" id="L899" class8"line" name="L399"> 399<8a>
 * pcpu_ex
 400<9a>   90 class="comment"> * @chunk: ch to s420" ip-r to  420" ip >(s href="mm/percpu.c#L420" id="L901" class9"line" name="L401"> 401<9a>
 * page re:< @ptr:ppospan>nd rp>(sepan to  href="mm/percpu.c#L420" id="L902" class9"line" name="L392"> 392<9a>   90 class="comment"> * be intege href="mm/percpu.c#L420" id="L903" class9"line" name="L393"> 393<9a>   90 class="comment"> * the currenFto  420" ip >(s @ptra href="mm/percpu.c#L438" id="L904" class9"line" name="L394"> 394<9a>   90 class="comment"> */
< href="mm/percpu.c#L438" id="L905" class9"line" name="L395"> 395<9a>
 * CONTEXT:< span>
 396<9a> *
 407<9a>   90 class="comment"> * pcpu_locka href="mm/percpu.c#L439" id="L908" class9"line" name="L398"> 398<9a>
pcpu_chunk to s420" it pcpu_chunk__439" iref="+code=chunk" cla trref">pcpu_chunk tr 399<9a>   90     "mm/percpu.c#L333" id="L910" class9"line" name="L410"> 410<9a>pcpu_chunk&ddr cla"mm/percpu.c#L331" id="L911" class9"line" name="L411"> 411<9a>pcpu_chunk *chunk, int  412<9a>flags) lags 413<9a>   91             f="+code=i" class="sffref">oslot &ffref="mm/percpu.c#L331" id="L914" class9"line" name="L414"> 414<9a>   91     mm/percpu.c#L418" id="L915" class9"line" name="L415"> 415<9a>
pcpu_chunk tr 416<9a>   91                    417<9a>}
<91 clasmm/percpu.c#L418" id="L918" class9"line" name="L418"> 418<9a>
pcpu_chunk&ddr clar"+code=pcpu_chunk__pslot tr_to_&ddrref">pcpu_chunk__pslot tr_to_&ddrt pcpu_chunk tr 419<9a> 420<9a>
<_irqsa"sref">list_move
<_irqsa"st  n>
chunk) n>
flags) lags 421<9a> 422<9a>chunk, int (<&ddr_searchref">pcpu_chunk *pcpu_chunk&ddr cla="mm/percpu.c#L331" id="L923" class9"line" name="L423"> 423<9a>oslot &ffref=r"+code=pcpu_chunk&ddrref">pcpu_chunk&ddr clar-+code=vfree" class="sref">chunk->pcpu_chunkbas<_&ddr cla"mm/percpu.c#L331" id="L924" class9"line" name="L424"> 424<9a> 425<9a>pcpu_split_bloc to sa>(schunk, int oslot &ffref=="mm/percpu.c#L331" id="L926" class9"line" name="L426"> 426<9a> 427<9a>/* acquire pcf="ap( more=thcomonecfully  to  nteres,rwake up grim rea397cka href="mm/percpu.c#L439" id="L928" class9"line" name="L428"> 428<9a>chunk, int size,  to ssize, _slotunit_ 429<9a>pcpu_chunk *flags)_os 430<9a> 431<9a>size, lits_for_each_quiryt flags)_os s="sref">pcpu_chunk_slotflags)_slotnrss="ssef="p-r1]recode=chunk" clalitsref">pcpu_chunklitshref=mm/percpu.c#L361" id="L932" class9"line" name="L432"> 432<9a>flags)_oschunk);
 433<9a>pcpu_chunkschedule_workt  remenim_workref">pcpu_chunk remenim_workref=="mm/percpu.c#L331" id="L934" class9"line" name="L434"> 434<9a> 435<9a> 436<9a> 437<9a> 438<9a>
<_irq>
list_move
<_irq>
 n>
chunk) n>
flags) lags 439<9a>sta93     "mm/percpu.c#L418" id="L940" class9"line" name="L440"> 440<9a>   94ref="code=chunk" claEXPORT_SYMBOL_GPLref">chunk)EXPORT_SYMBOL_GPLt pcpu_chunk to s420" it  441<9a>{
<94    442<9a>   94 class="comment"> * be inte
 443<9a>
 * the currenis_kernels420" i_addressn- tets wheap(s href="mm/percpu.c#L420" id="L944" class9"line" name="L43href="mm9percp94 class="comment"> */
< @addr:saddressnd rketshrref="mm/percpu.c#L420" id="L945" class9"line" name="L345"> 345<9a> * CONTEXT: 346<9a> *
(s. eModulehrref="mm/percpu.c#L420" id="L947" class9"line" name="L347"> 347<9a> * pcpu_lock.d (ssse>( notp&onsid 348<9a> * RETURNS: 349<9a> * 0 on succ href="mm/percpu.c#L438" id="L950" class9"line" name="L350"> 350<9a> * @chunk: chRETURNSa href="mm/percpu.c#L437" id="L951" class9"line" name="L351"> 351<9a> * @new_alloc%refs"f="@addr ispfrom in-kernel d (s,c%falsh oap 352<9a> * be integea href="mm/percpu.c#L439" id="L953" class9"line" name="L353"> 353<9a>pcpu_chunkbool  pcpu_chunkis_kernels420" i_addresst pcpu_chunk&ddr cla=mm/percpu.c#L439" id="L954" class9"line" name="L354"> 354<9a>sta95 clas"mm/percpu.c#L333" id="L955" class9"line" name="L355"> 355<9a>{
<95 clas#ifdef+code=new" classCONFIG_SMPref">pcpu_chunkCONFIG_SMP   356<9a>   95             &ons"+code=pcpu_chunkpcpu_chunksize, s map_usedmap_used 357<9a>
pcpu_chunk__439" iref="+code=chunk" clabaspcpu_chunkbas< clar"+code=pcpu_chunk__&ddr_to_pslot trref">pcpu_chunk_ &ddr_to_pslot trpcpu_chunkpslotbas<_&ddrt  358<9a>   95        (pcpu_chunk" iref="mm/percpu.c#L331" id="L959" class9"line" name="L359"> 359<9a>   95ref="mm/percpu.c#L400" id="L960" class9"line" name="L360"> 360<9a>
pcpu_chunk or_each_possibles" ipcpu_chunk" iref==="mm/percpu.c#L333" id="L961" class9"line" name="L361"> 361<9a>   96   map_usedpcpu_chunk er_" i_ trpcpu_chunkbas< clarecode=chunk" clas iref">pcpu_chunk" iref=="mm/percpu.c#L331" id="L962" class9"line" name="L362"> 362<9a>   96   inmm/percpu.c#L331" id="L963" class9"line" name="L363"> 363<9a>   96                     f="+ ef="+*)code=pcpu_chunk&ddrref">pcpu_chunk&ddr clarf="+"+code=chunk" clastartref">map_usedpcpu_chunk&ddr clarff="+code=chunk" clastartref">map_usedsize, s  364<9a>
size, refsref="mm/percpu.c#L331" id="L965" class9"line" name="L365"> 365<9a>   96           go"mm/percpu.c#L418" id="L966" class9"line" name="L366"> 366<9a>}
<96 clas#endifmm/percpu.c#L418" id="L967" class9"line" name="L367"> 367<9a>
/* acquire pcon UP, can't"distinguishpfrom oap 368<9a>size, falsh 369<9a> 370<9a> 371<9a> * @new_al
 372<9a> * be integer 373<9a> * the curren@addr:sks seddressnd rbe &onvertednd r hysical addresst ref="mm/percpu.c#L420" id="L974" class9"line" name="L374"> 374<9a> */
< href="mm/percpu.c#L438" id="L975" class9"line" name="L375"> 375<9a> * CONTEXT:< Given"@addr which ispd 376<9a> *
 377<9a> * pcpu_lock.address.  The caller ispresponsible
ref=ensueing"@addr d  378<9a> * RETURNS: 379<9a> * 0 on succ href="mm/percpu.c#L438" id="L980" class9"line" name="L380"> 380<9a> * @chunk: chRETURNSa href="mm/percpu.c#L437" id="L981" class9"line" name="L381"> 381<9a>sta98 class="comment"> * @new_allocThe  hysical address
ref=@addra href="mm/percpu.c#L438" id="L982" class9"line" name="L382"> 382<9a>{
<98 class="comment"> * be integea href="mm/percpu.c#L439" id="L983" class9"line" name="L383"> 383<9a>   98 classode=map" class hys &ddr_tref">pcpu_chunk hys &ddr_tref="code=chunk" clapcpu_chunk er_" i_ tr_to_physpcpu_chunk&ddr cla=mm/percpu.c#L439" id="L984" class9"line" name="L384"> 384<9a>   98 clas"mm/percpu.c#L333" id="L985" class9"line" name="L385"> 385<9a>   98           goef="+code=pcpu_split__439" iref">pcpu_chunk__439" iref="+code=chunk" clabaspcpu_chunkbas< clar"+code=pcpu_chunk__&ddr_to_pslot trref">pcpu_chunk_ &ddr_to_pslot trpcpu_chunkpslotbas<_&ddrt  386<9a>
pcpu_chunkbool  chunk)in_firat_ss="s clar"+code=pcpu_chunkfalshref">size, falsh 387<9a>   98           reunsign)
along+code=new" class irat_lowref">size, firat_lowref=recode=chunk" cla irat_highref">pcpu_chunk irat_high 388<9a>   98        (pcpu_chunk" iref="mm/percpu.c#L331" id="L989" class9"line" name="L389"> 389<9a>   98ref="mm/percpu.c#L400" id="L990" class9"line" name="L390"> 390<9a>
 * @new_al
< href="mm/percpu.c#L439" id="L991" class9"line" name="L391"> 391<9a>   99 class="comment"> * @new_allllllllllocThe following"tets ofrunit_low/high isn't"hreictly href="mm/percpu.c#L439" id="L992" class9"line" name="L392"> 392<9a>   99 class="comment"> * be integllllllllocnecessary but will spe)
aupalookups  393<9a>
 * the currllllllllocar n't"in=th 394<9a>   99 class="comment"> */
lllllllloa href="mm/percpu.c#L439" id="L995" class9"line" name="L395"> 395<9a>   995            code=i" class=" irat_lowref">size, firat_lowref=r"+code=pcpu_chunk_slotc/a>(<&ddrref">pcpu_chunk *chunk) bloc irat_ss="sref=recode=chunk" cla n>wtunit_" iref">pcpu_chunk n>wtunit_" iref=re0="mm/percpu.c#L331" id="L996" class9"line" name="L396"> 396<9a>
pcpu_chunk irat_high(<&ddrref">pcpu_chunk *chunk) bloc irat_ss="sref=recode=chunk" cla hightunit_" iref">pcpu_chunk hightunit_" iref=rmm/percpu.c#L331" id="L997" class9"line" name="L397"> 397<9a>   99           return  unit_pagesref">flags)_slotunit_pagest  398<9a>   99        (pcpu_chunk&ddr clarf="+"+code=chunk" cla irat_lowref">size, firat_lowref=ref="+ef="+mm/percpu.c#L331" id="L999" class9"line" name="L399"> 399<9a>
pcpu_chunk&ddr clarff="+code=chunk" cla irat_highref">pcpu_chunk irat_high 399<1000">1000          return pcpu_chunk or_each_possibles" ipcpu_chunk" iref==="mm/pre>pcpudoL399clas22/2c/bd1c7ae3a776fa5064243f9a1d9c2cc4e4d5_3/1000">m/percpu.c#L333" id="L1001" class100line" name="L391"> 391<100li>100   map_usedpcpu_chunk er_" i_ trpcpu_chunkbas< clarecode=chunk" clas iref">pcpu_chunk" iref=="mm/percpu.c#L331" id="L1002" class100line" name="L392"> 392<100li>100   inmm/percpu.c#L331" id="L1003" class100line" name="L393"> 393<100li>100                           pcpu_chunk&ddr clarf="+"+code=chunk" clastartref">map_usedpcpu_chunk&ddr clarff="+code=chunk" clastartref">map_usedsize, _slotunit_ 394<100li>100   if (chunk)in_firat_ss="s clar"+code=pcpu_chunkrefsref">size, refsref="mm/percpu.c#L331" id="L1005" class100line" name="L395"> 395<100li>100           goto  396<100li>100                    397<100li>100           return  398<100li>100        ( 399<100li>100ref="mm/percpu.c#L400" id="L1010" class10"line" name="L410"> 410<10"li>10"l       (chunk)in_firat_ss="s cla=="mm/percpu.c#L333" id="L1011" class10"line" name="L411"> 411<10"li>10"   pcpu_chunkis_vm>=/&ddrpcpu_chunk&ddr cla==mm/percpu.c#L439" id="L10"2" class10"line" name="L412"> 412<10"li>10"           pcpu_split_ pspcpu_chunk&ddr cla="mm/percpu.c#L331" id="L1013" class10"line" name="L413"> 413<10"li>10"                     elsemm/percpu.c#L331" id="L1014" class10"line" name="L414"> 414<10"li>10"   if (pcpu_chunk age_to_physpcpu_chunkvm>=/to_pagepcpu_chunk&ddr cla=="mm/percpu.c#L331" id="L1015" class10"line" name="L415"> 415<10"li>10"           go" elsemm/percpu.c#L331" id="L1016" class10"line" name="L416"> 416<10"li>10"                   pcpu_chunk age_to_physpcpu_chunkp" i_addr/to_pagepcpu_chunk&ddr cla=="mm/percpu.c#L331" id="L1017" class10"line" name="L417"> 417<10"li>10"     "mm/percpu.c#L418" id="L10"8" class10"line" name="L418"> 418<10"li>10"ref="mm/percpu.c#L419" id="L10"9" class10"line" name="L419"> 419<10"li>10" class="comment"> * pcpu_ex
 420<10"li>10"lclass="comment"> *
 >=/>=/infop-remory 421<10"li>10" class="comment"> * page re:< @nr_groups:sks snumber  422<10"li>10" class="comment"> * be integer@nr_units:sks snumber  423<10"li>10" class="comment"> * the curret ref="mm/percpu.c#L420" id="L1024" class10"line" name="L424"> 424<10"li>10" class="comment"> */
< Amory 425<10"li>10" class="comment"> * CONTEXT:< @nr_unitssunits.  The href="se  i'ssgroups[0].ca> mapppospasnd rks t ref="mm/percpu.c#L420" id="L1026" class10"line" name="L426"> 426<10"li>10" class="comment"> *
 mapparray which isplong+enough
ref=@nr_unitssand filledpwith href="mm/percpu.c#L439" id="L10"7" class10"line" name="L427"> 427<10"li>10" class="comment"> * pcpu_lock.NR_CPUS.  It'ssthe caller'ssresponsibilitynd rinitiala hsca> map href="mm/percpu.c#L439" id="L10"8" class10"line" name="L428"> 428<10"li>10" class="comment"> * RETURNS:n 429<10"li>10" class="comment"> * 0 on succ href="mm/percpu.c#L438" id="L1030" class10"line" name="L430"> 430<10"li>10"lclass="comment"> * @chunk: chRETURNSa href="mm/percpu.c#L437" id="L10"1" class10"line" name="L431"> 431<10"li>10" class="comment"> * page re:< Pospan>nd rks semory >=/infop 432<10"li>10" class="comment"> * be integerfailurea href="mm/percpu.c#L438" id="L10"3" class10"line" name="L433"> 433<10"li>10" class="comment"> * the currea href="mm/percpu.c#L439" id="L10"4" class10"line" name="L434"> 434<10"li>10" clashref="+code=pcpu_chunk" cla>=/inforef">pcpu_chunkp" i_agt;=/inforef="+"code=chunk" cla_ initref">pcpu_split_ initref="code=chunk" cla >=/>=/inforef">pcpu_chunkp" i_agt;=/agt;=/inforef=(f="+code=i" class="nr_groupsref">pcpu_chunknr_groupsref=rmm/percpu.c#L331" id="L10"5" class10"line" name="L435"> 435<10"li>10"           goto pcpu_chunknr_unitst la=mm/percpu.c#L439" id="L10"6" class10"line" name="L436"> 436<10"li>10"6clas"mm/percpu.c#L333" id="L10"7" class10"line" name="L437"> 437<10"li>10"           rehref="+code=pcpu_chunk" cla>=/inforef">pcpu_chunkp" i_agt;=/inforef="+code=chunk" cla&iref">pcpu_chunk&iref="mm/percpu.c#L331" id="L1038" class10"line" name="L438"> 438<10"li>10"   pcpu_chunksize, bas<_size, ai_ 439<10"li>10"           reef="++code=chunk" cla trref">pcpu_chunk tr 440<10"li>10"l       (pcpu_splitunitref="mm/percpu.c#L331" id="L1041" class10"line" name="L441"> 441<10"li>10"    442<10"li>10"   int size, bas<_tail;
ALIGNref=(pcpu_chunk&iref=)r++code=new_size" nr_groupsref">pcpu_chunknr_groupsref=ck.da hof(code=chunk" cla&iref">pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[0])rmm/percpu.c#L331" id="L1043" class10"line" name="L443"> 443<10"li>10"                           pcpu_chunk_ &lignof__pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[0].code=chunk" clas i mapref">pcpu_chunk" i map hf=[0])="mm/percpu.c#L331" id="L1044" class10"line" name="L43href="mm10"li>10"4  int size, ai_size, bas<_pcpu_chunknr_unitst lack.da hof(code=chunk" cla&iref">pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[0].code=chunk" clas i mapref">pcpu_chunk" i map hf=[0])"mm/percpu.c#L331" id="L1045" class10"line" name="L345"> 345<10"li>10"ref="mm/percpu.c#L416" id="L10"6" class10"line" name="L346"> 346<10"li>10"6  pcpu_chunk trmap_alloc<>=/bootmem_noef=istail;
PFN_ALIGNsize, ai_ 347<10"li>10"           ref="++code=tail" clas trref">pcpu_chunk tr 348<10"li>10"8                    href="+code=new_alloc"NULLref">pcpu_chunkNULLref="mm/percpu.c#L331" id="L1049" class10"line" name="L349"> 349<10"li>10"           recode=chunk" cla&iref">pcpu_chunk&iref=r"+code=pcpu_chunk_trref">pcpu_chunk tr 350<10"li>10"l  pcpu_chunk trsize, bas<_ 351<10"li>10"    352<10"li>10"   int pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[0].code=chunk" clas i mapref">pcpu_chunk" i map hf=r"+code=pcpu_chunk_trref">pcpu_chunk tr 353<10"li>10"3   354<10"li>10"4  int pcpu_splitunitref=r"+0"+code=chunk" claunitref">pcpu_splitunitref=rff="+code=chunk" clanr_unitsref">pcpu_chunknr_unitst la"+code=chunk" claunitref">pcpu_splitunitref=++=mm/percpu.c#L331" id="L1055" class10"line" name="L355"> 355<10"li>10"           goto pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[0].code=chunk" clas i mapref">pcpu_chunk" i map hf=rcode=new" classunitref">pcpu_splitunitref=]r"+code=pcpu_chunkNR_CPUSref">pcpu_chunkNR_CPUS 356<10"li>10"ref="mm/percpu.c#L397" id="L10"7" class10"line" name="L357"> 357<10"li>10"   pcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref=c"+code=pcpu_chunknr_groupsref">pcpu_chunknr_groupsref="mm/percpu.c#L331" id="L1058" class10"line" name="L358"> 358<10"li>10"   pcpu_chunk&iref=ef="+code=map" class_ &i_size, _ &i_tail;
PFN_ALIGNsize, ai_ 359<10"li>10"ref="mm/percpu.c#L400" id="L1060" class10"line" name="L360"> 360<10"li>10"l  pcpu_chunk&iref="mm/percpu.c#L331" id="L1061" class10"line" name="L361"> 361<10"li>10"1    "mm/percpu.c#L418" id="L1062" class10"line" name="L362"> 362<10"li>10"   inmm/percpu.c#L331" id="L1063" class10"line" name="L363"> 363<10"li>10" class="comment"> * the cur
 364<10"li>10" class="comment"> */
< _bloc to sagt;=/infop-r to  420" ip length ofsinfot ref="mm/percpu.c#L420" id="L1065" class10"line" name="L365"> 365<10"li>10" class="comment"> * CONTEXT:< @ai: 4ca> >=/infoppan to  href="mm/percpu.c#L420" id="L10"6" class10"line" name="L366"> 366<10"li>10" class="comment"> *
 367<10"li>10" class="comment"> * pcpu_lock.Fto  @ai which wsssemory >=/>=/info()a href="mm/percpu.c#L438" id="L10"8" class10"line" name="L368"> 368<10"li>10" class="comment"> * RETURNS: 369<10"li>10"ref="ef="+code=pcpu_split__initref">pcpu_split_ initref="code=chunk" cla  to sagt;=/inforef">pcpu_chunkp" i_ to sagt;=/inforef=(pcpu_chunkp" i_agt;=/inforef="+code=chunk" cla&iref">pcpu_chunk&iref==mm/percpu.c#L331" id="L1070" class10"line" name="L370"> 370<10"li>10"lclas"mm/percpu.c#L333" id="L1071" class10"line" name="L371"> 371<10"li>10"   pcpu_chunk to sbootmempcpu_split_ pspcpu_chunk&iref==recode=chunk" claairef">pcpu_chunk&iref=ef="+code=map" class_ &i_size, _ &i_ 372<10"li>10"2    "mm/percpu.c#L418" id="L1073" class10"line" name="L373"> 373<10"li>10"3   374<10"li>10" class="comment"> */
 375<10"li>10" class="comment"> * CONTEXT:< _slotdumpsagt;=/infop-rprf="+outsinformth ofsaboutsp" i_agt;=/inforeref="mm/percpu.c#L420" id="L1076" class10"line" name="L376"> 376<10"li>10" class="comment"> *
 377<10"li>10" class="comment"> * pcpu_lock.@ai:  length ofsinfoppandump href="mm/percpu.c#L438" id="L10"8" class10"line" name="L378"> 378<10"li>10" class="comment"> * RETURNS:< href="mm/percpu.c#L438" id="L10"9" class10"line" name="L379"> 379<10"li>10" class="comment"> * 0 on succ Prf="+outsinformth ofsabouts@ai using"loglevele@lvla href="mm/percpu.c#L438" id="L1080" class10"line" name="L380"> 380<10"li>10"lclass="comment"> * RETURNS: 381<10"li>10"1clashrpcpu_chunkp" i_dumpsagt;=/infopcpu_chunklvlref=rmm/percpu.c#L331" id="L1082" class10"line" name="L382"> 382<10"li>10"           pcpu_chunkp" i_agt;=/inforef="+code=chunk" cla&iref">pcpu_chunk&iref==mm/percpu.c#L331" id="L1083" class10"line" name="L383"> 383<10"li>10"3clas"mm/percpu.c#L333" id="L1084" class10"line" name="L384"> 384<10"li>10"4  int pcpu_chunkgroup_widthref=c"+1recode=chunk" clas i_widthref">pcpu_chunks i_widthref=c"+1recode=chunk" clawidthref">pcpu_chunkwidthref="mm/percpu.c#L331" id="L1085" class10"line" name="L385"> 385<10"li>10"           gochar"code=chunk" claempty_strref">pcpu_chunkempty_str hf=r]r"+c="comment"> hreing">"--------" href=""mm/percpu.c#L331" id="L1086" class10"line" name="L386"> 386<10"li>10"6  int map_alloc<>=ref=r"+0recode=chunk" claagt;=/endref">map_used 387<10"li>10"7  int pcpu_chunkgroup clarecode=chunk" clavref">pcpu_chunkvref="mm/percpu.c#L331" id="L1088" class10"line" name="L388"> 388<10"li>10"8  int pcpu_splitupspcpu_chunkaplt la"+rec="comment">/* acquire pcunitssp 389<10"li>10"ref="mm/percpu.c#L400" id="L1090" class10"line" name="L390"> 390<10"li>10"l  pcpu_chunkvref=r"+code=pcpu_chunk&iref">pcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref="mm/percpu.c#L331" id="L1091" class10"line" name="L391"> 391<10"li>10"   pcpu_chunkvref=r/"+10=mm/percpu.c#L331" id="L1092" class10"line" name="L392"> 392<10"li>10"           pcpu_chunkgroup_widthref=++"mm/percpu.c#L331" id="L1093" class10"line" name="L393"> 393<10"li>10"3   394<10"li>10"4  int pcpu_chunkvref=r"+code=pcpu_chunknum_possibles" isref">pcpu_chunknum_possibles" is 395<10"li>10"5  pcpu_chunkvref=r/"+10=mm/percpu.c#L331" id="L1096" class10"line" name="L396"> 396<10"li>10"                   pcpu_chunks i_widthref=++"mm/percpu.c#L331" id="L1097" class10"line" name="L397"> 397<10"li>10"   pcpu_chunkempty_str hf=rcode=spin_unlocmin_"ref">pcpu_chunkmin_"pcpu_chunks i_widthref=,.da hof(code=chunk" claempty_strref">pcpu_chunkempty_str hf=)p-r1)]r"+c="comment"> hreing">'\0' href=""mm/percpu.c#L331" id="L1098" class10"line" name="L398"> 398<10"li>10"ref="mm/percpu.c#L419" id="L1099" class10"line" name="L399"> 399<10"li>10"           recode=chunk" claupsref">pcpu_splitupspcpu_chunk&iref=ef="+code=map" classagt;=/size, agt;=/pcpu_chunk&iref=ef="+code=map" classunit_size, unit_ 399<1100">110l  pcpu_chunkwidthref=r"+code=pcpu_chunkupsref">pcpu_splitupspcpu_chunks i_widthref=c+r1)r++code=new_size" group_widthref">pcpu_chunkgroup_widthref=c+ 3"mm/percpu.c#L331" id="L1101" class110line" name="L391"> 391<110li>110   pcpu_chunkaplt lar"+code=pcpu_chunkrounddown_pow_of_tworef">pcpu_chunkrounddown_pow_of_twopcpu_chunkmaxpcpu_chunkwidthref=,r1))"mm/percpu.c#L331" id="L1102" class110line" name="L392"> 392<110li>110   inmm/percpu.c#L331" id="L1103" class110line" name="L393"> 393<110li>110             code=pcpu_chunk"rf="sref">chunk) rf="s hreing">"%sp" i-agt;=: s%zu r%zu d%zu u%zu agt;==%zu*%zu" href="rmm/percpu.c#L331" id="L1104" class110line" name="L394"> 394<110li>110   if (pcpu_chunklvlref=r+code=pcpu_chunk&iref">pcpu_chunk&iref=ef="+code=map" classs size, s pcpu_chunk&iref=ef="+code=map" classreserved_size, reserved_pcpu_chunk&iref=ef="+code=map" classdyn_size, dyn_ 395<110li>110           goto pcpu_chunk&iref=ef="+code=map" classunit_size, unit_pcpu_chunk&iref=ef="+code=map" classagt;=/size, agt;=/pcpu_chunk&iref=ef="+code=map" classatom/size, atom/pcpu_chunk&iref=ef="+code=map" classatom/size, atom/ 396<110li>110ref="mm/percpu.c#L397" id="L1107" class110line" name="L397"> 397<110li>110           reref=rcode=chunk" clagroupref">pcpu_chunkgroup clar"+0"+code=chunk" clagroupref">pcpu_chunkgroup clarff="+code=chunk" cla&iref">pcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref="+code=chunk" clagroupref">pcpu_chunkgroup cla++=="mm/percpu.c#L333" id="L1108" class110line" name="L398"> 398<110li>1108                    &ons"+pcpu_chunkp" i_group_inforef="+code=chunk" clagiref">pcpu_chunkgiref=r"+ef="+code=pcpu_lock"&iref">pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[code=chunk" clagroupref">pcpu_chunkgroup cla]"mm/percpu.c#L331" id="L1109" class110line" name="L399"> 399<110li>110           return -pcpu_splitunitref=r"+0recode=chunk" claunit_endref">map_used 410<11"li>111ref="mm/percpu.c#L361" id="L1111" class11"line" name="L411"> 411<11"li>11"   tail;
BUG_ONpcpu_chunkgiref=ef="+code=map" classnr_unitsref">pcpu_chunknr_unitst lac%+code=pcpu_chunkupsref">pcpu_splitups 412<11"li>11"           map_usedpcpu_chunkgiref=ef="+code=map" classnr_unitsref">pcpu_chunknr_unitst lac/+code=pcpu_chunkupsref">pcpu_splitups 413<11"li>11"                      map_alloc<>=ref=rff="+code=chunk" cla>=/endref">map_usedmap_alloc<>=ref=++=="mm/percpu.c#L333" id="L1114" class11"line" name="L414"> 414<11"li>11"   if (map_alloc<>=ref=rf#37;+code=pcpu_chunkaplref">pcpu_chunkaplt la)=="mm/percpu.c#L333" id="L1115" class11"line" name="L415"> 415<11"li>111           goto chunk) rf="s hreing">"\n" href=")"mm/percpu.c#L331" id="L11"6" class11"line" name="L416"> 416<11"li>11"                   chunk) rf="s hreing">"%sp" i-agt;=: " href="r"code=chunk" clalvlref">pcpu_chunklvlref=)"mm/percpu.c#L331" id="L11"7" class11"line" name="L417"> 417<11"li>111           return  418<11"li>1118                    ++++++++code=pcpu_chunk"rf="sref">chunk) rf="s hreing">"[%0*d] " href="r"code=chunk" clagroup_widthref">pcpu_chunkgroup_widthref=r"code=chunk" clagroupref">pcpu_chunkgroup cla)"mm/percpu.c#L331" id="L11"9" class11"line" name="L419"> 419<11"li>111ref="mm/percpu.c#L400" id="L1120" class11"line" name="L420"> 420<11"li>1120          return map_usedpcpu_splitupspcpu_splitunitref=rff="+code=chunk" claunit_endref">map_usedpcpu_splitunitref=++=mm/percpu.c#L331" id="L1121" class11"line" name="L421"> 421<11"li>112   pcpu_chunkgiref=ef="+code=map" classs i mapref">pcpu_chunk" i map hf=rcode=new" classunitref">pcpu_splitunitref=]r!"+code=pcpu_chunkNR_CPUSref">pcpu_chunkNR_CPUS 422<11"li>112           chunk) rf="s hreing">"%0*d " href="r"code=chunk" clas i_widthref">pcpu_chunks i_widthref=,mm/percpu.c#L331" id="L1123" class11"line" name="L423"> 423<11"li>112                           pcpu_chunkgiref=ef="+code=map" classs i mapref">pcpu_chunk" i map hf=rcode=new" classunitref">pcpu_splitunitref=])"mm/percpu.c#L331" id="L1124" class11"line" name="L424"> 424<11"li>112   if ( 425<11"li>112           goto chunk) rf="s hreing">"%s " href="r"code=chunk" claempty_strref">pcpu_chunkempty_str hf=)"mm/percpu.c#L331" id="L1126" class11"line" name="L426"> 426<11"li>112                    427<11"li>112           re"mm/percpu.c#L418" id="L11"8" class11"line" name="L428"> 428<11"li>112   chunk) rf="s hreing">"\n" href=")"mm/percpu.c#L331" id="L11"9" class11"line" name="L429"> 429<11"li>112     "mm/percpu.c#L418" id="L1" 0" class11"line" name="L430"> 430<11"li>113ref="mm/percpu.c#L361" id="L11"1" class11"line" name="L431"> 431<11"li>11" class="comment"> * page re
 432<11"li>11" class="comment"> * be integerp" i_setup_firat_ss="s -rinitiala hsth 433<11"li>11" class="comment"> * the curre @ai: 4ca> >=/infopdescribing"hownd r 20" ip rea ispshape
 href="mm/percpu.c#L420" id="L11"4" class11"line" name="L434"> 434<11"li>113 class="comment"> */
< @bas<_&ddr: mappse  ddresst ref="mm/percpu.c#L420" id="L1135" class11"line" name="L435"> 435<11"li>113 class="comment"> * CONTEXT: 436<11"li>113 class="comment"> *
 437<11"li>113 class="comment"> * pcpu_lock.420pcip rea.  Thispfunch ofrisnd rbe &alledpfrom arch  20" ip reat ref="mm/percpu.c#L420" id="L1138" class11"line" name="L438"> 438<11"li>113 class="comment"> * RETURNS: 439<11"li>113 class="comment"> * 0 on succ href="mm/percpu.c#L438" id="L1140" class11"line" name="L440"> 440<11"li>114lclass="comment"> * @chunk: ch@ai &ontainssallsinformth ofsnecessary d rinitiala hsth 441<11"li>114 class="comment"> * page re:< ss="s and  rfmhsth ic 420" ip lengthora href="mm/percpu.c#L438" id="L1142" class11"line" name="L442"> 442<11"li>114 class="comment"> * be intege href="mm/percpu.c#L438" id="L1143" class11"line" name="L443"> 443<11"li>114 class="comment"> * the curre @aief="+s 114 class="comment"> */
< href="mm/percpu.c#L438" id="L1145" class11"line" name="L345"> 345<11"li>114 class="comment"> * CONTEXT:< @aief="+reserved_ 346<11"li>114 class="comment"> *
ndh 347<11"li>114 class="comment"> * pcpu_lock.th 348<11"li>114 class="comment"> * RETURNS: 349<11"li>114 class="comment"> * 0 on succ <  350<11"li>115lclass="comment"> * @chunk: chlimi/se offset range
ref=symbol
reength ofsnd rguarantee modul t ref="mm/percpu.c#L420" id="L1151" class11"line" name="L351"> 351<11"li>115 class="comment"> * page re:< p20" ipsymbolspfallsinsidesks sreengthable
rangea href="mm/percpu.c#L438" id="L1152" class11"line" name="L352"> 352<11"li>115 class="comment"> * be intege href="mm/percpu.c#L438" id="L1153" class11"line" name="L353"> 353<11"li>115 class="comment"> * the curre @aief="+dyn_m"L3ssks snumber  ic href="mm/percpu.c#L438" id="L1154" class11"line" name="L354"> 354<11"li>115 class="comment"> */
<  length ofsin=th 355<11"li>115 class="comment"> * CONTEXT:< @aief="+reserved_ 356<11"li>115 class="comment"> *
 357<11"li>115 class="comment"> * pcpu_lock.@aief="+unit_ 358<11"li>115 class="comment"> * RETURNS:ndhan"@aief="+s  359<11"li>115 class="comment"> * 0 on succ @aief="+dyn_ 360<11"li>116lclass="comment"> * @chunk: c href="mm/percpu.c#L438" id="L1161" class11"line" name="L361"> 361<11"li>116 class="comment"> * page re:< @aief="+atom/ 362<11"li>116 class="comment"> * be integerfef=vmr reasa href="mm/percpu.c#L438" id="L1163" class11"line" name="L363"> 363<11"li>11" class="comment"> * the cur c href="mm/percpu.c#L438" id="L1164" class11"line" name="L364"> 364<11"li>11" class="comment"> */
< @aief="+agt;=/ 365<11"li>11" class="comment"> * CONTEXT:< @aief="+atom/ndhan"@aief="+atom/ 366<11"li>11" class="comment"> *
 367<11"li>11" class="comment"> * pcpu_lock href="mm/percpu.c#L438" id="L1168" class11"line" name="L368"> 368<11"li>11" class="comment"> * RETURNS:<"@aief="+nr_groupssand @aief="+groupssdescribe virtualamemoryplayoutsof href="mm/percpu.c#L438" id="L11"9" class11"line" name="L369"> 369<11"li>116 class="comment"> * 0 on succ  20" ip reas.  Unitsswhich shouldrbe &oory 370<11"li>117lclass="comment"> * @chunk: chs> 3 group.  Dy"> ic VMr reaspwill b semory 371<11"li>117 class="comment"> * page re:< groupings.  If"@aief="+nr_groupssispzero, a singl3 groupp&ontainingt ref="mm/percpu.c#L420" id="L1172" class11"line" name="L372"> 372<11"li>117 class="comment"> * be integerallsunitssispnt"umeda href="mm/percpu.c#L438" id="L1173" class11"line" name="L373"> 373<11"li>117 class="comment"> * the cur c href="mm/percpu.c#L438" id="L1174" class11"line" name="L374"> 374<11"li>11" class="comment"> */locThe caller shouldrhave mappse th 375<11"li>11" class="comment"> * CONTEXT:< copise <  376<11"li>11" class="comment"> *
 377<11"li>11" class="comment"> * pcpu_lock.If"th ic  reas, i  href="mm/percpu.c#L438" id="L11"8" class11"line" name="L378"> 378<11"li>11" class="comment"> * RETURNS:< ispservedsby tworss="ss - onend rserve the cor 379<11"li>11" class="comment"> * 0 on succ  reasp nd the oap ic  rea.  Theypsharesks ss> 3 vmt ref="mm/percpu.c#L420" id="L1180" class11"line" name="L380"> 380<11"li>11"lclass="comment"> * RETURNS:< and  age map but usss(differTURr rea  length ofsmap d rstay aw 381<11"li>118 class="comment"> * page re:< from eachsoapnss="s ispcircul 382<11"li>118 class="comment"> * be integerand available
ref=dy"> ic  length ofslikhpany oap 383<11"li>118 class="comment"> * the cur c href="mm/percpu.c#L438" id="L1184" class11"line" name="L384"> 384<11"li>118 class="comment"> */locRETURNSa href="mm/percpu.c#L437" id="L1185" class11"line" name="L385"> 385<11"li>118 class="comment"> * CONTEXT:< 0p 386<11"li>118 class="comment"> *
 387<11"li>11"7  inf="+code=i" class="__initref">pcpu_split_ initref="code=chunk" cla setup_firat_ss="sref">pcpu_chunkp" i_setup_firat_ss="spcpu_chunkp" i_agt;=/inforef="+code=chunk" cla&iref">pcpu_chunk&iref=,mm/percpu.c#L331" id="L1188" class11"line" name="L388"> 388<11"li>1188                    ++++++++++++++++++ef="++code=chunk" clabas<_&ddrref">pcpu_chunkbas<_&ddr 389<11"li>11"ref=""mm/percpu.c#L333" id="L1190" class11"line" name="L390"> 390<11"li>11"l  pcpu_chunk" is_buf hf=r4096]+code=i" class="__initdtharef">pcpu_split_ initdtha 391<11"li>11"   pcpu_chunksmap hf=rcode=new" classPERCPU_DYNAMIC_EARLY_SLOTSref">pcpu_chunkPERCPU_DYNAMIC_EARLY_SLOTSref=]rcode=i" class="__initdtharef">pcpu_split_ initdtha 392<11"li>11"           pcpu_chunkdmap hf=rcode=new" classPERCPU_DYNAMIC_EARLY_SLOTSref">pcpu_chunkPERCPU_DYNAMIC_EARLY_SLOTSref=]rcode=i" class="__initdtharef">pcpu_split_ initdtha 393<11"li>119             code=pcpu_chunksa h_"ref">pcpu_chunksize, dyn_pcpu_chunk&iref=ef="+code=map" classdyn_size, dyn_ 394<11"li>11"4  int pcpu_chunkpcpu_chunkpcpu_chunk&iref=ef="+code=map" classs size, s pcpu_chunk&iref=ef="+code=map" classreserved_size, reserved_size, dyn_ 395<11"li>11"5  pcpu_chunkp" i_ss="spcpu_chunksss="spcpu_chunkdss="spcpu_chunkNULLref="mm/percpu.c#L331" id="L1196" class11"line" name="L396"> 396<11"li>11"             unsign)
along++code=chunk" clagroup_offsetsref">pcpu_chunkgroup_offsetsref="mm/percpu.c#L331" id="L1197" class11"line" name="L397"> 397<11"li>11"   pcpu_chunkpcpu_chunkgroup_ 398<11"li>1198            unsign)
along++code=chunk" claunit_offref">map_used 399<11"li>11"           reunsign)
af="+code=i" class="" iref">pcpu_chunk" iref="mm/percpu.c#L331" id="L1200" class1200" e" name="L399"> 399<1200">120l       (pcpu_chunkunit_mapref="mm/percpu.c#L331" id="L1201" class120line" name="L391"> 391<120li>120   pcpu_chunkgroup clarecode=chunk" claunitref">pcpu_splitunitref=recode=chunk" clairef">pcpu_chunkiref="mm/percpu.c#L331" id="L1202" class120line" name="L392"> 392<120li>120   inmm/percpu.c#L331" id="L1203" class120line" name="L393"> 393<120li>120             code=pcpu_chunk" imask_scn rf="fref">pcpu_chunk" imask_scn rf="fpcpu_chunk" is_buf hf=,.da hof(code=chunk" cla" is_bufref">pcpu_chunk" is_buf hf==recode=chunk" cla" i_possiblesmaskref">pcpu_chunk" i possiblesmask hf=)"mm/percpu.c#L331" id="L1204" class120line" name="L394"> 394<120li>120   ifmm/percpu.c#L331" id="L1205" class120line" name="L395"> 395<120li>120     #def"L3:code=new" classPCPU_SETUP_BUG_ONref">tail;
PCPU_SETUP_BUG_ONmap_used 396<120li>1206  int pcpu_splitunlikhlymap_used 397<120li>120           return chunk) r_emerg hreing">"PERCPU: fail)
ad rinitiala h,rf#37;s" href="r"#"ond);++  \mm/percpu.c#L331" id="L1208" class120line" name="L398"> 398<120li>1208                    code=old" class"r_emergref">chunk) r_emerg hreing">"PERCPU: " i possiblesmask=%s\n" href="recode=chunk" cla" is_bufref">pcpu_chunk" is_buf hf==;+  \mm/percpu.c#L331" id="L1209" class120line" name="L399"> 399<120li>120           return -pcpu_chunkp" i_dumpsagt;=/infopcpu_chunkKERN_EMERGref=recode=chunk" cla&iref">pcpu_chunk&iref==;++++++++++  +++++  \mm/percpu.c#L331" id="L1210" class12"line" name="L410"> 410<12"li>1210          return pcpu_chunkBUG 411<12"li>12"    412<12"li>12"     }+while=r0=mm/percpu.c#L331" id="L12"3" class12"line" name="L413"> 413<12"li>1213   414<12"li>12"   if (/* acquire pcsanity checks 415<12"li>121           gocode=new" classPCPU_SETUP_BUG_ONref">tail;
PCPU_SETUP_BUG_ONpcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref=cff="= 0)"mm/percpu.c#L331" id="L12"6" class12"line" name="L416"> 416<12"li>12"     #ifdefocode=new" classCONFIG_SMPref">pcpu_chunkCONFIG_SMP   417<12"li>121   tail;
PCPU_SETUP_BUG_ONpcpu_chunk&iref=ef="+code=map" classs size, s  418<12"li>121   tail;
PCPU_SETUP_BUG_ONpcpu_split_ 331_" i_startref=cff="+ ~code=old" classPAGE_MASKref">tail;
PAGE_MASK cla)"mm/percpu.c#L331" id="L12"9" class12"line" name="L419"> 419<12"li>121ref="#endifmm/percpu.c#L331" id="L1220" class12"line" name="L420"> 420<12"li>122l  tail;
PCPU_SETUP_BUG_ONpcpu_chunkbas<_&ddr 421<12"li>122   tail;
PCPU_SETUP_BUG_ONpcpu_chunkbas<_&ddrtail;
PAGE_MASK cla)"mm/percpu.c#L331" id="L1222" class12"line" name="L422"> 422<12"li>122   int tail;
PCPU_SETUP_BUG_ONpcpu_chunk&iref=ef="+code=map" classunit_size, unit_pcpu_chunk 423<12"li>122             code=pcpu_chunkPCPU_SETUP_BUG_ONref">tail;
PCPU_SETUP_BUG_ONpcpu_chunk&iref=ef="+code=map" classunit_size, unit_tail;
PAGE_MASK cla)"mm/percpu.c#L331" id="L1224" class12"line" name="L424"> 424<12"li>1224  int tail;
PCPU_SETUP_BUG_ONpcpu_chunk&iref=ef="+code=map" classunit_size, unit_tail;
PCPU_MIN_UNIT_SIZE cla)"mm/percpu.c#L331" id="L1225" class12"line" name="L425"> 425<12"li>122           gocode=new" classPCPU_SETUP_BUG_ONref">tail;
PCPU_SETUP_BUG_ONpcpu_chunk&iref=ef="+code=map" classdyn_size, dyn_tail;
PERCPU_DYNAMIC_EARLY_SIZE cla)"mm/percpu.c#L331" id="L1226" class12"line" name="L426"> 426<12"li>1226  tail;
PCPU_SETUP_BUG_ONpcpu_chunkp" i_verifysagt;=/infopcpu_chunk&iref=)rff="+0)"mm/percpu.c#L331" id="L12"7" class12"line" name="L427"> 427<12"li>122     mm/percpu.c#L331" id="L12"8" class12"line" name="L428"> 428<12"li>122   /* acquire pcprocess grouppinformth ofsand buildp&onfig hables accordingly 429<12"li>122           recode=chunk" clagroup_offsetsref">pcpu_chunkgroup_offsetsref=r"+code=pcpu_chunk>=/bootmemref">pcpu_chunk>=/bootmempcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref=c*.da hof(code=chunk" clagroup_offsetsref">pcpu_chunkgroup_offsetsref=[0]))"mm/percpu.c#L331" id="L12 0" class12"line" name="L430"> 430<12"li>123l  pcpu_chunkgroup_pcpu_chunk>=/bootmempcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref=c*.da hof(code=chunk" clagroup_pcpu_chunkgroup_ 431<12"li>123   pcpu_chunkunit_mapref=r"+code=pcpu_chunk>=/bootmemref">pcpu_chunk>=/bootmempcpu_chunknr_" i_idsref=c*.da hof(code=chunk" claunit_mapref">pcpu_chunkunit_mapref=[0]))"mm/percpu.c#L331" id="L12 2" class12"line" name="L432"> 432<12"li>123   int map_usedpcpu_chunk>=/bootmempcpu_chunknr_" i_idsref=c*.da hof(code=chunk" claunit_offref">map_used 433<12"li>1233   434<12"li>1234  int pcpu_chunk" iref=r"+0"+code=chunk" cla" iref">pcpu_chunk" iref=rff="+code=chunk" clan1_" i_idsref">pcpu_chunknr_" i_idsref="+code=chunk" cla" iref">pcpu_chunk" iref=++=mm/percpu.c#L331" id="L1235" class12"line" name="L435"> 435<12"li>123           goto pcpu_chunkunit_mapref=[code=chunk" cla" iref">pcpu_chunk" iref=]r"+code=pcpu_chunkUINT_MAXref">pcpu_chunkUINT_MAXref="mm/percpu.c#L331" id="L1236" class12"line" name="L436"> 436<12"li>123ref="mm/percpu.c#L397" id="L1237" class12"line" name="L437"> 437<12"li>123   pcpu_chunkp" i_low_unit_" ipcpu_chunkNR_CPUS 438<12"li>123   pcpu_chunkp" i_high_unit_" ipcpu_chunkNR_CPUS 439<12"li>123ref="mm/percpu.c#L400" id="L1240" class12"line" name="L440"> 440<12"li>1240  int pcpu_chunkgroup clar"+0recode=chunk" claunitref">pcpu_splitunitref=r"+0"+code=chunk" clagroupref">pcpu_chunkgroup clarff="+code=chunk" cla&iref">pcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref="+code=chunk" clagroupref">pcpu_chunkgroup cla++recode=chunk" claunitref">pcpu_splitunitref=r+"+code=pcpu_chunkiref">pcpu_chunkiref==="mm/percpu.c#L333" id="L1241" class12"line" name="L441"> 441<12"li>124   pcpu_chunkp" i_group_inforef="+code=chunk" clagiref">pcpu_chunkgiref=r"+ef="+code=pcpu_lock"&iref">pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[code=chunk" clagroupref">pcpu_chunkgroup cla]"mm/percpu.c#L331" id="L1242" class12"line" name="L442"> 442<12"li>124   inmm/percpu.c#L331" id="L1243" class12"line" name="L443"> 443<12"li>124                     code=chunk" clagroup_offsetsref">pcpu_chunkgroup_offsetsref=[code=chunk" clagroupref">pcpu_chunkgroup cla]+"+code=pcpu_chunkgiref">pcpu_chunkgiref=ef="+code=map" classbas<_offsetref">pcpu_chunkbas<_offset124   if (pcpu_chunkgroup_pcpu_chunkgroup cla]+"+code=pcpu_chunkgiref">pcpu_chunkgiref=ef="+code=map" classnr_unitsref">pcpu_chunknr_unitst lac*+code=pcpu_chunk&iref">pcpu_chunk&iref=ef="+code=map" classunit_size, unit_ 345<12"li>124 clasmm/percpu.c#L331" id="L1246" class12"line" name="L346"> 346<12"li>124                   pcpu_chunkiref=r"+0"+code=chunk" clairef">pcpu_chunkiref=rff="+code=chunk" clagiref">pcpu_chunkgiref=ef="+code=map" classnr_unitsref">pcpu_chunknr_unitst la"+code=chunk" clairef">pcpu_chunkiref=++=="mm/percpu.c#L333" id="L1247" class12"line" name="L347"> 347<12"li>124           return pcpu_chunk" iref=r"+code=chunk" clagiref">pcpu_chunkgiref=ef="+code=map" classc i mapref">pcpu_chunk" i map hf=rcode=new" classiref">pcpu_chunkiref=]"mm/percpu.c#L331" id="L1248" class12"line" name="L348"> 348<12"li>1248                    ++++++++f="+sode=map" class" iref">pcpu_chunk" iref=r""+code=pcpu_chunkNR_CPUSref">pcpu_chunkNR_CPUS 349<12"li>124           return - 350<12"li>125ref="mm/percpu.c#L361" id="L1251" class12"line" name="L351"> 351<12"li>125   tail;
PCPU_SETUP_BUG_ONpcpu_chunk" iref=rfg="+code=chunk" clan1_" i_idsref">pcpu_chunknr_" i_idsref=)"mm/percpu.c#L331" id="L1252" class12"line" name="L352"> 352<12"li>125           tail;
PCPU_SETUP_BUG_ONpcpu_chunk" i possiblepcpu_chunk" iref=))"mm/percpu.c#L331" id="L1253" class12"line" name="L353"> 353<12"li>125                           tail;
PCPU_SETUP_BUG_ONpcpu_chunkunit_mapref=[code=chunk" cla" iref">pcpu_chunk" iref=]r!"+code=pcpu_chunkUINT_MAXref">pcpu_chunkUINT_MAXref=)"mm/percpu.c#L331" id="L1254" class12"line" name="L354"> 354<12"li>125   ifmm/percpu.c#L331" id="L1255" class12"line" name="L355"> 355<12"li>125           goto pcpu_chunkunit_mapref=[code=chunk" cla" iref">pcpu_chunk" iref=]r"+code=pcpu_chunkunitref">pcpu_splitunitref=r+ecode=chunk" clairef">pcpu_chunkiref="mm/percpu.c#L331" id="L1256" class12"line" name="L356"> 356<12"li>125                   map_usedpcpu_chunk" iref=]r"+code=pcpu_chunkgiref">pcpu_chunkgiref=ef="+code=map" classbas<_offsetref">pcpu_chunkbas<_offsetpcpu_chunkiref=c*+code=pcpu_chunk&iref">pcpu_chunk&iref=ef="+code=map" classunit_size, unit_ 357<12"li>125     mm/percpu.c#L331" id="L12"8" class12"line" name="L358"> 358<12"li>1258                    ++++++++c="comment">/* acquire pcdean>m"L3 low/high unit_" i 359<12"li>125           return -pcpu_chunkp" i_low_unit_" ipcpu_chunkNR_CPUS 360<12"li>1260          return map_usedpcpu_chunk" iref=]rff="+code=chunk" claunit_offref">map_usedpcpu_chunkp" i_low_unit_" i 361<12"li>126   pcpu_chunkp" i_low_unit_" ipcpu_chunk" iref="mm/percpu.c#L331" id="L1262" class12"line" name="L362"> 362<12"li>126           pcpu_chunkp" i_high_unit_" ipcpu_chunkNR_CPUS 363<12"li>126                           map_usedpcpu_chunk" iref=]rfg="+code=chunk" claunit_offref">map_usedpcpu_chunkp" i_high_unit_" i 364<12"li>126   if (pcpu_chunkp" i_high_unit_" ipcpu_chunk" iref="mm/percpu.c#L331" id="L1265" class12"line" name="L365"> 365<12"li>126           goto  366<12"li>126             "mm/percpu.c#L418" id="L12"7" class12"line" name="L367"> 367<12"li>126   pcpu_chunkp" i_nr_unitspcpu_splitunitref="mm/percpu.c#L331" id="L1268" class12"line" name="L368"> 368<12"li>12" clasmm/percpu.c#L331" id="L1269" class12"line" name="L369"> 369<12"li>126           recode=chunk" clafor_each possibles" iref">pcpu_chunkfor_each possibles" ipcpu_chunk" iref=)mm/percpu.c#L331" id="L1270" class12"line" name="L370"> 370<12"li>1270          return tail;
PCPU_SETUP_BUG_ONpcpu_chunkunit_mapref=[code=chunk" cla" iref">pcpu_chunk" iref=]r""+code=pcpu_chunkUINT_MAXref">pcpu_chunkUINT_MAXref=)"mm/percpu.c#L331" id="L1271" class12"line" name="L371"> 371<12"li>127 clasmm/percpu.c#L331" id="L1272" class12"line" name="L372"> 372<12"li>127   int /* acquire pcwe're donenparsing"th 373<12"li>127 clas#undef code=chunk" claPCPU_SETUP_BUG_ONref">tail;
PCPU_SETUP_BUG_ON 374<12"li>1274  int pcpu_chunkp" i_dumpsagt;=/infopcpu_chunkKERN_DEBUGpcpu_chunk&iref==;mm/percpu.c#L439" id="L1275" class12"line" name="L375"> 375<12"li>127 clasmm/percpu.c#L331" id="L1276" class12"line" name="L376"> 376<12"li>1276  pcpu_chunkp" i_nr_groupspcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref="mm/percpu.c#L331" id="L1277" class12"line" name="L377"> 377<12"li>127   pcpu_chunkp" i_group_offsetsref=r"+code=chunk" clagroup_offsetsref">pcpu_chunkgroup_offsetsref="mm/percpu.c#L331" id="L12"8" class12"line" name="L378"> 378<12"li>127   pcpu_chunk"" i_group_pcpu_chunkgroup_ 379<12"li>127           recode=chunk" cla"" i_unit_mapref">pcpu_chunk"" i_unit_mappcpu_chunkunit_mapref="mm/percpu.c#L331" id="L1280" class12"line" name="L380"> 380<12"li>128l  pcpu_chunkp" i_unit_offsetsmap_used 381<12"li>128 clasmm/percpu.c#L331" id="L1282" class12"line" name="L382"> 382<12"li>128   int /* acquire pcdean>m"L3 bas hr ar> 3an>s 383<12"li>128             code=pcpu_chunkp" i_unit_ agesref">pcpu_chunkp" i_unit_ agespcpu_chunk&iref=ef="+code=map" classunit_size, unit_tail;
PAGE_SHIFTref="mm/percpu.c#L331" id="L1284" class12"line" name="L384"> 384<12"li>1284  int size, " claunit_pcpu_chunkp" i_unit_ agestail;
PAGE_SHIFTref="mm/percpu.c#L331" id="L1285" class12"line" name="L385"> 385<12"li>128           gocode=new" classp" i_atom/pcpu_chunkp" i_atom/pcpu_chunk&iref=ef="+code=map" classatom/pcpu_chunkatom/ 386<12"li>1286  pcpu_chunkp" i_ss="s_pcpu_chunkp" i_ss="s 387<12"li>128           return pcpu_chunkBITS_TO_LONGSpcpu_chunkp" i_unit_ ages 388<12"li>128 clasmm/percpu.c#L331" id="L1289" class12"line" name="L389"> 389<12"li>1289  int /* acquire p href="mm/percpu.c#L439" id="L1290" class12"line" name="L390"> 390<12"li>129lclass="comment"> * RETURNS:::::::::* Amory 391<12"li>129 class="comment"> * page re:::::::::* empty ss="ssa href="mm/percpu.c#L438" id="L1292" class12"line" name="L392"> 392<12"li>129 class="comment"> * be integ::::::::*a href="mm/percpu.c#L439" id="L1293" class12"line" name="L393"> 393<12"li>129             code=pcpu_chunkp" i_nr_slotsref">pcpu_chunkp" i_nr_slotst  h+"+code=pcpu_chunk__p" i_sa h_"o_slotref">pcpu_chunk__p" i_sa h_"o_slotsize, " claunit_ 394<12"li>12"4  int pcpu_chunkp" i_slotpcpu_chunk>=/bootmempcpu_chunkp" i_nr_slotst  h+*.da hof(code=chunk" clap" i_slotref">pcpu_chunkp" i_slot 395<12"li>12"5  pcpu_chunkiref=r"+0"+code=chunk" clairef">pcpu_chunkiref=rff="+code=chunk" clap" i_nr_slotsref">pcpu_chunkp" i_nr_slotst  h"+code=chunk" clairef">pcpu_chunkiref=++=mm/percpu.c#L331" id="L1296" class12"line" name="L396"> 396<12"li>129                   pcpu_chunkINIT_LIST_HEADpcpu_chunkp" i_slotpcpu_chunkiref=])"mm/percpu.c#L331" id="L1297" class12"line" name="L397"> 397<12"li>129     mm/percpu.c#L331" id="L1298" class12"line" name="L398"> 398<12"li>129   /* acquire p href="mm/percpu.c#L439" id="L1299" class12"line" name="L399"> 399<12"li>129 class="comment"> * 0 on suc::::::::* Initiala hs<  399<1300">130lclass="comment"> * RETURNS:::::::::* <  ic  length ofs reat ref="mm/percpu.c#L420" id="L1301" class130line" name="L391"> 391<130li>130 class="comment"> * page re:::::::::* in=th 392<130li>130 class="comment"> * be integ::::::::* covn>s<<  393<130li>130 class="comment"> * the cur ::::::::* <  394<130li>130 class="comment"> */l::::::::*a href="mm/percpu.c#L439" id="L1305" class130line" name="L395"> 395<130li>130           gocode=new" classsss="sref">pcpu_chunksss="spcpu_chunk>=/bootmempcpu_chunkp" i_ss="s_ 396<130li>1306  pcpu_chunkINIT_LIST_HEADpcpu_chunksss="spcpu_chunklist 397<130li>130   pcpu_chunksss="spcpu_chunkbas<_&ddrpcpu_chunkbas<_&ddr 398<130li>130   pcpu_chunksss="spcpu_chunkmappcpu_chunksmap hf="mm/percpu.c#L331" id="L1309" class130line" name="L399"> 399<130li>130           recode=chunk" classs="sref">pcpu_chunksss="spcpu_chunkmapsagt;=tail;
ARRAY_SIZEpcpu_chunksmap hf=)"mm/percpu.c#L331" id="L1310" class13"line" name="L410"> 410<13"li>131l  pcpu_chunksss="spcpu_chunkimmuhablepcpu_chunkrefe hf="mm/percpu.c#L331" id="L1311" class13"line" name="L411"> 411<13"li>131   pcpu_chunkbitmapsfillpcpu_chunksss="spcpu_chunkpopulpcpu_chunkp" i_unit_ ages 412<13"li>131   inmm/percpu.c#L331" id="L13"3" class13"line" name="L413"> 413<13"li>131             f="+sode=map" class&iref">pcpu_chunk&iref=ef="+code=map" classreserved_size, reserved_ 414<13"li>131   if (pcpu_chunksss="ssize, free_pcpu_chunk&iref=ef="+code=map" classreserved_size, reserved_ 415<13"li>131           goto pcpu_chunkp" i_reserved_ss="spcpu_chunksss="s 416<13"li>131                   pcpu_splitp" i_reserved_ss="s_limitpcpu_chunk&iref=ef="+code=map" classs size, s pcpu_chunk&iref=ef="+code=map" classreserved_size, reserved_ 417<13"li>131    418<13"li>1318                    code=old" classsss="sref">pcpu_chunksss="ssize, free_size, dyn_ 419<13"li>131           return -size, dyn_/* acquire pcdy"> ic  rea covn>edn*a href="mm/percpu.c#L439" id="L1320" class13"line" name="L420"> 420<13"li>132l   421<13"li>132   pcpu_chunksss="spcpu_split&ontig_hintpcpu_chunksss="ssize, free_ 422<13"li>132   inmm/percpu.c#L331" id="L1323" class13"line" name="L423"> 423<13"li>132             code=pcpu_chunksss="sref">pcpu_chunksss="spcpu_chunkmappcpu_chunksss="spcpu_chunkmapsusedref=++]r"+-code=pcpu_chunk&iref">pcpu_chunk&iref=ef="+code=map" classs size, s  424<13"li>1324  int pcpu_chunksss="ssize, free_ 425<13"li>132           goto pcpu_chunksss="spcpu_chunkmappcpu_chunksss="spcpu_chunkmapsusedref=++]r"+code=pcpu_chunksss="sref">pcpu_chunksss="ssize, free_ 426<13"li>132ref="mm/percpu.c#L397" id="L13"7" class13"line" name="L427"> 427<13"li>132   /* acquire pcinitcdy"> ic ss="s if necessary 428<13"li>132   size, dyn_ 429<13"li>132           return -pcpu_chunkdss="spcpu_chunk>=/bootmempcpu_chunkp" i_ss="s_ 430<13"li>1330          return pcpu_chunkINIT_LIST_HEADpcpu_chunkdss="spcpu_chunklist 431<13"li>133   pcpu_chunkdss="spcpu_chunkbas<_&ddrpcpu_chunkbas<_&ddr 432<13"li>133           pcpu_chunkdss="spcpu_chunkmappcpu_chunkdmap hf="mm/percpu.c#L331" id="L13 3" class13"line" name="L433"> 433<13"li>133                     code=chunk" cladss="sref">pcpu_chunkdss="spcpu_chunkmapsagt;=tail;
ARRAY_SIZEpcpu_chunkdmap hf=)"mm/percpu.c#L331" id="L13 4" class13"line" name="L434"> 434<13"li>133   if (pcpu_chunkdss="spcpu_chunkimmuhablepcpu_chunkrefe hf="mm/percpu.c#L331" id="L1335" class13"line" name="L435"> 435<13"li>133           goto pcpu_chunkbitmapsfillpcpu_chunkdss="spcpu_chunkpopulpcpu_chunkp" i_unit_ ages 436<13"li>133ref="mm/percpu.c#L397" id="L1337" class13"line" name="L437"> 437<13"li>133           return pcpu_chunkdss="spcpu_split&ontig_hintpcpu_chunkdss="ssize, free_size, dyn_ 438<13"li>1338                    code=old" classdss="sref">pcpu_chunkdss="spcpu_chunkmappcpu_chunkdss="spcpu_chunkmapsusedref=++]r"+-code=pcpu_chunkp" i_reserved_ss="s_limitref">pcpu_splitp" i_reserved_ss="s_limit 439<13"li>133           return -pcpu_chunkdss="spcpu_chunkmappcpu_chunkdss="spcpu_chunkmapsusedref=++]r"+code=pcpu_chunkdss="sref">pcpu_chunkdss="ssize, free_ 440<13"li>134l   441<13"li>134 clasmm/percpu.c#L331" id="L1342" class13"line" name="L442"> 442<13"li>134   int /* acquire pc="Lk=th 443<13"li>134             code=pcpu_chunkp" i_firat_ss="sref">pcpu_chunkp" i_firat_ss="spcpu_chunkdss="spcpu_chunksss="s1344  int pcpu_chunkp" i_ss="s_reorypcpu_chunkp" i_firat_ss="s 345<13"li>134 clasmm/percpu.c#L331" id="L1346" class13"line" name="L346"> 346<13"li>134             s="comment">/* acquire pcwe're donenaa href="mm/percpu.c#L439" id="L1347" class13"line" name="L347"> 347<13"li>134   pcpu_chunkp" i_bas<_&ddrpcpu_chunkbas<_&ddr 348<13"li>1348            return 0"mm/percpu.c#L331" id="L1349" class13"line" name="L349"> 349<13"li>134     "mm/percpu.c#L418" id="L1350" class13"line" name="L350"> 350<13"li>135ref="mm/percpu.c#L361" id="L1351" class13"line" name="L351"> 351<13"li>135   pcpu_chunkCONFIG_SMP   352<13"li>135   inmm/percpu.c#L331" id="L1353" class13"line" name="L353"> 353<13"li>135     &ons"+char"+code=chunk" clap" i_fc_"> 3sref">pcpu_chunkp" i_fc_"> 3spcpu_chunkPCPU_FC_NRpcpu_chunk__initdata 354<13"li>1354  int pcpu_chunkPCPU_FC_AUTO hreing">"auto" href="rmm/percpu.c#L333" id="L1355" class13"line" name="L355"> 355<13"li>135           go[code=chunk" claPCPU_FC_EMBEDref">pcpu_chunkPCPU_FC_EMBED hreing">"embed" href="rmm/percpu.c#L333" id="L1356" class13"line" name="L356"> 356<13"li>135             [code=chunk" claPCPU_FC_PAGEref">pcpu_chunkPCPU_FC_PAGE hreing">" age" href="rmm/percpu.c#L333" id="L1357" class13"line" name="L357"> 357<13"li>135     }"mm/percpu.c#L331" id="L13"8" class13"line" name="L358"> 358<13"li>135 clasmm/percpu.c#L331" id="L13"9" class13"line" name="L359"> 359<13"li>135     enum code=pcpu_chunkp" i_f=ref">pcpu_chunkp" i_f=     sode=chunk" clap" i_ssosen_f=ref">pcpu_chunkp" i_ssosen_f=     sode=chunk" cla__initdataref">pcpu_chunk__initdatapcpu_chunkPCPU_FC_AUTO 360<13"li>136ref="mm/percpu.c#L361" id="L1361" class13"line" name="L361"> 361<13"li>136   pcpu_chunk__init     sode=chunk" clap61" isagt;=/setupref">pcpu_chunk"61" isagt;=/setupsize, s r 362<13"li>136     "mm/percpu.c#L333" id="L1363" class13"line" name="L363"> 363<13"li>136             f="+0=mm/percpu.c#L331" id="L1364" class13"line" name="L364"> 364<13"li>136   if (/* acquire pcnadanaa href=""mm/percpu.c#L331" id="L1365" class13"line" name="L365"> 365<13"li>136     #ifdefocode=new" classCONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNKref">tail;
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNKef="mm/percpu.c#L361" id="L1366" class13"line" name="L366"> 366<13"li>136             else=f="++code=tail" class rcmpref">pcpu_chunks rcmpsize, s r hreing">"embed" href=")=mm/percpu.c#L331" id="L1367" class13"line" name="L367"> 367<13"li>136           return pcpu_chunkp" i_ssosen_f=     "+code=chunk" claPCPU_FC_EMBEDref">pcpu_chunkPCPU_FC_EMBED 368<13"li>13" clas#endifmm/percpu.c#L331" id="L1369" class13"line" name="L369"> 369<13"li>136     #ifdefocode=new" classCONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNKref">tail;
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNKef="mm/percpu.c#L361" id="L1370" class13"line" name="L370"> 370<13"li>1370          reelse=f="++code=tail" class rcmpref">pcpu_chunks rcmpsize, s r hreing">" age" href=")=mm/percpu.c#L331" id="L1371" class13"line" name="L371"> 371<13"li>137   pcpu_chunkp" i_ssosen_f=     "+code=chunk" claPCPU_FC_PAGEref">pcpu_chunkPCPU_FC_PAGE 372<13"li>137   in#endifmm/percpu.c#L331" id="L1373" class13"line" name="L373"> 373<13"li>1373          reelsemm/percpu.c#L331" id="L1374" class13"line" name="L374"> 374<13"li>137   if (pcpu_chunkpr_warning hreing">"PERCPU: unknown  lengthor %s specified\n" href="r+code=pcpu_chunksreref">size, s r 375<13"li>137 clasmm/percpu.c#L331" id="L1376" class13"line" name="L376"> 376<13"li>1376   377<13"li>137    378<13"li>137    ref">size, early_ ar>  hreing">""61" isagt;=" href="r+code=pcpu_chunkp61" isagt;=/setupref">pcpu_chunk"61" isagt;=/setup 379<13"li>137ref="mm/percpu.c#L400" id="L1380" class13"line" name="L380"> 380<13"li>138lclass="comment"> * RETURNS p href="mm/percpu.c#L439" id="L1381" class13"line" name="L381"> 381<13"li>138 class="comment"> * page re:* p" i_embed_firat_ss="s() ispusednby=th 382<13"li>138 class="comment"> * be integ* Buildpit if needednby=th 383<13"li>138 class="comment"> * the cur * to bepuseda href="mm/percpu.c#L438" id="L1384" class13"line" name="L384"> 384<13"li>138 class="comment"> */laa href="mm/percpu.c#L439" id="L1385" class13"line" name="L385"> 385<13"li>138     #if+code=pcpu_chunkdef"L3dref">pcpu_chunkdef"L3dtail;
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNKef=") || \mm/percpu.c#L439" id="L1386" class13"line" name="L386"> 386<13"li>1386  pcpu_chunkdef"L3dtail;
CONFIG_HAVE_SETUP_PER_CPU_AREA 387<13"li>138     #def"L3:code=chunk" claBUILD_EMBED_FIRST_CHUNKref">tail;
BUILD_EMBED_FIRST_CHUNKef="mm/percpu.c#L400" id="L1388" class13"line" name="L388"> 388<13"li>138 clas#endifmm/percpu.c#L331" id="L1389" class13"line" name="L389"> 389<13"li>138ref="mm/percpu.c#L400" id="L1390" class13"line" name="L390"> 390<13"li>139lclass="comment"> * RETURNS pcbuildpp" i_ age_firat_ss="s() iff needednby=th 391<13"li>1391    #if+code=pcpu_chunkdef"L3dref">pcpu_chunkdef"L3dtail;
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNKef="=mm/percpu.c#L331" id="L1392" class13"line" name="L392"> 392<13"li>139 clas#def"L3:code=chunk" claBUILD_PAGE_FIRST_CHUNKref">tail;
BUILD_PAGE_FIRST_CHUNKef="mm/percpu.c#L400" id="L1393" class13"line" name="L393"> 393<13"li>139     #endifmm/percpu.c#L331" id="L1394" class13"line" name="L394"> 394<13"li>139   ifmm/percpu.c#L331" id="L1395" class13"line" name="L395"> 395<13"li>13"5  /* acquire pcp" i_buildsagt;=/info() ispusednby=both embedsand  agesfiratrss="s aa href="mm/percpu.c#L439" id="L1396" class13"line" name="L396"> 396<13"li>139     #if+code=pcpu_chunkdef"L3dref">pcpu_chunkdef"L3dtail;
BUILD_EMBED_FIRST_CHUNKef=") || code=pcpu_chunkdef"L3dref">pcpu_chunkdef"L3dtail;
BUILD_PAGE_FIRST_CHUNKef="=mm/percpu.c#L331" id="L1397" class13"line" name="L397"> 397<13"li>139     c="comment">/* acquire pp href="mm/percpu.c#L439" id="L1398" class13"line" name="L398"> 398<13"li>139    * page re:* p" i_buildsagt;=/info -cbuildpagt;=/info &onsideeing distances between CPUs href="mm/percpu.c#L439" id="L1399" class13"line" name="L399"> 399<13"li>139 class="comment"> * 0 on suc* @reserved_ 399<1400">140lclass="comment"> * RETURNS:* @dyn_ ic  length ofsinnbytes href="mm/percpu.c#L439" id="L1401" class140line" name="L391"> 391<140li>140 class="comment"> * page re:* @atom/ 392<140li>140 class="comment"> * be integ* @" i_distance_fn: c leback to dean>m"L3 distance between " is, oph ofal 393<140li>140 class="comment"> * the cur p href="mm/percpu.c#L439" id="L1404" class140line" name="L394"> 394<140li>140 class="comment"> */l* Thispfunch ofsdean>m"L3spgrouping of units, ks ir mappings to " is href="mm/percpu.c#L439" id="L1405" class140line" name="L395"> 395<140li>1405  /* acquirel* and otherr ar> 3an>s<&onsideeing neededn420" i sa h,  length of href="mm/percpu.c#L439" id="L1406" class140line" name="L396"> 396<140li>1406  /* acquirel* atom  397<140li>140     c="comment">/* acquire p href="mm/percpu.c#L439" id="L1408" class140line" name="L398"> 398<140li>140    * page re:* Groups  re  lways mutliples of atom  399<140li>140 class="comment"> * 0 on suc* LOCAL_DISTANCE=both ways  re groupedntogetherrand sh re ="ccepfor href="mm/percpu.c#L439" id="L1410" class14"line" name="L410"> 410<14"li>141lclass="comment"> * RETURNS:* units in=th 4 groupa  Therreturnedn&onfigurth ofsispguar>nte3d 411<14"li>141 class="comment"> * page re:* to have CPUs ofsdifferge  n cls ofsdifferge  groups  nd f="+=75%pusage 412<14"li>141 class="comment"> * be integ* of amory 413<14"li>141 class="comment"> * the cur p href="mm/percpu.c#L439" id="L1414" class14"line" name="L414"> 414<14"li>141 class="comment"> */l* RETURNS: href="mm/percpu.c#L439" id="L1415" class14"line" name="L415"> 415<14"li>1415  /* acquirel* On success, pointer to th 416<14"li>1416  /* acquirel* failurh, ERR_PTR value ispreturneda href="mm/percpu.c#L439" id="L1417" class14"line" name="L417"> 417<14"li>141     c="comment">/* acquire pa href="mm/percpu.c#L439" id="L1418" class14"line" name="L418"> 418<14"li>1418    < pcpu_chunkp" i_agt;=/infopcpu_chunk__init     sode=chunk" clap" i_buildsagt;=/inforef">pcpu_chunkp" i_buildsagt;=/info 419<14"li>141           return -size, sa h_"     sode=chunk" clareserved_size, reserved_size, sa h_"     sode=chunk" cladyn_size, dyn_ 420<14"li>1420          return size, sa h_"     sode=chunk" claatom/pcpu_chunkatom/ 421<14"li>142   size, p" i_fc_" i_distance_fn_"     sode=chunk" cla" i_distance_fnref">size, " i_distance_fnef="=mm/percpu.c#L331" id="L1422" class14"line" name="L422"> 422<14"li>142     "mm/percpu.c#L333" id="L1423" class14"line" name="L423"> 423<14"li>142             < pcpu_chunkgroup_mappcpu_chunkNR_CPUSpcpu_chunk__initdata 424<14"li>1424  int pcpu_splitgroup_cntpcpu_chunkNR_CPUSpcpu_chunk__initdata 425<14"li>142           go&ons"+code=chunk" clasa h_"ref">size, sa h_"     sode=chunk" clas size, s pcpu_chunk__per_" i_end clar-+code=pcpu_chunk__per_" i_s pcpu_chunk__per_" i_s  426<14"li>1426  pcpu_chunknr_groupsref=r"+1r+code=pcpu_chunknr_unitsref">pcpu_chunknr_units 427<14"li>142   size, sa h_"     sode=chunk" clasa h_su ref">size, sa h_su  clar+code=pcpu_chunkmin_unit_size, min_unit_pcpu_chunkagt;=/sa h 428<14"li>142   pcpu_chunkupa clar+code=pcpu_chunkmax_uparef">pcpu_chunkmax_upa clar+code=pcpu_chunkuninitiala hd_vaeref">size, uninitiala hd_vaepcpu_chunkbest_upa/* acquire pcunits_per_agt;= pa href="mm/percpu.c#L439" id="L14"9" class14"line" name="L429"> 429<14"li>142           refnt sode=chunk" cla" nt_agt;=sref">pcpu_chunk" nt_agt;=s clar+code=pcpu_chunkgroupref">pcpu_splitgroup clar+code=pcpu_chunkunitref">pcpu_splitunitref="mm/percpu.c#L331" id="L14 0" class14"line" name="L430"> 430<14"li>1430          reunsign)
afnt sode=chunk" clac iref">pcpu_chunk" iref=r+code=pcpu_chunktc iref">pcpu_chunktc iref="mm/percpu.c#L331" id="L14 1" class14"line" name="L431"> 431<14"li>143   pcpu_chunkp" i_agt;=/infopcpu_chunk&iref="mm/percpu.c#L331" id="L14 2" class14"line" name="L432"> 432<14"li>143           pcpu_chunk" i_mapref="mm/percpu.c#L331" id="L14 3" class14"line" name="L433"> 433<14"li>143     mm/percpu.c#L331" id="L14 4" class14"line" name="L434"> 434<14"li>143   if (/* acquire pcthispfunch ofsmay bepc le)
amultiple times 435<14"li>143           gocode=pcpu_chunkmemsetref">pcpu_splitmemsetpcpu_chunkgroup_mappcpu_chunkgroup_map 436<14"li>1436  pcpu_splitmemsetpcpu_splitgroup_cntpcpu_splitgroup_cnt 437<14"li>143     mm/percpu.c#L331" id="L1438" class14"line" name="L438"> 438<14"li>143   /* acquire ppc lcul 439<14"li>143           recode=chunk" clasa h_su ref">size, sa h_su  cla "+code=chunk" claPFN_ALIGNref">tail;
PFN_ALIGNsize, s size, reserved_ 440<14"li>1440          return pcpu_splitmax_tsize, sa h_"    r+code=pcpu_chunkdyn_size, dyn_tail;
PERCPU_DYNAMIC_EARLY_SIZE 441<14"li>144   size, dyn_size, sa h_su  cla -+code=pcpu_chunks size, s size, reserved_ 442<14"li>144   inmm/percpu.c#L331" id="L1443" class14"line" name="L443"> 443<14"li>144             c="comment"> * RETURNS p href="mm/percpu.c#L439" id="L1444" class14"line" name="L43href="mm14"li>144 class="comment"> */l::::::::* Dean>m"L3 min_unit_ 345<14"li>1445  /* acquirel::::::::*  leng_ 346<14"li>1446  /* acquirel::::::::* whichpccomac* acod 347<14"li>144     c="comment">/* acquire ::::::::* ef=larger thcommin_unit_ 348<14"li>144    * page re:::::::::*a href="mm/percpu.c#L439" id="L1449" class14"line" name="L349"> 349<14"li>144           recode=chunk" clamin_unit_size, min_unit_pcpu_splitmax_tsize, sa h_"    r+code=pcpu_chunksa h_su ref">size, sa h_su  clar+code=pcpu_chunkPCPU_MIN_UNIT_SIZEref">tail;
PCPU_MIN_UNIT_SIZE 350<14"li>145ref="mm/percpu.c#L361" id="L1451" class14"line" name="L351"> 351<14"li>145   pcpu_chunkagt;=/sa hpcpu_splitroundupsize, min_unit_pcpu_chunkatom/ 352<14"li>1452  pcpu_chunkupa cla+"+code=pcpu_chunk>=/sa href">pcpu_chunkagt;=/sa hsize, min_unit_ 353<14"li>145             while +sode=map" class>=/sa href">pcpu_chunkagt;=/sa hpcpu_chunkupa cla+|| (+sode=map" class>=/sa href">pcpu_chunkagt;=/sa hpcpu_chunkupa cla) ef="+ ~code=pcpu_chunkPAGE_MASKref">tail;
PAGE_MASK 354<14"li>1454  int pcpu_chunkupa cla--"mm/percpu.c#L439" id="L1455" class14"line" name="L355"> 355<14"li>145           gocode=pcpu_chunkmax_uparef">pcpu_chunkmax_upa cla+"+code=pcpu_chunkuparef">pcpu_chunkupa cla"mm/percpu.c#L439" id="L1456" class14"line" name="L356"> 356<14"li>145ref="mm/percpu.c#L397" id="L1457" class14"line" name="L357"> 357<14"li>145   /* acquire pcgroup " ismac* rding to th 358<14"li>145   pcpu_chunkref_each_possible_c ipcpu_chunk" iref==="mm/percpu.c#L333" id="L14"9" class14"line" name="L359"> 359<14"li>145           return -pcpu_splitgroup cla+"+0"mm/percpu.c#L331" id="L1460" class14"line" name="L360"> 360<14"li>146l  pcpu_splitnext_group   361<14"li>146   pcpu_chunkref_each_possible_c ipcpu_chunktc iref==="mm/percpu.c#L333" id="L1462" class14"line" name="L362"> 362<14"li>146           pcpu_chunk" iref= ="+code=pcpu_chunkrc iref">pcpu_chunktc iref==mm/percpu.c#L333" id="L1463" class14"line" name="L363"> 363<14"li>146                                     break"mm/percpu.c#L331" id="L1464" class14"line" name="L364"> 364<14"li>146   if (pcpu_chunkgroup_mappcpu_chunktc iref=] ="+code=pcpu_chunkgroupref">pcpu_splitgroup cla+ef="+ef="+ sode=chunk" cla" i_distance_fnref">size, " i_distance_fnef="+ef="+ef="+mm/percpu.c#L331" id="L1465" class14"line" name="L365"> 365<14"li>146           goto size, " i_distance_fnef="+sode=map" classc iref">pcpu_chunk" iref=r+code=pcpu_chunktc iref">pcpu_chunktc iref=) f="++code=pcpu_chunkLOCAL_DISTANCEref">pcpu_chunkLOCAL_DISTANCE cla+||mm/percpu.c#L331" id="L1466" class14"line" name="L366"> 366<14"li>146                   size, " i_distance_fnef="+sode=map" classtc iref">pcpu_chunktc iref=r+code=pcpu_chunkc iref">pcpu_chunk" iref===f="++code=pcpu_chunkLOCAL_DISTANCEref">pcpu_chunkLOCAL_DISTANCE cla)=="mm/percpu.c#L333" id="L1467" class14"line" name="L367"> 367<14"li>146           return pcpu_splitgroup cla+++mm/percpu.c#L331" id="L1468" class14"line" name="L368"> 368<14"li>1468                     pcpu_chunknr_groupsref=r"+code=pcpu_chunkmaxref">pcpu_chunkmaxef="+sode=map" classnr_groupsref">pcpu_chunknr_groupsref=r+code=pcpu_chunkgroupref">pcpu_splitgroup cla + 1)"mm/percpu.c#L331" id="L1469" class14"line" name="L369"> 369<14"li>146           return -pcpu_splitnext_group   370<14"li>1470          return  371<14"li>147    372<14"li>147           pcpu_chunkgroup_mappcpu_chunk" iref=]r"+code=pcpu_chunkgroupref">pcpu_splitgroup cla"mm/percpu.c#L331" id="L1473" class14"line" name="L373"> 373<14"li>147                     code=chunk" clagroup_cntref">pcpu_splitgroup_cntpcpu_splitgroup cla]+++mm/percpu.c#L331" id="L1474" class14"line" name="L374"> 374<14"li>147   if ( 375<14"li>147 clasmm/percpu.c#L331" id="L1476" class14"line" name="L376"> 376<14"li>147             s="comment">/* acquire p href="mm/percpu.c#L439" id="L1477" class14"line" name="L377"> 377<14"li>147     c="comment">/* acquire ::::::::* Expand unit  378<14"li>147    * page re:::::::::*sand th 379<14"li>147 class="comment"> * 0 on suc::::::::*s="ccea href="mm/percpu.c#L438" id="L1480" class14"line" name="L380"> 380<14"li>148lclass="comment"> * RETURNSc::::::::*a href="mm/percpu.c#L439" id="L1481" class14"line" name="L381"> 381<14"li>148   pcpu_chunk" nt_agt;=s clar"+code=pcpu_chunkINT_MAXref">pcpu_chunkINT_MAX cla"mm/percpu.c#L331" id="L1482" class14"line" name="L382"> 382<14"li>148           pcpu_chunkupa cla+"+code=pcpu_chunkmax_uparef">pcpu_chunkmax_upa cla;pcode=new_alloc"uparef">pcpu_chunkupa cla;pcode=new_alloc"uparef">pcpu_chunkupa cla--=="mm/percpu.c#L333" id="L1483" class14"line" name="L383"> 383<14"li>148                     fnt sode=chunk" claagt;=sref">pcpu_chunkagt;=s clar"+0r+code=pcpu_chunkw nt3dref">pcpu_chunkw nt3d cla+"+0"mm/percpu.c#L331" id="L1484" class14"line" name="L384"> 384<14"li>148   ifmm/percpu.c#L331" id="L1485" class14"line" name="L385"> 385<14"li>148           goto pcpu_chunkagt;=/sa hpcpu_chunkupa cla+|| (+sode=map" class>=/sa href">pcpu_chunkagt;=/sa hpcpu_chunkupa cla) ef="+ ~code=pcpu_chunkPAGE_MASKref">tail;
PAGE_MASK 386<14"li>148                    387<14"li>148     mm/percpu.c#L331" id="L1488" class14"line" name="L388"> 388<14"li>1488                    ref=+sode=map" classgroupref">pcpu_splitgroup cla+"+0"+code=pcpu_chunkgroupref">pcpu_splitgroup cla+el"++code=pcpu_chunknr_groupsref">pcpu_chunknr_groupsref="+code=pcpu_chunkgroupref">pcpu_splitgroup cla++=="mm/percpu.c#L333" id="L1489" class14"line" name="L389"> 389<14"li>148           return -pcpu_chunkthis_agt;=s cla+"+code=pcpu_chunkDIV_ROUND_UPref">pcpu_chunkDIV_ROUND_UPef="+sode=map" classgroup_cntref">pcpu_splitgroup_cntpcpu_splitgroup cla]r+code=pcpu_chunkuparef">pcpu_chunkupa cla)"mm/percpu.c#L331" id="L1490" class14"line" name="L390"> 390<14"li>1490          return pcpu_chunkagt;=s clar+"+code=pcpu_chunkrhis_agt;=sref">pcpu_chunkthis_agt;=s cla"mm/percpu.c#L331" id="L1491" class14"line" name="L391"> 391<14"li>149   pcpu_chunkw nt3d cla++"+code=pcpu_chunkrhis_agt;=sref">pcpu_chunkthis_agt;=s clac*+code=pcpu_chunkuparef">pcpu_chunkupa cla+-+code=pcpu_chunkgroup_cntref">pcpu_splitgroup_cntpcpu_splitgroup cla]"mm/percpu.c#L331" id="L1492" class14"line" name="L392"> 392<14"li>149            393<14"li>149     mm/percpu.c#L331" id="L1494" class14"line" name="L394"> 394<14"li>149   if (/* acquire p href="mm/percpu.c#L439" id="L1495" class14"line" name="L395"> 395<14"li>14"5  /* acquiresturn  396<14"li>1496  /* acquirel::::::::        * greater-thcom* aparison ensures upa==1  lways href="mm/percpu.c#L439" id="L1497" class14"line" name="L397"> 397<14"li>149     c="comment">/* acquirel::::::::        * pnt"esath 398<14"li>149    * page re:::::::::        *a href="mm/percpu.c#L439" id="L1499" class14"line" name="L399"> 399<14"li>149           return -pcpu_chunkw nt3d cla+f="++code=pcpu_chunknum_possible_c isref">pcpu_chunknum_possible_c isef="+)r/e3)mm/percpu.c#L331" id="L1500" class1500" e" name="L399"> 399<1500">1500          return  391<150li>150 clasmm/percpu.c#L331" id="L1502" class150line" name="L392"> 392<150li>150           /* acquire pcand th 393<150li>150                     f="+sode=map" class>=sref">pcpu_chunkagt;=s clarf="++code=pcpu_chunkl nt_agt;=sref">pcpu_chunk" nt_agt;=s cla)mm/percpu.c#L331" id="L1504" class150line" name="L394"> 394<150li>150   if ( 395<150li>150           goto pcpu_chunk" nt_agt;=s clar"+code=pcpu_chunk>=sref">pcpu_chunkagt;=s cla"mm/percpu.c#L331" id="L1506" class150line" name="L396"> 396<150li>150                   pcpu_chunkbest_upapcpu_chunkupa cla"mm/percpu.c#L439" id="L1507" class150line" name="L397"> 397<150li>150           re"mm/percpu.c#L418" id="L1508" class150line" name="L398"> 398<150li>150   pcpu_chunkupa cla+"+code=pcpu_chunkbest_uparef">pcpu_chunkbest_upa 399<150li>150ref="mm/percpu.c#L400" id="L1510" class15"line" name="L410"> 410<15"li>151l  /* acquire pcamory 411<15"li>151   pcpu_splitgroup cla+"+0"+code=pcpu_chunkgroupref">pcpu_splitgroup cla+el"++code=pcpu_chunknr_groupsref">pcpu_chunknr_groupsref="+code=pcpu_chunkgroupref">pcpu_splitgroup cla++=mm/percpu.c#L439" id="L1512" class15"line" name="L412"> 412<15"li>151           pcpu_chunknr_unitspcpu_splitrounduppcpu_splitgroup_cntpcpu_splitgroup cla]r+code=pcpu_chunkuparef">pcpu_chunkupa cla)"mm/percpu.c#L331" id="L15"3" class15"line" name="L413"> 413<15"li>151     mm/percpu.c#L331" id="L1514" class15"line" name="L414"> 414<15"li>1514  int pcpu_chunk&iref=+"+code=pcpu_chunkp" i_agt;=/agt;=/inforef">pcpu_chunkp" i_agt;=/agt;=/infopcpu_chunknr_groupsref=r+code=pcpu_chunknr_unitsref">pcpu_chunknr_units 415<15"li>151           gof="++code=tail" clasairef">pcpu_chunk&iref==mm/percpu.c#L439" id="L1516" class15"line" name="L416"> 416<15"li>151                   pcpu_chunkERR_PTRpcpu_chunkENOMEM 417<15"li>151   pcpu_chunk" i_mapref=r"+code=pcpu_chunk&iref">pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[0].code=spin_unloc" i_mapref">pcpu_chunk" i_mapref="mm/percpu.c#L331" id="L15"8" class15"line" name="L418"> 418<15"li>151 clasmm/percpu.c#L331" id="L1519" class15"line" name="L419"> 419<15"li>151           reref=+sode=map" classgroupref">pcpu_splitgroup cla+"+0"+code=pcpu_chunkgroupref">pcpu_splitgroup cla+el"++code=pcpu_chunknr_groupsref">pcpu_chunknr_groupsref="+code=pcpu_chunkgroupref">pcpu_splitgroup cla++=="mm/percpu.c#L333" id="L1520" class15"line" name="L420"> 420<15"li>1520          return pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[code=chunk" clagroupref">pcpu_splitgroup cla].code=spin_unloc" i_mapref">pcpu_chunk" i_mapref=r"+code=pcpu_chunk" i_mapref">pcpu_chunk" i_mapref="mm/percpu.c#L331" id="L1521" class15"line" name="L421"> 421<15"li>152   pcpu_chunk" i_mapref=r+"+code=pcpu_chunkroundupref">pcpu_splitrounduppcpu_splitgroup_cntpcpu_splitgroup cla]r+code=pcpu_chunkuparef">pcpu_chunkupa cla)"mm/percpu.c#L331" id="L1522" class15"line" name="L422"> 422<15"li>152            423<15"li>152     mm/percpu.c#L331" id="L1524" class15"line" name="L424"> 424<15"li>1524  int pcpu_chunk&iref=ef="+code=map" classs size, s size, s  425<15"li>152           gocode=pcpu_chunkairef">pcpu_chunk&iref=ef="+code=map" classreserved_size, reserved_size, reserved_ 426<15"li>1526  pcpu_chunk&iref=ef="+code=map" classdyn_size, dyn_size, dyn_ 427<15"li>152   pcpu_chunk&iref=ef="+code=map" classunit_size, unit_pcpu_chunkagt;=/sa hpcpu_chunkupa cla"mm/percpu.c#L331" id="L1528" class15"line" name="L428"> 428<15"li>152   pcpu_chunk&iref=ef="+code=map" classatom/pcpu_chunkatom/pcpu_chunkatom/ 429<15"li>152           recode=chunk" claairef">pcpu_chunk&iref=ef="+code=map" classagt;=/sa href">pcpu_chunkagt;=/sa hpcpu_chunkagt;=/sa h 430<15"li>153ref="mm/percpu.c#L361" id="L15 1" class15"line" name="L431"> 431<15"li>153   pcpu_splitgroup cla+"+0r+code=pcpu_chunkunitref">pcpu_splitunitref=+"+0"+code=pcpu_chunkgroup_cntref">pcpu_splitgroup_cntpcpu_splitgroup cla]"+code=pcpu_chunkgroupref">pcpu_splitgroup cla++=="mm/percpu.c#L333" id="L15 2" class15"line" name="L432"> 432<15"li>153           pcpu_chunkp" i_group_info clac*code=pcpu_chunkgiref">pcpu_chunkgiref=+"+ef="+code=pcpu_chunk&iref">pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[code=chunk" clagroupref">pcpu_splitgroup cla]"mm/percpu.c#L331" id="L15 3" class15"line" name="L433"> 433<15"li>153     mm/percpu.c#L331" id="L15 4" class15"line" name="L434"> 434<15"li>153   if (/* acquire p href="mm/percpu.c#L439" id="L1535" class15"line" name="L435"> 435<15"li>1535  /* acquiresturn  436<15"li>1536  /* acquirel::::::::        * back-to-backa  Therc le)r should upd 437<15"li>153     c="comment">/* acquirel::::::::        * rcplectmactualr length ofa href="mm/percpu.c#L438" id="L1538" class15"line" name="L438"> 438<15"li>153    * page re:::::::::        *a href="mm/percpu.c#L439" id="L1539" class15"line" name="L439"> 439<15"li>153           return -pcpu_chunkgiref=ef="+code=map" classbase_offsetref">pcpu_chunkbase_offsetpcpu_splitunitref=+*+code=pcpu_chunkairef">pcpu_chunk&iref=ef="+code=map" classunit_size, unit_ 440<15"li>154ref="mm/percpu.c#L361" id="L1541" class15"line" name="L441"> 441<15"li>154   pcpu_chunkref_each_possible_c ipcpu_chunk" iref==mm/percpu.c#L361" id="L1542" class15"line" name="L442"> 442<15"li>154           pcpu_chunkgroup_mappcpu_chunk" iref=]r""+code=pcpu_chunkgroupref">pcpu_splitgroup cla=mm/percpu.c#L361" id="L1543" class15"line" name="L443"> 443<15"li>154                                     code=pcpu_chunkgiref">pcpu_chunkgiref=ef="+code=map" class" i_mapref">pcpu_chunk" i_mapref=[code=chunk" clagiref">pcpu_chunkgiref=ef="+code=map" classnr_unitsref">pcpu_chunknr_unitspcpu_chunk" iref="mm/percpu.c#L331" id="L1544" class15"line" name="L43href="mm15"li>1544  int pcpu_chunkgiref=ef="+code=map" classnr_unitsref">pcpu_chunknr_unitspcpu_splitrounduppcpu_chunkgiref=ef="+code=map" classnr_unitsref">pcpu_chunknr_unitspcpu_chunkupa cla)"mm/percpu.c#L331" id="L1545" class15"line" name="L345"> 345<15"li>154           goto pcpu_splitunitref=++"+code=pcpu_chunkgiref">pcpu_chunkgiref=ef="+code=map" classnr_unitsref">pcpu_chunknr_units 346<15"li>1546   347<15"li>154   tail;
BUG_ONpcpu_splitunitref=+!"+code=pcpu_chunknr_unitsref">pcpu_chunknr_units 348<15"li>154 clasmm/percpu.c#L331" id="L1549" class15"line" name="L349"> 349<15"li>154           rereturn code=tail" clasairef">pcpu_chunk&iref="mm/percpu.c#L331" id="L1550" class15"line" name="L350"> 350<15"li>155ref=""mm/percpu.c#L418" id="L1551" class15"line" name="L351"> 351<15"li>155   /* acquire pcBUILD_EMBED_FIRST_CHUNK+|| BUILD_PAGE_FIRST_CHUNK *a href="mm/percpu.c#L439" id="L1552" class15"line" name="L352"> 352<15"li>155   inmm/percpu.c#L331" id="L1553" class15"line" name="L353"> 353<15"li>155     #if+code=pcpu_chunkdef"L3dref">pcpu_chunkdef"L3dtail;
BUILD_EMBED_FIRST_CHUNKef=")mm/percpu.c#L331" id="L1554" class15"line" name="L354"> 354<15"li>155 class="comment"> */ pp href="mm/percpu.c#L439" id="L1555" class15"line" name="L355"> 355<15"li>1555  /* acquirel* p" i_embed_firat_ss="s - embedsth 356<15"li>1556  /* acquirel* @reserved_ 357<15"li>155     c="comment">/* acquire p @dyn_ ic  length ofsinnbytes href="mm/percpu.c#L439" id="L15"8" class15"line" name="L358"> 358<15"li>155    * page re:* @atom/ 359<15"li>155 class="comment"> * 0 on suc* @c i_distance_fn: c leback to dean>m"L3 distance between " is, oph ofal 360<15"li>156lclass="comment"> * RETURNS:* @agt;=/fn: funch ofsto amory 361<15"li>156 class="comment"> * page re:* @free/fn: funch ofsto frees420" i page 362<15"li>156 class="comment"> * be integ* 363<15"li>156 class="comment"> * the cur p Thispisp/peelper to eases 364<15"li>156 class="comment"> */l* ccombepc le)
awhere p" i_ 365<15"li>1565  /* acquirel* href="mm/percpu.c#L439" id="L1566" class15"line" name="L366"> 366<15"li>1566  /* acquirel* Ifcthispfunch ofsispusednto  367<15"li>156     c="comment">/* acquire p bypc leing @agt;=/fncand usednas-ispwithoutpbeing mapp)
afnto href="mm/percpu.c#L438" id="L1568" class15"line" name="L368"> 368<15"li>156    * page re:* vmagt;=  rea.  Alength ofs  re  lways wholeamultiples of @atom/ 369<15"li>156 class="comment"> * 0 on suc*  lign)
ato @atom/ 370<15"li>157lclass="comment"> * RETURNS:* href="mm/percpu.c#L439" id="L1571" class15"line" name="L371"> 371<15"li>157 class="comment"> * page re:* Thispenablesath 372<15"li>157 class="comment"> * be integ* mapping whichpoften u"esalarger  ages 373<15"li>157 class="comment"> * the cur p ccomresultsinnverys="crses" ief="+unit mapping ofsNUMA machinesathis href="mm/percpu.c#L439" id="L1574" class15"line" name="L374"> 374<15"li>157 class="comment"> */l* requieing large vmagt;=  ddress ="ccea  Don'tmu"ecthisp/lory 375<15"li>1575  /* acquirel* vmagt;= ="ccepispno/ ordn>s 376<15"li>1576  /* acquirel* between n cl memory< ddressesa(iea 32bit NUMA machines)a href="mm/percpu.c#L439" id="L1577" class15"line" name="L377"> 377<15"li>157     c="comment">/* acquire * href="mm/percpu.c#L439" id="L1578" class15"line" name="L378"> 378<15"li>157    * page re:p @dyn_ ic  rea  379<15"li>157 class="comment"> * 0 on suc* href="mm/percpu.c#L439" id="L1580" class15"line" name="L380"> 380<15"li>158lclass="comment"> * RETURNSc* Ifcthe neededn 381<15"li>158 class="comment"> * page re:*  382<15"li>158 class="comment"> * be integ* 383<15"li>158 class="comment"> * the cur p RETURNS: href="mm/percpu.c#L439" id="L1584" class15"line" name="L384"> 384<15"li>158 class="comment"> */l* 0 ofssuccess, -errno ofsfailurha href="mm/percpu.c#L439" id="L1585" class15"line" name="L385"> 385<15"li>1585  /* acquirel*a href="mm/percpu.c#L439" id="L1586" class15"line" name="L386"> 386<15"li>158     fnt sode=chunk" cla__initref">pcpu_chunk__init     sode=chunk" clap" i_embed_firat_ss="sref">pcpu_chunkp" i_embed_firat_ss="ssize, sa h_"     sode=chunk" clareserved_size, reserved_size, sa h_"     sode=chunk" cladyn_size, dyn_ 387<15"li>158           return size, sa h_"     sode=chunk" claatom/pcpu_chunkatom/ 388<15"li>1588                     size, p" i_fc_" i_distance_fn_"     sode=chunk" cla" i_distance_fnref">size, " i_distance_fnef="rmm/percpu.c#L333" id="L1589" class15"line" name="L389"> 389<15"li>158           return -size, p" i_fc_agt;=/fn_"     sode=chunk" claagt;=/fnref">pcpu_chunkagt;=/fnef="rmm/percpu.c#L333" id="L1590" class15"line" name="L390"> 390<15"li>1590          return size, p" i_fc_free/fn_"     sode=chunk" clafree/fnref">pcpu_chunkrree/fnef=")mm/percpu.c#L331" id="L1591" class15"line" name="L391"> 391<15"li>159    392<15"li>159           pcpu_chunkbasepcpu_chunkULONG_MAXref="mm/percpu.c#L331" id="L1593" class15"line" name="L393"> 393<15"li>1593          pcpu_chunkareaspcpu_chunkNULLref="mm/percpu.c#L331" id="L1594" class15"line" name="L394"> 394<15"li>159   if (pcpu_chunkp" i_agt;=/infopcpu_chunk&iref="mm/percpu.c#L331" id="L1595" class15"line" name="L395"> 395<15"li>159           gocode=pcpu_chunksa h_"ref">size, sa h_"     sode=chunk" clasa h_su ref">size, sa h_su  clar+code=pcpu_chunkareas/pcpu_chunkareas/pcpu_chunkmax_distanceref="mm/percpu.c#L331" id="L1596" class15"line" name="L396"> 396<15"li>1596  pcpu_splitgroup clar+code=pcpu_chunkiref">pcpu_chunki clar+code=pcpu_chunkrcref">size, rcref="mm/percpu.c#L331" id="L1597" class15"line" name="L397"> 397<15"li>159     mm/percpu.c#L331" id="L1598" class15"line" name="L398"> 398<15"li>159   pcpu_chunk&iref=+"+code=pcpu_chunkp" i_buildaagt;=/inforef">pcpu_chunkp" i_buildaagt;=/infosize, reserved_size, dyn_pcpu_chunkatom/ 399<15"li>159           return -size, " i_distance_fnef=")"mm/percpu.c#L331" id="L1600" class1600" e" name="L399"> 399<1600">1600          ref="+sode=map" classIS_ERRref">pcpu_chunkIS_ERRpcpu_chunk&iref==)mm/percpu.c#L331" id="L1601" class160line" name="L391"> 391<160li>160   pcpu_chunkPTR_ERRpcpu_chunk&iref=="mm/percpu.c#L331" id="L1602" class160line" name="L392"> 392<160li>160   inmm/percpu.c#L331" id="L1603" class160line" name="L393"> 393<160li>160             sode=chunk" clasa h_su ref">size, sa h_su  clar"+code=pcpu_chunk&iref">pcpu_chunk&iref=ef="+code=map" classs size, s pcpu_chunk&iref=ef="+code=map" classreserved_size, reserved_pcpu_chunk&iref=ef="+code=map" classdyn_size, dyn_ 394<160li>1604  int pcpu_chunkareas/tail;
PFN_ALIGNpcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref=r*.da hof(voidc*)="mm/percpu.c#L331" id="L1605" class160line" name="L395"> 395<160li>160 clasmm/percpu.c#L331" id="L1606" class160line" name="L396"> 396<160li>1606  pcpu_chunkareassize, agt;=/bootmem_nopanicpcpu_chunkareas/ 397<160li>160           ref="++code=tail" clasareasref">pcpu_chunkareas 398<160li>1608                    code=pcpu_chunkrcref">size, rcref=r"+-code=pcpu_chunkENOMEMref">pcpu_chunkENOMEM 399<160li>160           return -pcpu_chunkout_free 410<16"li>161l   411<16"li>161 clasmm/percpu.c#L331" id="L1612" class16"line" name="L412"> 412<16"li>161           /* acquire pcamorym"L3 base  ddress *a href="mm/percpu.c#L439" id="L16"3" class16"line" name="L413"> 413<16"li>161             ref=+sode=map" classgroupref">pcpu_splitgroup cla+"+0"+code=pcpu_chunkgroupref">pcpu_splitgroup cla+el"++code=pcpu_chunkairef">pcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref="+code=pcpu_chunkgroupref">pcpu_splitgroup cla++=="mm/percpu.c#L333" id="L1614" class16"line" name="L414"> 414<16"li>1614  int pcpu_chunkp" i_group_info clac*code=pcpu_chunkgiref">pcpu_chunkgiref=+"+ef="+code=pcpu_chunk&iref">pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[code=chunk" clagroupref">pcpu_splitgroup cla]"mm/percpu.c#L333" id="L1615" class16"line" name="L415"> 415<16"li>161           goto pcpu_chunk" iref=r"+code=chunk" claNR_CPUSref">pcpu_chunkNR_CPUS 416<16"li>161                   pcpu_chunkptr 417<16"li>161     mm/percpu.c#L331" id="L16"8" class16"line" name="L418"> 418<16"li>1618                    ref=+sode=map" classiref">pcpu_chunki cla+"+0"+code=pcpu_chunkiref">pcpu_chunki cla+el"++code=pcpu_chunkgiref">pcpu_chunkgiref=ef="+code=map" classnr_unitsref">pcpu_chunknr_unitspcpu_chunk" iref=r""+code=chunk" claNR_CPUSref">pcpu_chunkNR_CPUSpcpu_chunki cla++=mm/percpu.c#L439" id="L1619" class16"line" name="L419"> 419<16"li>161           return -pcpu_chunk" iref=r"+code=chunk" clagiref">pcpu_chunkgiref=ef="+code=map" class" i_mapref">pcpu_chunk" i_mapref=[code=chunk" clairef">pcpu_chunki cla]"mm/percpu.c#L333" id="L1620" class16"line" name="L420"> 420<16"li>1620          return tail;
BUG_ONpcpu_chunk" iref=r""+code=chunk" claNR_CPUSref">pcpu_chunkNR_CPUS 421<16"li>162 clasmm/percpu.c#L331" id="L1622" class16"line" name="L422"> 422<16"li>162           /* acquire pcamory 423<16"li>162                     code=chunk" claptrref">pcpu_chunkptrpcpu_chunkagt;=/fnef="+sode=map" classc iref">pcpu_chunk" iref=r+code=pcpu_chunkgiref">pcpu_chunkgiref=ef="+code=map" classnr_unitsref">pcpu_chunknr_unitspcpu_chunk&iref=ef="+code=map" classunit_size, unit_pcpu_chunkatom/ 424<16"li>1624  int pcpu_chunkptr 425<16"li>162           goto size, rcref=r"+-code=pcpu_chunkENOMEMref">pcpu_chunkENOMEM 426<16"li>162                   pcpu_chunkout_free_areas 427<16"li>162           return  428<16"li>1628                    code=pcpu_chunkareasref">pcpu_chunkareaspcpu_splitgroup cla]+"+code=pcpu_chunkptrref">pcpu_chunkptr 429<16"li>162ref="mm/percpu.c#L400" id="L16 0" class16"line" name="L430"> 430<16"li>1630          return pcpu_chunkbasepcpu_chunkminef="+sode=map" classptrref">pcpu_chunkptrpcpu_chunkbase 431<16"li>163 clasmm/percpu.c#L331" id="L16 2" class16"line" name="L432"> 432<16"li>163           pcpu_chunki cla+"+0"+code=pcpu_chunkiref">pcpu_chunki cla+el"++code=pcpu_chunkgiref">pcpu_chunkgiref=ef="+code=map" classnr_unitsref">pcpu_chunknr_unitspcpu_chunki cla++r+code=pcpu_chunkptrref">pcpu_chunkptrpcpu_chunk&iref=ef="+code=map" classunit_size, unit_ 433<16"li>163                             f="+sode=map" classgiref">pcpu_chunkgiref=ef="+code=map" class" i_mapref">pcpu_chunk" i_mapref=[code=chunk" clairef">pcpu_chunki cla]r""+code=chunk" claNR_CPUSref">pcpu_chunkNR_CPUS 434<16"li>163   if (/* acquire pcunusednunit, freeswholea*a href="mm/percpu.c#L439" id="L1635" class16"line" name="L435"> 435<16"li>163           goto pcpu_chunkrree/fnef="+sode=map" classptrref">pcpu_chunkptrpcpu_chunk&iref=ef="+code=map" classunit_size, unit_ 436<16"li>163                    437<16"li>163           return  438<16"li>1638                     /* acquire pccopycand return th 439<16"li>163           return -pcpu_chunkmemcpyef="+sode=map" classptrref">pcpu_chunkptrpcpu_chunk__439_" i_loadpcpu_chunk&iref=ef="+code=map" classs size, s  440<16"li>1640          return pcpu_chunkrree/fnef="+sode=map" classptrref">pcpu_chunkptrsize, sa h_su  clar+code=pcpu_chunkairef">pcpu_chunk&iref=ef="+code=map" classunit_size, unit_size, sa h_su  cla="mm/percpu.c#L439" id="L1641" class16"line" name="L441"> 441<16"li>164    442<16"li>164            443<16"li>164     mm/percpu.c#L331" id="L1644" class16"line" name="L43href="mm16"li>1644  int /* acquire pcbase  ddress ispnow known, dean>m"L3 group base offsets *a href="mm/percpu.c#L439" id="L1645" class16"line" name="L345"> 345<16"li>164           gocode=pcpu_chunkmax_distanceref">pcpu_chunkmax_distanceref=+"+0"mm/percpu.c#L331" id="L1646" class16"line" name="L346"> 346<16"li>1646  pcpu_splitgroup cla+"+0"+code=pcpu_chunkgroupref">pcpu_splitgroup cla+el"++code=pcpu_chunkairef">pcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref="+code=pcpu_chunkgroupref">pcpu_splitgroup cla++=="mm/percpu.c#L331" id="L1647" class16"line" name="L347"> 347<16"li>164           return pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[code=chunk" clagroupref">pcpu_splitgroup cla].code=spin_unlocbase_offsetref">pcpu_chunkbase_offsetpcpu_chunkareaspcpu_splitgroup cla]+-+code=pcpu_chunkbaseref">pcpu_chunkbase 348<16"li>1648                    code=pcpu_chunkmax_distanceref">pcpu_chunkmax_distanceref=+"+code=pcpu_chunkmax_tref">pcpu_chunkmax_tef="+sode=map" classsa h_"ref">size, sa h_"    r+code=pcpu_chunkmax_distanceref">pcpu_chunkmax_distanceref=rmm/percpu.c#L333" id="L1649" class16"line" name="L349"> 349<16"li>164           return -pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[code=chunk" clagroupref">pcpu_splitgroup cla].code=spin_unlocbase_offsetref">pcpu_chunkbase_offset 350<16"li>165l   351<16"li>165   pcpu_chunkmax_distanceref=++"+code=pcpu_chunkairef">pcpu_chunk&iref=ef="+code=map" classunit_size, unit_ 352<16"li>165   inmm/percpu.c#L331" id="L1653" class16"line" name="L353"> 353<16"li>165             s="comment">/* acquire pcwarn if maximum distance ispfurth 354<16"li>1654  int pcpu_chunkmax_distanceref=+f="+++sode=map" classVMALLOC_ENDref">pcpu_chunkVMALLOC_END clar-+code=pcpu_chunkVMALLOC_STARTref">pcpu_chunkVMALLOC_START 355<16"li>165           goto pcpu_chunkpr_warningef="+s="comment">/steing">"PERCPU: max_distance=0x%zx too large ref=vmagt;= " href="mm/percpu.c#L439" id="L1656" class16"line" name="L356"> 356<16"li>165                   /steing">"="ccep0x%lx\n" href="r+code=pcpu_chunkmax_distanceref">pcpu_chunkmax_distanceref=rmm/percpu.c#L333" id="L1657" class16"line" name="L357"> 357<16"li>165           return pcpu_chunkVMALLOC_END clar-+code=pcpu_chunkVMALLOC_STARTref">pcpu_chunkVMALLOC_START 358<16"li>165   pcpu_chunkCONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK  inmm/percpu.c#L331" id="L1659" class16"line" name="L359"> 359<16"li>165           return -/* acquire pcand fail if we have r leback *a href="mm/percpu.c#L439" id="L1660" class16"line" name="L360"> 360<16"li>1660          return size, rcref=r"+-code=pcpu_chunkEINVALref">pcpu_chunkEINVAL cla"mm/percpu.c#L439" id="L1661" class16"line" name="L361"> 361<16"li>166   pcpu_chunkout_free 362<16"li>166 clas#endifmm/percpu.c#L331" id="L1663" class16"line" name="L363"> 363<16"li>1663   364<16"li>166 clasmm/percpu.c#L418" id="L1665" class16"line" name="L365"> 365<16"li>166           gocode=pcpu_chunkpr_inforef">pcpu_chunkpr/info/steing">"PERCPU: Embeddedn%zi pages/" i @%p s%zi r%zi d%zi u%zi\n" href="rmm/percpu.c#L418" id="L1666" class16"line" name="L366"> 366<16"li>166                   tail;
PFN_DOWNef="+sode=map" classsa h_su ref">size, sa h_su  cla=r+code=pcpu_chunkbaseref">pcpu_chunkbasepcpu_chunk&iref=ef="+code=map" classs size, s pcpu_chunk&iref=ef="+code=map" classreserved_size, reserved_ 367<16"li>166           return pcpu_chunk&iref=ef="+code=map" classdyn_size, dyn_pcpu_chunk&iref=ef="+code=map" classunit_size, unit_ 368<16"li>166 clasmm/percpu.c#L331" id="L1669" class16"line" name="L369"> 369<16"li>166           recode=chunk" clarcref">size, rcref=r"+code=pcpu_chunkpc i_pcpu_chunkpc i_pcpu_chunk&iref=r+code=pcpu_chunkbaseref">pcpu_chunkbase 370<16"li>1670          regoto code=new_alloc"out_freeref">pcpu_chunkout_free 371<16"li>167 clasmm/percpu.c#L331" id="L1672" class16"line" name="L372"> 372<16"li>167 classode=new_alloc"out_free_areasref">pcpu_chunkout_free_areas 373<16"li>167             ref=+sode=map" classgroupref">pcpu_splitgroup cla+"+0"+code=pcpu_chunkgroupref">pcpu_splitgroup cla+el"++code=pcpu_chunkairef">pcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref="+code=pcpu_chunkgroupref">pcpu_splitgroup cla++=mm/percpu.c#L439" id="L1674" class16"line" name="L374"> 374<16"li>1674  int pcpu_chunkrree/fnef="+sode=map" classareasref">pcpu_chunkareaspcpu_splitgroup cla]rmm/percpu.c#L418" id="L1675" class16"line" name="L375"> 375<16"li>167           goto pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[code=chunk" clagroupref">pcpu_splitgroup cla].code=spin_unlocnr_unitsref">pcpu_chunknr_unitspcpu_chunk&iref=ef="+code=map" classunit_size, unit_ 376<16"li>1676  pcpu_chunkout_free 377<16"li>167   pcpu_chunkp" i_free_agt;=/infoef="+sode=map" classairef">pcpu_chunk&iref=="mm/percpu.c#L439" id="L1678" class16"line" name="L378"> 378<16"li>1678            f="+sode=map" classareasref">pcpu_chunkareas 379<16"li>167           return -pcpu_chunkrree/bootmem h="+sode=map" class__paref">pcpu_chunk__paef="+sode=map" classareasref">pcpu_chunkareaspcpu_chunkareas/ 380<16"li>1680          rereturn code=tail" clasrcref">size, rcref="mm/percpu.c#L331" id="L1681" class16"line" name="L381"> 381<16"li>168 clas"mm/percpu.c#L418" id="L1682" class16"line" name="L382"> 382<16"li>168 clas#endif+c="comment">/* acquire pcBUILD_EMBED_FIRST_CHUNK+*a href="mm/percpu.c#L439" id="L1683" class16"line" name="L383"> 383<16"li>168     mm/percpu.c#L331" id="L1684" class16"line" name="L384"> 384<16"li>168 clas#ifdef+code=pcpu_chunkBUILD_PAGE_FIRST_CHUNKref">size, BUILD_PAGE_FIRST_CHUNK    mm/percpu.c#L331" id="L1685" class16"line" name="L385"> 385<16"li>1685  /* acquire pp href="mm/percpu.c#L439" id="L1686" class16"line" name="L386"> 386<16"li>1686  /* acquirel* p" i_page_firat_ss="s - mapsth 387<16"li>168     c="comment">/* acquire p @reserved_ 388<16"li>168    * page re:* @agt;=/fn: funch ofsto amory 389<16"li>168 class="comment"> * 0 on suc* @free/fn: funch ofsto frees420" i page,  lways c le)
awith PAGE_SIZE href="mm/percpu.c#L439" id="L1690" class16"line" name="L390"> 390<16"li>169lclass="comment"> * RETURNS:* @popul 391<16"li>169 class="comment"> * page re:* href="mm/percpu.c#L439" id="L1692" class16"line" name="L392"> 392<16"li>169 class="comment"> * be integ* Thispisp/peelper to eases 393<16"li>169 class="comment"> * the cur p cs="s and ccombepc le)
awhere p" i_ 394<16"li>169 class="comment"> */l* href="mm/percpu.c#L439" id="L1695" class16"line" name="L395"> 395<16"li>1695  /* acquirel* Thispispth 396<16"li>1696  /* acquirel* page-by- agesinto vmagt;=  rea. href="mm/percpu.c#L439" id="L1697" class16"line" name="L397"> 397<16"li>169     c="comment">/* acquire * href="mm/percpu.c#L439" id="L1698" class16"line" name="L398"> 398<16"li>169    * page re:* RETURNS: href="mm/percpu.c#L439" id="L1699" class16"line" name="L399"> 399<16"li>169 class="comment"> * 0 on suc* 0 ofssuccess, -errno ofsfailurha href="mm/percpu.c#L439" id="L1700" class1700" e" name="L399"> 399<1700">170lclass="comment"> * RETURNS:*a href="mm/percpu.c#L439" id="L1701" class170line" name="L391"> 391<170li>170   pcpu_chunk__init     sode=chunk" clap" i_page_firat_ss="sref">pcpu_chunkp" i_page_firat_ss="sef="+sode=map" classsa h_"ref">size, sa h_"     sode=chunk" clareserved_size, reserved_ 392<170li>170           size, p" i_fc_agt;=/fn_"     sode=chunk" claagt;=/fnref">pcpu_chunkagt;=/fnef="rmm/percpu.c#L333" id="L1703" class170line" name="L393"> 393<170li>170                             eturn -size, p" i_fc_free/fn_"     sode=chunk" clafree/fnref">pcpu_chunkrree/fnef="rmm/percpu.c#L333" id="L1704" class170line" name="L394"> 394<170li>170   if (size, p" i_fc_populsize, popul 395<170li>170 clas"mm/percpu.c#L331" id="L1706" class170line" name="L396"> 396<170li>1706  size, vm_pcpu_chunkvmref="mm/percpu.c#L331" id="L1707" class170line" name="L397"> 397<170li>170           repcpu_chunkp" i_agt;=/infopcpu_chunk&iref="mm/percpu.c#L331" id="L1708" class170line" name="L398"> 398<170li>1708            char+code=pcpu_chunk"sa h_strref">pcpu_chunkpsa h_strref=[16]"mm/percpu.c#L333" id="L1709" class170line" name="L399"> 399<170li>170           refnt sode=chunk" claunit_pagesref">size, unit_pages hf="mm/percpu.c#L331" id="L1710" class17"line" name="L410"> 410<17"li>171l  size, sa h_"     sode=chunk" clapages_size, pages_ 411<17"li>1711          resize, pagesize, pages hf="mm/percpu.c#L331" id="L1712" class17"line" name="L412"> 412<17"li>171           size, unitref=r+code=pcpu_chunkiref">pcpu_chunki clar+code=pcpu_chunkjref">pcpu_chunkj clar+code=pcpu_chunkrcref">size, rcref="mm/percpu.c#L331" id="L17"3" class17"line" name="L413"> 413<17"li>171     mm/percpu.c#L331" id="L1714" class17"line" name="L414"> 414<17"li>1714  int size, snprfntfef="+sode=map" class"sa h_strref">pcpu_chunkpsa h_strref=,.da hof(sode=map" class"sa h_strref">pcpu_chunkpsa h_strref==r+c="comment">/steing">"%luK" href="r+code=pcpu_chunkPAGE_SIZEref">tail;
PAGE_SIZE hf=+f="+f="++10="mm/percpu.c#L331" id="L1715" class17"line" name="L415"> 415<17"li>171 clasmm/percpu.c#L331" id="L1716" class17"line" name="L416"> 416<17"li>1716  pcpu_chunk&iref=+"+code=pcpu_chunkp" i_buildaagt;=/inforef">pcpu_chunkp" i_buildaagt;=/infosize, reserved_tail;
PAGE_SIZE hf=r+code=pcpu_chunkNULLref">pcpu_chunkNULLref=="mm/percpu.c#L331" id="L1717" class17"line" name="L417"> 417<17"li>171           ref="+code=pcpu_chunkIS_ERRref">pcpu_chunkIS_ERRpcpu_chunk&iref==)mm/percpu.c#L331" id="L17"8" class17"line" name="L418"> 418<17"li>1718                    return code=tail" clasPTR_ERRref">pcpu_chunkPTR_ERRpcpu_chunk&iref=="mm/percpu.c#L331" id="L1719" class17"line" name="L419"> 419<17"li>171           recode=chunk" claBUG_ONref">tail;
BUG_ONpcpu_chunk&iref=ef="+code=map" classnr_groupsref">pcpu_chunknr_groupsref=r!= 1="mm/percpu.c#L331" id="L1720" class17"line" name="L420"> 420<17"li>172l  tail;
BUG_ONpcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[0].code=spin_unlocnr_unitsref">pcpu_chunknr_unitspcpu_chunknum_possible_" is 421<17"li>172 clasmm/percpu.c#L331" id="L1722" class17"line" name="L422"> 422<17"li>172           size, unit_pages hf=r"+code=pcpu_chunk&iref">pcpu_chunk&iref=ef="+code=map" classunit_size, unit_pcpu_chunkPAGE_SHIFTref="mm/percpu.c#L331" id="L1723" class17"line" name="L423"> 423<17"li>172     mm/percpu.c#L331" id="L1724" class17"line" name="L424"> 424<17"li>1724  int /* acquire pcun lign)
a length ofs c n'tmbe freed, round upsto pages 425<17"li>172           gocode=pcpu_chunkpages_size, pages_tail;
PFN_ALIGNsize, unit_pages hf=r*+code=pcpu_chunknum_possible_" isref">pcpu_chunknum_possible_" is 426<17"li>172                   size, pages hf=[0]=="mm/percpu.c#L439" id="L1727" class17"line" name="L427"> 427<17"li>172   size, pages hf=r"+code=chunk" claagt;=/bootmemref">pcpu_chunkagt;=/bootmem h="+sode=map" classpages_size, pages_ 428<17"li>172 clasmm/percpu.c#L331" id="L1729" class17"line" name="L429"> 429<17"li>1729  int /* acquire pcamory 430<17"li>173l  pcpu_chunkj cla+"+0"mm/percpu.c#L331" id="L17 1" class17"line" name="L431"> 431<17"li>1731          reref=+sode=map" classunitref">size, unitref=+"+0"+code=pcpu_chunkunitref">size, unitref=+el"++code=pcpu_chunknum_possible_" isref">pcpu_chunknum_possible_" issize, unitref=++=mm/percpu.c#L439" id="L17 2" class17"line" name="L432"> 432<17"li>173           pcpu_chunki cla+"+0"+code=pcpu_chunkiref">pcpu_chunki cla+el"++code=pcpu_chunkunit_pagesref">size, unit_pages hf="+code=pcpu_chunkiref">pcpu_chunki cla++=="mm/percpu.c#L331" id="L17 3" class17"line" name="L433"> 433<17"li>173                             unsign)
aint sode=chunk" clac iref">pcpu_chunk" iref=r"+code=chunk" claairef">pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[0].code=spin_unlocc i_mapref">pcpu_chunk" i_mapref=[code=chunk" claunitref">size, unitref=]"mm/percpu.c#L333" id="L17 4" class17"line" name="L434"> 434<17"li>173   if (pcpu_chunkptr 435<17"li>173 clasmm/percpu.c#L331" id="L17 6" class17"line" name="L436"> 436<17"li>173                   pcpu_chunkptrpcpu_chunkagt;=/fnef="+sode=map" classc iref">pcpu_chunk" iref=r+code=pcpu_chunkPAGE_SIZEref">tail;
PAGE_SIZE hf=r+code=pcpu_chunkPAGE_SIZEref">tail;
PAGE_SIZE hf=="mm/percpu.c#L439" id="L1737" class17"line" name="L437"> 437<17"li>173           return pcpu_chunkptr 438<17"li>1738                     pcpu_chunkpr_warningef="+s="comment">/steing">"PERCPU: fail)
ato amory 439<17"li>173           return -/steing">"ref=" i%i\n" href="r+code=pcpu_chunk"sa h_strref">pcpu_chunkpsa h_strref=r+code=pcpu_chunkc iref">pcpu_chunk" iref=="mm/percpu.c#L439" id="L1740" class17"line" name="L440"> 440<17"li>1740          return pcpu_chunkenomem 441<17"li>174    442<17"li>174           size, pages hf=[sode=map" classjref">pcpu_chunkj cla++]+"+code=pcpu_chunkvirt_to_"ageref">size, virt_to_"age h="+sode=map" classptrref">pcpu_chunkptr 443<17"li>174                     "mm/percpu.c#L418" id="L1744" class17"line" name="L43href="mm17"li>174 clasmm/percpu.c#L418" id="L1745" class17"line" name="L345"> 345<17"li>174           goc="comment">/* acquire pcamory 346<17"li>1746  pcpu_chunkvmref=.code=spin_unlocflagsref">size, flagssize, VM_ALLOC 347<17"li>174   pcpu_chunkvmref=.code=spin_unlocsize, sa h hf= "+code=chunk" clanum_possible_" isref">pcpu_chunknum_possible_" ispcpu_chunk&iref=ef="+code=map" classunit_size, unit_ 348<17"li>174   pcpu_chunkvm_area_register_earlypcpu_chunkvmref=r+code=pcpu_chunkPAGE_SIZEref">tail;
PAGE_SIZE hf=="mm/percpu.c#L439" id="L1749" class17"line" name="L349"> 349<17"li>174ref="mm/percpu.c#L400" id="L1750" class17"line" name="L350"> 350<17"li>175l  size, unitref=+"+0"+code=pcpu_chunkunitref">size, unitref=+el"++code=pcpu_chunknum_possible_" isref">pcpu_chunknum_possible_" issize, unitref=++=="mm/percpu.c#L333" id="L1751" class17"line" name="L351"> 351<17"li>175   size, unit_ ddrref=+"mm/percpu.c#L333" id="L1752" class17"line" name="L352"> 352<17"li>175           pcpu_chunkvmref=.code=spin_unloc ddrref">size,  ddrref=+++code=new_size" unitref">size, unitref=+*+code=pcpu_chunkairef">pcpu_chunk&iref=ef="+code=map" classunit_size, unit_ 353<17"li>175     mm/percpu.c#L331" id="L1754" class17"line" name="L354"> 354<17"li>175   if (pcpu_chunki cla+"+0"+code=pcpu_chunkiref">pcpu_chunki cla+el"++code=pcpu_chunkunit_pagesref">size, unit_pages hf="+code=pcpu_chunkiref">pcpu_chunki cla++=mm/percpu.c#L331" id="L1755" class17"line" name="L355"> 355<17"li>175           goto size, populsize, unit_ ddrref=++=+sode=map" classiref">pcpu_chunki cla+el"+el"++code=pcpu_chunkPAGE_SHIFTref">pcpu_chunkPAGE_SHIFTref==="mm/percpu.c#L439" id="L1756" class17"line" name="L356"> 356<17"li>175     mm/percpu.c#L439" id="L1757" class17"line" name="L357"> 357<17"li>175           return /* acquire pcptecamready popul 358<17"li>1758                    code=pcpu_chunkrcref">size, rcref=r"+code=pcpu_chunk__p" i_map_pagesref">size, __p" i_map_pagessize, unit_ ddrref=,+ef="+code=pcpu_chunk"agesref">size, pages hf=[sode=map" classunitref">size, unitref=+*+code=pcpu_chunkunit_pagesref">size, unit_pages hf=]rmm/percpu.c#L418" id="L1759" class17"line" name="L359"> 359<17"li>175           return -size, unit_pages hf=="mm/percpu.c#L439" id="L1760" class17"line" name="L360"> 360<17"li>1760          return size, rcref=rel"++0=mm/percpu.c#L331" id="L1761" class17"line" name="L361"> 361<17"li>176   size, panic/steing">"rail)
ato maps420" i  rea, err=%d\n" href="r+code=pcpu_chunkrcref">size, rcref=="mm/percpu.c#L439" id="L1762" class17"line" name="L362"> 362<17"li>176   inmm/percpu.c#L331" id="L1763" class17"line" name="L363"> 363<17"li>176                     c="comment">/* acquire p href="mm/percpu.c#L439" id="L1764" class17"line" name="L364"> 364<17"li>176 class="comment"> */lllllllllllllllll* FIXME: Archsawith virtual cach 365<17"li>1765  /* acquirelllllllllllllllll* cach 366<17"li>1766  /* acquirelllllllllllllllll* equivalquisto flush_cach<_vmapr= on th 367<17"li>176     c="comment">/* acquire llllllllllllllll* flush_cach<_vmapr= c n'tmbe usednas most supportingefref="mm/percpu.c#L439" id="L1768" class17"line" name="L368"> 368<17"li>176    * page re:llllllllllllllll* data: 369<17"li>176 class="comment"> * 0 on sucllllllllllllllll*a href="mm/percpu.c#L439" id="L1770" class17"line" name="L370"> 370<17"li>1770    mm/percpu.c#L439" id="L1771" class17"line" name="L371"> 371<17"li>177   /* acquire pccopycs  372<17"li>177           pcpu_chunkmemcpyef="+(voidc*)code=chunk" claunit_ ddrref">size, unit_ ddrref=,+code=pcpu_chunk__p39_" i_loadref">pcpu_chunk__439_" i_loadpcpu_chunk&iref=ef="+code=map" classs size, s  373<17"li>177             "mm/percpu.c#L418" id="L1774" class17"line" name="L374"> 374<17"li>177 clasmm/percpu.c#L418" id="L1775" class17"line" name="L375"> 375<17"li>177           goc="comment">/* acquire pcwe're ready, commita*a href="mm/percpu.c#L439" id="L1776" class17"line" name="L376"> 376<17"li>1776  pcpu_chunkpr/info/steing">"PERCPU: %dc%s pages/" i @%p s%zi r%zi d%zi\n" href="rmm/percpu.c#L418" id="L1777" class17"line" name="L377"> 377<17"li>177           return size, unit_pages hf=r+code=pcpu_chunk"sa h_strref">pcpu_chunkpsa h_strref=r+code=pcpu_chunkvmref">pcpu_chunkvmref=.code=spin_unloc ddrref">size,  ddrref=r+code=pcpu_chunkairef">pcpu_chunk&iref=ef="+code=map" classs size, s  378<17"li>1778                    code=pcpu_chunkairef">pcpu_chunk&iref=ef="+code=map" classreserved_size, reserved_pcpu_chunk&iref=ef="+code=map" classdyn_size, dyn_ 379<17"li>177ref="mm/percpu.c#L400" id="L1780" class17"line" name="L380"> 380<17"li>178l  size, rcref=r"+code=pcpu_chunkpc i_pcpu_chunkpc i_pcpu_chunk&iref=r+code=pcpu_chunkvmref">pcpu_chunkvmref=.code=spin_unloc ddrref">size,  ddrref=="mm/percpu.c#L439" id="L1781" class17"line" name="L381"> 381<17"li>178   size, out_free_ar cla"mm/percpu.c#L439" id="L1782" class17"line" name="L382"> 382<17"li>178   inmm/percpu.c#L331" id="L1783" class17"line" name="L383"> 383<17"li>178     code=new_alloc"enomemref">pcpu_chunkenomem 384<17"li>178   if (pcpu_chunkj cla+f="+=+0=mm/percpu.c#L331" id="L1785" class17"line" name="L385"> 385<17"li>178           goto pcpu_chunkrree/fnef="+sode=map" classpage_ ddressref">size, page_ ddressef="+sode=map" classpagesref">size, pages hf=[sode=map" classjref">pcpu_chunkj cla]=r+code=pcpu_chunkPAGE_SIZEref">tail;
PAGE_SIZE hf=="mm/percpu.c#L439" id="L1786" class17"line" name="L386"> 386<17"li>1786  size, rcref=r"+-code=pcpu_chunkENOMEMref">pcpu_chunkENOMEM 387<17"li>178     code=new_alloc"out_free_arref">size, out_free_ar cla:mm/percpu.c#L331" id="L1788" class17"line" name="L388"> 388<17"li>178   pcpu_chunkrree/bootmem h="+sode=map" class__paref">pcpu_chunk__paef="+sode=map" classpagesref">size, pages hf==r+code=pcpu_chunkpages_size, pages_ 389<17"li>178           recode=chunk" clap" i_free_agt;=/inforef">pcpu_chunkp" i_free_agt;=/infoef="+sode=map" classairef">pcpu_chunk&iref=="mm/percpu.c#L439" id="L1790" class17"line" name="L390"> 390<17"li>1790          rereturn code=tail" clasrcref">size, rcref="mm/percpu.c#L331" id="L1791" class17"line" name="L391"> 391<17"li>179 clas"mm/percpu.c#L418" id="L1792" class17"line" name="L392"> 392<17"li>179 clas#endif+c="comment">/* acquire pcBUILD_PAGE_FIRST_CHUNKa*a href="mm/percpu.c#L439" id="L1793" class17"line" name="L393"> 393<17"li>179     mm/percpu.c#L331" id="L1794" class17"line" name="L394"> 394<17"li>179 clas#ifndef+code=pcpu_chunkCONFIG_HAVE_SETUP_PER_CPU_AREAref">size, CONFIG_HAVE_SETUP_PER_CPU_AREA    mm/percpu.c#L331" id="L1795" class17"line" name="L395"> 395<17"li>1795  /* acquire p href="mm/percpu.c#L439" id="L1796" class17"line" name="L396"> 396<17"li>1796  /* acquirel* Generic SMPr420" i  rea  397<17"li>179     c="comment">/* acquire * href="mm/percpu.c#L439" id="L1798" class17"line" name="L398"> 398<17"li>179    * page re:* The embedding helper is usednbecause itsnbehavief="losely resembles href="mm/percpu.c#L439" id="L1799" class17"line" name="L399"> 399<17"li>179 class="comment"> * 0 on suc* th 399<1800">180lclass="comment"> * RETURNS:* importantnbecause many  rchsahave  ddressing restrich ofs and might href="mm/percpu.c#L439" id="L1801" class180line" name="L391"> 391<180li>180 class="comment"> * page re:* fail if th 392<180li>180 class="comment"> * be integ* ength ofa  As an  ddednbonus, innnon-NUMA cases, embedding is href="mm/percpu.c#L439" id="L1803" class180line" name="L393"> 393<180li>180 class="comment"> * the cur p generagty  sgood clea TLB-wise because 420" i  rea ccompiggy back href="mm/percpu.c#L439" id="L1804" class180line" name="L394"> 394<180li>180 class="comment"> */l* on th 395<180li>1805  /* acquirel* mappings on appliy 396<180li>1806  /* acquirel*a href="mm/percpu.c#L439" id="L1807" class180line" name="L397"> 397<180li>180     unsign)
along+code=pcpu_chunk__439_" i_offsetref">pcpu_chunk__439_" i_offset hf=[sode=map" classNR_CPUSref">pcpu_chunkNR_CPUSpcpu_chunk__read_mostlyref="mm/percpu.c#L331" id="L1808" class180line" name="L398"> 398<180li>1808    code=pcpu_chunkEXPORT_SYMBOLref">pcpu_chunkEXPORT_SYMBOL h="+sode=map" class__p39_" i_offsetref">pcpu_chunk__439_" i_offset hf=="mm/percpu.c#L439" id="L1809" class180line" name="L399"> 399<180li>180ref="mm/percpu.c#L400" id="L1810" class18"line" name="L410"> 410<18"li>181l  pcpu_chunk__init     sode=chunk" clap" i_dfl_fc_agt;=ref">pcpu_chunkp" i_dfl_fc_agt;= h="+unsign)
aint sode=chunk" clac iref">pcpu_chunk" iref=r+code=pcpu_chunksa h_"ref">size, sa h_"     sode=chunk" clasize, sa h hf=rmm/percpu.c#L418" id="L1811" class18"line" name="L411"> 411<18"li>181   size, sa h_"     sode=chunk" cla lignref">pcpu_chunk&lign hf==mm/percpu.c#L418" id="L1812" class18"line" name="L412"> 412<18"li>181     "mm/percpu.c#L333" id="L18"3" class18"line" name="L413"> 413<18"li>181             return code=tail" clas__agt;=/bootmem_no"anicref">size, __agt;=/bootmem_no"anic h="+sode=map" classsize, sa h hf=r sode=chunk" cla lignref">pcpu_chunk&lign hf=,+code=pcpu_chunk__paref">pcpu_chunk__paef="+sode=map" classMAX_DMA_ADDRESSref">pcpu_chunkMAX_DMA_ADDRESSref==="mm/percpu.c#L439" id="L1814" class18"line" name="L414"> 414<18"li>1814  in"mm/percpu.c#L418" id="L1815" class18"line" name="L415"> 415<18"li>181 clasmm/percpu.c#L331" id="L1816" class18"line" name="L416"> 416<18"li>1816  pcpu_chunk__init     sode=chunk" clap" i_dfl_fc_freeref">pcpu_chunkp" i_dfl_fc_freeef="+voidc*code=pcpu_chunkptrref">pcpu_chunkptrsize, sa h_"     sode=chunk" clasize, sa h hf==mm/percpu.c#L418" id="L1817" class18"line" name="L417"> 417<18"li>181     "mm/percpu.c#L333" id="L18"8" class18"line" name="L418"> 418<18"li>181   pcpu_chunkrree/bootmem h="+sode=map" class__paref">pcpu_chunk__paef="+sode=map" classptrref">pcpu_chunkptrsize, sa h hf=="mm/percpu.c#L439" id="L1819" class18"line" name="L419"> 419<18"li>181     "mm/percpu.c#L418" id="L1820" class18"line" name="L420"> 420<18"li>1820    mm/percpu.c#L439" id="L1821" class18"line" name="L421"> 421<18"li>182 clasvoidcsode=chunk" cla__initref">pcpu_chunk__init     sode=chunk" clapcpu_chunk 422<18"li>182     "mm/percpu.c#L333" id="L1823" class18"line" name="L423"> 423<18"li>182             unsign)
along+code=pcpu_chunkdeltaref">pcpu_chunkdeltaref="mm/percpu.c#L331" id="L1824" class18"line" name="L424"> 424<18"li>1824  int pcpu_chunk" iref="mm/percpu.c#L331" id="L1825" class18"line" name="L425"> 425<18"li>182           goint sode=chunk" clarcref">size, rcref="mm/percpu.c#L331" id="L1826" class18"line" name="L426"> 426<18"li>182     mm/percpu.c#L439" id="L1827" class18"line" name="L427"> 427<18"li>182   /* acquire p href="mm/percpu.c#L439" id="L1828" class18"line" name="L428"> 428<18"li>182    * page re:llllllll* Always reserve  rea ref=module 420" i vari 429<18"li>182 class="comment"> * 0 on sucllllllll* what th 430<18"li>183lclass="comment"> * RETURNS:llllllll*a href="mm/percpu.c#L439" id="L18 1" class18"line" name="L431"> 431<18"li>183   size, rcref=r"+code=pcpu_chunkpc i_embed_firat_ss="sref">pcpu_chunkpc i_embed_firat_ss="sef="+sode=map" classPERCPU_MODULE_RESERVEref">tail;
PERCPU_MODULE_RESERVE hf=rmm/percpu.c#L418" id="L18 2" class18"line" name="L432"> 432<18"li>183           tail;
PERCPU_DYNAMIC_RESERVEtail;
PAGE_SIZE hf=r+code=pcpu_chunkNULLref">pcpu_chunkNULLref=rmm/percpu.c#L418" id="L18 3" class18"line" name="L433"> 433<18"li>183                               goto pcpu_chunkp" i_dfl_fc_agt;= h="r+code=pcpu_chunkp" i_dfl_fc_freeref">pcpu_chunkp" i_dfl_fc_freeef="="mm/percpu.c#L439" id="L18 4" class18"line" name="L434"> 434<18"li>183   if (size, rcref=rel"++0=mm/percpu.c#L331" id="L1835" class18"line" name="L435"> 435<18"li>183           goto size, panic/steing">"Fail)
ato initi&lize 420" i  reas." href="="mm/percpu.c#L439" id="L18 6" class18"line" name="L436"> 436<18"li>183     mm/percpu.c#L439" id="L1837" class18"line" name="L437"> 437<18"li>183   pcpu_chunkdeltaref=r"+(unsign)
along)code=spin_unlocp" i_base_ ddrref">size, p" i_base_ ddrref=r-+(unsign)
along)code=spin_unloc__439_" i_s pcpu_chunk__439_" i_s  438<18"li>183   pcpu_chunkror_each_possible_" ief="+sode=map" classc iref">pcpu_chunk" iref==mm/percpu.c#L331" id="L1839" class18"line" name="L439"> 439<18"li>183           return -pcpu_chunk__439_" i_offset hf=[sode=map" classc iref">pcpu_chunk" iref=]+"+code=pcpu_chunkdeltaref">pcpu_chunkdeltaref=r++code=new_size" p" i_unit_offsetsref">size, p" i_unit_offsets hf=[sode=map" classc iref">pcpu_chunk" iref=]"mm/percpu.c#L331" id="L1840" class18"line" name="L440"> 440<18"li>1840    "mm/percpu.c#L418" id="L1841" class18"line" name="L441"> 441<18"li>184   /* acquire pcCONFIG_HAVE_SETUP_PER_CPU_AREAl*a href="mm/percpu.c#L439" id="L1842" class18"line" name="L442"> 442<18"li>184   inmm/percpu.c#L331" id="L1843" class18"line" name="L443"> 443<18"li>184     #else ++c="comment">/* acquire pcCONFIG_SMPr*a href="mm/percpu.c#L439" id="L1844" class18"line" name="L43href="mm18"li>184 clasmm/percpu.c#L418" id="L1845" class18"line" name="L345"> 345<18"li>1845  /* acquire p href="mm/percpu.c#L439" id="L1846" class18"line" name="L346"> 346<18"li>1846  /* acquirel* UPr420" i  rea  347<18"li>184     c="comment">/* acquire * href="mm/percpu.c#L439" id="L1848" class18"line" name="L348"> 348<18"li>184    * page re:* UPr lways uses km-basedr420" i  lengthor with idge ity mappinga href="mm/percpu.c#L439" id="L1849" class18"line" name="L349"> 349<18"li>184 class="comment"> * 0 on suc* S  350<18"li>185lclass="comment"> * RETURNS:* vari 351<18"li>185 class="comment"> * page re:*a href="mm/percpu.c#L439" id="L1852" class18"line" name="L352"> 352<18"li>185     voidcsode=chunk" cla__initref">pcpu_chunk__init     sode=chunk" clapcpu_chunk 353<18"li>185     "mm/percpu.c#L333" id="L1854" class18"line" name="L354"> 354<18"li>185   if (size, sa h_"     sode=chunk" claunit_size, unit_ 355<18"li>185           goto pcpu_chunkroundup_4ow_of_twoef="+sode=map" classmax_"ref">size, max_" h="+sode=map" classsize, sa h_"    r+code=pcpu_chunkPCPU_MIN_UNIT_SIZEref">tail;
PCPU_MIN_UNIT_SIZEref=rmm/percpu.c#L418" id="L1856" class18"line" name="L356"> 356<18"li>185                   tail;
PERCPU_DYNAMIC_RESERVE 357<18"li>185           repcpu_chunkp" i_agt;=/infopcpu_chunk&iref="mm/percpu.c#L331" id="L1858" class18"line" name="L358"> 358<18"li>1858            voidc*code=pcpu_chunkfcref">size, fcref="mm/percpu.c#L331" id="L1859" class18"line" name="L359"> 359<18"li>185ref="mm/percpu.c#L400" id="L1860" class18"line" name="L360"> 360<18"li>186l  pcpu_chunk&iref=+"+code=pcpu_chunkp" i_agt;=/agt;=/inforef">pcpu_chunkp" i_agt;=/agt;=/infoef="+1, 1="mm/percpu.c#L331" id="L1861" class18"line" name="L361"> 361<18"li>186   size, fcref=r"+code=pcpu_chunk__agt;=/bootmemref">pcpu_chunk__agt;=/bootmem h="+sode=map" classunit_size, unit_tail;
PAGE_SIZE hf=r+code=pcpu_chunk__paref">pcpu_chunk__paef="+sode=map" classMAX_DMA_ADDRESSref">pcpu_chunkMAX_DMA_ADDRESSref==="mm/percpu.c#L439" id="L1862" class18"line" name="L362"> 362<18"li>186           pcpu_chunk&iref=+|| +code=tail" clasfcref">size, fcref==mm/percpu.c#L418" id="L1863" class18"line" name="L363"> 363<18"li>186                     code=chunk" clapanicref">size, panic/steing">"Fail)
ato amory 364<18"li>186 clasmm/percpu.c#L418" id="L1865" class18"line" name="L365"> 365<18"li>186           gocode=pcpu_chunk&iref">pcpu_chunk&iref=ef="+code=map" classdyn_size, dyn_size, unit_ 366<18"li>1866  pcpu_chunk&iref=ef="+code=map" classunit_size, unit_size, unit_ 367<18"li>186   pcpu_chunk&iref=ef="+code=map" classthom_size, thom_size, unit_ 368<18"li>186   pcpu_chunk&iref=ef="+code=map" classtgt;=/size, tgt;=/size, unit_ 369<18"li>186           recode=chunk" claairef">pcpu_chunk&iref=ef="+code=map" classgroupsref">pcpu_chunkgroupsref=[0].code=spin_unlocnr_unitsref">pcpu_chunknr_units 370<18"li>187f">pcpu_chunk&iref=+"+code=pcpu_chunkp" i_agt;=/agtef="+code=map" classgroupsref">pcpu_chunkgroupsref=[0].code=spin_unlocc i_mapref">pcpu_chunk" i_mapref=[1]0" class18"line" name="L420">7href="mm/percpu88a3   #L331" id="L17 6" classcpu.c#L439" id="L1762" clase="L363"> 363<17"reercpu.c#L331" id="L17418ref=vmref=.code=spin_unlocs70" 8cpu.c#L439" id="L1867" class18>pcpu_chunk&iref=ef="+code=map" classunit_sin"comlef=8 pccpu.c#L7ef">pcpu_chunki 7_87ovirtual cachlref="mm/percpu.c#L439" t8>lllllllllllllllll* FIXME: Arci76"> 376<17"li>1776  pcpu_chunkvmi: %dc%s pages/" i @% sode=map"7 classunit_pagesref">siz8ine" name="L376"> 376<17"lSu.c#L43pu_rcpu.c#L333" id="L1854" class18"linss17"liname="L376"> 376<17"lSu.c#L unit_p87" class18"line" name="L346"1843" class18"line" name="L443"> 4" name="L388"> 378<17"li>1778       8     87     c="comment">/* acquire * Fpin_pu.c#de=pcpu_ nlocc" id="L1f=ef="+cd* UPr4tes hrary, unit_43" class18"line" name="L443"> 4u_chunk&ir8f=ef="+code=map" classres8rved_88or with idge ity mappinga hrefe="Lin"L1f=id="L1o tu.c#L43y name name="Lbe="+e slab"L18on=map"> 349<18"li>184 class="comment">ref="+sode8map" classrcref">size8 rcre880" i  rea  fun name"L18c/a>="L3fter slab"L18bf=eghame="u.c#deplaces#L4os> 393<180li>180 class="comment"> ef">pcpu_c8unk&iref=r+code=pcpu_chun8vmref88dressing restrich ofs and migh UPr4pro="cly, un="Le=" id="L1804" class180line" name="L3oc ddrref"8size,  ddrref=="mm/pe8cpu.c88 376<17"lSu.c#e=new_allo8"out_free_arref">size8 out_8ree_arADDRESSref">pcpu_chunkMAX_DMA_ADDRESSref==="mm/percpu.c#L439" id="L16<17"="mm/_la+enlocs706<17"="mm/_la+e1" class18"line" name="L351"> 351<1u.c#L331" 8d="L1783" class17"line" n8me="L884"> 394<170li>170   if (pcpu_ch8nkrre88fc_populpcpu_chunkgroupsref=[0]nlocc i_mcpu.c#L439" id="Lte="L_unloccf">pcpu_chunk&irte="L_unloccfcode=]asef="+void=mm/percpu.c#L41ref">pcpu_8hunkj cla]=r+code=pcpu_ch8nkPAG887"line" name="L376"> {assfree_bootmemref">pcpsref">pcpu_chunkgroupsref=[0]spin_unlocc i_mode=pcpu_chunkPAGE_SIZde=pcpu_c">pcpu_chunkgroupsref=[0]de=pcpu_c">pcptail;
PERCPU_MODULE_RESERVE hf=rmm/percpu.c# }sin"comlef=8 pccpu.c#L7ef""> 386<17"8i>1786  sizepcpu_chunkgroupsref=[0]nlocc i_mcpu.c#L439" id="L">pcpu_chunkgroupsrenlocc i_msin"comlef=8 pccpu.c#L7ef"" name="L38L388"> 388<17"li>178   pcpu_chunk_ass17"line" name="L345"> 345size, 8ages_8a h hf=="mm/peign)
along+code=pcp+code=pcpu_chunkiref"sin"comlef=8 pccpu.c#L7ef"=ef="+sode8chunk" clap" i_free_agt;=8infor890" class18"line" name="L370"> oef="+sode8map" classairef">pcpu_chu8k&ire89_chunkp" i_ag>, unitref=+*+code=pcpu_chunkairef">pcpu_chunk&ref">size, p">pcpu_chunkgroupsrenlocc i_mssthom_site="L_unloccf">pcpu_chunk&irte="L_unloccfcode=itref=+*+code=pcpu_chunkairef">pcpu_]9"> 349<17"li>174rf">size, unitref=++=mm/percpu.c#L439" id="L17 8e=tail" cl8srcref">size, rcref="8m/per89.c#L331" id="L17418reign)pu.c#L439" id="L>pcpu_chunkgroupsr0].codesin"comlef=8 pccpu.c#L7ef"==new_allo8L391"> 391<17"li>179 clas8mm/pe89ize" unitref">sizepcpu_chunk__init     sode=chunk" clapcpu_chunkvmref=.code=asssEARLY_SLOToc"fcref">sizesEARLY_SLOTo i_mcpclaPFN_ALIGNref">tailpcpu_chunkgroupsr0].code clasin"comlef=8 pccpu.c#L7ef"=.c#L331" 8L439" id="L1793" class17"8ine" 89a href="+ce, __p7ode=c8=pcss17"line"8name="L394"> 394<17"li>178 clas89tworef">pcpu_chunkrouLIGNref">tail 419<17"li>171        line> 419, sa h_"     sode=e=old" classvmref">pcpu_ne" name="L421"> 421<17"lilass17"line" name="L385"> 385<17"li>178           goto  376<17"lSu.c#p href="mm8percpu.c#L439" id="L1796"8class89u_chunkpsa h_strref=r+code=pcpu_chun>pcpu_chunkgroupsr0].code="L358"> 358<18"li>1858sode">tail;
PERCPU_DYNAMIsode">taize, sa h_"     sode=e=old" classvmref">pcpu7"li>178           goto  397<17"li8179  89ref="mm/percpu.c#L331" id="L1838" cl> 419<17"li>171           recode_SIZEref">tailpcpu_chunkgroupsr0].code7"li>178           goto pcpu_9 on suc* t9 345<7"li>178           goto pcpu_chu9have 90c#L439" id="L1770" class17"line" name="L370"> 370<17"li>1770    mm/pSIZEref">tailpcpu_chunkgroupsr0].codePU: fail)
ato amor>pcpu_chunkgroupsrenlocc i_m    recode=chunk" cl>pcpu_chunkgroupsr0].codePU: fail)
ato amoode=e=old" classvmref">pcpu7"li>178           goto  * page r9:* fail if thpcpu_chunkgroupsr0].code="L358"> 358<18"li>pcpu_chunkgroupsr0].codesin"comlef=8 pccpu.c#L7ef9be integ* 9ngth ofa  As an  ddednbon9s, in90ize" unitref">size 345<7"li>178           goto lllllll994"> 394<190li>180 class="comment"> 9/l* opercpu.c#L439" t8>lllllll997"> 394<190ercpu.c#L331" id="L1795"9class980line


T"mm/percpu.cLXR softwid="byame="rcpu.c#L4http://source="+ge.net/projects/lxr">LXR th ex t8ilxr@31"ux.nolass.
lxr.31"ux.no kindly hosn="Lbyarcpu.c#L4http://www.redpill-31"pro.no">Redpill L1"pro ASlass18provider of L1"uxank" ul" cl"u.c#o="caname="=pcpices#since 1995.