linux/mm/highmem.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * High memory handling common code and variables.
   4 *
   5 * (C) 1999 Andrea Arcangeli, SuSE GmbH, andrea@suse.de
   6 *          Gerhard Wichert, Siemens AG, Gerhard.Wichert@pdb.siemens.de
   7 *
   8 *
   9 * Redesigned the x86 32-bit VM architecture to deal with
  10 * 64-bit physical space. With current x86 CPUs this
  11 * means up to 64 Gigabytes physical RAM.
  12 *
  13 * Rewrote high memory support to move the page cache into
  14 * high memory. Implemented permanent (schedulable) kmaps
  15 * based on Linus' idea.
  16 *
  17 * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com>
  18 */
  19
  20#include <linux/mm.h>
  21#include <linux/export.h>
  22#include <linux/swap.h>
  23#include <linux/bio.h>
  24#include <linux/pagemap.h>
  25#include <linux/mempool.h>
  26#include <linux/blkdev.h>
  27#include <linux/init.h>
  28#include <linux/hash.h>
  29#include <linux/highmem.h>
  30#include <linux/kgdb.h>
  31#include <asm/tlbflush.h>
  32#include <linux/vmalloc.h>
  33
  34/*
  35 * Virtual_count is not a pure "count".
  36 *  0 means that it is not mapped, and has not been mapped
  37 *    since a TLB flush - it is usable.
  38 *  1 means that there are no users, but it has been mapped
  39 *    since the last TLB flush - so we can't use it.
  40 *  n means that there are (n-1) current users of it.
  41 */
  42#ifdef CONFIG_HIGHMEM
  43
  44/*
  45 * Architecture with aliasing data cache may define the following family of
  46 * helper functions in its asm/highmem.h to control cache color of virtual
  47 * addresses where physical memory pages are mapped by kmap.
  48 */
  49#ifndef get_pkmap_color
  50
  51/*
  52 * Determine color of virtual address where the page should be mapped.
  53 */
  54static inline unsigned int get_pkmap_color(struct page *page)
  55{
  56        return 0;
  57}
  58#define get_pkmap_color get_pkmap_color
  59
  60/*
  61 * Get next index for mapping inside PKMAP region for page with given color.
  62 */
  63static inline unsigned int get_next_pkmap_nr(unsigned int color)
  64{
  65        static unsigned int last_pkmap_nr;
  66
  67        last_pkmap_nr = (last_pkmap_nr + 1) & LAST_PKMAP_MASK;
  68        return last_pkmap_nr;
  69}
  70
  71/*
  72 * Determine if page index inside PKMAP region (pkmap_nr) of given color
  73 * has wrapped around PKMAP region end. When this happens an attempt to
  74 * flush all unused PKMAP slots is made.
  75 */
  76static inline int no_more_pkmaps(unsigned int pkmap_nr, unsigned int color)
  77{
  78        return pkmap_nr == 0;
  79}
  80
  81/*
  82 * Get the number of PKMAP entries of the given color. If no free slot is
  83 * found after checking that many entries, kmap will sleep waiting for
  84 * someone to call kunmap and free PKMAP slot.
  85 */
  86static inline int get_pkmap_entries_count(unsigned int color)
  87{
  88        return LAST_PKMAP;
  89}
  90
  91/*
  92 * Get head of a wait queue for PKMAP entries of the given color.
  93 * Wait queues for different mapping colors should be independent to avoid
  94 * unnecessary wakeups caused by freeing of slots of other colors.
  95 */
  96static inline wait_queue_head_t *get_pkmap_wait_queue_head(unsigned int color)
  97{
  98        static DECLARE_WAIT_QUEUE_HEAD(pkmap_map_wait);
  99
 100        return &pkmap_map_wait;
 101}
 102#endif
 103
 104atomic_long_t _totalhigh_pages __read_mostly;
 105EXPORT_SYMBOL(_totalhigh_pages);
 106
 107unsigned int __nr_free_highpages(void)
 108{
 109        struct zone *zone;
 110        unsigned int pages = 0;
 111
 112        for_each_populated_zone(zone) {
 113                if (is_highmem(zone))
 114                        pages += zone_page_state(zone, NR_FREE_PAGES);
 115        }
 116
 117        return pages;
 118}
 119
 120static int pkmap_count[LAST_PKMAP];
 121static  __cacheline_aligned_in_smp DEFINE_SPINLOCK(kmap_lock);
 122
 123pte_t *pkmap_page_table;
 124
 125/*
 126 * Most architectures have no use for kmap_high_get(), so let's abstract
 127 * the disabling of IRQ out of the locking in that case to save on a
 128 * potential useless overhead.
 129 */
 130#ifdef ARCH_NEEDS_KMAP_HIGH_GET
 131#define lock_kmap()             spin_lock_irq(&kmap_lock)
 132#define unlock_kmap()           spin_unlock_irq(&kmap_lock)
 133#define lock_kmap_any(flags)    spin_lock_irqsave(&kmap_lock, flags)
 134#define unlock_kmap_any(flags)  spin_unlock_irqrestore(&kmap_lock, flags)
 135#else
 136#define lock_kmap()             spin_lock(&kmap_lock)
 137#define unlock_kmap()           spin_unlock(&kmap_lock)
 138#define lock_kmap_any(flags)    \
 139                do { spin_lock(&kmap_lock); (void)(flags); } while (0)
 140#define unlock_kmap_any(flags)  \
 141                do { spin_unlock(&kmap_lock); (void)(flags); } while (0)
 142#endif
 143
 144struct page *__kmap_to_page(void *vaddr)
 145{
 146        unsigned long addr = (unsigned long)vaddr;
 147
 148        if (addr >= PKMAP_ADDR(0) && addr < PKMAP_ADDR(LAST_PKMAP)) {
 149                int i = PKMAP_NR(addr);
 150
 151                return pte_page(pkmap_page_table[i]);
 152        }
 153
 154        return virt_to_page(addr);
 155}
 156EXPORT_SYMBOL(__kmap_to_page);
 157
 158static void flush_all_zero_pkmaps(void)
 159{
 160        int i;
 161        int need_flush = 0;
 162
 163        flush_cache_kmaps();
 164
 165        for (i = 0; i < LAST_PKMAP; i++) {
 166                struct page *page;
 167
 168                /*
 169                 * zero means we don't have anything to do,
 170                 * >1 means that it is still in use. Only
 171                 * a count of 1 means that it is free but
 172                 * needs to be unmapped
 173                 */
 174                if (pkmap_count[i] != 1)
 175                        continue;
 176                pkmap_count[i] = 0;
 177
 178                /* sanity check */
 179                BUG_ON(pte_none(pkmap_page_table[i]));
 180
 181                /*
 182                 * Don't need an atomic fetch-and-clear op here;
 183                 * no-one has the page mapped, and cannot get at
 184                 * its virtual address (and hence PTE) without first
 185                 * getting the kmap_lock (which is held here).
 186                 * So no dangers, even with speculative execution.
 187                 */
 188                page = pte_page(pkmap_page_table[i]);
 189                pte_clear(&init_mm, PKMAP_ADDR(i), &pkmap_page_table[i]);
 190
 191                set_page_address(page, NULL);
 192                need_flush = 1;
 193        }
 194        if (need_flush)
 195                flush_tlb_kernel_range(PKMAP_ADDR(0), PKMAP_ADDR(LAST_PKMAP));
 196}
 197
 198void __kmap_flush_unused(void)
 199{
 200        lock_kmap();
 201        flush_all_zero_pkmaps();
 202        unlock_kmap();
 203}
 204
 205static inline unsigned long map_new_virtual(struct page *page)
 206{
 207        unsigned long vaddr;
 208        int count;
 209        unsigned int last_pkmap_nr;
 210        unsigned int color = get_pkmap_color(page);
 211
 212start:
 213        count = get_pkmap_entries_count(color);
 214        /* Find an empty entry */
 215        for (;;) {
 216                last_pkmap_nr = get_next_pkmap_nr(color);
 217                if (no_more_pkmaps(last_pkmap_nr, color)) {
 218                        flush_all_zero_pkmaps();
 219                        count = get_pkmap_entries_count(color);
 220                }
 221                if (!pkmap_count[last_pkmap_nr])
 222                        break;  /* Found a usable entry */
 223                if (--count)
 224                        continue;
 225
 226                /*
 227                 * Sleep for somebody else to unmap their entries
 228                 */
 229                {
 230                        DECLARE_WAITQUEUE(wait, current);
 231                        wait_queue_head_t *pkmap_map_wait =
 232                                get_pkmap_wait_queue_head(color);
 233
 234                        __set_current_state(TASK_UNINTERRUPTIBLE);
 235                        add_wait_queue(pkmap_map_wait, &wait);
 236                        unlock_kmap();
 237                        schedule();
 238                        remove_wait_queue(pkmap_map_wait, &wait);
 239                        lock_kmap();
 240
 241                        /* Somebody else might have mapped it while we slept */
 242                        if (page_address(page))
 243                                return (unsigned long)page_address(page);
 244
 245                        /* Re-start */
 246                        goto start;
 247                }
 248        }
 249        vaddr = PKMAP_ADDR(last_pkmap_nr);
 250        set_pte_at(&init_mm, vaddr,
 251                   &(pkmap_page_table[last_pkmap_nr]), mk_pte(page, kmap_prot));
 252
 253        pkmap_count[last_pkmap_nr] = 1;
 254        set_page_address(page, (void *)vaddr);
 255
 256        return vaddr;
 257}
 258
 259/**
 260 * kmap_high - map a highmem page into memory
 261 * @page: &struct page to map
 262 *
 263 * Returns the page's virtual memory address.
 264 *
 265 * We cannot call this from interrupts, as it may block.
 266 */
 267void *kmap_high(struct page *page)
 268{
 269        unsigned long vaddr;
 270
 271        /*
 272         * For highmem pages, we can't trust "virtual" until
 273         * after we have the lock.
 274         */
 275        lock_kmap();
 276        vaddr = (unsigned long)page_address(page);
 277        if (!vaddr)
 278                vaddr = map_new_virtual(page);
 279        pkmap_count[PKMAP_NR(vaddr)]++;
 280        BUG_ON(pkmap_count[PKMAP_NR(vaddr)] < 2);
 281        unlock_kmap();
 282        return (void *) vaddr;
 283}
 284EXPORT_SYMBOL(kmap_high);
 285
 286#ifdef ARCH_NEEDS_KMAP_HIGH_GET
 287/**
 288 * kmap_high_get - pin a highmem page into memory
 289 * @page: &struct page to pin
 290 *
 291 * Returns the page's current virtual memory address, or NULL if no mapping
 292 * exists.  If and only if a non null address is returned then a
 293 * matching call to kunmap_high() is necessary.
 294 *
 295 * This can be called from any context.
 296 */
 297void *kmap_high_get(struct page *page)
 298{
 299        unsigned long vaddr, flags;
 300
 301        lock_kmap_any(flags);
 302        vaddr = (unsigned long)page_address(page);
 303        if (vaddr) {
 304                BUG_ON(pkmap_count[PKMAP_NR(vaddr)] < 1);
 305                pkmap_count[PKMAP_NR(vaddr)]++;
 306        }
 307        unlock_kmap_any(flags);
 308        return (void *) vaddr;
 309}
 310#endif
 311
 312/**
 313 * kunmap_high - unmap a highmem page into memory
 314 * @page: &struct page to unmap
 315 *
 316 * If ARCH_NEEDS_KMAP_HIGH_GET is not defined then this may be called
 317 * only from user context.
 318 */
 319void kunmap_high(struct page *page)
 320{
 321        unsigned long vaddr;
 322        unsigned long nr;
 323        unsigned long flags;
 324        int need_wakeup;
 325        unsigned int color = get_pkmap_color(page);
 326        wait_queue_head_t *pkmap_map_wait;
 327
 328        lock_kmap_any(flags);
 329        vaddr = (unsigned long)page_address(page);
 330        BUG_ON(!vaddr);
 331        nr = PKMAP_NR(vaddr);
 332
 333        /*
 334         * A count must never go down to zero
 335         * without a TLB flush!
 336         */
 337        need_wakeup = 0;
 338        switch (--pkmap_count[nr]) {
 339        case 0:
 340                BUG();
 341        case 1:
 342                /*
 343                 * Avoid an unnecessary wake_up() function call.
 344                 * The common case is pkmap_count[] == 1, but
 345                 * no waiters.
 346                 * The tasks queued in the wait-queue are guarded
 347                 * by both the lock in the wait-queue-head and by
 348                 * the kmap_lock.  As the kmap_lock is held here,
 349                 * no need for the wait-queue-head's lock.  Simply
 350                 * test if the queue is empty.
 351                 */
 352                pkmap_map_wait = get_pkmap_wait_queue_head(color);
 353                need_wakeup = waitqueue_active(pkmap_map_wait);
 354        }
 355        unlock_kmap_any(flags);
 356
 357        /* do wake-up, if needed, race-free outside of the spin lock */
 358        if (need_wakeup)
 359                wake_up(pkmap_map_wait);
 360}
 361EXPORT_SYMBOL(kunmap_high);
 362
 363#ifdef CONFIG_TRANSPARENT_HUGEPAGE
 364void zero_user_segments(struct page *page, unsigned start1, unsigned end1,
 365                unsigned start2, unsigned end2)
 366{
 367        unsigned int i;
 368
 369        BUG_ON(end1 > page_size(page) || end2 > page_size(page));
 370
 371        if (start1 >= end1)
 372                start1 = end1 = 0;
 373        if (start2 >= end2)
 374                start2 = end2 = 0;
 375
 376        for (i = 0; i < compound_nr(page); i++) {
 377                void *kaddr = NULL;
 378
 379                if (start1 >= PAGE_SIZE) {
 380                        start1 -= PAGE_SIZE;
 381                        end1 -= PAGE_SIZE;
 382                } else {
 383                        unsigned this_end = min_t(unsigned, end1, PAGE_SIZE);
 384
 385                        if (end1 > start1) {
 386                                kaddr = kmap_atomic(page + i);
 387                                memset(kaddr + start1, 0, this_end - start1);
 388                        }
 389                        end1 -= this_end;
 390                        start1 = 0;
 391                }
 392
 393                if (start2 >= PAGE_SIZE) {
 394                        start2 -= PAGE_SIZE;
 395                        end2 -= PAGE_SIZE;
 396                } else {
 397                        unsigned this_end = min_t(unsigned, end2, PAGE_SIZE);
 398
 399                        if (end2 > start2) {
 400                                if (!kaddr)
 401                                        kaddr = kmap_atomic(page + i);
 402                                memset(kaddr + start2, 0, this_end - start2);
 403                        }
 404                        end2 -= this_end;
 405                        start2 = 0;
 406                }
 407
 408                if (kaddr) {
 409                        kunmap_atomic(kaddr);
 410                        flush_dcache_page(page + i);
 411                }
 412
 413                if (!end1 && !end2)
 414                        break;
 415        }
 416
 417        BUG_ON((start1 | start2 | end1 | end2) != 0);
 418}
 419EXPORT_SYMBOL(zero_user_segments);
 420#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
 421#endif /* CONFIG_HIGHMEM */
 422
 423#ifdef CONFIG_KMAP_LOCAL
 424
 425#include <asm/kmap_size.h>
 426
 427/*
 428 * With DEBUG_KMAP_LOCAL the stack depth is doubled and every second
 429 * slot is unused which acts as a guard page
 430 */
 431#ifdef CONFIG_DEBUG_KMAP_LOCAL
 432# define KM_INCR        2
 433#else
 434# define KM_INCR        1
 435#endif
 436
 437static inline int kmap_local_idx_push(void)
 438{
 439        WARN_ON_ONCE(in_hardirq() && !irqs_disabled());
 440        current->kmap_ctrl.idx += KM_INCR;
 441        BUG_ON(current->kmap_ctrl.idx >= KM_MAX_IDX);
 442        return current->kmap_ctrl.idx - 1;
 443}
 444
 445static inline int kmap_local_idx(void)
 446{
 447        return current->kmap_ctrl.idx - 1;
 448}
 449
 450static inline void kmap_local_idx_pop(void)
 451{
 452        current->kmap_ctrl.idx -= KM_INCR;
 453        BUG_ON(current->kmap_ctrl.idx < 0);
 454}
 455
 456#ifndef arch_kmap_local_post_map
 457# define arch_kmap_local_post_map(vaddr, pteval)        do { } while (0)
 458#endif
 459
 460#ifndef arch_kmap_local_pre_unmap
 461# define arch_kmap_local_pre_unmap(vaddr)               do { } while (0)
 462#endif
 463
 464#ifndef arch_kmap_local_post_unmap
 465# define arch_kmap_local_post_unmap(vaddr)              do { } while (0)
 466#endif
 467
 468#ifndef arch_kmap_local_map_idx
 469#define arch_kmap_local_map_idx(idx, pfn)       kmap_local_calc_idx(idx)
 470#endif
 471
 472#ifndef arch_kmap_local_unmap_idx
 473#define arch_kmap_local_unmap_idx(idx, vaddr)   kmap_local_calc_idx(idx)
 474#endif
 475
 476#ifndef arch_kmap_local_high_get
 477static inline void *arch_kmap_local_high_get(struct page *page)
 478{
 479        return NULL;
 480}
 481#endif
 482
 483#ifndef arch_kmap_local_set_pte
 484#define arch_kmap_local_set_pte(mm, vaddr, ptep, ptev)  \
 485        set_pte_at(mm, vaddr, ptep, ptev)
 486#endif
 487
 488/* Unmap a local mapping which was obtained by kmap_high_get() */
 489static inline bool kmap_high_unmap_local(unsigned long vaddr)
 490{
 491#ifdef ARCH_NEEDS_KMAP_HIGH_GET
 492        if (vaddr >= PKMAP_ADDR(0) && vaddr < PKMAP_ADDR(LAST_PKMAP)) {
 493                kunmap_high(pte_page(pkmap_page_table[PKMAP_NR(vaddr)]));
 494                return true;
 495        }
 496#endif
 497        return false;
 498}
 499
 500static inline int kmap_local_calc_idx(int idx)
 501{
 502        return idx + KM_MAX_IDX * smp_processor_id();
 503}
 504
 505static pte_t *__kmap_pte;
 506
 507static pte_t *kmap_get_pte(void)
 508{
 509        if (!__kmap_pte)
 510                __kmap_pte = virt_to_kpte(__fix_to_virt(FIX_KMAP_BEGIN));
 511        return __kmap_pte;
 512}
 513
 514void *__kmap_local_pfn_prot(unsigned long pfn, pgprot_t prot)
 515{
 516        pte_t pteval, *kmap_pte = kmap_get_pte();
 517        unsigned long vaddr;
 518        int idx;
 519
 520        /*
 521         * Disable migration so resulting virtual address is stable
 522         * across preemption.
 523         */
 524        migrate_disable();
 525        preempt_disable();
 526        idx = arch_kmap_local_map_idx(kmap_local_idx_push(), pfn);
 527        vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
 528        BUG_ON(!pte_none(*(kmap_pte - idx)));
 529        pteval = pfn_pte(pfn, prot);
 530        arch_kmap_local_set_pte(&init_mm, vaddr, kmap_pte - idx, pteval);
 531        arch_kmap_local_post_map(vaddr, pteval);
 532        current->kmap_ctrl.pteval[kmap_local_idx()] = pteval;
 533        preempt_enable();
 534
 535        return (void *)vaddr;
 536}
 537EXPORT_SYMBOL_GPL(__kmap_local_pfn_prot);
 538
 539void *__kmap_local_page_prot(struct page *page, pgprot_t prot)
 540{
 541        void *kmap;
 542
 543        /*
 544         * To broaden the usage of the actual kmap_local() machinery always map
 545         * pages when debugging is enabled and the architecture has no problems
 546         * with alias mappings.
 547         */
 548        if (!IS_ENABLED(CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP) && !PageHighMem(page))
 549                return page_address(page);
 550
 551        /* Try kmap_high_get() if architecture has it enabled */
 552        kmap = arch_kmap_local_high_get(page);
 553        if (kmap)
 554                return kmap;
 555
 556        return __kmap_local_pfn_prot(page_to_pfn(page), prot);
 557}
 558EXPORT_SYMBOL(__kmap_local_page_prot);
 559
 560void kunmap_local_indexed(void *vaddr)
 561{
 562        unsigned long addr = (unsigned long) vaddr & PAGE_MASK;
 563        pte_t *kmap_pte = kmap_get_pte();
 564        int idx;
 565
 566        if (addr < __fix_to_virt(FIX_KMAP_END) ||
 567            addr > __fix_to_virt(FIX_KMAP_BEGIN)) {
 568                if (IS_ENABLED(CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP)) {
 569                        /* This _should_ never happen! See above. */
 570                        WARN_ON_ONCE(1);
 571                        return;
 572                }
 573                /*
 574                 * Handle mappings which were obtained by kmap_high_get()
 575                 * first as the virtual address of such mappings is below
 576                 * PAGE_OFFSET. Warn for all other addresses which are in
 577                 * the user space part of the virtual address space.
 578                 */
 579                if (!kmap_high_unmap_local(addr))
 580                        WARN_ON_ONCE(addr < PAGE_OFFSET);
 581                return;
 582        }
 583
 584        preempt_disable();
 585        idx = arch_kmap_local_unmap_idx(kmap_local_idx(), addr);
 586        WARN_ON_ONCE(addr != __fix_to_virt(FIX_KMAP_BEGIN + idx));
 587
 588        arch_kmap_local_pre_unmap(addr);
 589        pte_clear(&init_mm, addr, kmap_pte - idx);
 590        arch_kmap_local_post_unmap(addr);
 591        current->kmap_ctrl.pteval[kmap_local_idx()] = __pte(0);
 592        kmap_local_idx_pop();
 593        preempt_enable();
 594        migrate_enable();
 595}
 596EXPORT_SYMBOL(kunmap_local_indexed);
 597
 598/*
 599 * Invoked before switch_to(). This is safe even when during or after
 600 * clearing the maps an interrupt which needs a kmap_local happens because
 601 * the task::kmap_ctrl.idx is not modified by the unmapping code so a
 602 * nested kmap_local will use the next unused index and restore the index
 603 * on unmap. The already cleared kmaps of the outgoing task are irrelevant
 604 * because the interrupt context does not know about them. The same applies
 605 * when scheduling back in for an interrupt which happens before the
 606 * restore is complete.
 607 */
 608void __kmap_local_sched_out(void)
 609{
 610        struct task_struct *tsk = current;
 611        pte_t *kmap_pte = kmap_get_pte();
 612        int i;
 613
 614        /* Clear kmaps */
 615        for (i = 0; i < tsk->kmap_ctrl.idx; i++) {
 616                pte_t pteval = tsk->kmap_ctrl.pteval[i];
 617                unsigned long addr;
 618                int idx;
 619
 620                /* With debug all even slots are unmapped and act as guard */
 621                if (IS_ENABLED(CONFIG_DEBUG_KMAP_LOCAL) && !(i & 0x01)) {
 622                        WARN_ON_ONCE(!pte_none(pteval));
 623                        continue;
 624                }
 625                if (WARN_ON_ONCE(pte_none(pteval)))
 626                        continue;
 627
 628                /*
 629                 * This is a horrible hack for XTENSA to calculate the
 630                 * coloured PTE index. Uses the PFN encoded into the pteval
 631                 * and the map index calculation because the actual mapped
 632                 * virtual address is not stored in task::kmap_ctrl.
 633                 * For any sane architecture this is optimized out.
 634                 */
 635                idx = arch_kmap_local_map_idx(i, pte_pfn(pteval));
 636
 637                addr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
 638                arch_kmap_local_pre_unmap(addr);
 639                pte_clear(&init_mm, addr, kmap_pte - idx);
 640                arch_kmap_local_post_unmap(addr);
 641        }
 642}
 643
 644void __kmap_local_sched_in(void)
 645{
 646        struct task_struct *tsk = current;
 647        pte_t *kmap_pte = kmap_get_pte();
 648        int i;
 649
 650        /* Restore kmaps */
 651        for (i = 0; i < tsk->kmap_ctrl.idx; i++) {
 652                pte_t pteval = tsk->kmap_ctrl.pteval[i];
 653                unsigned long addr;
 654                int idx;
 655
 656                /* With debug all even slots are unmapped and act as guard */
 657                if (IS_ENABLED(CONFIG_DEBUG_KMAP_LOCAL) && !(i & 0x01)) {
 658                        WARN_ON_ONCE(!pte_none(pteval));
 659                        continue;
 660                }
 661                if (WARN_ON_ONCE(pte_none(pteval)))
 662                        continue;
 663
 664                /* See comment in __kmap_local_sched_out() */
 665                idx = arch_kmap_local_map_idx(i, pte_pfn(pteval));
 666                addr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
 667                set_pte_at(&init_mm, addr, kmap_pte - idx, pteval);
 668                arch_kmap_local_post_map(addr, pteval);
 669        }
 670}
 671
 672void kmap_local_fork(struct task_struct *tsk)
 673{
 674        if (WARN_ON_ONCE(tsk->kmap_ctrl.idx))
 675                memset(&tsk->kmap_ctrl, 0, sizeof(tsk->kmap_ctrl));
 676}
 677
 678#endif
 679
 680#if defined(HASHED_PAGE_VIRTUAL)
 681
 682#define PA_HASH_ORDER   7
 683
 684/*
 685 * Describes one page->virtual association
 686 */
 687struct page_address_map {
 688        struct page *page;
 689        void *virtual;
 690        struct list_head list;
 691};
 692
 693static struct page_address_map page_address_maps[LAST_PKMAP];
 694
 695/*
 696 * Hash table bucket
 697 */
 698static struct page_address_slot {
 699        struct list_head lh;                    /* List of page_address_maps */
 700        spinlock_t lock;                        /* Protect this bucket's list */
 701} ____cacheline_aligned_in_smp page_address_htable[1<<PA_HASH_ORDER];
 702
 703static struct page_address_slot *page_slot(const struct page *page)
 704{
 705        return &page_address_htable[hash_ptr(page, PA_HASH_ORDER)];
 706}
 707
 708/**
 709 * page_address - get the mapped virtual address of a page
 710 * @page: &struct page to get the virtual address of
 711 *
 712 * Returns the page's virtual address.
 713 */
 714void *page_address(const struct page *page)
 715{
 716        unsigned long flags;
 717        void *ret;
 718        struct page_address_slot *pas;
 719
 720        if (!PageHighMem(page))
 721                return lowmem_page_address(page);
 722
 723        pas = page_slot(page);
 724        ret = NULL;
 725        spin_lock_irqsave(&pas->lock, flags);
 726        if (!list_empty(&pas->lh)) {
 727                struct page_address_map *pam;
 728
 729                list_for_each_entry(pam, &pas->lh, list) {
 730                        if (pam->page == page) {
 731                                ret = pam->virtual;
 732                                goto done;
 733                        }
 734                }
 735        }
 736done:
 737        spin_unlock_irqrestore(&pas->lock, flags);
 738        return ret;
 739}
 740EXPORT_SYMBOL(page_address);
 741
 742/**
 743 * set_page_address - set a page's virtual address
 744 * @page: &struct page to set
 745 * @virtual: virtual address to use
 746 */
 747void set_page_address(struct page *page, void *virtual)
 748{
 749        unsigned long flags;
 750        struct page_address_slot *pas;
 751        struct page_address_map *pam;
 752
 753        BUG_ON(!PageHighMem(page));
 754
 755        pas = page_slot(page);
 756        if (virtual) {          /* Add */
 757                pam = &page_address_maps[PKMAP_NR((unsigned long)virtual)];
 758                pam->page = page;
 759                pam->virtual = virtual;
 760
 761                spin_lock_irqsave(&pas->lock, flags);
 762                list_add_tail(&pam->list, &pas->lh);
 763                spin_unlock_irqrestore(&pas->lock, flags);
 764        } else {                /* Remove */
 765                spin_lock_irqsave(&pas->lock, flags);
 766                list_for_each_entry(pam, &pas->lh, list) {
 767                        if (pam->page == page) {
 768                                list_del(&pam->list);
 769                                spin_unlock_irqrestore(&pas->lock, flags);
 770                                goto done;
 771                        }
 772                }
 773                spin_unlock_irqrestore(&pas->lock, flags);
 774        }
 775done:
 776        return;
 777}
 778
 779void __init page_address_init(void)
 780{
 781        int i;
 782
 783        for (i = 0; i < ARRAY_SIZE(page_address_htable); i++) {
 784                INIT_LIST_HEAD(&page_address_htable[i].lh);
 785                spin_lock_init(&page_address_htable[i].lock);
 786        }
 787}
 788
 789#endif  /* defined(HASHED_PAGE_VIRTUAL) */
 790