除錯

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 斷言