|
|
理论上在扫描PCI 设备的时候我们大可用 3个loops来做就可以了。但是这里有很大的弊端!& F' U$ c4 n- F; F# Y, }% e
- m. S8 a2 H# b- N
有优化的方案:
. B9 e1 I2 l$ D! J* F8 ]+ v3 @3 W/ {+ l8 ]
第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的
! T- B! n( w( l" o
1 T7 n- m5 n) ~4 A) a! K a, I其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。
$ m+ e) i3 y+ n& J$ X- L* Y, X0 X+ |& g. o
第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描
! x E$ C% R X5 I0 l# M# y3 t" F, g) n7 O/ b
一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。3 Z1 n: P/ m; K4 J
, Q+ k3 [) x, i否则该pci设备是single function的。8 F: K: H: a; ]2 z0 m
: t) ~9 i- P+ R: o4 C
基于上面两点,可以优化很不少的时间。, p5 q( V3 q5 J6 F
E7 e, C) U* U% q0 Q
以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。$ R) R( O" g* A( H6 S' k, P
X% \$ R5 v8 l q
以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不? |
|