[Mesa-dev] [PATCH 03/16] anv: don't crash if we fail to grow the reloc list
Iago Toral
itoral at igalia.com
Wed Mar 8 11:09:42 UTC 2017
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.
> 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.
> >
> > /* 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
> >
More information about the mesa-dev
mailing list