调试

Xe ASSERT 断言

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

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

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

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

请注意,这些宏并非旨在用于覆盖实现中已知的缺陷;对于这种情况,请使用常规的 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 指针

condition

要检查的条件

描述

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

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

有关一般用法指南,请参阅 Xe ASSERT 断言

xe_tile_assert

xe_tile_assert (tile, condition)

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

参数

tile

应用 conditionstruct xe_tile 指针

condition

要检查的条件

描述

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

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

有关一般用法指南,请参阅 Xe ASSERT 断言

xe_gt_assert

xe_gt_assert (gt, condition)

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

参数

gt

应用 conditionstruct xe_gt 指针

condition

要检查的条件

描述

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

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

有关一般用法指南,请参阅 Xe ASSERT 断言