Как получить физический адрес связанных данных со страницы структуры?

Допустим, у нас есть struct pageиз адресного пространства кэшированного файла страницы.

Как мы можем получить начальный физический адрес данных размером 4 КБ из этого struct page?

Я полагаю, внутри struct sk_buffдолжно быть что-то вроде указателя data, но я его не нашел.


РЕДАКТИРОВАТЬ

Спасибо Мэту и Илье за ​​ответы.

Посмотрев на ответы, я думаю, что первая проблема состоит в том, чтобы определить, находится ли struct pageв ZONE_NORMALили ZONE_HIGHMEM.

Во время файлового ввода-вывода, когда мы не находим кэшированную страницу, мы сначала выделяем новую страницу, используя page_cache_alloc_cold(). page_cache_alloc_cold()наконец вызовет alloc_pages(), который выглядит так, как будто он будет использовать ZONE_HIGHMEM(, который в x86 является областью памяти ядра, начинающейся с PAGE_OFFSET+896M)для своей работы.

Итак,

  • Я думаю, что ответ Мэта подходит для страниц вZONE_NORMAL
  • Предположим, мы используем kmap(), чтобы найти начальный физический адрес данных 4 КБ, связанных со страницей структуры, правильно ли мы должны использовать (unsigned long)(&page)-PAGE_OFFSETнайти физический адрес, где хранится сама структура?

Пожалуйста, исправьте.

7
задан sliter 4 April 2012 в 13:21
поделиться