|
理论上在扫描PCI 设备的时候我们大可用 3个loops来做就可以了。但是这里有很大的弊端!
5 I( c7 ~# ^: \$ N' v; n
4 V0 c9 p1 f+ d. a- F 有优化的方案:0 s# O8 E3 S( i( r& ~( _
2 T$ t( P# g) T' g* z: R) O7 A
第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的, p X0 H) o+ V1 Q
6 h5 n; G, V+ G$ s8 S; m其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。8 e6 ?# }: X. f( F5 s1 R
, K0 k1 J7 `+ Y3 t1 X
第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描3 {! L- x) u1 M8 _$ {/ b/ s
* T, C- U/ j9 s# X, |$ G- y: p
一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。
1 T; N& Y, @& h+ G: s
Z2 n Y O% l5 z- |5 t, s否则该pci设备是single function的。
$ |2 j9 g" n' V' x+ ?) v4 v& E
* ?4 z/ }" }6 F+ a* L 基于上面两点,可以优化很不少的时间。1 ~: v/ n' h' L7 @9 d
9 j, O0 |( U! ?! S! p* Y. I3 Z, e 以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。2 N" I+ _3 ]4 [7 r2 @3 ~5 V: I
' C2 Z. c, z4 |1 @2 Y 以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不? |
|