tree: git://anongit.freedesktop.org/drm-intel for-linux-next
head: a883241c3922000b21b58b5740c55badfe09940f
commit: 0a03852e049af91da9ae70326c44bb5d9b0d377a [18/27] drm/i915: support 2M
pages for the 48b PPGTT
config: x86_64-randconfig-a0-10072329 (attached as .config)
compiler: gcc-4.4 (Debian 4.4.7-8) 4.4.7
reproduce:
git checkout 0a03852e049af91da9ae70326c44bb5d9b0d377a
# save the attached .config to linux build tree
make ARCH=x86_64
All warnings (new ones prefixed by >>):
drivers/gpu/drm/i915/i915_gem_gtt.c: In function 'gen8_ppgtt_insert_3lvl':
drivers/gpu/drm/i915/i915_gem_gtt.c:1007: warning: 'iter.sg' is used
uninitialized in this function
drivers/gpu/drm/i915/i915_gem_gtt.c:1008: warning: 'iter.dma' is used
uninitialized in this function
drivers/gpu/drm/i915/i915_gem_gtt.c: In function 'gen8_ppgtt_insert_4lvl':
>> drivers/gpu/drm/i915/i915_gem_gtt.c:1087: warning: 'iter' is used
>> uninitialized in this function
drivers/gpu/drm/i915/i915_gem_gtt.c: In function 'intel_ppat_get':
drivers/gpu/drm/i915/i915_gem_gtt.c:2969: warning: 'entry' may be used
uninitialized in this function
vim +/iter +1087 drivers/gpu/drm/i915/i915_gem_gtt.c
9df15b499 Ben Widawsky 2013-11-02 998
894ccebee Chris Wilson 2017-02-15 999 static void
gen8_ppgtt_insert_3lvl(struct i915_address_space *vm,
4a234c5fa Matthew Auld 2017-06-22 1000
struct i915_vma *vma,
f9b5b782c Michel Thierry 2015-07-30 1001 enum
i915_cache_level cache_level,
f9b5b782c Michel Thierry 2015-07-30 1002 u32
unused)
f9b5b782c Michel Thierry 2015-07-30 1003 {
17369ba08 Chuanxiao Dong 2017-07-07 1004 struct i915_hw_ppgtt *ppgtt =
i915_vm_to_ppgtt(vm);
894ccebee Chris Wilson 2017-02-15 1005 struct sgt_dma iter = {
4a234c5fa Matthew Auld 2017-06-22 1006 .sg = vma->pages->sgl,
894ccebee Chris Wilson 2017-02-15 @1007 .dma =
sg_dma_address(iter.sg),
894ccebee Chris Wilson 2017-02-15 1008 .max = iter.dma +
iter.sg->length,
894ccebee Chris Wilson 2017-02-15 1009 };
4a234c5fa Matthew Auld 2017-06-22 1010 struct gen8_insert_pte idx =
gen8_insert_pte(vma->node.start);
de5ba8eb9 Michel Thierry 2015-08-03 1011
9e89f9ee3 Chris Wilson 2017-02-25 1012
gen8_ppgtt_insert_pte_entries(ppgtt, &ppgtt->pdp, &iter, &idx,
9e89f9ee3 Chris Wilson 2017-02-25 1013
cache_level);
de5ba8eb9 Michel Thierry 2015-08-03 1014 }
894ccebee Chris Wilson 2017-02-15 1015
0a03852e0 Matthew Auld 2017-10-06 1016 static void
gen8_ppgtt_insert_huge_entries(struct i915_vma *vma,
0a03852e0 Matthew Auld 2017-10-06 1017
struct i915_page_directory_pointer **pdps,
0a03852e0 Matthew Auld 2017-10-06 1018
struct sgt_dma *iter,
0a03852e0 Matthew Auld 2017-10-06 1019
enum i915_cache_level cache_level)
0a03852e0 Matthew Auld 2017-10-06 1020 {
0a03852e0 Matthew Auld 2017-10-06 1021 const gen8_pte_t pte_encode =
gen8_pte_encode(0, cache_level);
0a03852e0 Matthew Auld 2017-10-06 1022 u64 start = vma->node.start;
0a03852e0 Matthew Auld 2017-10-06 1023 dma_addr_t rem =
iter->sg->length;
0a03852e0 Matthew Auld 2017-10-06 1024
0a03852e0 Matthew Auld 2017-10-06 1025 do {
0a03852e0 Matthew Auld 2017-10-06 1026 struct gen8_insert_pte
idx = gen8_insert_pte(start);
0a03852e0 Matthew Auld 2017-10-06 1027 struct
i915_page_directory_pointer *pdp = pdps[idx.pml4e];
0a03852e0 Matthew Auld 2017-10-06 1028 struct
i915_page_directory *pd = pdp->page_directory[idx.pdpe];
0a03852e0 Matthew Auld 2017-10-06 1029 unsigned int page_size;
0a03852e0 Matthew Auld 2017-10-06 1030 gen8_pte_t encode =
pte_encode;
0a03852e0 Matthew Auld 2017-10-06 1031 gen8_pte_t *vaddr;
0a03852e0 Matthew Auld 2017-10-06 1032 u16 index, max;
0a03852e0 Matthew Auld 2017-10-06 1033
0a03852e0 Matthew Auld 2017-10-06 1034 if (vma->page_sizes.sg
& I915_GTT_PAGE_SIZE_2M &&
0a03852e0 Matthew Auld 2017-10-06 1035
IS_ALIGNED(iter->dma, I915_GTT_PAGE_SIZE_2M) &&
0a03852e0 Matthew Auld 2017-10-06 1036 rem >=
I915_GTT_PAGE_SIZE_2M && !idx.pte) {
0a03852e0 Matthew Auld 2017-10-06 1037 index = idx.pde;
0a03852e0 Matthew Auld 2017-10-06 1038 max = I915_PDES;
0a03852e0 Matthew Auld 2017-10-06 1039 page_size =
I915_GTT_PAGE_SIZE_2M;
0a03852e0 Matthew Auld 2017-10-06 1040
0a03852e0 Matthew Auld 2017-10-06 1041 encode |=
GEN8_PDE_PS_2M;
0a03852e0 Matthew Auld 2017-10-06 1042
0a03852e0 Matthew Auld 2017-10-06 1043 vaddr =
kmap_atomic_px(pd);
0a03852e0 Matthew Auld 2017-10-06 1044 } else {
0a03852e0 Matthew Auld 2017-10-06 1045 struct
i915_page_table *pt = pd->page_table[idx.pde];
0a03852e0 Matthew Auld 2017-10-06 1046
0a03852e0 Matthew Auld 2017-10-06 1047 index = idx.pte;
0a03852e0 Matthew Auld 2017-10-06 1048 max = GEN8_PTES;
0a03852e0 Matthew Auld 2017-10-06 1049 page_size =
I915_GTT_PAGE_SIZE;
0a03852e0 Matthew Auld 2017-10-06 1050
0a03852e0 Matthew Auld 2017-10-06 1051 vaddr =
kmap_atomic_px(pt);
0a03852e0 Matthew Auld 2017-10-06 1052 }
0a03852e0 Matthew Auld 2017-10-06 1053
0a03852e0 Matthew Auld 2017-10-06 1054 do {
0a03852e0 Matthew Auld 2017-10-06 1055
GEM_BUG_ON(iter->sg->length < page_size);
0a03852e0 Matthew Auld 2017-10-06 1056 vaddr[index++]
= encode | iter->dma;
0a03852e0 Matthew Auld 2017-10-06 1057
0a03852e0 Matthew Auld 2017-10-06 1058 start +=
page_size;
0a03852e0 Matthew Auld 2017-10-06 1059 iter->dma +=
page_size;
0a03852e0 Matthew Auld 2017-10-06 1060 rem -=
page_size;
0a03852e0 Matthew Auld 2017-10-06 1061 if (iter->dma
>= iter->max) {
0a03852e0 Matthew Auld 2017-10-06 1062
iter->sg = __sg_next(iter->sg);
0a03852e0 Matthew Auld 2017-10-06 1063 if
(!iter->sg)
0a03852e0 Matthew Auld 2017-10-06 1064
break;
0a03852e0 Matthew Auld 2017-10-06 1065
0a03852e0 Matthew Auld 2017-10-06 1066 rem =
iter->sg->length;
0a03852e0 Matthew Auld 2017-10-06 1067
iter->dma = sg_dma_address(iter->sg);
0a03852e0 Matthew Auld 2017-10-06 1068
iter->max = iter->dma + rem;
0a03852e0 Matthew Auld 2017-10-06 1069
0a03852e0 Matthew Auld 2017-10-06 1070 if
(unlikely(!IS_ALIGNED(iter->dma, page_size)))
0a03852e0 Matthew Auld 2017-10-06 1071
break;
0a03852e0 Matthew Auld 2017-10-06 1072 }
0a03852e0 Matthew Auld 2017-10-06 1073 } while (rem >=
page_size && index < max);
0a03852e0 Matthew Auld 2017-10-06 1074
0a03852e0 Matthew Auld 2017-10-06 1075 kunmap_atomic(vaddr);
0a03852e0 Matthew Auld 2017-10-06 1076 } while (iter->sg);
0a03852e0 Matthew Auld 2017-10-06 1077 }
0a03852e0 Matthew Auld 2017-10-06 1078
894ccebee Chris Wilson 2017-02-15 1079 static void
gen8_ppgtt_insert_4lvl(struct i915_address_space *vm,
4a234c5fa Matthew Auld 2017-06-22 1080
struct i915_vma *vma,
894ccebee Chris Wilson 2017-02-15 1081 enum
i915_cache_level cache_level,
894ccebee Chris Wilson 2017-02-15 1082 u32
unused)
894ccebee Chris Wilson 2017-02-15 1083 {
894ccebee Chris Wilson 2017-02-15 1084 struct i915_hw_ppgtt *ppgtt =
i915_vm_to_ppgtt(vm);
894ccebee Chris Wilson 2017-02-15 1085 struct sgt_dma iter = {
4a234c5fa Matthew Auld 2017-06-22 1086 .sg = vma->pages->sgl,
894ccebee Chris Wilson 2017-02-15 @1087 .dma =
sg_dma_address(iter.sg),
894ccebee Chris Wilson 2017-02-15 1088 .max = iter.dma +
iter.sg->length,
894ccebee Chris Wilson 2017-02-15 1089 };
894ccebee Chris Wilson 2017-02-15 1090 struct
i915_page_directory_pointer **pdps = ppgtt->pml4.pdps;
0a03852e0 Matthew Auld 2017-10-06 1091
0a03852e0 Matthew Auld 2017-10-06 1092 if (vma->page_sizes.sg >
I915_GTT_PAGE_SIZE) {
0a03852e0 Matthew Auld 2017-10-06 1093
gen8_ppgtt_insert_huge_entries(vma, pdps, &iter, cache_level);
0a03852e0 Matthew Auld 2017-10-06 1094 } else {
4a234c5fa Matthew Auld 2017-06-22 1095 struct gen8_insert_pte
idx = gen8_insert_pte(vma->node.start);
894ccebee Chris Wilson 2017-02-15 1096
0a03852e0 Matthew Auld 2017-10-06 1097 while
(gen8_ppgtt_insert_pte_entries(ppgtt, pdps[idx.pml4e++],
0a03852e0 Matthew Auld 2017-10-06 1098
&iter, &idx, cache_level))
9e89f9ee3 Chris Wilson 2017-02-25 1099
GEM_BUG_ON(idx.pml4e >= GEN8_PML4ES_PER_PML4);
f9b5b782c Michel Thierry 2015-07-30 1100 }
0a03852e0 Matthew Auld 2017-10-06 1101 }
f9b5b782c Michel Thierry 2015-07-30 1102
:::::: The code at line 1087 was first introduced by commit
:::::: 894ccebee2b0e606ba9638d20dd87b33568482d7 drm/i915: Micro-optimise
gen8_ppgtt_insert_entries()
:::::: TO: Chris Wilson <[email protected]>
:::::: CC: Chris Wilson <[email protected]>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: application/gzip
_______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
