[Mesa-dev] [PATCH 1/4] r600_state_common: check NULL return from u_upload_alloc
Nicolai Hähnle
nhaehnle at gmail.com
Fri Mar 24 16:52:51 UTC 2017
On 24.03.2017 13:11, Julien Isorce wrote:
> 1: Ack, thx.
> 2: u_upload_alloc can fail, i.e. set output param *ptr to NULL, for 2
> reasons: alloc fails or map fails. For both there are already a
> fprintf/stderr, i.e., in radeon_create_bo and radeon_bo_do_map .
> It looks to me that in src/gallium/drivers/ it is a common usage to just
> avoid to crash by doing a silent check. But it defers the fprintf to
> where the error comes from, i.e. libdrm calls.
Okay, that makes sense.
> Also I think that if drmCommandWriteRead returns -ENOMEM it should be
> translated to _mesa_error_no_memory(__func__); at some point. But it
> seems it is not possible to use _mesa_error_no_memory in
> mesa/src/gallium/winsys (though it is possible from
> gallium/state_trackers/glx). And it would require to be in the gl
> context's thread to call it.
Unfortunately, that doesn't work because the driver could be called from
another state tracker (video APIs, nine, opencl).
Although, we could add a way for the state tracker to register an
out-of-memory callback function, similar to the debug callback.
Also, I remember thinking at one point that in si_state_draw.c, it might
be helpful to just flag out-of-memory conditions in a context-wide bool
which is checked once before the actual draw commands are written. This
would reduce the need to bubble up error conditions.
Cheers,
Nicolai
>
> Regards
> Julien
>
>
> On 24 March 2017 at 11:19, Nicolai Hähnle <nhaehnle at gmail.com
> <mailto:nhaehnle at gmail.com>> wrote:
>
> I generally like the patches in the series, thanks for that. Two
> points though:
>
> 1. The order of patches in series is usually general code before
> driver code, i.e. the st/cb_bitmap should come first.
>
> 2. I don't like having silent errors, as that could be confusing. In
> places where the error isn't propagated to the application (as it
> really should be...), I think we should have an fprintf to stderr.
>
> Cheers,
> Nicolai
>
> On 24.03.2017 12:08, Julien Isorce wrote:
>
> Like done in si_state_draw.c::si_draw_vbo
>
> Signed-off-by: Julien Isorce <jisorce at oblong.com
> <mailto:jisorce at oblong.com>>
> ---
> src/gallium/drivers/r600/r600_state_common.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/src/gallium/drivers/r600/r600_state_common.c
> b/src/gallium/drivers/r600/r600_state_common.c
> index 6f8279f..cedeb74 100644
> --- a/src/gallium/drivers/r600/r600_state_common.c
> +++ b/src/gallium/drivers/r600/r600_state_common.c
> @@ -1746,6 +1746,10 @@ static void r600_draw_vbo(struct
> pipe_context *ctx, const struct pipe_draw_info
>
> u_upload_alloc(ctx->stream_uploader,
> start, count * 2,
> 256, &out_offset,
> &out_buffer, &ptr);
> + if (unlikely(!ptr)) {
> +
> pipe_resource_reference(&ib.buffer, NULL);
> + return;
> + }
>
> util_shorten_ubyte_elts_to_userptr(
> &rctx->b.b, &ib,
> 0, 0, ib.offset + start, count, ptr);
>
>
>
> --
> Lerne, wie die Welt wirklich ist,
> Aber vergiss niemals, wie sie sein sollte.
>
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the mesa-dev
mailing list