调试

Xe 断言

虽然 Xe 驱动程序的目标是比旧的 i915 驱动程序更简单,但它仍然足够复杂,以至于在添加新功能时引入的一些更改可能会破坏现有代码。

添加 drm_WARNdrm_err 来捕获不需要的编程使用可能会导致驱动程序占用空间增加,并可能影响生产驱动程序的性能,因为此附加代码将始终存在。

为了允许使用额外的详细调试检查来注释函数,以断言所有先决条件都已满足,而不必担心占用空间或生产构建的性能损失(其中在代码集成期间引入的所有潜在误用都已修复),我们引入了 Xe 断言宏系列,该系列尝试遵循经典的 assert() 实用程序

这些宏是在 drm_WARN 之上实现的,但与源不同的是,当提供的条件为假时会触发警告。 此外,所有上述断言宏都不能在表达式中或作为条件使用,因为底层代码将在非调试版本中编译出来。

请注意,这些宏不适用于涵盖实现中的已知差距; 对于此类情况,请使用常规 drm_WARNdrm_err 并提供有效的安全回退。

此外,在性能或占用空间不是问题的情况下,开发人员应继续使用常规 drm_WARNdrm_err,以确保来自生产版本的错误报告将包含有意义的诊断数据。

以下代码显示了断言如何帮助调试以捕获计划外的使用

static void one_igfx(struct xe_device *xe)
{
        xe_assert(xe, xe->info.is_dgfx == false);
        xe_assert(xe, xe->info.tile_count == 1);
}

static void two_dgfx(struct xe_device *xe)
{
        xe_assert(xe, xe->info.is_dgfx);
        xe_assert(xe, xe->info.tile_count == 2);
}

void foo(struct xe_device *xe)
{
        if (xe->info.dgfx)
                return two_dgfx(xe);
        return one_igfx(xe);
}

void bar(struct xe_device *xe)
{
        if (drm_WARN_ON(xe->drm, xe->info.tile_count > 2))
                return;

        if (xe->info.tile_count == 2)
                return two_dgfx(xe);
        return one_igfx(xe);
}
xe_assert

xe_assert (xe, condition)

如果调试时条件为假,则发出警告。

参数

xe

应用 conditionstruct xe_device 指针

条件

要检查的条件

描述

xe_assert() 使用 drm_WARN 发出警告并打印可以从 xe 指针读取的附加信息(如果提供的 condition 为假)。

drm_WARN 相反,xe_assert() 仅在调试版本中有效(必须启用 CONFIG_DRM_XE_DEBUG),并且不能在表达式中或作为条件使用。

有关一般使用指南,请参见 Xe 断言

xe_tile_assert

xe_tile_assert (tile, condition)

如果调试时条件为假,则发出警告。

参数

tile

应用 conditionstruct xe_tile 指针

条件

要检查的条件

描述

xe_tile_assert() 使用 drm_WARN 发出警告并打印可以从 tile 指针读取的附加信息(如果提供的 condition 为假)。

drm_WARN 相反,xe_tile_assert() 仅在调试版本中有效(必须启用 CONFIG_DRM_XE_DEBUG),并且不能在表达式中或作为条件使用。

有关一般使用指南,请参见 Xe 断言

xe_gt_assert

xe_gt_assert (gt, condition)

如果调试时条件为假,则发出警告。

参数

gt

应用 conditionstruct xe_gt 指针

条件

要检查的条件

描述

xe_gt_assert() 使用 drm_WARN 发出警告并打印可以从 gt 指针安全读取的附加信息(如果提供的 condition 为假)。

drm_WARN 相反,xe_gt_assert() 仅在调试版本中有效(必须启用 CONFIG_DRM_XE_DEBUG),并且不能在表达式中或作为条件使用。

有关一般使用指南,请参见 Xe 断言