[Mesa-dev] [PATCH] r600g: Prevent SIGFPE when using r600_dma_copy_tile with large textures

Ahmed Allam ahmabdabd at hotmail.com
Sat Mar 1 12:08:29 PST 2014


Ping

On 02/04/2014 02:47 AM, Marek Olšák wrote:
> Unless Jerome has a better idea, your best bet would be to just return
> FALSE from that function.
>
> For Jerome:
>
> The code crashes on a division by 0 (cheight is 0). The problem occurs
> with the texture format R32G32B32A32 and width >= 4096. Do you have
> any idea what is wrong with it?
>
> Thank you.
>
> Marek
>
> On Mon, Feb 3, 2014 at 6:40 AM, Ahmed Allam <ahmabdabd at hotmail.com> wrote:
>> Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=73781
>>
>> Signed-off-by: Ahmed Allam <ahmabdabd at hotmail.com>
>> ---
>>   src/gallium/drivers/r600/r600_state.c | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c
>> index a0d527b..8690849 100644
>> --- a/src/gallium/drivers/r600/r600_state.c
>> +++ b/src/gallium/drivers/r600/r600_state.c
>> @@ -3095,7 +3095,8 @@ static boolean r600_dma_copy_tile(struct r600_context *rctx,
>>          /* It's a r6xx/r7xx limitation, the blit must be on 8 boundary for number
>>           * line in the blit. Compute max 8 line we can copy in the size limit
>>           */
>> -       cheight = ((0x0000ffff << 2) / pitch) & 0xfffffff8;
>> +       cheight = ((0x0000ffff << 2) / pitch) > 0x00000008 ?
>> +               ((0x0000ffff << 2) / pitch) & 0xfffffff8 : ((0x0000ffff << 2) / pitch);
>>          ncopy = (copy_height / cheight) + !!(copy_height % cheight);
>>          r600_need_dma_space(rctx, ncopy * 7);
>>
>> --
>> 1.9.rc1
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>



More information about the mesa-dev mailing list