[Mesa-dev] [PATCH 03/16] anv: don't crash if we fail to grow the reloc list

Jason Ekstrand jason at jlekstrand.net
Wed Mar 8 17:17:28 UTC 2017


On Wed, Mar 8, 2017 at 3:09 AM, Iago Toral <itoral at igalia.com> wrote:

> On Tue, 2017-03-07 at 08:44 -0800, Jason Ekstrand wrote:
> > On Mon, Mar 6, 2017 at 11:15 PM, Iago Toral Quiroga <itoral at igalia.co
> > m> wrote:
> > > ---
> > >  src/intel/vulkan/anv_batch_chain.c | 10 ++++++----
> > >  1 file changed, 6 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/src/intel/vulkan/anv_batch_chain.c
> > > b/src/intel/vulkan/anv_batch_chain.c
> > > index 3f6039e..4cbfb4d 100644
> > > --- a/src/intel/vulkan/anv_batch_chain.c
> > > +++ b/src/intel/vulkan/anv_batch_chain.c
> > > @@ -151,8 +151,9 @@ anv_reloc_list_add(struct anv_reloc_list *list,
> > >     const uint32_t domain =
> > >        target_bo->is_winsys_bo ? I915_GEM_DOMAIN_RENDER : 0;
> > >
> > > -   anv_reloc_list_grow(list, alloc, 1);
> > > -   /* TODO: Handle failure */
> > > +   VkResult result = anv_reloc_list_grow(list, alloc, 1);
> > > +   if (result != VK_SUCCESS)
> > > +      return 0;
> > This prevents crashes, yes, but it doesn't flag the failure anywhere
> > so it gets lost and you now have  command buffer that references
> > something but doesn't have a relocaiton.
> >
> > I think the right thing to do would be to add an
> > anv_batch_emit_surface_reloc helper and then we have a more central
> > place to handle it.
>
> Actually, we already have anv_batch_emit_reloc() which simply calls
> anv_reloc_list_add, so I think we can use that.
>

No, that emits a relocation on the batch.  Emitting a relocation on the
surface state BO is a bit different.


> > Would it make sense to put the VkResult status in the anv_batch?
> > This can get called from either batch building or pipeline building.
>
> Yes, I think this is a good idea since the batch associated with the
> command buffer is the only thing we have available during batch
> emissions.
>

Yeah, if we did that, we could handle OOM even in things such as
anv_batch_emit()


> > >
> > >     /* XXX: Can we use I915_EXEC_HANDLE_LUT? */
> > >     index = list->num_relocs++;
> > > @@ -174,8 +175,9 @@ anv_reloc_list_append(struct anv_reloc_list
> > > *list,
> > >                        const VkAllocationCallbacks *alloc,
> > >                        struct anv_reloc_list *other, uint32_t
> > > offset)
> > >  {
> > > -   anv_reloc_list_grow(list, alloc, other->num_relocs);
> > > -   /* TODO: Handle failure */
> > > +   VkResult result = anv_reloc_list_grow(list, alloc, other-
> > > >num_relocs);
> > > +   if (result != VK_SUCCESS)
> > > +      return;
> > Similarly, this one should handle failure.
> >
> > >
> > >     memcpy(&list->relocs[list->num_relocs], &other->relocs[0],
> > >            other->num_relocs * sizeof(other->relocs[0]));
> > > --
> > > 2.7.4
> > >
> > > _______________________________________________
> > > mesa-dev mailing list
> > > mesa-dev at lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> > >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170308/fc68b170/attachment.html>


More information about the mesa-dev mailing list