mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-29 01:09:33 -04:00
drm/i915: Extract PPGTT param from page_directory alloc
This will be useful for when we move to 48b addressing, and the PDP isn't the root of the page table structure. v2: Rebase after changes for Gen8+ systems with less than 4GB of memory. v3: Rebase after Mika's code review. Signed-off-by: Ben Widawsky <ben@bwidawsk.net> Signed-off-by: Michel Thierry <michel.thierry@intel.com> (v2) Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
committed by
Daniel Vetter
parent
09942c656b
commit
c488dbbaa7
@@ -716,12 +716,11 @@ static int gen8_ppgtt_alloc_pagetabs(struct i915_page_directory *pd,
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static int gen8_ppgtt_alloc_page_directories(struct i915_page_directory_pointer *pdp,
|
||||
static int gen8_ppgtt_alloc_page_directories(struct i915_hw_ppgtt *ppgtt,
|
||||
struct i915_page_directory_pointer *pdp,
|
||||
uint64_t start,
|
||||
uint64_t length)
|
||||
{
|
||||
struct i915_hw_ppgtt *ppgtt =
|
||||
container_of(pdp, struct i915_hw_ppgtt, pdp);
|
||||
struct i915_page_directory *unused;
|
||||
uint64_t temp;
|
||||
uint32_t pdpe;
|
||||
@@ -732,7 +731,7 @@ static int gen8_ppgtt_alloc_page_directories(struct i915_page_directory_pointer
|
||||
gen8_for_each_pdpe(unused, pdp, start, length, temp, pdpe) {
|
||||
WARN_ON(unused);
|
||||
pdp->page_directory[pdpe] = alloc_pd_single();
|
||||
if (IS_ERR(ppgtt->pdp.page_directory[pdpe]))
|
||||
if (IS_ERR(pdp->page_directory[pdpe]))
|
||||
goto unwind_out;
|
||||
|
||||
gen8_initialize_pd(&ppgtt->base,
|
||||
@@ -743,8 +742,8 @@ static int gen8_ppgtt_alloc_page_directories(struct i915_page_directory_pointer
|
||||
* 4GB of memory. This won't be needed after a subsequent patch.
|
||||
*/
|
||||
while (pdpe < GEN8_LEGACY_PDPES) {
|
||||
ppgtt->pdp.page_directory[pdpe] = alloc_pd_single();
|
||||
if (IS_ERR(ppgtt->pdp.page_directory[pdpe]))
|
||||
pdp->page_directory[pdpe] = alloc_pd_single();
|
||||
if (IS_ERR(pdp->page_directory[pdpe]))
|
||||
goto unwind_out;
|
||||
|
||||
gen8_initialize_pd(&ppgtt->base,
|
||||
@@ -756,7 +755,7 @@ static int gen8_ppgtt_alloc_page_directories(struct i915_page_directory_pointer
|
||||
|
||||
unwind_out:
|
||||
while (pdpe--)
|
||||
unmap_and_free_pd(ppgtt->pdp.page_directory[pdpe]);
|
||||
unmap_and_free_pd(pdp->page_directory[pdpe]);
|
||||
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -770,7 +769,7 @@ static int gen8_ppgtt_alloc(struct i915_hw_ppgtt *ppgtt,
|
||||
uint32_t pdpe;
|
||||
int ret;
|
||||
|
||||
ret = gen8_ppgtt_alloc_page_directories(&ppgtt->pdp, start, length);
|
||||
ret = gen8_ppgtt_alloc_page_directories(ppgtt, &ppgtt->pdp, start, length);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user