提交 2e906bea 编写于 作者: M Mika Kuoppala 提交者: Daniel Vetter

drm/i915/gtt: Reorder page alloc/free/init functions

Maintain base page handling functions in order of
alloc, free, init. No functional changes.

v2: s/Introduce/Maintain (Michel)
v3: Rebase

Cc: Michel Thierry <michel.thierry@intel.com>
Signed-off-by: NMika Kuoppala <mika.kuoppala@intel.com>
Reviewed-by: NMichel Thierry <michel.thierry@intel.com>
Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
上级 79bbcc29
...@@ -384,24 +384,6 @@ static void fill_page_dma_32(struct drm_device *dev, struct i915_page_dma *p, ...@@ -384,24 +384,6 @@ static void fill_page_dma_32(struct drm_device *dev, struct i915_page_dma *p,
fill_page_dma(dev, p, v); fill_page_dma(dev, p, v);
} }
static void free_pt(struct drm_device *dev, struct i915_page_table *pt)
{
cleanup_px(dev, pt);
kfree(pt->used_ptes);
kfree(pt);
}
static void gen8_initialize_pt(struct i915_address_space *vm,
struct i915_page_table *pt)
{
gen8_pte_t scratch_pte;
scratch_pte = gen8_pte_encode(px_dma(vm->scratch_page),
I915_CACHE_LLC, true);
fill_px(vm->dev, pt, scratch_pte);
}
static struct i915_page_table *alloc_pt(struct drm_device *dev) static struct i915_page_table *alloc_pt(struct drm_device *dev)
{ {
struct i915_page_table *pt; struct i915_page_table *pt;
...@@ -433,13 +415,35 @@ static struct i915_page_table *alloc_pt(struct drm_device *dev) ...@@ -433,13 +415,35 @@ static struct i915_page_table *alloc_pt(struct drm_device *dev)
return ERR_PTR(ret); return ERR_PTR(ret);
} }
static void free_pd(struct drm_device *dev, struct i915_page_directory *pd) static void free_pt(struct drm_device *dev, struct i915_page_table *pt)
{ {
if (px_page(pd)) { cleanup_px(dev, pt);
cleanup_px(dev, pd); kfree(pt->used_ptes);
kfree(pd->used_pdes); kfree(pt);
kfree(pd); }
}
static void gen8_initialize_pt(struct i915_address_space *vm,
struct i915_page_table *pt)
{
gen8_pte_t scratch_pte;
scratch_pte = gen8_pte_encode(px_dma(vm->scratch_page),
I915_CACHE_LLC, true);
fill_px(vm->dev, pt, scratch_pte);
}
static void gen6_initialize_pt(struct i915_address_space *vm,
struct i915_page_table *pt)
{
gen6_pte_t scratch_pte;
WARN_ON(px_dma(vm->scratch_page) == 0);
scratch_pte = vm->pte_encode(px_dma(vm->scratch_page),
I915_CACHE_LLC, true, 0);
fill32_px(vm->dev, pt, scratch_pte);
} }
static struct i915_page_directory *alloc_pd(struct drm_device *dev) static struct i915_page_directory *alloc_pd(struct drm_device *dev)
...@@ -470,6 +474,61 @@ static struct i915_page_directory *alloc_pd(struct drm_device *dev) ...@@ -470,6 +474,61 @@ static struct i915_page_directory *alloc_pd(struct drm_device *dev)
return ERR_PTR(ret); return ERR_PTR(ret);
} }
static void free_pd(struct drm_device *dev, struct i915_page_directory *pd)
{
if (px_page(pd)) {
cleanup_px(dev, pd);
kfree(pd->used_pdes);
kfree(pd);
}
}
static void gen8_initialize_pd(struct i915_address_space *vm,
struct i915_page_directory *pd)
{
gen8_pde_t scratch_pde;
scratch_pde = gen8_pde_encode(px_dma(vm->scratch_pt), I915_CACHE_LLC);
fill_px(vm->dev, pd, scratch_pde);
}
static int alloc_scratch_page(struct i915_address_space *vm)
{
struct i915_page_scratch *sp;
int ret;
WARN_ON(vm->scratch_page);
sp = kzalloc(sizeof(*sp), GFP_KERNEL);
if (sp == NULL)
return -ENOMEM;
ret = __setup_page_dma(vm->dev, px_base(sp), GFP_DMA32 | __GFP_ZERO);
if (ret) {
kfree(sp);
return ret;
}
set_pages_uc(px_page(sp), 1);
vm->scratch_page = sp;
return 0;
}
static void free_scratch_page(struct i915_address_space *vm)
{
struct i915_page_scratch *sp = vm->scratch_page;
set_pages_wb(px_page(sp), 1);
cleanup_px(vm->dev, sp);
kfree(sp);
vm->scratch_page = NULL;
}
/* Broadwell Page Directory Pointer Descriptors */ /* Broadwell Page Directory Pointer Descriptors */
static int gen8_write_pdp(struct drm_i915_gem_request *req, static int gen8_write_pdp(struct drm_i915_gem_request *req,
unsigned entry, unsigned entry,
...@@ -609,16 +668,6 @@ static void gen8_ppgtt_insert_entries(struct i915_address_space *vm, ...@@ -609,16 +668,6 @@ static void gen8_ppgtt_insert_entries(struct i915_address_space *vm,
kunmap_px(ppgtt, pt_vaddr); kunmap_px(ppgtt, pt_vaddr);
} }
static void gen8_initialize_pd(struct i915_address_space *vm,
struct i915_page_directory *pd)
{
gen8_pde_t scratch_pde;
scratch_pde = gen8_pde_encode(px_dma(vm->scratch_pt), I915_CACHE_LLC);
fill_px(vm->dev, pd, scratch_pde);
}
static void gen8_free_page_tables(struct drm_device *dev, static void gen8_free_page_tables(struct drm_device *dev,
struct i915_page_directory *pd) struct i915_page_directory *pd)
{ {
...@@ -1274,19 +1323,6 @@ static void gen6_ppgtt_insert_entries(struct i915_address_space *vm, ...@@ -1274,19 +1323,6 @@ static void gen6_ppgtt_insert_entries(struct i915_address_space *vm,
kunmap_px(ppgtt, pt_vaddr); kunmap_px(ppgtt, pt_vaddr);
} }
static void gen6_initialize_pt(struct i915_address_space *vm,
struct i915_page_table *pt)
{
gen6_pte_t scratch_pte;
WARN_ON(px_dma(vm->scratch_page) == 0);
scratch_pte = vm->pte_encode(px_dma(vm->scratch_page),
I915_CACHE_LLC, true, 0);
fill32_px(vm->dev, pt, scratch_pte);
}
static int gen6_alloc_va_range(struct i915_address_space *vm, static int gen6_alloc_va_range(struct i915_address_space *vm,
uint64_t start_in, uint64_t length_in) uint64_t start_in, uint64_t length_in)
{ {
...@@ -2126,42 +2162,6 @@ void i915_global_gtt_cleanup(struct drm_device *dev) ...@@ -2126,42 +2162,6 @@ void i915_global_gtt_cleanup(struct drm_device *dev)
vm->cleanup(vm); vm->cleanup(vm);
} }
static int alloc_scratch_page(struct i915_address_space *vm)
{
struct i915_page_scratch *sp;
int ret;
WARN_ON(vm->scratch_page);
sp = kzalloc(sizeof(*sp), GFP_KERNEL);
if (sp == NULL)
return -ENOMEM;
ret = __setup_page_dma(vm->dev, px_base(sp), GFP_DMA32 | __GFP_ZERO);
if (ret) {
kfree(sp);
return ret;
}
set_pages_uc(px_page(sp), 1);
vm->scratch_page = sp;
return 0;
}
static void free_scratch_page(struct i915_address_space *vm)
{
struct i915_page_scratch *sp = vm->scratch_page;
set_pages_wb(px_page(sp), 1);
cleanup_px(vm->dev, sp);
kfree(sp);
vm->scratch_page = NULL;
}
static unsigned int gen6_get_total_gtt_size(u16 snb_gmch_ctl) static unsigned int gen6_get_total_gtt_size(u16 snb_gmch_ctl)
{ {
snb_gmch_ctl >>= SNB_GMCH_GGMS_SHIFT; snb_gmch_ctl >>= SNB_GMCH_GGMS_SHIFT;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册