|
|
理论上在扫描PCI 设备的时候我们大可用 3个loops来做就可以了。但是这里有很大的弊端!, D- l# S. }) R. C, Y3 z) t& s
* H/ i& F* \1 k, N, m1 T6 J 有优化的方案:% p7 y! V0 D, z: [ v( y/ r9 @7 R
6 P! o' y$ T! y3 t: h3 Z4 \1 h
第一,扫描每个PCI设备的 第00 function,如果这里返回的是 00 or FFH。那么,说明它的3 I$ @: e9 t4 r" }2 @
3 x+ x4 u# |3 v4 R) f其他function设备也肯定没有!所以这里就可以直接挑到下一个device的扫描了。/ c: ~ e7 Z' d0 }) L" d+ L
( @. q. K& j* [/ K 第二,假如第00 function是有设备的。那么也大可不必一下把后面的 01--07 function都扫描( Z7 c3 P$ z% M0 o/ N$ B
$ S' V; O! I- @) S7 G: ~- I& N一遍。因为spec中有个位是专门来说明是否是multi 设备的。若这里被置1,才说明01--07有设备。
1 w K# e" T0 F- U- p9 o
: m, c! J4 A* {否则该pci设备是single function的。
1 U+ @& ]& I6 p+ W
6 b1 O* P( m# C! A 基于上面两点,可以优化很不少的时间。
( G* g6 b4 ?1 {5 g4 z$ U8 g# o+ \/ C( Y7 L5 v6 x0 `! d$ P7 B
以上仅仅是我作为一个初学者的经验,希望对后辈有用。少走点弯路。
. @& X$ S$ z5 o1 f4 Q# M) N8 }' l7 W' X7 x! W, z& S( m
以后有时间我会继续,发表我的心得。也许比较简单。不知道版主支持不? |
|