簡體   English   中英

它是Linux的SD卡驅動程序的錯誤嗎

[英]Is it a bug of SD card driver for Linux

我在Linux的SD卡驅動程序中發現了一些奇怪的東西。 該驅動器讀取功能卡狀態mmc_read_ssr文件drivers/mmc/core/sd.c 代碼如下:

err = mmc_app_sd_status(card, ssr);
if (err) {
    pr_warning("%s: problem reading SD Status "
        "register.\n", mmc_hostname(card->host));
    err = 0;
    goto out;
}

當函數mmc_app_sd_status返回表示錯誤的值時,該錯誤將被清除

err = 0;

讀取SSR發生錯誤時,為什么要清除錯誤?

當我查看其他人的代碼時,尤其是我認識的人的代碼真正擅長於他們的工作時,我會采取“假設我做錯了”的態度。

我對Linux的SD驅動程序了解不多,但是根據我(有限的)內核開發經驗,您總是在與CPU和內存使用情況,硬件錯誤,編譯器“功能”等“可讀代碼”作斗爭。 。

您會發現它確實比“清除”錯誤值做得更多-它跳過了隨后的整個內容。 (大概是因為它知道它會失敗。)

我必須承認,它確實看起來像是個意外-因為它總是返回零(盡管聲明return err; )。 錯誤值由調用它的代碼檢查(在mmc_sd_setup_card()內部)-如果它始終為零,則再次沒有意義。

發生的一切(從我所看到的)是打印了內核警告。 就像我說的那樣,我始終采取“假設我錯了”的態度,因此,我將假定編寫該代碼的人(或最近來對它進行修補的人)都認為“警告”不足以拋出一個警告。 錯誤代碼。 因此,他們將其寫入內核日志,然后讓“無論發生什么,都發生”。

從推測上講,也許某些特別古老的SD硬件“錯誤地”運行,並且盡管“一切都很好”,卻引發了錯誤拋出? 設備驅動程序通常在它們的各處都有黑客來處理這種極端情況。

否則,我只是建議問一個人口稠密的Linux內核開發者論壇(IRC或郵件列表等)。 要有禮貌,明確表示“假設您錯了”,如果您收到突然或粗魯的回應,請不要感到驚訝!

不過,這是一個好問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM