On Tue, Sep 15, 2015 at 08:04:27PM +0200, Michał Winiarski wrote: > According to bspec, some parts of HW expect the addresses to be in > a canonical form where bits [63:48] == [47]. > If we're using 32b addressing, we never need to handle such high > addresses, but since we've recently added 48b address space support, > lets satisfy the HW by converting the address prior to > alloc/insert/clear. Ah, that makes sense - it is only the PDE (et al) that you are setting, right? > if (USES_FULL_48BIT_PPGTT(vm->dev)) > - return gen8_alloc_va_range_4lvl(vm, &ppgtt->pml4, start, length); > + return gen8_alloc_va_range_4lvl(vm, &ppgtt->pml4, > + gen8_canonical_addr(start), > + length); > else > return gen8_alloc_va_range_3lvl(vm, &ppgtt->pdp, start, length); Whilst we cannot have the high bit set if !48b, if we just start = gen8_canonical_addr(start); and used the same start for both paths here, that feels more organized - or have I misunderstand where the high bits needs to be set? In which case please add a comment. -Chris -- Chris Wilson, Intel Open Source Technology Centre _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx