[Beignet] [PATCH] Make __local on Haswell an error, instead of silently doing nothing

Zhigang Gong zhigang.gong at linux.intel.com
Tue Apr 28 22:44:56 PDT 2015


On Tue, Apr 28, 2015 at 07:36:39PM +0100, Rebecca N. Palmer wrote:
> Given that really fixing shared local memory on Haswell is likely
> to take some time, at least make it an explicit error that points
> the user to the kernel patch, instead of returning "success"
> without actually doing the computation.
> 
> As I can't find an error code to check for this problem (if there
> was one I'd guess at drm_intel_gem_bo_context_exec(), but we
> already check that), this unconditionally rejects __local use on
> Haswell, so you'd have to undo it to use the kernel patch.
> Is there a better way to check this? or should we make it a warning
> instead of an error (omit "return CL_OUT_OF_RESOURCES;")?
> 
> Also, improve the drm_intel_gem_bo_context_exec() error message.
> 
> Warning: not properly tested, as I don't have the affected hardware;
> if you prefer not to apply this to development trunk, I'd still
> appreciate confirmation of whether it works.
> 
> Signed-off-by: Rebecca Palmer <rebecca_palmer at zoho.com>
> 
> --- a/src/cl_command_queue_gen7.c
> +++ b/src/cl_command_queue_gen7.c
> @@ -351,6 +351,10 @@ cl_command_queue_ND_range_gen7(cl_comman
>    /* Curbe step 1: fill the constant urb buffer data shared by all threads */
>    if (ker->curbe) {
>      kernel.slm_sz = cl_curbe_fill(ker, work_dim, global_wk_off, global_wk_sz, local_wk_sz, thread_n);
> +    if (kernel.slm_sz > 0 && cl_driver_get_ver(ctx->drv) == 75){
> +      fprintf(stderr, "Beignet: Shared local memory does not work on Haswell, see https://01.org/zh/beignet/downloads/linux-kernel-patch-hsw-support\n");
> +      return CL_OUT_OF_RESOURCES;
> +    }
How about an already patched kernel is running? I just proposed a
solution in previous email, could you review and give comments?

>      if (kernel.slm_sz > ker->program->ctx->device->local_mem_size) {
>        fprintf(stderr, "Beignet: Out of shared local memory %d.\n", kernel.slm_sz);
>        return CL_OUT_OF_RESOURCES;
> --- a/src/intel/intel_batchbuffer.c
> +++ b/src/intel/intel_batchbuffer.c
> @@ -135,6 +135,10 @@ intel_batchbuffer_flush(intel_batchbuffe
>    }
>    if (drm_intel_gem_bo_context_exec(batch->buffer, batch->intel->ctx, used, flag) < 0) {
>      fprintf(stderr, "drm_intel_gem_bo_context_exec() failed: %s\n", strerror(errno));
> +    if (errno == EINVAL && IS_GEN75(batch->intel->device_id)) {
> +      fprintf(stderr, "This is a known bug on Haswell systems, see http://www.freedesktop.org/wiki/Software/Beignet/\n"
> +                "'sudo echo 0 > /sys/module/i915/parameters/enable_cmd_parser' usually helps\n");
> +    }
The above check is also valid for non HSW platform. For example some 3.15/3.16 kernel for all
platforms. So you may simply remove the "&& IS_GEN75(batch->intel->device_id)" and correct the
error message as well.

Thanks,
Zhigang Gong.


>      err = -1;
>    }
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list