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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 6207 | 回復: 18
打印 上一主題 下一主題

關于MMIO訪問錯誤 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-04-23 13:58 |只看該作者 |倒序瀏覽
請教一個硬件的問題。

x86的物理內(nèi)存地址空間有4G靠下的一段范圍是MMIO的內(nèi)存,對這段內(nèi)存的訪問實際上是對設備內(nèi)存和寄存器的訪問。

假設你在訪問PCIE的設備MMIO的區(qū)域,當內(nèi)存地址對應的位置有實際設備的寄存器時,過程中發(fā)生的錯誤實際上會觸發(fā)一個root port上的中斷。

但當一個地址沒有真正設備寄存器對應的話,會產(chǎn)生root port上的中斷嗎? 還是產(chǎn)生一個CPU的trap?

[ 本帖最后由 Solaris12 于 2009-4-24 13:20 編輯 ]

論壇徽章:
0
2 [報告]
發(fā)表于 2009-04-24 00:29 |只看該作者
這個要看PCIE的SPEC了吧? 不知道哪里能搞到免費的?

論壇徽章:
0
3 [報告]
發(fā)表于 2009-05-21 16:14 |只看該作者
原帖由 accessory 于 2009-4-24 00:29 發(fā)表
這個要看PCIE的SPEC了吧? 不知道哪里能搞到免費的?



是否產(chǎn)生trap不屬于PCIE spec的范圍。

這個問題我知道答案了,在x86上,只會有root port上的錯誤中斷,沒有異常。

在SPARC上除了root port 中斷,還會有CPU上的trap.

論壇徽章:
0
4 [報告]
發(fā)表于 2009-05-21 16:47 |只看該作者
原帖由 Solaris12 于 2009-4-23 13:58 發(fā)表
請教一個硬件的問題。

x86的物理內(nèi)存地址空間有4G靠下的一段范圍是MMIO的內(nèi)存,對這段內(nèi)存的訪問實際上是對設備內(nèi)存和寄存器的訪問。

假設你在訪問PCIE的設備MMIO的區(qū)域,當內(nèi)存地址對應的位置有實際設備 ...

沒有真正的寄存器映射,產(chǎn)生的就是個page fault。

論壇徽章:
0
5 [報告]
發(fā)表于 2009-05-21 18:01 |只看該作者
原帖由 zx_wing 于 2009-5-21 16:47 發(fā)表

沒有真正的寄存器映射,產(chǎn)生的就是個page fault。


你確定嗎?

同事說他做了這個實驗,

1. 讀ACPI設備配置空間的基地址

2. 找一個不存在的BDF, 算出這個設備配置空間的基地址

3. 訪問內(nèi)存方式,讀這個設備的vendorid

4. sparc panic, x86沒有任何錯誤,返回全f.


實驗結(jié)果和你說的不一樣啊。

論壇徽章:
0
6 [報告]
發(fā)表于 2009-05-21 19:03 |只看該作者
原帖由 Solaris12 于 2009-5-21 18:01 發(fā)表


你確定嗎?

同事說他做了這個實驗,

1. 讀ACPI設備配置空間的基地址

2. 找一個不存在的BDF, 算出這個設備配置空間的基地址

3. 訪問內(nèi)存方式,讀這個設備的vendorid

4. sparc panic, x86沒有 ...

>>找一個不存在的BDF, 算出這個設備配置空間的基地址
你說的這個不是MMIO,是port I/O。訪問PCI配置空間是通過0xCF8~0xCFF端口訪問的。
對于非法訪問訪問返回全1在PCI spec中有規(guī)定:
Since 0 FFFFh is an invalid Vendor ID, it is adequate
for the host bus to PCI bridge to return a value of all 1's on read accesses to Configuration
Space registers of non-existent devices.
  (Note that these accesses will be terminated with a
Master-Abort.)

論壇徽章:
0
7 [報告]
發(fā)表于 2009-05-21 22:42 |只看該作者
原帖由 zx_wing 于 2009-5-21 19:03 發(fā)表

>>找一個不存在的BDF, 算出這個設備配置空間的基地址
你說的這個不是MMIO,是port I/O。訪問PCI配置空間是通過0xCF8~0xCFF端口訪問的。
對于非法訪問訪問返回全1在PCI spec中有規(guī)定:



可能我說的不清楚,ACPI里有個MMCFG表,這個表里有配置空間MMIO的物理地址。

根據(jù)BDF,可以算出每個設備的物理地址。這個是PCI fireware規(guī)范里講的,你可以去看下。

我前面講的實驗和x86的機制1一點關系也沒有,全部是mov指令訪問屬于MMIO方式。

我們要做的就是在支持MMIO的平臺上用MMIO的方式枚舉設備。

論壇徽章:
0
8 [報告]
發(fā)表于 2009-05-22 09:31 |只看該作者

回復 #7 Solaris12 的帖子

IO和MMIO沒有本質(zhì)區(qū)別,通過IO和MMIO訪問vendorID最后都由主橋轉(zhuǎn)成CFG access.

你的這個問題和實現(xiàn)相關的,你訪問的BDF不存在時,主橋發(fā)起的CFG access沒有任何設備應答,這個時候,我認為返回全F是最好的實現(xiàn)方式。X86也是這么實現(xiàn)的。

[ 本帖最后由 bluesky_jxc 于 2009-5-22 13:10 編輯 ]

論壇徽章:
0
9 [報告]
發(fā)表于 2009-05-22 12:17 |只看該作者
原帖由 bluesky_jxc 于 2009-5-22 09:31 發(fā)表
IO和MMIO沒有本質(zhì)區(qū)別,通過IO和MMIO訪問vendorID最后都由主橋轉(zhuǎn)成CFG access.

你的這個問題和實現(xiàn)相關的,你訪問的BDF不存在時,主橋發(fā)起的CFG access沒有任何設備應答,這個時候,我認為返回全F是最好的實現(xiàn)方式。X86也是這么實現(xiàn)的。

你說通過BDF可以得到物理地址?我的理解是,在特定平臺下,firmware也是特定的情況下,PCI插槽的設備特定的情況下,才能根據(jù) firmware的scan算法來得到,這個不具有普遍意義,舉個簡單例子,如果我在bus num比較小的slot上插上一塊網(wǎng)卡(比如 bus num為2), 和我不插這塊網(wǎng)卡,導致bus num較大(比如5)的slot上分配到的物理地址就不會一樣,但是bus num為5的這個slot的BDF值不會改變的。





主要的區(qū)別在MMIO可以訪問4K范圍的配置空間,IO只能256字節(jié)以內(nèi)。

通過BDF可以得到一個物理地址,這個地址可能沒有對應的設備,也可能有。

如果沒有設備應答,或者出現(xiàn)映射的空間里沒有對應的寄存器,訪問這個寄存器時會發(fā)生target abort, 這個時候root port上會有錯誤,但是這個錯誤到底怎么處理,不同操作系統(tǒng)也可能不一樣。


這是x86的實現(xiàn),不同硬件平臺不同的,SPARC除了root port錯誤中斷,還會有CPU的trap.

論壇徽章:
0
10 [報告]
發(fā)表于 2009-05-22 12:39 |只看該作者

回復 #9 Solaris12 的帖子

>>”通過BDF可以得到一個物理地址,這個地址可能沒有對應的設備,也可能有“。

[ 本帖最后由 bluesky_jxc 于 2009-5-22 13:09 編輯 ]
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP