[Mesa-dev] [PATCH v2] isl: don't crash when creating a huge image

Samuel Iglesias Gonsálvez siglesias at igalia.com
Tue Dec 12 06:37:26 UTC 2017


On 28/11/17 11:07, Samuel Iglesias Gonsálvez wrote:
> This patch is still unreviewed.
> 

Gently reminder.

Sam

> Sam
> 
> On Tue, 2017-11-14 at 09:45 +0100, Samuel Iglesias Gonsálvez wrote:
>> The HW has some limits but, according to the spec, we can create
>> the image as it has not yet any memory backing it. This patch
>> logs a debug error and set the size to the UINT64_MAX in order to
>> avoid allocating actual memory later.
>>
>> Fixes the crashes on BDW for the following tests:
>>
>> dEQP-VK.pipeline.render_to_image.core.2d_array.huge.*
>> dEQP-VK.pipeline.render_to_image.core.cube_array.huge.*
>>
>> Signed-off-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
>> ---
>>  src/intel/isl/isl.c | 13 +++++++++----
>>  1 file changed, 9 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c
>> index 59f512fc050..cd7f2fcd4cb 100644
>> --- a/src/intel/isl/isl.c
>> +++ b/src/intel/isl/isl.c
>> @@ -26,6 +26,7 @@
>>  #include <stdio.h>
>>  
>>  #include "genxml/genX_bits.h"
>> +#include "common/intel_log.h"
>>  
>>  #include "isl.h"
>>  #include "isl_gen4.h"
>> @@ -1481,8 +1482,10 @@ isl_surf_init_s(const struct isl_device *dev,
>>         *
>>         * This comment is applicable to all Pre-gen9 platforms.
>>         */
>> -      if (size > (uint64_t) 1 << 31)
>> -         return false;
>> +      if (size > (uint64_t) 1 << 31) {
>> +         intel_logd("%s: Surface size is bigger than the supported
>> by the HW: %ld > (1 << 31)", __func__, size);
>> +         size = UINT64_MAX;
>> +      }
>>     } else {
>>        /* From the Skylake PRM Vol 5, Maximum Surface Size in Bytes:
>>         *    "In addition to restrictions on maximum height, width,
>> and depth,
>> @@ -1490,8 +1493,10 @@ isl_surf_init_s(const struct isl_device *dev,
>>         *     All pixels within the surface must be contained within
>> 2^38 bytes
>>         *     of the base address."
>>         */
>> -      if (size > (uint64_t) 1 << 38)
>> -         return false;
>> +      if (size > (uint64_t) 1 << 38) {
>> +         intel_logd("%s: Surface size is bigger than the supported
>> by the HW: %ld > (1 << 38)", __func__, size);
>> +         size = UINT64_MAX;
>> +      }
>>     }
>>  
>>     *surf = (struct isl_surf) {
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20171212/9e1ec742/attachment.sig>


More information about the mesa-dev mailing list