ページキャッシュファイルのアドレス空間からstruct page
を取得したとします。構造ページから関連するデータの物理アドレスを取得する方法は?
この4バイトデータの開始物理アドレスはどのように取得できますかstruct page
?
struct sk_buff
の中にdata
ポインタがあるはずですが、見つからなかったと思います。
EDIT
答えてくれてありがとうマットとllya。
答えを見てみると、struct page
がZONE_NORMAL
にあるのか、ZONE_HIGHMEM
にあるのかを特定するのが最初の問題だと思います。
ファイルI/O中にキャッシュされたページが見つからない場合は、最初にpage_cache_alloc_cold()
を使用して新しいページを割り当てます。 page_cache_alloc_cold()
は、(x86では、PAGE_OFFSET
+ 896Mで始まるカーネルメモリ領域)を使用するように見えるalloc_pages()
を最終的に呼び出します。
ので
- 私は
ZONE_NORMAL
- 内のページは、我々は構造体のページに関連付けられた4KBのデータの開始物理アドレスを見つけるために
kmap()
を使用し、それは我々がすべきことを正しいと仮定するためにマットの答えは適していると思います(unsigned long)(&page)-PAGE_OFFSET
を使用して、構造自体を格納する物理アドレスを見つけますか?
修正してください。
'mem_map'配列のアイテムとして' page'を考えてみましょう。 –