[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