例としてNAND DenaliコントローラーのPCIドライバーを使用して、比較的新しいバージョンのLinuxカーネルで使用可能なマクロとヘルパー関数を使用する場合のコードの簡略化方法を示します。
この古いドライバーはほとんど使用されませんが、リファクタリングできるコードの良い例です。 ドライバー自体は、
drivers / mtd / nand / denali_pci.cにあります。
Kconfigの準備
まず、Kconfigに触れてみましょう。 ドライバーは、すでに古典的なスキーム、つまり主要部分+バス上のドライバー(ロジック(
Torvalds自体を含む))に従って分割されているため、主要部分の選択をユーザーから隠す必要があります。 途中で、変更する行のスペースをタブに置き換えます。
一度やってください!マクロを適用する
次のステップは、
module_pci_driver()
マクロを使用することです。
二回やる!マネージリソースAPIへの移行
次に、最も興味深いことに目を向け、呼び出しをマネージリソースに置き換えます(
ここでそれらを説明しました)。
簡単な
devm_kzalloc()
から始めましょう。
デバイスはPCIバスに接続されているため、PCIデバイスにはdevres APIを使用します。
残念ながら、
ioremap_nocache()
を取り除くことはできません。対応するPCI BARに保存されている情報を確認するための適切なデバイスが手元にありません(そして、今日これが世界に存在するかどうかはまったく
ioremap_nocache()
ません)。
この章で得たものを組み合わせて、
3つ行い
ます!追加のリファクタリング
完全な美しさを復元するには、
pr_err()
を
dev_err()
に置き換え
pr_err()
。
4つやって!要約すると:
drivers/mtd/nand/Kconfig | 13 +++++-------- drivers/mtd/nand/denali_pci.c | 43 +++++++++++-------------------------------- 2 files changed, 16 insertions(+), 40 deletions(-)
明らかな利点。 新しいコードで利用可能なAPIを使用することを忘れないでください!
更新4つはすべて
メンテナーツリーに既にあり
ます 。 コミットID:af83a67cad14、add243d5bc37、2445d33d8523、04868a67ed58。