* [renesas-drivers:master 12/38] drivers/gpu//drm/i915/i915_gem.c:2562:19: error: called object 'totalram_pages' is not a function or function pointer
@ 2018-12-18 23:25 kbuild test robot
0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2018-12-18 23:25 UTC (permalink / raw)
To: Daniel Vetter; +Cc: kbuild-all, linux-renesas-soc, Geert Uytterhoeven
[-- Attachment #1: Type: text/plain, Size: 7727 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git master
head: bb4f21f1ae06af0da93077b493a550d472bf18ac
commit: e4da156335d4cc6a6da53aa74409fbfe12c9d684 [12/38] Merge remote-tracking branch 'drm/drm-next' into renesas-drivers
config: i386-defconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
git checkout e4da156335d4cc6a6da53aa74409fbfe12c9d684
# save the attached .config to linux build tree
make ARCH=i386
All errors (new ones prefixed by >>):
drivers/gpu//drm/i915/i915_gem.c: In function 'i915_gem_object_get_pages_gtt':
>> drivers/gpu//drm/i915/i915_gem.c:2562:19: error: called object 'totalram_pages' is not a function or function pointer
if (page_count > totalram_pages())
^~~~~~~~~~~~~~
In file included from include/linux/shmem_fs.h:6:0,
from drivers/gpu//drm/i915/i915_drv.h:47,
from drivers/gpu//drm/i915/i915_gem.c:31:
include/linux/swap.h:313:22: note: declared here
extern unsigned long totalram_pages;
^~~~~~~~~~~~~~
vim +/totalram_pages +2562 drivers/gpu//drm/i915/i915_gem.c
2532
2533 static int i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
2534 {
2535 struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
2536 const unsigned long page_count = obj->base.size / PAGE_SIZE;
2537 unsigned long i;
2538 struct address_space *mapping;
2539 struct sg_table *st;
2540 struct scatterlist *sg;
2541 struct sgt_iter sgt_iter;
2542 struct page *page;
2543 unsigned long last_pfn = 0; /* suppress gcc warning */
2544 unsigned int max_segment = i915_sg_segment_size();
2545 unsigned int sg_page_sizes;
2546 struct pagevec pvec;
2547 gfp_t noreclaim;
2548 int ret;
2549
2550 /*
2551 * Assert that the object is not currently in any GPU domain. As it
2552 * wasn't in the GTT, there shouldn't be any way it could have been in
2553 * a GPU cache
2554 */
2555 GEM_BUG_ON(obj->read_domains & I915_GEM_GPU_DOMAINS);
2556 GEM_BUG_ON(obj->write_domain & I915_GEM_GPU_DOMAINS);
2557
2558 /*
2559 * If there's no chance of allocating enough pages for the whole
2560 * object, bail early.
2561 */
> 2562 if (page_count > totalram_pages())
2563 return -ENOMEM;
2564
2565 st = kmalloc(sizeof(*st), GFP_KERNEL);
2566 if (st == NULL)
2567 return -ENOMEM;
2568
2569 rebuild_st:
2570 if (sg_alloc_table(st, page_count, GFP_KERNEL)) {
2571 kfree(st);
2572 return -ENOMEM;
2573 }
2574
2575 /*
2576 * Get the list of pages out of our struct file. They'll be pinned
2577 * at this point until we release them.
2578 *
2579 * Fail silently without starting the shrinker
2580 */
2581 mapping = obj->base.filp->f_mapping;
2582 mapping_set_unevictable(mapping);
2583 noreclaim = mapping_gfp_constraint(mapping, ~__GFP_RECLAIM);
2584 noreclaim |= __GFP_NORETRY | __GFP_NOWARN;
2585
2586 sg = st->sgl;
2587 st->nents = 0;
2588 sg_page_sizes = 0;
2589 for (i = 0; i < page_count; i++) {
2590 const unsigned int shrink[] = {
2591 I915_SHRINK_BOUND | I915_SHRINK_UNBOUND | I915_SHRINK_PURGEABLE,
2592 0,
2593 }, *s = shrink;
2594 gfp_t gfp = noreclaim;
2595
2596 do {
2597 cond_resched();
2598 page = shmem_read_mapping_page_gfp(mapping, i, gfp);
2599 if (likely(!IS_ERR(page)))
2600 break;
2601
2602 if (!*s) {
2603 ret = PTR_ERR(page);
2604 goto err_sg;
2605 }
2606
2607 i915_gem_shrink(dev_priv, 2 * page_count, NULL, *s++);
2608
2609 /*
2610 * We've tried hard to allocate the memory by reaping
2611 * our own buffer, now let the real VM do its job and
2612 * go down in flames if truly OOM.
2613 *
2614 * However, since graphics tend to be disposable,
2615 * defer the oom here by reporting the ENOMEM back
2616 * to userspace.
2617 */
2618 if (!*s) {
2619 /* reclaim and warn, but no oom */
2620 gfp = mapping_gfp_mask(mapping);
2621
2622 /*
2623 * Our bo are always dirty and so we require
2624 * kswapd to reclaim our pages (direct reclaim
2625 * does not effectively begin pageout of our
2626 * buffers on its own). However, direct reclaim
2627 * only waits for kswapd when under allocation
2628 * congestion. So as a result __GFP_RECLAIM is
2629 * unreliable and fails to actually reclaim our
2630 * dirty pages -- unless you try over and over
2631 * again with !__GFP_NORETRY. However, we still
2632 * want to fail this allocation rather than
2633 * trigger the out-of-memory killer and for
2634 * this we want __GFP_RETRY_MAYFAIL.
2635 */
2636 gfp |= __GFP_RETRY_MAYFAIL;
2637 }
2638 } while (1);
2639
2640 if (!i ||
2641 sg->length >= max_segment ||
2642 page_to_pfn(page) != last_pfn + 1) {
2643 if (i) {
2644 sg_page_sizes |= sg->length;
2645 sg = sg_next(sg);
2646 }
2647 st->nents++;
2648 sg_set_page(sg, page, PAGE_SIZE, 0);
2649 } else {
2650 sg->length += PAGE_SIZE;
2651 }
2652 last_pfn = page_to_pfn(page);
2653
2654 /* Check that the i965g/gm workaround works. */
2655 WARN_ON((gfp & __GFP_DMA32) && (last_pfn >= 0x00100000UL));
2656 }
2657 if (sg) { /* loop terminated early; short sg table */
2658 sg_page_sizes |= sg->length;
2659 sg_mark_end(sg);
2660 }
2661
2662 /* Trim unused sg entries to avoid wasting memory. */
2663 i915_sg_trim(st);
2664
2665 ret = i915_gem_gtt_prepare_pages(obj, st);
2666 if (ret) {
2667 /*
2668 * DMA remapping failed? One possible cause is that
2669 * it could not reserve enough large entries, asking
2670 * for PAGE_SIZE chunks instead may be helpful.
2671 */
2672 if (max_segment > PAGE_SIZE) {
2673 for_each_sgt_page(page, sgt_iter, st)
2674 put_page(page);
2675 sg_free_table(st);
2676
2677 max_segment = PAGE_SIZE;
2678 goto rebuild_st;
2679 } else {
2680 dev_warn(&dev_priv->drm.pdev->dev,
2681 "Failed to DMA remap %lu pages\n",
2682 page_count);
2683 goto err_pages;
2684 }
2685 }
2686
2687 if (i915_gem_object_needs_bit17_swizzle(obj))
2688 i915_gem_object_do_bit_17_swizzle(obj, st);
2689
2690 __i915_gem_object_set_pages(obj, st, sg_page_sizes);
2691
2692 return 0;
2693
2694 err_sg:
2695 sg_mark_end(sg);
2696 err_pages:
2697 mapping_clear_unevictable(mapping);
2698 pagevec_init(&pvec);
2699 for_each_sgt_page(page, sgt_iter, st) {
2700 if (!pagevec_add(&pvec, page))
2701 check_release_pagevec(&pvec);
2702 }
2703 if (pagevec_count(&pvec))
2704 check_release_pagevec(&pvec);
2705 sg_free_table(st);
2706 kfree(st);
2707
2708 /*
2709 * shmemfs first checks if there is enough memory to allocate the page
2710 * and reports ENOSPC should there be insufficient, along with the usual
2711 * ENOMEM for a genuine allocation failure.
2712 *
2713 * We use ENOSPC in our driver to mean that we have run out of aperture
2714 * space and so want to translate the error from shmemfs back to our
2715 * usual understanding of ENOMEM.
2716 */
2717 if (ret == -ENOSPC)
2718 ret = -ENOMEM;
2719
2720 return ret;
2721 }
2722
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 26906 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2018-12-18 23:25 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-18 23:25 [renesas-drivers:master 12/38] drivers/gpu//drm/i915/i915_gem.c:2562:19: error: called object 'totalram_pages' is not a function or function pointer kbuild test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).