|
|
理论上在扫描PCI 设备的时候我们大可用 3个loops来做就可以了。但是这里有很大的弊端!$ p& O& S; H$ ]6 g+ Q
3 |4 d9 u+ a* Q 有优化的方案:3 {4 e8 z: v- w
% _. L; }8 }. o. O5 M9 C! ~
第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的
4 y7 R3 u$ `. e6 p d- U, n7 R+ ~, o* _) E+ j
其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。1 x: F" ^. O6 |, Y; j
2 o# l4 D) j# P+ O C
第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描
( n- Z( k: s# i. ~, n) J; V* F5 Q! v! g2 ]7 ~# T
一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。
6 K1 P @: ~$ S5 r, L9 L
: I/ E6 S5 f Q! ?5 Y. F否则该pci设备是single function的。
% ~; C8 n; t7 [$ D# d/ L# T% h1 {6 L# J2 { Z2 Y7 C) c% ]! D
基于上面两点,可以优化很不少的时间。* W5 t6 k! ^8 `% Y. O1 j
2 Q, O* Q1 @% p( @1 e+ ` 以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。1 _ O5 D# T0 B; C9 Y3 n
: ^6 c' y" l: i* F" d. c! {1 s
以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不? |
|