From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michel Thierry Subject: Re: [PATCH v4 1/2] intel: 48b ppgtt support (EXEC_OBJECT_SUPPORTS_48B_ADDRESS flag) Date: Tue, 13 Oct 2015 15:55:41 +0100 Message-ID: <561D1B6D.6080608@intel.com> References: <1441290239-31462-1-git-send-email-michel.thierry@intel.com> <1441290239-31462-2-git-send-email-michel.thierry@intel.com> <20150914135403.GA8219@mwiniars-desk1.igk.intel.com> <56128342.2070407@intel.com> <5613C8DB.9090403@intel.com> <561CF60B.7080507@intel.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080509010609050701090506" Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Emil Velikov Cc: mesa-dev , dri-devel List-Id: dri-devel@lists.freedesktop.org This is a multi-part message in MIME format. --------------080509010609050701090506 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable On 10/13/2015 3:13 PM, Emil Velikov wrote: > On 13 October 2015 at 13:16, Michel Thierry = wrote: >> On 10/6/2015 2:12 PM, Michel Thierry wrote: >>> >>> On 10/5/2015 7:06 PM, Kristian H=C3=B8gsberg wrote: >>>> >>>> On Mon, Oct 5, 2015 at 7:03 AM, Michel Thierry >>>> wrote: >>>>> >>>>> On 9/14/2015 2:54 PM, Micha=C5=82 Winiarski wrote: >>>>>> >>>>>> >>>>>> On Thu, Sep 03, 2015 at 03:23:58PM +0100, Michel Thierry wrote: >>>>>>> >>>>>>> >>>>>>> Gen8+ supports 48-bit virtual addresses, but some objects must >>>>>>> always be >>>>>>> allocated inside the 32-bit address range. >>>>>>> >>>>>>> In specific, any resource used with flat/heapless >>>>>>> (0x00000000-0xfffff000) >>>>>>> General State Heap (GSH) or Instruction State Heap (ISH) must be = in a >>>>>>> 32-bit range, because the General State Offset and Instruction St= ate >>>>>>> Offset >>>>>>> are limited to 32-bits. >>>>>>> >>>>>>> The i915 driver has been modified to provide a flag to set when t= he >>>>>>> 4GB >>>>>>> limit is not necessary in a given bo >>>>>>> (EXEC_OBJECT_SUPPORTS_48B_ADDRESS). >>>>>>> 48-bit range will only be used when explicitly requested. >>>>>>> >>>>>>> Callers to the existing drm_intel_bo_emit_reloc function should s= et >>>>>>> the >>>>>>> use_48b_address_range flag beforehand, in order to use full ppgtt >>>>>>> range. >>>>>>> >>>>>>> v2: Make set/clear functions nops on pre-gen8 platforms, and use = them >>>>>>> internally in emit_reloc functions (Ben) >>>>>>> s/48BADDRESS/48B_ADDRESS/ (Dave) >>>>>>> v3: Keep set/clear functions internal, no-one needs to use them >>>>>>> directly. >>>>>>> v4: Don't set 48bit-support flag in emit reloc, check for ppgtt t= ype >>>>>>> before enabling set/clear function, print full offsets in = debug >>>>>>> statements, using port of lower_32_bits and upper_32_bits >>>>>>> from linux >>>>>>> kernel (Micha=C5=82) >>>>>>> >>>>>>> References: >>>>>>> http://lists.freedesktop.org/archives/intel-gfx/2015-July/072612.= html >>>>>>> Cc: Ben Widawsky >>>>>>> Cc: Micha=C5=82 Winiarski >>>>>> >>>>>> >>>>>> >>>>>> +Kristian >>>>>> >>>>>> LGTM. >>>>>> Acked-by: Micha=C5=82 Winiarski >>>>>> >>>>>>> Signed-off-by: Michel Thierry >>>>> >>>>> >>>>> >>>>> >>>>> Hi Kristian, >>>>> >>>>> More comments on this? >>>>> I've resent the mesa patch with the last changes >>>>> >>>>> (http://lists.freedesktop.org/archives/dri-devel/2015-October/09175= 2.html). >>>>> >>>>> >>>>> Micha=C5=82 has agreed with the interface and will use it for his w= ork. >>>>> If mesa doesn't plan to use this for now, it's ok. The kernel chang= es >>>>> have >>>>> been done to prevent any regressions when the support 48-bit flag i= s not >>>>> set. >>>> >>>> >>>> I didn't get any replies to my last comments on this: >>>> >>>> http://lists.freedesktop.org/archives/mesa-dev/2015-August/091398.ht= ml >>>> >>>> Basically, I tried explicitly placing buffers above 8G and didn't se= e >>>> the HW problem described (ie it all worked fine). I still think >>>> there's some confusion as to what the W/A is about. >>>> >>>> Here's my take: the W/A is a SW-only workaround to handle the cases >>>> where a driver uses heapless and 48-bit ppgtt. The problem is that t= he >>>> heaps are limited to 4G but with 48bit ppgtt a buffer can be placed >>>> anywhere it the 48 bit address space. If that happens it's considere= dd >>>> out-of-bounds for the heap and access fails. To prevent this we need >>>> to make sure the bos we address in a heapless fashion are placed bel= ow >>>> 4g. >>>> >>>> For mesa, we only configure general state base as heap-less, which >>>> affects scratch bos. What this boils down to is that we need the 4G >>>> restriction only for the scratch bos set up on 3DSTATE_VS, 3DSTATE_G= S >>>> and 3DSTATE_PS (and tesselation stage eventually). Look for the >>>> OUT_RELOC64 for stage->scratch_bo in gen8_vs_state.c, gen8_gs_state.= c >>>> and gen8_ps_state.c >>> >>> >>> I think it also affects _3DSTATE_VIEWPORT_STATE_POINTERS_CC, maybe it >>> isn't exclusive to the scratch bos (the error state points to that >>> instruction). >>> >>> >> >> Hi, >> >> Anymore inputs about this patch? >> AFAIK, if changes are required based on further comments from Kristian= , >> these will be in the mesa patch[1], not libdrm. Also, Micha=C5=82 will= use this >> flag in another project. >> > The comment seems quite brief and I'm not sure it fully addresses > Kristian's concern. I'd suspect that providing reference to the HW > documentation (confirming your assumption) might be beneficial. > Sure, attached is the hang I get if I don't set the restriction in=20 gen8_misc_state.c and try to use the full 48-bit range=20 (i915_error_state_nowa.txt). This is just running gfxbench t-rex. I see the same hang signature when it is only applied to the scratch bos=20 (in gen8_vs_state.c, gen8_gs_state.c and gen8_ps_state.c -=20 i915_error_state_scratchbo.txt). 3DSTATE_VIEWPORT_STATE_POINTERS_CC (0x78230000) is defined here: https://01.org/sites/default/files/documentation/intel-gfx-prm-osrc-bdw-v= ol02a-commandreference-instructions_0.pdf=20 (page 256) Thanks, -Michel --------------080509010609050701090506 Content-Type: application/octet-stream; name="i915_error_states.7z" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="i915_error_states.7z" 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 --------------080509010609050701090506 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK --------------080509010609050701090506--