亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12
最近訪問(wèn)板塊 發(fā)新帖
樓主: wth0722
打印 上一主題 下一主題

[內(nèi)存管理] 更改 page table entry屬性,卻未生效 [復(fù)制鏈接]

論壇徽章:
0
11 [報(bào)告]
發(fā)表于 2014-06-09 22:42 |只看該作者
本帖最后由 l4rmbr 于 2014-06-09 22:54 編輯

看了樓主的表述,樓主你應(yīng)該是在更新頁(yè)表項(xiàng)后忘了沖刷tlb緩存。正確用法應(yīng)該像這樣:

flush_cache_page(vma, addr, pfn);             <--- 沖刷數(shù)據(jù)/指令緩存
set_pte(pte_pointer, new_pte_val);             <--- 更新頁(yè)表項(xiàng)
flush_tlb_page(vma, addr);                          <--- 沖刷tlb緩存

此外,多說(shuō)兩點(diǎn).

1.
set_pte_at() 與 set_pte()功能基本相同,不過(guò)前者用來(lái)實(shí)現(xiàn)鉤子,用以
沖刷相應(yīng)的數(shù)據(jù)/指令緩存。

在大多數(shù)體系架構(gòu)下,這兩個(gè)函數(shù)一樣。不過(guò)arm是個(gè)例外。因?yàn)樗莢ivt
架構(gòu)(virtual indexed and virtual tagged), 所以更新了虛擬地址的頁(yè)表項(xiàng),
也要相應(yīng)地刷新緩存。 x86就不用,因?yàn)樗莗ipi(physical indexed and physical tagged)
緩存一致性由cpu內(nèi)在地保證,不需要程序員干預(yù)。

2.
我大概翻了下代碼,發(fā)現(xiàn)set_pte一般用在第一次創(chuàng)建一個(gè)表項(xiàng)時(shí),此時(shí)無(wú)所謂“更新”一說(shuō)。
如果是要更新一個(gè)舊頁(yè)表項(xiàng),則用的是set_pte_at。
這也符合這兩個(gè)接口的設(shè)計(jì)目的。

論壇徽章:
0
12 [報(bào)告]
發(fā)表于 2014-06-09 22:43 |只看該作者
本帖最后由 l4rmbr 于 2014-06-09 22:54 編輯

[非常抱歉,網(wǎng)絡(luò)原因發(fā)了相同內(nèi)容兩次,麻煩版主刪除這個(gè)帖子吧。謝謝!]

看了樓主的表述,樓主你應(yīng)該是在更新頁(yè)表項(xiàng)后忘了沖刷tlb緩存。正確用法應(yīng)該像這樣:

flush_cache_page(vma, addr, pfn);             <--- 沖刷數(shù)據(jù)/指令緩存
set_pte(pte_pointer, new_pte_val);             <--- 更新頁(yè)表項(xiàng)
flush_tlb_page(vma, addr);                          <--- 沖刷tlb緩存

此外,多說(shuō)兩點(diǎn).

1.
set_pte_at() 與 set_pte()功能基本相同,不過(guò)前者用來(lái)實(shí)現(xiàn)鉤子,用以
沖刷相應(yīng)的數(shù)據(jù)/指令緩存。

在大多數(shù)體系架構(gòu)下,這兩個(gè)函數(shù)一樣。不過(guò)arm是個(gè)例外。因?yàn)樗莢ivt
架構(gòu)(virtual indexed and virtual tagged), 所以更新了虛擬地址的頁(yè)表項(xiàng),
也要相應(yīng)地刷新緩存。 x86就不用,因?yàn)樗莗ipi(physical indexed and physical tagged)
緩存一致性由cpu內(nèi)在地保證,不需要程序員干預(yù)。

2.
我大概翻了下代碼,發(fā)現(xiàn)set_pte一般用在第一次創(chuàng)建一個(gè)表項(xiàng)時(shí),此時(shí)無(wú)所謂“更新”一說(shuō)。
如果是要更新一個(gè)舊頁(yè)表項(xiàng),則用的是set_pte_at。
這也符合這兩個(gè)接口的設(shè)計(jì)目的。

論壇徽章:
0
13 [報(bào)告]
發(fā)表于 2014-06-10 10:21 |只看該作者
回復(fù) 12# l4rmbr

先感謝你的回應(yīng)

flush_cache_page(vma, addr, pfn);             <--- 沖刷數(shù)據(jù)/指令緩存
set_pte(pte_pointer, new_pte_val);             <--- 更新頁(yè)表項(xiàng)
flush_tlb_page(vma, addr);                          <--- 沖刷tlb緩存

我無(wú)法用上面那些,因?yàn)閕oremap()後,那塊記憶體是沒(méi)有vma的
我試過(guò)find_vma()是找不到的


我這邊是ARM arch,並沒(méi)有set_pte(),只有set_pte_at()
再來(lái)其實(shí)一開(kāi)始我是有flush all cache 以及 鎖TLB,但還是沒(méi)有解決問(wèn)題
後來(lái)才知道是因?yàn)槲沂侵挥懈腖inux pte,並沒(méi)有改道h/w pte
所以才會(huì)需要set_pte_at()幫我去修改他


還有其實(shí)ARM arch的d-cache 是VIPT non-aliasing
i-cache才是VIVT


   

論壇徽章:
0
14 [報(bào)告]
發(fā)表于 2014-06-10 11:33 |只看該作者
奇怪,我看的內(nèi)核是3.13,如果照樓主的流程,用set_pte_at并不會(huì)刷cache。

對(duì)于set_pte_at,如果是用戶態(tài)的地址,則嘗試刷cache:
  1. static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
  2.                               pte_t *ptep, pte_t pteval)
  3. {
  4.         unsigned long ext = 0;

  5.         if (addr < TASK_SIZE && pte_present_user(pteval)) {
  6.                 __sync_icache_dcache(pteval);
  7.                 ext |= PTE_EXT_NG;
  8.         }

  9. }
復(fù)制代碼
如果是用戶態(tài)的地址,并且有可執(zhí)行屬性,就算vipt 沒(méi)有cache aliase,也需刷icache和dcache:

  1. void __sync_icache_dcache(pte_t pteval)
  2. {
  3.         unsigned long pfn;
  4.         struct page *page;
  5.         struct address_space *mapping;

  6.         if (cache_is_vipt_nonaliasing() && !pte_exec(pteval))
  7.                 /* only flush non-aliasing VIPT caches for exec mappings */
  8.                 return;
復(fù)制代碼

  1. #define pte_exec(pte)                (!(pte_val(pte) & L_PTE_XN))
復(fù)制代碼
由于樓主的ioremap帶PROT_PTE_DEVICE屬性,
#define PROT_PTE_DEVICE                L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_XN
因此pte_exec返回0,從而__sync_icache_dcache直接返回了。

也就是說(shuō),不會(huì)刷cache,這個(gè)跟樓主的描述有點(diǎn)矛盾。

論壇徽章:
0
15 [報(bào)告]
發(fā)表于 2014-06-10 11:47 |只看該作者
回復(fù) 13# wth0722


    你好。我看了下ioremap的實(shí)現(xiàn),確實(shí)是沒(méi)關(guān)聯(lián)vma的。

    還有,你說(shuō)的hw pte是怎么回事? 頁(yè)表項(xiàng)不就是在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)嗎?還有硬件頁(yè)表項(xiàng)這一說(shuō)?不知是什么架構(gòu)。能不能解釋下?謝謝!

    最后,關(guān)于vivt, 多謝指正 :)

論壇徽章:
0
16 [報(bào)告]
發(fā)表于 2014-06-10 11:51 |只看該作者
回復(fù) 14# chenyu105

不好意思,請(qǐng)問(wèn)跟我講哪一點(diǎn)有矛盾?

set_pte_at() -> cpu_v7_set_pte_ext() 這邊若是UP則會(huì)flush cache

我從頭到尾就一直說(shuō)問(wèn)題的點(diǎn)是在於只有寫入到Linux pte,並沒(méi)有寫到h/w pte

TLB、cache的問(wèn)題我不認(rèn)為問(wèn)題點(diǎn)在那邊阿,因?yàn)槲以囘^(guò)flush也沒(méi)用
   

論壇徽章:
0
17 [報(bào)告]
發(fā)表于 2014-06-10 11:58 |只看該作者
回復(fù) 15# l4rmbr


我用是ARM arch的,這邊是有兩份pte的

原因是Linux所要的pte資訊,ARM並沒(méi)有提供,所以要多一份保存

請(qǐng)參考arch/arm/include/asm/pgtable-2level.h

31  * This leads to the page tables having the following layout:
32  *
33  *    pgd             pte
34  * |        |
35  * +--------+
36  * |        |                 +------------+ +0
37  * +- - - - +               | Linux pt 0 |
38  * |        |                 +------------+ +1024
39  * +--------+     +0    | Linux pt 1 |
40  * |        |----->       +------------+ +2048
41  * +- - - - + +4          |  h/w pt 0  |
42  * |        |----->       +------------+ +3072
43  * +--------+     +8    |  h/w pt 1  |
44  * |        |                +------------+ +4096
45  *

論壇徽章:
0
18 [報(bào)告]
發(fā)表于 2014-06-10 12:06 |只看該作者
回復(fù) 17# wth0722


    多謝。明白了。 這也是為了彌補(bǔ)linux通用多級(jí)頁(yè)表和硬件支持頁(yè)表之間的差異。

論壇徽章:
0
19 [報(bào)告]
發(fā)表于 2014-06-10 12:17 |只看該作者
本帖最后由 chenyu105 于 2014-06-10 12:20 編輯

回復(fù) 16# wth0722
明白了。
如果設(shè)置了軟件pte,應(yīng)該也會(huì)有什么時(shí)候會(huì)把軟件pte更新到硬件pte吧
   

論壇徽章:
0
20 [報(bào)告]
發(fā)表于 2014-06-10 13:08 |只看該作者
回復(fù) 19# chenyu105


set_pte_at()  --->  cpu_v7_set_pte_ext()

cpu_v7_set_pte_ext()這裡面會(huì)去寫入到h/w pte


   
12
返回列表 發(fā)新帖
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP