|
|
理论上在扫描PCI 设备的时候我们大可用 3个loops来做就可以了。但是这里有很大的弊端!
; C$ u; ]; B' G) ]( h
* Q, ?! ]2 w$ b& d0 m$ i" h8 z 有优化的方案:, E6 f, t$ a# J9 D! t* V
: O. q5 b' o4 l 第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的7 P" i( R, b7 J$ t8 A/ u6 _8 |3 m
+ ?3 ~- f7 }4 ]
其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。
% m* |7 s2 L }( O( A' h5 r; m6 `2 r4 C3 T1 ~
第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描
3 E# d- [7 \; n8 g. s( o! p. \2 M( Z3 L, V- t- t: e
一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。: ~2 x, h& X. [1 l% h
( ?+ S" g9 }; ?
否则该pci设备是single function的。0 e# L' `$ F7 o* ]+ u) f$ F
+ I5 x- g8 Y) U% { 基于上面两点,可以优化很不少的时间。$ C- D. w7 H0 N( R6 S7 R9 D
7 J% x$ C7 y6 _7 [. Y. c 以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。# L- s; F2 ?+ d% h% }7 R
0 j' E; r7 @2 }! U. \6 Y
以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不? |
|