linux/drivers/gpu/drm/ttm/ttm_page_alloc.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) Red Hat Inc.
   3
   4 * Permission is hereby granted, free of charge, to any person obtaining a
   5 * copy of this software and associated documentation files (the "Software"),
   6 * to deal in the Software without restriction, including without limitation
   7 * the rights to use, copy, modify, merge, publish, distribute, sub license,
   8 * and/or sell copies of the Software, and to permit persons to whom the
   9 * Software is furnished to do so, subject to the following conditions:
  10 *
  11 * The above copyright notice and this permission notice (including the
  12 * next paragraph) shall be included in all copies or substantial portions
  13 * of the Software.
  14 *
  15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
  18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  21 * DEALINGS IN THE SOFTWARE.
  22 *
  23 * Authors: Dave Airlie <airlied@redhat.com>
  24 *          Jerome Glisse <jglisse@redhat.com>
  25 *          Pauli Nieminen <suokkos@gmail.com>
  26 */
  27
  28/* simple list based uncached page pool
  29 * - Pool collects resently freed pages for reuse
  30 * - Use page->lru to keep a free list
  31 * - doesn't track currently in use pages
  32 */
  33
  34#define pr_fmt(fmt) "[TTM] " fmt
  35
  36#include <linux/list.h>
  37#include <linux/spinlock.h>
  38#include <linux/highmem.h>
  39#include <linux/mm_types.h>
  40#include <linux/module.h>
  41#include <linux/mm.h>
  42#include <linux/seq_file.h> /* for seq_printf */
  43#include <linux/slab.h>
  44#include <linux/dma-mapping.h>
  45
  46#include <linux/atomic.h>
  47
  48#include <drm/ttm/ttm_bo_driver.h>
  49#include <drm/ttm/ttm_page_alloc.h>
  50
  51#if IS_ENABLED(CONFIG_AGP)
  52#include <asm/agp.h>
  53#endif
  54#ifdef CONFIG_X86
  55#include <asm/set_memory.h>
  56#endif
  57
  58#define NUM_PAGES_TO_ALLOC              (PAGE_SIZE/sizeof(struct page *))
  59#define SMALL_ALLOCATION                16
  60#define FREE_ALL_PAGES                  (~0U)
  61/* times are in msecs */
  62#define PAGE_FREE_INTERVAL              1000
  63
  64/**
  65 * struct ttm_page_pool - Pool to reuse recently allocated uc/wc pages.
  66 *
  67 * @lock: Protects the shared pool from concurrnet access. Must be used with
  68 * irqsave/irqrestore variants because pool allocator maybe called from
  69 * delayed work.
  70 * @fill_lock: Prevent concurrent calls to fill.
  71 * @list: Pool of free uc/wc pages for fast reuse.
  72 * @gfp_flags: Flags to pass for alloc_page.
  73 * @npages: Number of pages in pool.
  74 */
  75struct ttm_page_pool {
  76        spinlock_t              lock;
  77        bool                    fill_lock;
  78        struct list_head        list;
  79        gfp_t                   gfp_flags;
  80        unsigned                npages;
  81        char                    *name;
  82        unsigned long           nfrees;
  83        unsigned long           nrefills;
  84};
  85
  86/**
  87 * Limits for the pool. They are handled without locks because only place where
  88 * they may change is in sysfs store. They won't have immediate effect anyway
  89 * so forcing serialization to access them is pointless.
  90 */
  91
  92struct ttm_pool_opts {
  93        unsigned        alloc_size;
  94        unsigned        max_size;
  95        unsigned        small;
  96};
  97
  98#define NUM_POOLS 4
  99
 100/**
 101 * struct ttm_pool_manager - Holds memory pools for fst allocation
 102 *
 103 * Manager is read only object for pool code so it doesn't need locking.
 104 *
 105 * @free_interval: minimum number of jiffies between freeing pages from pool.
 106 * @page_alloc_inited: reference counting for pool allocation.
 107 * @work: Work that is used to shrink the pool. Work is only run when there is
 108 * some pages to free.
 109 * @small_allocation: Limit in number of pages what is small allocation.
 110 *
 111 * @pools: All pool objects in use.
 112 **/
 113struct ttm_pool_manager {
 114        struct kobject          kobj;
 115        struct shrinker         mm_shrink;
 116        struct ttm_pool_opts    options;
 117
 118        union {
 119                struct ttm_page_pool    pools[NUM_POOLS];
 120                struct {
 121                        struct ttm_page_pool    wc_pool;
 122                        struct ttm_page_pool    uc_pool;
 123                        struct ttm_page_pool    wc_pool_dma32;
 124                        struct ttm_page_pool    uc_pool_dma32;
 125                } ;
 126        };
 127};
 128
 129static struct attribute ttm_page_pool_max = {
 130        .name = "pool_max_size",
 131        .mode = S_IRUGO | S_IWUSR
 132};
 133static struct attribute ttm_page_pool_small = {
 134        .name = "pool_small_allocation",
 135        .mode = S_IRUGO | S_IWUSR
 136};
 137static struct attribute ttm_page_pool_alloc_size = {
 138        .name = "pool_allocation_size",
 139        .mode = S_IRUGO | S_IWUSR
 140};
 141
 142static struct attribute *ttm_pool_attrs[] = {
 143        &ttm_page_pool_max,
 144        &ttm_page_pool_small,
 145        &ttm_page_pool_alloc_size,
 146        NULL
 147};
 148
 149static void ttm_pool_kobj_release(struct kobject *kobj)
 150{
 151        struct ttm_pool_manager *m =
 152                container_of(kobj, struct ttm_pool_manager, kobj);
 153        kfree(m);
 154}
 155
 156static ssize_t ttm_pool_store(struct kobject *kobj,
 157                struct attribute *attr, const char *buffer, size_t size)
 158{
 159        struct ttm_pool_manager *m =
 160                container_of(kobj, struct ttm_pool_manager, kobj);
 161        int chars;
 162        unsigned val;
 163        chars = sscanf(buffer, "%u", &val);
 164        if (chars == 0)
 165                return size;
 166
 167        /* Convert kb to number of pages */
 168        val = val / (PAGE_SIZE >> 10);
 169
 170        if (attr == &ttm_page_pool_max)
 171                m->options.max_size = val;
 172        else if (attr == &ttm_page_pool_small)
 173                m->options.small = val;
 174        else if (attr == &ttm_page_pool_alloc_size) {
 175                if (val > NUM_PAGES_TO_ALLOC*8) {
 176                        pr_err("Setting allocation size to %lu is not allowed. Recommended size is %lu\n",
 177                               NUM_PAGES_TO_ALLOC*(PAGE_SIZE >> 7),
 178                               NUM_PAGES_TO_ALLOC*(PAGE_SIZE >> 10));
 179                        return size;
 180                } else if (val > NUM_PAGES_TO_ALLOC) {
 181                        pr_warn("Setting allocation size to larger than %lu is not recommended\n",
 182                                NUM_PAGES_TO_ALLOC*(PAGE_SIZE >> 10));
 183                }
 184                m->options.alloc_size = val;
 185        }
 186
 187        return size;
 188}
 189
 190static ssize_t ttm_pool_show(struct kobject *kobj,
 191                struct attribute *attr, char *buffer)
 192{
 193        struct ttm_pool_manager *m =
 194                container_of(kobj, struct ttm_pool_manager, kobj);
 195        unsigned val = 0;
 196
 197        if (attr == &ttm_page_pool_max)
 198                val = m->options.max_size;
 199        else if (attr == &ttm_page_pool_small)
 200                val = m->options.small;
 201        else if (attr == &ttm_page_pool_alloc_size)
 202                val = m->options.alloc_size;
 203
 204        val = val * (PAGE_SIZE >> 10);
 205
 206        return snprintf(buffer, PAGE_SIZE, "%u\n", val);
 207}
 208
 209static const struct sysfs_ops ttm_pool_sysfs_ops = {
 210        .show = &ttm_pool_show,
 211        .store = &ttm_pool_store,
 212};
 213
 214static struct kobj_type ttm_pool_kobj_type = {
 215        .release = &ttm_pool_kobj_release,
 216        .sysfs_ops = &ttm_pool_sysfs_ops,
 217        .default_attrs = ttm_pool_attrs,
 218};
 219
 220static struct ttm_pool_manager *_manager;
 221
 222#ifndef CONFIG_X86
 223static int set_pages_array_wb(struct page **pages, int addrinarray)
 224{
 225#if IS_ENABLED(CONFIG_AGP)
 226        int i;
 227
 228        for (i = 0; i < addrinarray; i++)
 229                unmap_page_from_agp(pages[i]);
 230#endif
 231        return 0;
 232}
 233
 234static int set_pages_array_wc(struct page **pages, int addrinarray)
 235{
 236#if IS_ENABLED(CONFIG_AGP)
 237        int i;
 238
 239        for (i = 0; i < addrinarray; i++)
 240                map_page_into_agp(pages[i]);
 241#endif
 242        return 0;
 243}
 244
 245static int set_pages_array_uc(struct page **pages, int addrinarray)
 246{
 247#if IS_ENABLED(CONFIG_AGP)
 248        int i;
 249
 250        for (i = 0; i < addrinarray; i++)
 251                map_page_into_agp(pages[i]);
 252#endif
 253        return 0;
 254}
 255#endif
 256
 257/**
 258 * Select the right pool or requested caching state and ttm flags. */
 259static struct ttm_page_pool *ttm_get_pool(int flags,
 260                enum ttm_caching_state cstate)
 261{
 262        int pool_index;
 263
 264        if (cstate == tt_cached)
 265                return NULL;
 266
 267        if (cstate == tt_wc)
 268                pool_index = 0x0;
 269        else
 270                pool_index = 0x1;
 271
 272        if (flags & TTM_PAGE_FLAG_DMA32)
 273                pool_index |= 0x2;
 274
 275        return &_manager->pools[pool_index];
 276}
 277
 278/* set memory back to wb and free the pages. */
 279static void ttm_pages_put(struct page *pages[], unsigned npages)
 280{
 281        unsigned i;
 282        if (set_pages_array_wb(pages, npages))
 283                pr_err("Failed to set %d pages to wb!\n", npages);
 284        for (i = 0; i < npages; ++i)
 285                __free_page(pages[i]);
 286}
 287
 288static void ttm_pool_update_free_locked(struct ttm_page_pool *pool,
 289                unsigned freed_pages)
 290{
 291        pool->npages -= freed_pages;
 292        pool->nfrees += freed_pages;
 293}
 294
 295/**
 296 * Free pages from pool.
 297 *
 298 * To prevent hogging the ttm_swap process we only free NUM_PAGES_TO_ALLOC
 299 * number of pages in one go.
 300 *
 301 * @pool: to free the pages from
 302 * @free_all: If set to true will free all pages in pool
 303 * @use_static: Safe to use static buffer
 304 **/
 305static int ttm_page_pool_free(struct ttm_page_pool *pool, unsigned nr_free,
 306                              bool use_static)
 307{
 308        static struct page *static_buf[NUM_PAGES_TO_ALLOC];
 309        unsigned long irq_flags;
 310        struct page *p;
 311        struct page **pages_to_free;
 312        unsigned freed_pages = 0,
 313                 npages_to_free = nr_free;
 314
 315        if (NUM_PAGES_TO_ALLOC < nr_free)
 316                npages_to_free = NUM_PAGES_TO_ALLOC;
 317
 318        if (use_static)
 319                pages_to_free = static_buf;
 320        else
 321                pages_to_free = kmalloc(npages_to_free * sizeof(struct page *),
 322                                        GFP_KERNEL);
 323        if (!pages_to_free) {
 324                pr_err("Failed to allocate memory for pool free operation\n");
 325                return 0;
 326        }
 327
 328restart:
 329        spin_lock_irqsave(&pool->lock, irq_flags);
 330
 331        list_for_each_entry_reverse(p, &pool->list, lru) {
 332                if (freed_pages >= npages_to_free)
 333                        break;
 334
 335                pages_to_free[freed_pages++] = p;
 336                /* We can only remove NUM_PAGES_TO_ALLOC at a time. */
 337                if (freed_pages >= NUM_PAGES_TO_ALLOC) {
 338                        /* remove range of pages from the pool */
 339                        __list_del(p->lru.prev, &pool->list);
 340
 341                        ttm_pool_update_free_locked(pool, freed_pages);
 342                        /**
 343                         * Because changing page caching is costly
 344                         * we unlock the pool to prevent stalling.
 345                         */
 346                        spin_unlock_irqrestore(&pool->lock, irq_flags);
 347
 348                        ttm_pages_put(pages_to_free, freed_pages);
 349                        if (likely(nr_free != FREE_ALL_PAGES))
 350                                nr_free -= freed_pages;
 351
 352                        if (NUM_PAGES_TO_ALLOC >= nr_free)
 353                                npages_to_free = nr_free;
 354                        else
 355                                npages_to_free = NUM_PAGES_TO_ALLOC;
 356
 357                        freed_pages = 0;
 358
 359                        /* free all so restart the processing */
 360                        if (nr_free)
 361                                goto restart;
 362
 363                        /* Not allowed to fall through or break because
 364                         * following context is inside spinlock while we are
 365                         * outside here.
 366                         */
 367                        goto out;
 368
 369                }
 370        }
 371
 372        /* remove range of pages from the pool */
 373        if (freed_pages) {
 374                __list_del(&p->lru, &pool->list);
 375
 376                ttm_pool_update_free_locked(pool, freed_pages);
 377                nr_free -= freed_pages;
 378        }
 379
 380        spin_unlock_irqrestore(&pool->lock, irq_flags);
 381
 382        if (freed_pages)
 383                ttm_pages_put(pages_to_free, freed_pages);
 384out:
 385        if (pages_to_free != static_buf)
 386                kfree(pages_to_free);
 387        return nr_free;
 388}
 389
 390/**
 391 * Callback for mm to request pool to reduce number of page held.
 392 *
 393 * XXX: (dchinner) Deadlock warning!
 394 *
 395 * This code is crying out for a shrinker per pool....
 396 */
 397static unsigned long
 398ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
 399{
 400        static DEFINE_MUTEX(lock);
 401        static unsigned start_pool;
 402        unsigned i;
 403        unsigned pool_offset;
 404        struct ttm_page_pool *pool;
 405        int shrink_pages = sc->nr_to_scan;
 406        unsigned long freed = 0;
 407
 408        if (!mutex_trylock(&lock))
 409                return SHRINK_STOP;
 410        pool_offset = ++start_pool % NUM_POOLS;
 411        /* select start pool in round robin fashion */
 412        for (i = 0; i < NUM_POOLS; ++i) {
 413                unsigned nr_free = shrink_pages;
 414                if (shrink_pages == 0)
 415                        break;
 416                pool = &_manager->pools[(i + pool_offset)%NUM_POOLS];
 417                /* OK to use static buffer since global mutex is held. */
 418                shrink_pages = ttm_page_pool_free(pool, nr_free, true);
 419                freed += nr_free - shrink_pages;
 420        }
 421        mutex_unlock(&lock);
 422        return freed;
 423}
 424
 425
 426static unsigned long
 427ttm_pool_shrink_count(struct shrinker *shrink, struct shrink_control *sc)
 428{
 429        unsigned i;
 430        unsigned long count = 0;
 431
 432        for (i = 0; i < NUM_POOLS; ++i)
 433                count += _manager->pools[i].npages;
 434
 435        return count;
 436}
 437
 438static void ttm_pool_mm_shrink_init(struct ttm_pool_manager *manager)
 439{
 440        manager->mm_shrink.count_objects = ttm_pool_shrink_count;
 441        manager->mm_shrink.scan_objects = ttm_pool_shrink_scan;
 442        manager->mm_shrink.seeks = 1;
 443        register_shrinker(&manager->mm_shrink);
 444}
 445
 446static void ttm_pool_mm_shrink_fini(struct ttm_pool_manager *manager)
 447{
 448        unregister_shrinker(&manager->mm_shrink);
 449}
 450
 451static int ttm_set_pages_caching(struct page **pages,
 452                enum ttm_caching_state cstate, unsigned cpages)
 453{
 454        int r = 0;
 455        /* Set page caching */
 456        switch (cstate) {
 457        case tt_uncached:
 458                r = set_pages_array_uc(pages, cpages);
 459                if (r)
 460                        pr_err("Failed to set %d pages to uc!\n", cpages);
 461                break;
 462        case tt_wc:
 463                r = set_pages_array_wc(pages, cpages);
 464                if (r)
 465                        pr_err("Failed to set %d pages to wc!\n", cpages);
 466                break;
 467        default:
 468                break;
 469        }
 470        return r;
 471}
 472
 473/**
 474 * Free pages the pages that failed to change the caching state. If there is
 475 * any pages that have changed their caching state already put them to the
 476 * pool.
 477 */
 478static void ttm_handle_caching_state_failure(struct list_head *pages,
 479                int ttm_flags, enum ttm_caching_state cstate,
 480                struct page **failed_pages, unsigned cpages)
 481{
 482        unsigned i;
 483        /* Failed pages have to be freed */
 484        for (i = 0; i < cpages; ++i) {
 485                list_del(&failed_pages[i]->lru);
 486                __free_page(failed_pages[i]);
 487        }
 488}
 489
 490/**
 491 * Allocate new pages with correct caching.
 492 *
 493 * This function is reentrant if caller updates count depending on number of
 494 * pages returned in pages array.
 495 */
 496static int ttm_alloc_new_pages(struct list_head *pages, gfp_t gfp_flags,
 497                int ttm_flags, enum ttm_caching_state cstate, unsigned count)
 498{
 499        struct page **caching_array;
 500        struct page *p;
 501        int r = 0;
 502        unsigned i, cpages;
 503        unsigned max_cpages = min(count,
 504                        (unsigned)(PAGE_SIZE/sizeof(struct page *)));
 505
 506        /* allocate array for page caching change */
 507        caching_array = kmalloc(max_cpages*sizeof(struct page *), GFP_KERNEL);
 508
 509        if (!caching_array) {
 510                pr_err("Unable to allocate table for new pages\n");
 511                return -ENOMEM;
 512        }
 513
 514        for (i = 0, cpages = 0; i < count; ++i) {
 515                p = alloc_page(gfp_flags);
 516
 517                if (!p) {
 518                        pr_err("Unable to get page %u\n", i);
 519
 520                        /* store already allocated pages in the pool after
 521                         * setting the caching state */
 522                        if (cpages) {
 523                                r = ttm_set_pages_caching(caching_array,
 524                                                          cstate, cpages);
 525                                if (r)
 526                                        ttm_handle_caching_state_failure(pages,
 527                                                ttm_flags, cstate,
 528                                                caching_array, cpages);
 529                        }
 530                        r = -ENOMEM;
 531                        goto out;
 532                }
 533
 534#ifdef CONFIG_HIGHMEM
 535                /* gfp flags of highmem page should never be dma32 so we
 536                 * we should be fine in such case
 537                 */
 538                if (!PageHighMem(p))
 539#endif
 540                {
 541                        caching_array[cpages++] = p;
 542                        if (cpages == max_cpages) {
 543
 544                                r = ttm_set_pages_caching(caching_array,
 545                                                cstate, cpages);
 546                                if (r) {
 547                                        ttm_handle_caching_state_failure(pages,
 548                                                ttm_flags, cstate,
 549                                                caching_array, cpages);
 550                                        goto out;
 551                                }
 552                                cpages = 0;
 553                        }
 554                }
 555
 556                list_add(&p->lru, pages);
 557        }
 558
 559        if (cpages) {
 560                r = ttm_set_pages_caching(caching_array, cstate, cpages);
 561                if (r)
 562                        ttm_handle_caching_state_failure(pages,
 563                                        ttm_flags, cstate,
 564                                        caching_array, cpages);
 565        }
 566out:
 567        kfree(caching_array);
 568
 569        return r;
 570}
 571
 572/**
 573 * Fill the given pool if there aren't enough pages and the requested number of
 574 * pages is small.
 575 */
 576static void ttm_page_pool_fill_locked(struct ttm_page_pool *pool,
 577                int ttm_flags, enum ttm_caching_state cstate, unsigned count,
 578                unsigned long *irq_flags)
 579{
 580        struct page *p;
 581        int r;
 582        unsigned cpages = 0;
 583        /**
 584         * Only allow one pool fill operation at a time.
 585         * If pool doesn't have enough pages for the allocation new pages are
 586         * allocated from outside of pool.
 587         */
 588        if (pool->fill_lock)
 589                return;
 590
 591        pool->fill_lock = true;
 592
 593        /* If allocation request is small and there are not enough
 594         * pages in a pool we fill the pool up first. */
 595        if (count < _manager->options.small
 596                && count > pool->npages) {
 597                struct list_head new_pages;
 598                unsigned alloc_size = _manager->options.alloc_size;
 599
 600                /**
 601                 * Can't change page caching if in irqsave context. We have to
 602                 * drop the pool->lock.
 603                 */
 604                spin_unlock_irqrestore(&pool->lock, *irq_flags);
 605
 606                INIT_LIST_HEAD(&new_pages);
 607                r = ttm_alloc_new_pages(&new_pages, pool->gfp_flags, ttm_flags,
 608                                cstate, alloc_size);
 609                spin_lock_irqsave(&pool->lock, *irq_flags);
 610
 611                if (!r) {
 612                        list_splice(&new_pages, &pool->list);
 613                        ++pool->nrefills;
 614                        pool->npages += alloc_size;
 615                } else {
 616                        pr_err("Failed to fill pool (%p)\n", pool);
 617                        /* If we have any pages left put them to the pool. */
 618                        list_for_each_entry(p, &new_pages, lru) {
 619                                ++cpages;
 620                        }
 621                        list_splice(&new_pages, &pool->list);
 622                        pool->npages += cpages;
 623                }
 624
 625        }
 626        pool->fill_lock = false;
 627}
 628
 629/**
 630 * Cut 'count' number of pages from the pool and put them on the return list.
 631 *
 632 * @return count of pages still required to fulfill the request.
 633 */
 634static unsigned ttm_page_pool_get_pages(struct ttm_page_pool *pool,
 635                                        struct list_head *pages,
 636                                        int ttm_flags,
 637                                        enum ttm_caching_state cstate,
 638                                        unsigned count)
 639{
 640        unsigned long irq_flags;
 641        struct list_head *p;
 642        unsigned i;
 643
 644        spin_lock_irqsave(&pool->lock, irq_flags);
 645        ttm_page_pool_fill_locked(pool, ttm_flags, cstate, count, &irq_flags);
 646
 647        if (count >= pool->npages) {
 648                /* take all pages from the pool */
 649                list_splice_init(&pool->list, pages);
 650                count -= pool->npages;
 651                pool->npages = 0;
 652                goto out;
 653        }
 654        /* find the last pages to include for requested number of pages. Split
 655         * pool to begin and halve it to reduce search space. */
 656        if (count <= pool->npages/2) {
 657                i = 0;
 658                list_for_each(p, &pool->list) {
 659                        if (++i == count)
 660                                break;
 661                }
 662        } else {
 663                i = pool->npages + 1;
 664                list_for_each_prev(p, &pool->list) {
 665                        if (--i == count)
 666                                break;
 667                }
 668        }
 669        /* Cut 'count' number of pages from the pool */
 670        list_cut_position(pages, &pool->list, p);
 671        pool->npages -= count;
 672        count = 0;
 673out:
 674        spin_unlock_irqrestore(&pool->lock, irq_flags);
 675        return count;
 676}
 677
 678/* Put all pages in pages list to correct pool to wait for reuse */
 679static void ttm_put_pages(struct page **pages, unsigned npages, int flags,
 680                          enum ttm_caching_state cstate)
 681{
 682        unsigned long irq_flags;
 683        struct ttm_page_pool *pool = ttm_get_pool(flags, cstate);
 684        unsigned i;
 685
 686        if (pool == NULL) {
 687                /* No pool for this memory type so free the pages */
 688                for (i = 0; i < npages; i++) {
 689                        if (pages[i]) {
 690                                if (page_count(pages[i]) != 1)
 691                                        pr_err("Erroneous page count. Leaking pages.\n");
 692                                __free_page(pages[i]);
 693                                pages[i] = NULL;
 694                        }
 695                }
 696                return;
 697        }
 698
 699        spin_lock_irqsave(&pool->lock, irq_flags);
 700        for (i = 0; i < npages; i++) {
 701                if (pages[i]) {
 702                        if (page_count(pages[i]) != 1)
 703                                pr_err("Erroneous page count. Leaking pages.\n");
 704                        list_add_tail(&pages[i]->lru, &pool->list);
 705                        pages[i] = NULL;
 706                        pool->npages++;
 707                }
 708        }
 709        /* Check that we don't go over the pool limit */
 710        npages = 0;
 711        if (pool->npages > _manager->options.max_size) {
 712                npages = pool->npages - _manager->options.max_size;
 713                /* free at least NUM_PAGES_TO_ALLOC number of pages
 714                 * to reduce calls to set_memory_wb */
 715                if (npages < NUM_PAGES_TO_ALLOC)
 716                        npages = NUM_PAGES_TO_ALLOC;
 717        }
 718        spin_unlock_irqrestore(&pool->lock, irq_flags);
 719        if (npages)
 720                ttm_page_pool_free(pool, npages, false);
 721}
 722
 723/*
 724 * On success pages list will hold count number of correctly
 725 * cached pages.
 726 */
 727static int ttm_get_pages(struct page **pages, unsigned npages, int flags,
 728                         enum ttm_caching_state cstate)
 729{
 730        struct ttm_page_pool *pool = ttm_get_pool(flags, cstate);
 731        struct list_head plist;
 732        struct page *p = NULL;
 733        gfp_t gfp_flags = GFP_USER;
 734        unsigned count;
 735        int r;
 736
 737        /* set zero flag for page allocation if required */
 738        if (flags & TTM_PAGE_FLAG_ZERO_ALLOC)
 739                gfp_flags |= __GFP_ZERO;
 740
 741        /* No pool for cached pages */
 742        if (pool == NULL) {
 743                if (flags & TTM_PAGE_FLAG_DMA32)
 744                        gfp_flags |= GFP_DMA32;
 745                else
 746                        gfp_flags |= GFP_HIGHUSER;
 747
 748                for (r = 0; r < npages; ++r) {
 749                        p = alloc_page(gfp_flags);
 750                        if (!p) {
 751
 752                                pr_err("Unable to allocate page\n");
 753                                return -ENOMEM;
 754                        }
 755
 756                        pages[r] = p;
 757                }
 758                return 0;
 759        }
 760
 761        /* combine zero flag to pool flags */
 762        gfp_flags |= pool->gfp_flags;
 763
 764        /* First we take pages from the pool */
 765        INIT_LIST_HEAD(&plist);
 766        npages = ttm_page_pool_get_pages(pool, &plist, flags, cstate, npages);
 767        count = 0;
 768        list_for_each_entry(p, &plist, lru) {
 769                pages[count++] = p;
 770        }
 771
 772        /* clear the pages coming from the pool if requested */
 773        if (flags & TTM_PAGE_FLAG_ZERO_ALLOC) {
 774                list_for_each_entry(p, &plist, lru) {
 775                        if (PageHighMem(p))
 776                                clear_highpage(p);
 777                        else
 778                                clear_page(page_address(p));
 779                }
 780        }
 781
 782        /* If pool didn't have enough pages allocate new one. */
 783        if (npages > 0) {
 784                /* ttm_alloc_new_pages doesn't reference pool so we can run
 785                 * multiple requests in parallel.
 786                 **/
 787                INIT_LIST_HEAD(&plist);
 788                r = ttm_alloc_new_pages(&plist, gfp_flags, flags, cstate, npages);
 789                list_for_each_entry(p, &plist, lru) {
 790                        pages[count++] = p;
 791                }
 792                if (r) {
 793                        /* If there is any pages in the list put them back to
 794                         * the pool. */
 795                        pr_err("Failed to allocate extra pages for large request\n");
 796                        ttm_put_pages(pages, count, flags, cstate);
 797                        return r;
 798                }
 799        }
 800
 801        return 0;
 802}
 803
 804static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
 805                char *name)
 806{
 807        spin_lock_init(&pool->lock);
 808        pool->fill_lock = false;
 809        INIT_LIST_HEAD(&pool->list);
 810        pool->npages = pool->nfrees = 0;
 811        pool->gfp_flags = flags;
 812        pool->name = name;
 813}
 814
 815int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
 816{
 817        int ret;
 818
 819        WARN_ON(_manager);
 820
 821        pr_info("Initializing pool allocator\n");
 822
 823        _manager = kzalloc(sizeof(*_manager), GFP_KERNEL);
 824
 825        ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc");
 826
 827        ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc");
 828
 829        ttm_page_pool_init_locked(&_manager->wc_pool_dma32,
 830                                  GFP_USER | GFP_DMA32, "wc dma");
 831
 832        ttm_page_pool_init_locked(&_manager->uc_pool_dma32,
 833                                  GFP_USER | GFP_DMA32, "uc dma");
 834
 835        _manager->options.max_size = max_pages;
 836        _manager->options.small = SMALL_ALLOCATION;
 837        _manager->options.alloc_size = NUM_PAGES_TO_ALLOC;
 838
 839        ret = kobject_init_and_add(&_manager->kobj, &ttm_pool_kobj_type,
 840                                   &glob->kobj, "pool");
 841        if (unlikely(ret != 0)) {
 842                kobject_put(&_manager->kobj);
 843                _manager = NULL;
 844                return ret;
 845        }
 846
 847        ttm_pool_mm_shrink_init(_manager);
 848
 849        return 0;
 850}
 851
 852void ttm_page_alloc_fini(void)
 853{
 854        int i;
 855
 856        pr_info("Finalizing pool allocator\n");
 857        ttm_pool_mm_shrink_fini(_manager);
 858
 859        /* OK to use static buffer since global mutex is no longer used. */
 860        for (i = 0; i < NUM_POOLS; ++i)
 861                ttm_page_pool_free(&_manager->pools[i], FREE_ALL_PAGES, true);
 862
 863        kobject_put(&_manager->kobj);
 864        _manager = NULL;
 865}
 866
 867int ttm_pool_populate(struct ttm_tt *ttm)
 868{
 869        struct ttm_mem_global *mem_glob = ttm->glob->mem_glob;
 870        unsigned i;
 871        int ret;
 872
 873        if (ttm->state != tt_unpopulated)
 874                return 0;
 875
 876        for (i = 0; i < ttm->num_pages; ++i) {
 877                ret = ttm_get_pages(&ttm->pages[i], 1,
 878                                    ttm->page_flags,
 879                                    ttm->caching_state);
 880                if (ret != 0) {
 881                        ttm_pool_unpopulate(ttm);
 882                        return -ENOMEM;
 883                }
 884
 885                ret = ttm_mem_global_alloc_page(mem_glob, ttm->pages[i],
 886                                                false, false);
 887                if (unlikely(ret != 0)) {
 888                        ttm_pool_unpopulate(ttm);
 889                        return -ENOMEM;
 890                }
 891        }
 892
 893        if (unlikely(ttm->page_flags & TTM_PAGE_FLAG_SWAPPED)) {
 894                ret = ttm_tt_swapin(ttm);
 895                if (unlikely(ret != 0)) {
 896                        ttm_pool_unpopulate(ttm);
 897                        return ret;
 898                }
 899        }
 900
 901        ttm->state = tt_unbound;
 902        return 0;
 903}
 904EXPORT_SYMBOL(ttm_pool_populate);
 905
 906void ttm_pool_unpopulate(struct ttm_tt *ttm)
 907{
 908        unsigned i;
 909
 910        for (i = 0; i < ttm->num_pages; ++i) {
 911                if (ttm->pages[i]) {
 912                        ttm_mem_global_free_page(ttm->glob->mem_glob,
 913                                                 ttm->pages[i]);
 914                        ttm_put_pages(&ttm->pages[i], 1,
 915                                      ttm->page_flags,
 916                                      ttm->caching_state);
 917                }
 918        }
 919        ttm->state = tt_unpopulated;
 920}
 921EXPORT_SYMBOL(ttm_pool_unpopulate);
 922
 923int ttm_page_alloc_debugfs(struct seq_file *m, void *data)
 924{
 925        struct ttm_page_pool *p;
 926        unsigned i;
 927        char *h[] = {"pool", "refills", "pages freed", "size"};
 928        if (!_manager) {
 929                seq_printf(m, "No pool allocator running.\n");
 930                return 0;
 931        }
 932        seq_printf(m, "%6s %12s %13s %8s\n",
 933                        h[0], h[1], h[2], h[3]);
 934        for (i = 0; i < NUM_POOLS; ++i) {
 935                p = &_manager->pools[i];
 936
 937                seq_printf(m, "%6s %12ld %13ld %8d\n",
 938                                p->name, p->nrefills,
 939                                p->nfrees, p->npages);
 940        }
 941        return 0;
 942}
 943EXPORT_SYMBOL(ttm_page_alloc_debugfs);
 944